在地圖上點擊要素查看要素信息,也就是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
全系列鏈接: