如何在 openlayers 6 中聚集不同类型的几何体?

How to cluster different types of geometry in openlayers 6?

我需要聚类一些具有不同几何类型(点、线串和多边形)的要素, 这是最好的方法吗?此外,当我缩放到单个要素时,这是使用要素本身的适当样式的最佳方式(如果是多边形等,则为多边形...)

簇源必须具有处理非点特征的几何函数。最基本的是return范围中心的一个点

geometryFunction: functionfunction(feature) {
  return new Point(getCenter(feature.getGeometry().getExtent()));
}

您也可以使用标签点(线串的中点和多边形的内部点)。对于样式样式函数,如果集群包含多个特征,样式函数应该样式为集群,但如果它包含该特征几何的单个特征样式

    var clusterLayer = new Vectorlayer({
      source: new ClusterSource({
        distance: distance,
        source: vectorSource,
        geometryFunction: function(feature) {
          var geometry = feature.getGeometry();
          var type = geometry.getType();
          if (type == 'Point') {
            return geometry;
          if (type == 'LineString') {
            return new Point(geometry.getCoordinateAt(0.5));
          } else if (type == 'Polygon') {
            return geometry.getInteriorPoint();
          } else {
            return new Point(getCenter(feature.getGeometry().getExtent()));
          }
        }
      },
      style: function(feature) {
        var features = feature.get('features');
        if (features.length > 1) {
          return clusterStyle;
        }
        else {
          defaultStyles.setGeometry(features[0].getGeometry());
          return defaultStyles;
        }
      }
    }),
  });