OL3:无法确定要素类型时对矢量要素进行聚类



我必须在矢量层中加载一些特征并具有样式函数。

var features = new ol.format.GeoJSON().readFeatures( geojsonStr, {
    featureProjection: 'EPSG:3857'
});         
var vectorSource = new ol.source.Vector({
    features: features,
}); 

/*
var clusterSource = new ol.source.Cluster({
    distance: 15,
    source: vectorSource
});
*/          
var customStyleFunction = function( feature, resolution ) {
   ....
}
var vectorLayer = new ol.layer.Vector({
    //source: clusterSource,
    source: vectorSource,
    style : customStyleFunction
});
map.addLayer( vectorLayer );

我不知道我会在geojsonStr得到什么样的几何形状.问题是:当我的集合类型为"点"时,我可以对其进行聚类,但对于任何其他类型,我看不到图层......如何聚类点并忽略面和线?还是让OL3足够聪明来决定?

编辑:我读过 https://github.com/openlayers/openlayers/pull/4917

我建议您创建 2 个不同的层:一个用于聚类,另一个用于公共矢量层。

要解决您的问题,您可以循环浏览要素并检查每个要素的几何类型,然后使用 addFeature 方法将其添加到现有源中:

for (var i = 0; i < geojsonFeatures.length; i++) {
    if (geojsonFeatures[i].getGeometry().getType() === 'Point') {
        clusterSource.addFeature(geojsonFeatures[i]);
    } else {
        vectorSource.addFeature(geojsonFeatures[i]);
    }
}

我创建了一个 jsfiddle,它从 GeoJSON 对象中获取几个功能,并根据几何类型将它们添加到不同的来源。如果要在群集中查看更多点以确保其正常工作,也可以使用注释行。

最新更新