我试图找到在地图上绘制的 2 个多边形之间的交叉区域。我有 TurfJS intersect 方法来查找 2 个多边形之间的交集。
它适用于较小的区域,但对于较大区域的多边形,它开始在交点处显示一些偏移,偏移随着距离的增长而增长。这也仅适用于具有倾斜线的多边形(垂直和水平线相交似乎效果很好)。
我为此创建了一个 JSFiddle:https ://jsfiddle.net/cLe6yo9d/
我试图找到黑色和蓝色多边形之间的交点,我得到的显示为红色多边形,它看起来从它应该在的位置移动。
var mapLayer = L.map('mapid', {
zoomAnimation: false
});
var pid = 'karan44.pdmio34k';
var at = 'pk.mapbox-access-token-goes-here';
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
id: pid,
accessToken: at
}).addTo(mapLayer);
var polygon1 = turf.polygon([
[
[3.405762, 51.395350],
[5.009766, 53.340303],
[7.141113, 53.653999],
[5.822754, 51.037508],
[3.405762, 51.395350]
]
], {
"fill": "#00000F",
"stroke": "#00000F",
"stroke-width": 1
});
var polygon2 = turf.polygon([
[
[0.241699, 54.173488],
[10.162354, 50.908012],
[8.854980, 50.062208],
[0.241699, 54.173488]
]
], {
"fill": "#0000FF",
"stroke": "#0000FF",
"stroke-width": 1
});
var polygon = turf.intersect(polygon1, polygon2);
polygon.properties = {
"fill": "#FF0000",
"stroke": "#FF0000",
"stroke-width": 1
};
L.mapbox.featureLayer().setGeoJSON(polygon1).addTo(mapLayer);
L.mapbox.featureLayer().setGeoJSON(polygon2).addTo(mapLayer);
L.mapbox.featureLayer().setGeoJSON(polygon).addTo(mapLayer);
mapLayer.setView([52.754260888947776, 5.72100021667583], 8);
这个小提琴是通过修改turf.intersect 示例来重现问题而创建的。
希望有人可以帮助我了解出了什么问题。