ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Angular+arcgisjs之平面地图测距、测面积、搜索

2020-12-27 17:01:47  阅读:240  来源: 互联网

标签:map const arcgisjs index items allLayers mapView Angular 测距


本文代码基于Angular8和arcgis js 4.16。
代码里会涉及到一个地图变量mapView,初始化如下:

const map = new Map({
  basemap: 'osm',
});
this.mapView = new MapView({
  container: this.mapContainer.nativeElement,
  center: [113.280637, 23.125178],
  zoom: 12, 
  map,
});

官网提供了许多小组件,很多操作不需要开发者自己实现,比如本文的测距、测面积、搜索,这些小组件均满足基本需求。

测距

平面地图测距官网:DistanceMeasurement2D

const [DistanceMeasurement2D] = await loadModules(['esri/widgets/DistanceMeasurement2D']);

this.distanceWidget = new DistanceMeasurement2D({
  view: this.mapView,
});
this.mapView.ui.add(this.distanceWidget, 'top-right');

// 清除测距小组件
// this.mapView.ui.remove(this.distanceWidget);
// this.distanceWidget = null;

测面积

平面地图测面积官网:AreaMeasurement2D

const [AreaMeasurement2D] = await loadModules(['esri/widgets/AreaMeasurement2D']);

this.areaWidget = new AreaMeasurement2D({
  view: this.mapView,
});
this.mapView.ui.add(this.areaWidget, 'top-right');

// 清除测面积小组件
// this.mapView.ui.remove(this.areaWidget);
// this.areaWidget= null;

搜索

一般图层资源数据集的每个数据会存在多个属性,比如面积、名称等等,那么用户输入关键词进行搜索时应从多个数据源属性中搜索。
多数据源搜索官网:Search

const [Search] = await loadModules(['esri/widgets/Search']);

const searchSources = [];
// 遍历图层,为每个图层设置搜索数据源
if (
  this.mapView.map.allLayers &&
  this.mapView.map.allLayers.items &&
  this.mapView.map.allLayers.items.length > 1
) {
  // 排除底图,即this.mapView.map.allLayers.items[0],索引从1开始
  for (let index = 1; index < this.mapView.map.allLayers.items.length; index++) {
    const fields = [];
    if (
      this.mapView.map.allLayers.items[index].fields &&
      this.mapView.map.allLayers.items[index].fields.length > 0
    ) {
      this.mapView.map.allLayers.items[index].fields.forEach(f => fields.push(f['name']));
    }

    searchSources.push({
      layer: this.mapView.map.allLayers.items[index],
      searchFields: fields.slice(0, 6), // 经试验,searchFields只能设置6个,否则即使关键词存在于数据源属性中也会查不出来
      extractMatch: false,
      outFields: ['*'],
      placeholder: '输入关键词',
    });
  }
}

this.searchWidget = new Search({
  view: this.mapView,
  sources: [...searchSources],
});

this.mapView.ui.add(this.searchWidget, 'top-right');

// 清除搜索小组件
// this.mapView.ui.remove(this.searchWidget);
// this.searchWidget= null;

标签:map,const,arcgisjs,index,items,allLayers,mapView,Angular,测距
来源: https://blog.csdn.net/weixin_40216444/article/details/111817453

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有