Вам нужно разбить ломаную линию на меридиане + -180 градусов. Это требует нахождения широты, на которой ломаная пересекает этот меридиан. Ваша ГИС, вероятно, имеет методы для взлома. Если нет, простое решение может быть получено из кода, показанного в связанном потоке . Вот некоторые подробности.
Полилиния представлена в виде последовательности вершин , каждая из которых представлена в форме (широта, долгота) с -180 <= lon <= 180. Вам необходимо проверить каждую последующую пару, чтобы увидеть, пересекает ли она меридиан + -180. Существует быстрый тест: если абсолютное значение разности долгот составляет 180 или больше, происходит пересечение.
Внутри каждого сегмента (lat0, lon0) -> (lat1, lon1), который пересекает меридиан + -180, необходимо разбить ломаную на две части, где она пересекается.
Ключ находит широту точки останова с разумной точностью. Это легче всего сделать с помощью сферической модели Земли: ошибка (по сравнению с более точной эллипсоидальной моделью) будет слишком мала, чтобы ее можно было заметить.
Пусть рассматриваемый отрезок проходит из точки 0 в точке (lat0, lon0) в точку 1 в точке (lat1, lon1). Точку разрыва можно найти, запустив отрезок прямой линии в 3D между двумя точками, представленными в декартовых координатах, и найдя, где координата y равна нулю. В декартовы координаты являются
(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))
и аналогичное выражение, дающее (x1, y1, z1) для точки 1. Решите уравнение
t * y0 + (1-t) * y1 = 0
для т; то есть,
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) для завершения первой части ломаной ломаной линии, используйте (lat2, -180), если lon0 отрицательно, и используйте в противном случае (lat2, 180). Прикрепляя его перед (lat1, lon1), чтобы начать вторую часть ломаной ломаной линии, следуйте аналогичному правилу.
В исключительных случаях одна или обе точки 0 и 1 могут находиться на меридиане + -180. Следуя этой процедуре, вы поместите сегмент нулевой длины на одну из созданных вами полилиний. Если это может вызвать проблемы с ГИС, проверьте это условие.
Обратите внимание, что ломаная может пересекать этот меридиан более одного раза. Следовательно, после обнаружения первого разрыва и разбиения ломаной на две части, вам необходимо обработать вторую часть таким же образом.