在地图上点击要素查看要素信息,也就是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 + " "; 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
全系列链接: