TWT*_*TWT 5 c# algorithm geometry geolocation
我们目前正在使用以下算法来检测地理点是否位于复杂多边形内。这工作正常,除非多边形穿过 180\xc2\xb0 经线。
\n\n例如,在多边形中未检测到点 (-170, 60) 160,65,0 160,15,0 -160,15,0 -160,65,0 160,65,0
\n\n看下图:\n[Img]http://tinypic.com/r/14x2xl1[/img]\n我想要红框中的所有内容。不是黄盒子!
\n\n public static bool IsCoordinateInPolygon(IList<KMLCoordinate> polygon, KMLCoordinate testPoint)\n {\n\n bool result = false;\n int j = polygon.Count - 1;\n for (int i = 0; i < polygon.Count; i++)\n {\n if (polygon[i].Latitude < testPoint.Latitude && polygon[j].Latitude >= testPoint.Latitude || polygon[j].Latitude < testPoint.Latitude && polygon[i].Latitude >= testPoint.Latitude)\n {\n if (polygon[i].Longitude + (testPoint.Latitude - polygon[i].Latitude) / (polygon[j].Latitude - polygon[i].Latitude) * (polygon[j].Longitude - polygon[i].Longitude) < testPoint.Longitude)\n {\n result = !result;\n }\n }\n j = i;\n }\n return result;\n\n }\nRun Code Online (Sandbox Code Playgroud)\n\n有人有更好的算法吗?
\n球坐标系有它的怪癖
为了避免它们,请改用3D正交/正交笛卡尔坐标系
转换多边形顶点和地理位置
所以(long,lat,alt) -> (x,y,z)。在这里您可以找到如何操作。您不需要仅应用第一个球面到 3D 笛卡尔变换的局部变换(第 1 点。)
使用任何内部多边形测试...
我通常会计算从您的地理位置到任何方向的线与多边形边界线之间的交点数量。

[笔记]
不要忘记将所有处理为 3D 矢量而不是 2D !!!
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |