Search code examples
here-api

How to retrive specifc Layer from Here Map JS?


I add DataPoints into Provider then into Layer which is bundled into the map.

Later I want to edit some of DataPoints, to do this I need to retrieve layer then provider from the map.

I try it by getting an array of layers but I won't know which one is a layer with my dataPoints.

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()

But ofc there can be a lot of ObjectLayers in my map, so how can I recognize which one is that with clusterDataProvider.

Or anyone has a better idea of how to edit a specific layer or cluster provider?


Solution

  • You can retrieve the layer by utilize this code:

    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;
    }
    

    Unfortunately, you can't get dataPoints nor from layer nor from cluster provider, use please workaround like this:

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

    later you can get datapoints like this:

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

    after changing some datapoints save it to cluster:

    clusteredDataProvider.setDataPoints(dataPoints);
    

    See please complete example

    BTW: you can save some object into every datapoint see please documentation on https://developer.here.com/documentation/maps/3.1.20.0/api_reference/H.clustering.DataPoint.html#data