【发布时间】: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
【问题讨论】:
标签: geolocation geospatial polygon area