NetTopologySuite多边形算法跨越国际日期线

时间:2012-11-27 12:54:46

标签: c# datetime timezone

我正在使用移植到C#的NetTopolgySuite,并且需要确定某个坐标纬度/经度是否属于定义为坐标纬度/经度值数组的指定区域。

所以我正在尝试使用CGAlgorithms.IsPointInRing方法,这对于大多数工作来说都非常完美。当我有一个跨越国际日期线的区域,例如,问题就出现了。第一条线路从170东向东至170西向结束。当我调用IsPointInRing时,即使被测坐标位于该区域内,它也会返回FALSE。

IsPointInRing的文档说

  

环可以朝向任一方向。

我假设是顺时针或逆时针。我只能假设戒指被错误地确定为第一条线从170 East east WEST到170 West&没有越过IDL。我的线应该是小弧,而不是主弧。

任何人都可以建议我如何在可能会或可能不会跨越国际日期行的坐标数组中测试坐标包含,或者我是否错误地使用了该函数。我更愿意继续使用NetTopologySuite。

1 个答案:

答案 0 :(得分:1)

经过测试,如果“MINOR”弧穿过180W / 180E子午线,我可以确认NetTopologySuite IsPointInRing程序被认为是“MAJOR”弧。作为一种解决方法,当测试针对环的点时,我只是在调用函数之前将所有经度值从范围180W..0W移动到180E..360E,即170W = 190E移位,170E = 170E未移位。虽然技术上不正确,但它允许我调用IsPointInRing程序&得到正确答案。