Sie müssen die Polylinie am + -180-Grad-Meridian brechen. Dazu muss der Breitengrad ermittelt werden, bei dem die Polylinie diesen Meridian kreuzt. Ihr GIS verfügt wahrscheinlich über Methoden, um das Brechen durchzuführen. Andernfalls kann eine einfache Lösung aus dem Code abgeleitet werden, der in einem verwandten Thread angezeigt wird . Hier sind einige Details.
Eine Polylinie wird als eine Folge von Eckpunkten dargestellt , die jeweils in (lat, lon) -Form mit -180 <= lon <= 180 angegeben sind. Sie müssen jedes aufeinanderfolgende Paar überprüfen, um festzustellen, ob es den + -180-Meridian überschreitet. Es gibt einen schnellen Test: Wenn der absolute Wert des Längenunterschieds 180 oder mehr beträgt, liegt eine Kreuzung vor.
Innerhalb jedes Segments (lat0, lon0) -> (lat1, lon1), das den Meridian + -180 überschreitet, müssen Sie die Polylinie in zwei Teile aufteilen, in denen sie sich überschneidet.
Der Schlüssel ist das Ermitteln des Breitengrads des Haltepunkts mit angemessener Genauigkeit. Dies ist am einfachsten mit einem sphärischen Erdmodell möglich: Der Fehler (im Vergleich zu einem genaueren Ellipsoidmodell) ist zu gering, um bemerkt zu werden.
Lassen Sie das betreffende Segment von Punkt 0 bei (lat0, lon0) zu Punkt 1 bei (lat1, lon1) gehen. Der Unterbrechungspunkt kann ermittelt werden, indem ein gerades Liniensegment in 3D zwischen den beiden in kartesischen Koordinaten dargestellten Punkten gezogen wird und ermittelt wird, wo die y-Koordinate Null ist. Die kartesischen Koordinaten sind
(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))
und einen ähnlichen Ausdruck, der (x1, y1, z1) für Punkt 1 ergibt. Löse die Gleichung
t * y0 + (1-t) * y1 = 0
für t; das ist,
t = y1 / (y1 - y0).
Die Koordinaten der Kreuzung sind daher
(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)
Dieser Punkt (der unter der Erdoberfläche irgendwo unter dem + -180-Meridian liegt) hat einen Breitengrad von
lat2 = ATan(z/x).
Der Haltepunkt muss auf zwei Arten dargestellt werden. Wenn Sie es nach (lat0, lon0) anfügen, um den ersten Teil der unterbrochenen Polylinie zu beenden, verwenden Sie (lat2, -180), wenn lon0 negativ ist, und verwenden Sie andernfalls (lat2, 180). Wenn Sie den zweiten Teil der unterbrochenen Polylinie vor (lat1, lon1) anhängen, befolgen Sie eine ähnliche Regel.
In Ausnahmefällen kann sich einer oder beide der Punkte 0 und 1 auf dem Meridian von +180 befinden. Wenn Sie diesem Verfahren folgen, platzieren Sie ein Segment mit der Länge Null auf einem der von Ihnen erstellten Polylinienstücke. Wenn dies zu einem Problem mit dem GIS führen kann, prüfen Sie, ob dieser Zustand vorliegt.
Beachten Sie, dass eine Polylinie diesen Meridian mehr als einmal überschreiten kann. Nachdem Sie den ersten Umbruch gefunden und die Polylinie in zwei Teile geteilt haben, müssen Sie den zweiten Teil auf die gleiche Weise verarbeiten.