五、OpenLayer点击查询

这块其实要分多种类型,因为不同图层和服务获取属性信息的方式和地址也不一样。介绍一下常用的几种:

1、矢量图层VectorLayer

这种矢量图层属性信息是直接存储在前端的canvas里面的,我们可以直接获取到它,前提是你在添加要素时已经动态给他赋值上(properties属性,上一节图层介绍有注释)或者添加的geojson格式对象的数据,否则点击获取的也是空对象。

属性动态赋值方法

var feature = new ol.Feature();
feature.setProperties({你的属性对象})
//或者
var feature = new ol.Feature({
  properties:{你的属性对象}
});

这样点击的时候获取方式:

    this.map.on("click", (ev) => {
      const mouse = ev.coordinate; // 鼠标点击的坐标位置
      let feature = this.map.forEachFeatureAtPixel(
        ev.pixel,
        function (feature) {
          return feature;
        }
      );
      //获取属性对象的某个属性值 但是有时候自定义和其他方式加载的根对象不一样,可能获取不到
      const name= feature.get("name")
      //建议直接打印自己去看,一般都是在values_下面
      const properties = feature?.values_?.properties


      //当然也可以获取特定图层的点击要素集合,比如聚合图层
      myVectorLayer.getFeatures(ev.pixel).then((clickedFeatures) => {

      })
    })

2、加载wms服务的TileLayer或者ImageLayer

这种是栅格图层,理解为就是图片,属性信息是没有存储在前端的。需要通过请求地址去获取。openlayer提供了wms服务的请求地址拼接接口:

map.on('singleclick', function (evt) {
  const viewResolution = view.getResolution();
  const url = wmsSource.getFeatureInfoUrl(
    evt.coordinate,
    viewResolution,
    'EPSG:4326',
    {'INFO_FORMAT': 'text/html'}  //返回的是表格hmtl标签,可直接挂接到元素上
    //{'INFO_FORMAT': 'application/json'}  //返回的是geojson格式的数据
  );
  if (url) {
    fetch(url)
      .then((response) => response.text())
      .then((html) => {
        document.getElementById('info').innerHTML = html;
      });
  }
});

3、其他类型的服务

比如arcgis server, 超图的iserver,都提供了空间查询的服务接口,需要自行去拼接参数请求获取对应数据。

自定义查询窗口。openlayer提供了overlay这个类,可以去动态绑定我们自己创建的元素。

//属性窗体
this.overlayForm = new Overlay({
   // 创建一个图层
   element: this.$refs.msgForm.$el, // 图层绑定我们上边的弹窗
   autoPan: true,
   autoPanAnimation: {
      duration: 250,
    },
 });
this.overlayForm.setPosition(undefined); //设置弹窗位置,刚开始我们不让他显示,就是undefined就行
this.map.addOverlay(this.overlayForm); // 然后把弹窗的图层加载到地图上

### 使用 ArcGIS Engine 构建校园地理信息系统 #### 一、环境准备 为了使用ArcGIS Engine构建校园地理信息系统,需先安装配置好开发环境。这包括但不限于获取并安装ArcGIS Engine SDK以及设置集成开发环境(IDE),如Eclipse或Visual Studio。 #### 二、项目规划与设计 定义系统功能需求,比如查询建筑物信息、路径导航等;确定所需的地图服务形式(在线还是离线),对于3D BIM数据展示可以考虑利用建筑场景图层在整个ArcGIS平台上共享此类资源[^1]。 #### 三、地图数据显示 加载底图作为背景显示,并叠加矢量数据来表示校内设施位置。如果涉及到三维模型,则可以通过读取由BIM文件转换成的地理数据库要素数据集来进行渲染。 ```csharp // 加载本地shp文件为例 string shapeFilePath = @"C:\path\to\your\campus_buildings.shp"; IFeatureLayer featureLayer = new FeatureClassFeatureLayer(); featureLayer.FeatureSource = Shapefile.Open(shapeFilePath); mapControl.AddLayer(featureLayer); ``` #### 四、交互操作实现 提供用户界面元素让用户能够方便地浏览地图、查找特定地点或者执行其他自定义任务。例如,在.NET环境中可通过编写事件处理器响应鼠标点击动作从而弹出所选对象的相关属性窗口。 ```vbnet Private Sub MapControl_OnMouseDown(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent) Handles axMapControl.OnMouseDown If e.button = 1 Then ' 左键单击 Dim pPoint As IPoint = New Point() pPoint.PutCoords(e.x, e.y) ' 查询该点附近的要素... End If End Sub ``` #### 、发布部署 完成应用程序编码测试之后,按照目标平台的要求打包程序包,并将其分发给最终使用者。考虑到跨设备兼容性和性能优化等因素可能还需要做额外调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值