绘制多边形到 select 个要素,但不准确 [OL3]
Drawing a polygon to select features, but is inaccurate [OL3]
绘制多边形并通过它选择要素:
draw.on('drawend', function(event) {
delaySelectActivate();
selectedFeatures.clear();
var polygon = event.feature.getGeometry();
var features1 = vectorSource.getFeatures();
for (var i = 0 ; i < features1.length; i++){
if(polygon.intersectsExtent( features1[i].getGeometry().getExtent() )){
selectedFeatures.push(features1[i]);
}
}
});
Returns 这个结果:
出于某种原因,西班牙也被选中了,即使它看起来远离多边形的范围?
下面是一个拖拽框选择的例子:
这里是相关的 dragbox js:
dragBox.on('boxend', function() {
// features that intersect the box are added to the collection of
// selected features
drawingSource.clear();
var extent = dragBox.getGeometry().getExtent();
vectorSource.forEachFeatureIntersectingExtent(extent, function(feature) {
selectedFeatures.push(feature);
});
});
我试过的:
- 我没有使用 for 循环来获取交集(for 循环应该更准确,但事实并非如此),我尝试使用与拖动框相同的方式 - 使用 forEachFeatureIntersectingExtent。有效,但结果是一样的。
我认为是因为绘制的多边形范围不准确。但是当使用 dragbox 时,似乎也是多边形的特征范围如何准确?
我遵循了这个教程:Selecting features by drawing polygons in openLayers 3
看来确实用forEachFeatureIntersectingExtent
方法准确多了:
draw.on('drawend', function(event) {
delaySelectActivate();
selectedFeatures.clear();
var polygon = event.feature.getGeometry();
vectorSource.forEachFeatureIntersectingExtent(polygon.getExtent(), function(feature) {
selectedFeatures.push(feature);
});
});
我猜教程的作者使用了 for 循环,因为他使用的是相交点而不是 vectorSource。
绘制多边形并通过它选择要素:
draw.on('drawend', function(event) {
delaySelectActivate();
selectedFeatures.clear();
var polygon = event.feature.getGeometry();
var features1 = vectorSource.getFeatures();
for (var i = 0 ; i < features1.length; i++){
if(polygon.intersectsExtent( features1[i].getGeometry().getExtent() )){
selectedFeatures.push(features1[i]);
}
}
});
Returns 这个结果:
这里是相关的 dragbox js:
dragBox.on('boxend', function() {
// features that intersect the box are added to the collection of
// selected features
drawingSource.clear();
var extent = dragBox.getGeometry().getExtent();
vectorSource.forEachFeatureIntersectingExtent(extent, function(feature) {
selectedFeatures.push(feature);
});
});
我试过的:
- 我没有使用 for 循环来获取交集(for 循环应该更准确,但事实并非如此),我尝试使用与拖动框相同的方式 - 使用 forEachFeatureIntersectingExtent。有效,但结果是一样的。
我认为是因为绘制的多边形范围不准确。但是当使用 dragbox 时,似乎也是多边形的特征范围如何准确?
我遵循了这个教程:Selecting features by drawing polygons in openLayers 3
看来确实用forEachFeatureIntersectingExtent
方法准确多了:
draw.on('drawend', function(event) {
delaySelectActivate();
selectedFeatures.clear();
var polygon = event.feature.getGeometry();
vectorSource.forEachFeatureIntersectingExtent(polygon.getExtent(), function(feature) {
selectedFeatures.push(feature);
});
});
我猜教程的作者使用了 for 循环,因为他使用的是相交点而不是 vectorSource。