【问题标题】:Calculate area covered by a polygon on earth计算地球上多边形覆盖的面积
【发布时间】:2021-09-04 13:04:12
【问题描述】:

我正在尝试计算地图上多边形所覆盖的面积(以平方公里为单位)。 基于 [1] 中的代码和相应的论文 [2] 我有这个代码:

double area = 0;
auto coords = QList<QGeoCoordinate>{(QGeoCoordinate(50.542908183, 6.2521438908), QGeoCoordinate(50.250550175, 6.2521438908), QGeoCoordinate(50.250550175, 6.4901310043), QGeoCoordinate(50.542908183, 6.4901310043))};

for(int i=0; i<coords.size()-1; i++)
{
    const auto &p1 = coords[i];
    const auto &p2 = coords[i+1];
    area += qDegreesToRadians(p2.longitude() - p1.longitude()) *
            (2 + qSin(qDegreesToRadians(p2.latitude())) +
             qSin(qDegreesToRadians(p1.latitude())));
}
area = area * 6378137.0 * 6378137.0 / 2.0;

qDebug() << "Area:" << (area/1000000);
qDebug() << coords;

但是计算出来的面积是完全错误的。移动多边形的顶点也会导致奇怪的结果:根据顶点,计算的面积会变小,尽管多边形的面积会增加,反之亦然。计算出的面积似乎也取决于将哪个顶点用作起始顶点。

有趣的是,环形算法的带符号区域(来自 [1] 的getArea)返回正确的结果,这意味着当多边形大小发生变化时,计算面积会增加/减少。

计算球体面积的代码也在其他地方使用过,所以我很确定我的实现有问题。

[1]https://github.com/openlayers/openlayers/blob/v2.13.1/lib/OpenLayers/Geometry/LinearRing.js#L251

[2]https://trs.jpl.nasa.gov/bitstream/handle/2014/40409/JPL%20Pub%2007-3%20%20w%20Errata.pdf?sequence=3&isAllowed=y

[3]Polygon area calculation using Latitude and Longitude generated from Cartesian space and a world file

【问题讨论】:

    标签: geolocation geospatial polygon area


    【解决方案1】:

    我仍然无法在我的代码中找到错误,但从 https://github.com/mapbox/geojson-area/blob/master/index.js 切换到 ringArea 方法有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-01
      • 2010-11-23
      • 2011-06-08
      • 2012-10-14
      • 2013-11-13
      • 2012-03-25
      相关资源
      最近更新 更多