微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

本文代码基于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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐