首页 > 解决方案 > 如何从 Here Map JS 检索特定图层?

问题描述

我将 DataPoints 添加到 Provider 中,然后添加到捆绑到地图中的 Layer 中。

稍后我想编辑一些数据点,为此我需要从地图中检索图层然后提供者。

我通过获取一组图层来尝试它,但我不知道哪一个是我的数据点的图层。

let clusterDataProvider = new H.clustering.Provider(dataPoints, {
          clusteringOptions: {
            eps: 16,
            minWeight: 2,
            strategy: H.clustering.Provider.Strategy.GRID
          },
          theme: {
            getClusterPresentation: this.getClusterPresentation,
            getNoisePresentation: this.getNoisePresentation
          }
        })
      }),
let layer = hereMap.getLayers().asArray().find(layer => layer instanceof H.map.layer.ObjectLayer)
    if(!layer) {
      layer = new H.map.layer.ObjectLayer(clusterDataProvider)
      hereMap.addLayer(layer, 0);
    }
    layer.getProvider()

但是我的地图中可能有很多 ofc ObjectLayers,所以我怎么能用clusterDataProvider.

或者任何人对如何编辑特定层或集群提供者有更好的想法?

标签: here-api

解决方案


您可以使用以下代码检索图层:

function findClusterLayer(hereMap){
    let layer = hereMap.getLayers().asArray().find(layer => {
      let isObjLayer = layer instanceof H.map.layer.ObjectLayer;
      return isObjLayer && (layer.getProvider() instanceof H.clustering.Provider);
  });
  return layer;
}

不幸的是,您无法从层或集群提供者获取数据点,请使用以下解决方法:

var clusteringLayer = new H.map.layer.ObjectLayer(clusteredDataProvider);
clusteringLayer.$data = dataPoints;

稍后您可以获得这样的数据点:

var layer = findClusterLayer(map);
var dataPoints = layer.$data;

更改一些数据点后将其保存到集群:

clusteredDataProvider.setDataPoints(dataPoints);

请参阅完整示例

顺便说一句:您可以将一些对象保存到每个数据点中,请参阅https://developer.here.com/documentation/maps/3.1.20.0/api_reference/H.clustering.DataPoint.html#data上的文档


推荐阅读