您需要在+ -180度子午线处折断折线。 这需要找到折线与子午线相交的纬度。您的GIS可能具有完成任务的方法。如果不是,则可以从相关线程中显示的代码中得出简单的解决方案。这里有一些细节。
关键是要以合理的精度找到断点的纬度。 使用球形地球模型最容易做到这一点:误差(与更精确的椭球模型相比)将很小,难以察觉。
让所讨论的段从(lat0,lon0)的点0到(lat1,lon1)的点1。可以通过在直角坐标表示的两点之间运行3D直线段并找到y坐标为零的位置来找到断点。在笛卡尔坐标是
(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))
并给出点1的相似表达式(x1,y1,z1)。
t * y0 + (1-t) * y1 = 0
对于t 那是,
t = y1 / (y1 - y0).
因此,交点的坐标为
(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)
该点(位于地球表面以下+ -180子午线以下)的纬度等于
lat2 = ATan(z/x).
断点需要以两种方式表示。 当在(lat0,lon0)之后附加它以终止折线的第一部分时,如果lon0为负,则使用(lat2,-180),否则使用(lat2,180)。将其附加到(lat1,lon1)之前以开始折线的第二部分时,请遵循类似的规则。
在特殊情况下,点0和点1之一或两者可能在+ -180子午线上。遵循此步骤将导致您在创建的多段线之一上放置零长度线段。如果这可能会导致GIS问题,请测试这种情况。
请注意,一条折线可以多次穿越此子午线。因此,在找到第一个折线并将折线分为两部分后,您需要以相同的方式处理第二部分。