如何在 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;
}
}
}),
});
我需要聚类一些具有不同几何类型(点、线串和多边形)的要素, 这是最好的方法吗?此外,当我缩放到单个要素时,这是使用要素本身的适当样式的最佳方式(如果是多边形等,则为多边形...)
簇源必须具有处理非点特征的几何函数。最基本的是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;
}
}
}),
});