Openlayers 3 - Clustering&线作为组合

时间:2016-03-22 10:35:40

标签: javascript geocoding openlayers-3

我的目标是在视图中聚集许多坐标。这点也可以有"连接"我想在它们之间显示为LineString。

我尝试了很多,但我找不到将线路集成到集群中的方法。

我现在的(稳定)状态可以在这里看到: Fiddle

var clusterSource = new ol.source.Cluster({
  distance: 20,
  source: vectorDevices
});

如果两点"合并"如果连接消失或者是集群本身的一部分,那么进入集群会很棒。

任何人都可以帮助我吗?

我尝试将vectorLine添加为群集的源 fiddle

var clusterSource = new ol.source.Cluster({
  distance: 20,
  source: [vectorDevices, vectorLine]
});

或通过addFeature fiddle

clusterSource.addFeature(vectorLine);

1 个答案:

答案 0 :(得分:1)

我认为您目前无法向群集添加行。 Openlayers 3(从v 3.14.2开始)聚类仅允许您聚类点。如果你看一下ol.source.Cluster的来源,有一个声明断言它中的所有特征都需要是点。 (来自https://github.com/openlayers/ol3/blob/v3.14.2/src/ol/source/clustersource.js

ol.source.Cluster.prototype.createCluster_ = function(features) {
  var length = features.length;
  var centroid = [0, 0];
  for (var i = 0; i < length; i++) {
    var geometry = features[i].getGeometry();
    goog.asserts.assert(geometry instanceof ol.geom.Point,
        'feature geometry is a ol.geom.Point instance');
    var coordinates = geometry.getCoordinates();
    ol.coordinate.add(centroid, coordinates);
  }
  ol.coordinate.scale(centroid, 1 / length);

  var cluster = new ol.Feature(new ol.geom.Point(centroid));
  cluster.set('features', features);
  return cluster;
};

我认为最好的办法是在点聚集时以某种方式将线图层的可见性更改为false。

编辑:但是,在ol的下一个版本中,这可能会发生变化,合并了拉取请求(https://github.com/openlayers/ol3/pull/4917),该请求具有geometryFunction选项。