【问题标题】:GeometryUtil.geodesicArea() returning massive valuesGeometryUtil.geodesicArea() 返回大量值
【发布时间】:2019-08-30 22:12:46
【问题描述】:

我正在使用 GeometryUtil.geodesicArea 函数将弹出窗口绑定到包含有关多边形面积的信息的多边形。在这里,粘贴straight from the code

geodesicArea: function (latLngs) {
        var pointsCount = latLngs.length,
            area = 0.0,
            d2r = Math.PI / 180,
            p1, p2;

        if (pointsCount > 2) {
            for (var i = 0; i < pointsCount; i++) {
                p1 = latLngs[i];
                p2 = latLngs[(i + 1) % pointsCount];
                area += ((p2.lng - p1.lng) * d2r) *
                    (2 + Math.sin(p1.lat * d2r) + Math.sin(p2.lat * d2r));
            }
            area = area * 6378137.0 * 6378137.0 / 2.0;
        }

        return Math.abs(area);
    }

当我使用这些坐标在加拿大萨斯喀彻温省的大致区域上绘制一个矩形时:

0: {lat: 49.06465160956338, lng: -110.00904901708327}
1: {lat: 59.94790491663552, lng: -110.00904901708327}
2: {lat: 59.94790491663552, lng: -101.6155500597509}
3: {lat: 49.06465160956338, lng: -101.6155500597509}

roughly 651,900 sq km,它返回 30610232650154772。如果这个数字是 assumed to be in square meters,它大约等于 300 亿平方公里,which is well beyond the surface area of the entire earth,除非我错过了数字的含义返回。

这个测地线面积函数计算什么?我应该使用其他方法/函数来获取多边形的面积吗?

这是我正在使用的代码以及逐行计算的值

【问题讨论】:

    标签: geometry leaflet geospatial leaflet.draw


    【解决方案1】:

    你忘了括号

    面积 + = (p2.lng - p1.lng * d2r) *

    必要的:

    面积 + = ((p2.lng - p1.lng) * d2r) *

    【讨论】:

      【解决方案2】:

      只需使用 Heron 的公式和 L.GeometryUtil.length() 即可实现: Heron's formula

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 2021-06-18
        相关资源
        最近更新 更多