zoukankan      html  css  js  c++  java
  • 伟景行 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 + "
    ";
    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 从入门到精通系列 

  • 相关阅读:
    关联本地代码的方式 HTTPS和SSH---Gitee码云
    详解elementUI表单的验证规则---vue(基本用法)
    vscode 设置缩进 4
    vue的图片懒加载
    A complete log of this run can be found in问题解决
    简单直观的搞懂Vue3的ref、reactive、toRef、toRefs
    vue-cli3.0 引入外部字体并使用
    迅为与龙芯强强联合匠心之作iTOP-2K1000开发板正式发布
    迅为RK3399开发板外接固态硬盘测试
    迅为i.MX6Q开发板Ubuntu20.04 Can通信
  • 原文地址:https://www.cnblogs.com/cannel/p/5703404.html
Copyright © 2011-2022 走看看