伟景行 citymaker 从入门到精通(3)——点击地图获取坐标,点击模型获取模型信息和属性信息

在地图上点击要素查看要素信息,也就是identify功能

 


  • script部分
  1         // 通过枚举索引获取枚举名称
  2         function getEnumTextByIdx(enumObj, idx) {
  3             for (var item in enumObj) {
  4                 var itemValue = enumObj[item];
  5                 if (itemValue == idx) {
  6                     return item;
  7                 }
  8             }
  9         }
 10 
 11         // 通过fid获取要素的字段属性值
 12         function getAttrValueByFid(featureClassInfo, fid) {
 13             // 连接信息
 14             var connectionInfo = __g.new_ConnectionInfo;
 15             //从featureClassInfo获取数据源的连接字符串,然后用此连接字符串进行连接
 16             connectionInfo.fromConnectionString(featureClassInfo.dataSourceConnectionString);
 17             // 数据源
 18             var dataSource = __g.dataSourceFactory.openDataSource(connectionInfo);
 19             // 数据集
 20             var dataSet = dataSource.openFeatureDataset(featureClassInfo.dataSetName);
 21             // 要素类
 22             var featureClass = dataSet.openFeatureClass(featureClassInfo.featureClassName);
 23             // 返回的字段属性集合
 24             var attrValues = [];
 25             // 通过fid获取行
 26             var rowBuffer = featureClass.getRow(fid);
 27             // 遍历字段
 28             var fieldinfos = featureClass.getFields();
 29             for (var i = 0; i < fieldinfos.count; i++) {
 30                 var fieldinfo = fieldinfos.get(i);
 31                 if (null == fieldinfo)
 32                     continue;
 33                 // 字段各种属性,字段值
 34                 var fieldName = fieldinfo.name;
 35                 var value = rowBuffer.getValue(i);
 36 
 37                 var fieldValue = {};
 38                 fieldValue.name = fieldName;
 39                 fieldValue.alias = fieldinfo.alias;
 40                 // 字段类型是个枚举,分别获取枚举索引和值名称
 41                 fieldValue.typeIdx = fieldinfo.fieldType;
 42                 fieldValue.type = getEnumTextByIdx(gviFieldType, fieldinfo.fieldType);
 43                 fieldValue.value = value;
 44 
 45                 attrValues.push(fieldValue);
 46             }
 47 
 48             // 释放对象
 49             rowBuffer.releaseObject();
 50             featureClass.releaseObject();
 51             dataSet.releaseObject();
 52             dataSource.releaseObject();
 53 
 54             return attrValues;
 55         }
 56 
 57         //鼠标选择事件
 58         function onMouseClickSelect(pickResult, intersectPoint, mask, eventSender) {
 59             // 点击地图的点
 60             if (intersectPoint) {
 61                 // 点坐标
 62                 var x = intersectPoint.x;
 63                 var y = intersectPoint.y;
 64                 var z = intersectPoint.z;
 65 
 66                 alert("x:" + x + " y:" + y + " z:" + z);
 67             }
 68 
 69             // 选中的对象
 70             if (pickResult) {
 71                 // 对象类型是FeatureLayer(矢量图层),也就是模型,因为模型都是通过矢量图层加载的
 72                 if (pickResult.type == gviObjectType.gviObjectFeatureLayer) {
 73                     // 唯一id
 74                     var fid = pickResult.featureId;
 75                     // 图层
 76                     var featureLayer = pickResult.featureLayer;
 77                     // 图层名
 78                     var featureLayerName = featureLayer.name;
 79                     // featureClass信息(不是真正的FeatureClass对象)
 80                     var featureClassInfo = featureLayer.featureClassInfo;
 81                     // featureClass名称
 82                     var featureClassname = featureClassInfo.featureClassName;
 83 
 84                     // 点击要素的字段的属性(字段名,别名,类型。。。)以及字段值
 85                     // PS:获取字段属性和值需要连接数据源,不是必须的话就不要获取了
 86                     var attrValues = getAttrValueByFid(featureClassInfo, fid);
 87 
 88                     var msg = "";
 89 
 90                     //遍历字段
 91                     for (var i = 0; i < attrValues.length; i++) {
 92                         var attrValue = attrValues[i];
 93 
 94                         //字段名
 95                         var fieldName = attrValue.name;
 96                         //字段别名
 97                         var alias = attrValue.alias;
 98                         // 字段类型枚举索引
 99                         var typeIdx = attrValue.typeIdx;
100                         //字段类型枚举名称
101                         var type = attrValue.type;
102                         //字段值
103                         var value = attrValue.value;
104 
105                         msg += "字段名:" + fieldName + ";" + "字段别名:" + alias + ";" + "字段类型枚举索引:" + typeIdx + ";" + "字段类型枚举名称:" + type + ";" + "字段值:" + value + "\n";
106                     }
107 
108                     alert(msg);
109                 }
110             }
111         }
112 
113         $(function ($) {
114             // 初始化三维控件
115             initAxControl();
116             //cep文件路径,本地路径也行
117             var cepPath = "http://192.168.15.53:32555/default.cep";
118             //打开cep
119             __g.project.open(cepPath, false, "");
120 
121             // 鼠标拾取模式(此模式下可进行鼠标拾取操作)
122             __g.interactMode = gviInteractMode.gviInteractSelect;
123 
124             //mouseSelectObjectMask影响点击什么类型对象会触发onmouseclickselect事件
125 
126             // 鼠标拾取的时候需要过滤的对象类型:地形
127             //__g.mouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectTerrain;
128             // 鼠标拾取的时候需要过滤的对象类型:矢量图层
129             //__g.mouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectFeatureLayer;
130             // 鼠标拾取的时候需要过滤的对象类型:全部
131             __g.mouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll;
132 
133             //绑定鼠标选择事件
134             __g.onmouseclickselect = onMouseClickSelect;
135         });


其中mouseSelectObjectMask控制点击什么类型对象会触发onmouseclickselect事件,值为gviSelectTerrain就是点击地形才触发onmouseclickselect,gviSelectFeatureLayer是点击矢量图层加载的要素才触发,gviSelectAll就是所有类型都触发

 

以上代码下载

链接:http://pan.baidu.com/s/1miRLHjU 密码:w2gp

 


全系列链接:

伟景行 citymaker 从入门到精通系列 

posted @ 2016-07-25 14:34  cannel  阅读(2546)  评论(0编辑  收藏  举报