这里的地图聚类不准确/意外行为

时间:2018-01-15 15:12:12

标签: javascript here-api

我在最小的示例地图上有九个数据点。

此处的地图聚类以较低的缩放级别显示正确的聚类(9个项目)。当您进一步放大时,群集将得到解析并显示单个标记。

然而,这种情况发生得太早,标记相互重叠(我们在集群上有4个,一个有5个项目,只有一个可见)。 我玩了所有三种聚类策略和eps参数都没有成功。

我将eps设置为256,并使用9个标记为此示例获得合理的结果。使用此设置,当我添加更多标记时,群集非常无用,因为只有在非常高的缩放级别才能解决这些问题。

有什么想法吗?

请看看我准备的小提琴:

http://jsfiddle.net/xv62430d/4

function startClustering(map) {

  var dataPoints = [];
  dataPoints.push(new H.clustering.DataPoint(52.53815990,13.41258410));
  dataPoints.push(new H.clustering.DataPoint(52.53815990,13.41258410));
  dataPoints.push(new H.clustering.DataPoint(52.53815990,13.41258410));
  dataPoints.push(new H.clustering.DataPoint(52.53815990,13.41258410));
  dataPoints.push(new H.clustering.DataPoint(52.47895150,13.45324740));
  dataPoints.push(new H.clustering.DataPoint(52.47895150,13.45324740));
  dataPoints.push(new H.clustering.DataPoint(52.47895150,13.45324740));
  dataPoints.push(new H.clustering.DataPoint(52.47895150,13.45324740));
  dataPoints.push(new H.clustering.DataPoint(52.47895150,13.45324740));

  // Create a clustering provider with custom options for clusterizing the input
  var clusteredDataProvider = new H.clustering.Provider(dataPoints, {
  //clusteringOptions: {
      // Maximum radius of the neighbourhood
      //eps: 256,
      // minimum weight of points required to form a cluster
      //minWeight: 2
    //} 
  });

  var clusteringLayer = new H.map.layer.ObjectLayer(clusteredDataProvider);
  map.addLayer(clusteringLayer);
}


var platform = new H.service.Platform({
  app_id: 'DemoAppId01082013GAL',
  app_code: 'AJKnXv84fjrb0KIHawS0Tg',
  useHTTPS: true,
  useCIT: true
});
var defaultLayers = platform.createDefaultLayers();

// Step 2: initialize a map
var map = new H.Map(document.getElementById('map'), defaultLayers.normal.map, {
  center: new H.geo.Point(30.789, 33.790),
  zoom: 2
});


var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map, defaultLayers);

startClustering(map);

$('head').append('<link rel="stylesheet" href="https://js.api.here.com/v3/3.0/mapsjs-ui.css" type="text/css" />');

1 个答案:

答案 0 :(得分:1)

未指定群集策略将默认为 FASTGRID 策略。但是在 FASTGRID 策略中,epsilon参数(算法应该对点进行分组的半径)必须是2的幂。这是指向 API reference的链接。另外,我认为放大或缩小时 FASTGRID 不会重新计算群集,这就是我建议查看 GRID / DYNAMICGRID 策略的原因。

通过取消注释聚类选项,将策略设置为H.clustering.Provider.Strategy.GRID并调整epsilon参数,我玩弄了你的小提琴:

...

clusteringOptions: {
    strategy: H.clustering.Provider.Strategy.GRID,
    // Maximum radius of the neighbourhood
    eps: 30,
    // minimum weight of points required to form a cluster
    minWeight: 2
}

...

参见 updated fiddle