0

我将turfjs erase 与传单绘制插件一起使用,以从正在绘制的新多边形中减去现有多边形。但是,结果多边形无法在地图上正确显示,这似乎是一个投影问题。

mapEPSG4326.on('draw:created', function (e) {
    var clippedZone = e.layer.toGeoJSON();
    polyLayer2.eachLayer(function (existingPoly) {
        clippedZone = turf.erase(clippedZone, existingPoly.feature);
    });
    polyLayer2.addData(clippedZone);
});

将我的传单地图投影 CRS 更改为 L.CRS.EPSG4326 时,多边形显示正确,但这会产生其他问题。

有没有办法从 turf.js 更改结果多边形的投影,以便在传单使用的默认 L.CRS.EPSG3857 投影上正确显示?

显示行为的 jsfiddle https://jsfiddle.net/pdjo/s5v19es0/3/

4

1 回答 1

0

您最有可能看到的是用球形墨卡托中的直线近似地球上两点之间的线的效果。地球上两点之间真正最接近的线,称为大圆,在球形墨卡托中通常不是直线,而是看起来像一条曲线。不过,直线对于短距离来说是一个很好的近似值。

如果你在更小的区域(比如几公里)做同样的事情,它看起来会很棒。

要么在较小的区域上执行此操作,要么使用一些绘制实际大圆圈的插件绘制线条。

总而言之:错误不在草坪或数据中,而在于 Leaflet 如何将直线近似为直线,而不是真正的大圆(恕我直言,这是一个合理的权衡,但在这种情况下会崩溃)。

于 2015-09-01T13:49:08.093 回答