OL3:聚类向量功能何时无法确定要素类型

时间:2017-01-24 13:21:37

标签: openlayers-3

我必须在Vector层中加载一些功能并具有样式功能。

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中得到什么样的几何体。问题是:当我的收藏类型为" Point"我可以对它进行聚类,但是对于任何其他类型我都看不到图层...如何聚类点并忽略多边形和线?或者让OL3足够聪明地决定?

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

1 个答案:

答案 0 :(得分:1)

我建议你创建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对象中获取了一些功能,并根据几何类型将它们添加到不同的源。如果你想在群集源中看到更多的点以确保它正常工作,你也可以使用注释行。