Turf.js 擦除生成投影错误的多边形

Turf.js erase produces polygon with wrong projection

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

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/

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

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

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

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