Hea*_*ley 5 geocoding map area latitude-longitude
给定一系列GPS坐标对,我需要计算多边形的面积(n-gon).这相对较小(不大于50,000平方英尺).通过对来自世界文件的数据应用仿射变换来创建地理编码.
我试图通过将地理编码转换为笛卡尔坐标来使用两步法:
double xPos = (lon-lonAnchor)*( Math.toRadians( 6378137 ) )*Math.cos( latAnchor );
double yPos = (lat-latAnchor)*( Math.toRadians( 6378137 ) );
Run Code Online (Sandbox Code Playgroud)
然后我使用叉积计算来确定面积.
问题是结果的准确性有点偏差(约1%).我有什么可以改进的吗?
谢谢.
我在互联网上检查了各种多边形面积公式(或代码),但没有找到任何好的或易于实现的。
现在我已经编写了代码片段来计算在地球表面绘制的多边形的面积。多边形可以有 n 个顶点,每个顶点都有自己的纬度经度。
几个要点
输出面积将以平方米为单位
private static double CalculatePolygonArea(IList<MapPoint> coordinates)
{
double area = 0;
if (coordinates.Count > 2)
{
for (var i = 0; i < coordinates.Count - 1; i++)
{
MapPoint p1 = coordinates[i];
MapPoint p2 = coordinates[i + 1];
area += ConvertToRadian(p2.Longitude - p1.Longitude) * (2 + Math.Sin(ConvertToRadian(p1.Latitude)) + Math.Sin(ConvertToRadian(p2.Latitude)));
}
area = area * 6378137 * 6378137 / 2;
}
return Math.Abs(area);
}
private static double ConvertToRadian(double input)
{
return input * Math.PI / 180;
}
Run Code Online (Sandbox Code Playgroud)由于您的近似值,1% 的误差似乎有点高。您是与实际测量值还是理想计算值进行比较?请记住,GPS 也可能存在误差。
如果你想要一个更准确的方法来做到这一点,这个问题有一个很好的答案。如果您想要更快的方法,您可以使用 WGS84 大地水准面而不是参考球体来转换为笛卡尔坐标 (ECEF)。这是该转换的wiki 链接。
| 归档时间: |
|
| 查看次数: |
36598 次 |
| 最近记录: |