javascript - 如何在openlayers 4.x中获取多边形内的所有点?
问题描述
我想使用 Openlayers 4.x 集成一个功能是我想获取地图上多边形内的所有点。目前我可以获得多边形本身的所有坐标。
但我想要多边形内的所有坐标或点。如果我解释得更多,这意味着我希望地图上的所有点或坐标都被多边形区域包围。
解决方案
在@willsters 回答的基础上,如果已经确定了候选对象并且您只是在寻找点(几何是范围),那么可以在相反方向使用 forEachFeatureIntersectingExtent 来查看这些点是否与多边形的几何相交。
var candidates = [];
source.forEachFeatureIntersectingExtent(myPolygon.getGeometry().getExtent(),function(feature){
if (feature.getGeometry().get('type') == 'Point') {
candidates.push(feature);
}
});
var selected = [];
candidates.forEach(function(candidate){
source.forEachFeatureIntersectingExtent(candidate.getGeometry().getExtent(),function(feature){
if (feature === myPolygon) {
selected.push(candidate);
}
});
});
同样对于单个坐标点,我认为可以一步完成:
var selected = [];
source.forEachFeatureIntersectingExtent(myPolygon.getGeometry().getExtent(),function(feature){
if (feature.getGeometry().get('type') == 'Point' &&
myPolygon.getGeometry().intersectsCoordinate(feature.getGeometry().get('coordinates')) {
candidates.push(selected);
}
});
关于划分为单元格,这样的事情将为包含多边形的 10x10 网格的每个单元格生成 pinpush 点。如果只有部分单元格与多边形相交,则单元格中心的 pinpush 可能位于几何图形之外。
var extent = myPolygon.getGeometry().getExtent();
for (var i=extent[0]; i<extent[2]; i+=(extent[2]-extent[0])/10) {
for (var j=extent[1]; j<extent[3]; j+=(extent[3]-extent[1])/10) {
var cellExtent = [i,j,i+(extent[2]-extent[0])/10),j+(extent[3]-extent[1])/10];
source.forEachFeatureIntersectingExtent(cellExtent,function(feature){
if (feature === myPolygon) {
var pinPush = new ol.feature(new ol.geom.Point(ol.extent.getCenter(cellExtent)));
source.addFeature(pinPush);
}
});
}
}
推荐阅读
- windows - 从托盘图标最大化表单后出现错误
- node.js - 如何使用 Puppeteer 编辑 PDF?
- cypress - 赛普拉斯没有加载更新的文件
- sql-server - 识别 SSIS SQL 服务器中 SCD 类型 2 中更改的列
- python - 使用python对数字范围进行排序以找到一个覆盖其他值的范围
- go - How to draw polygons in golang without anti-aliasing?
- reactjs - 反应点击元素的切换可见性
- javascript - javascript regex tags with full webaddress (text mining, inverse match)
- web-scraping - How do I get the inner text of elements using the scraper crate?
- .net - Server 500 error on portal/stylesheets - DNN 9.6