8 Stimmen

Punkt in Polygon-Algorithmus, der Polygone behandelt, die den Antemeridian überspannen

Ich habe eine Datenbank mit Polygonpunkten als Längen- und Breitengradpaare und muss prüfen, ob ein gegebener Breiten- und Längengradpunkt innerhalb eines der Polygone liegt.

Es gibt verschiedene Algorithmen, darunter diese aber sie funktionieren nicht, wenn das Polygon den Antemeridian überquert (vor der Küste Neuseelands, wo der Längengrad von +180 Grad Ost auf -180 Grad West wechselt).

Eine Lösung, die ich sehe, besteht darin, festzustellen, ob das Polygon die Antemeridian schneidet, und wenn ja, es in zwei Polygone aufzuteilen, eines auf jeder Seite, und dann jedes dieser Polygone zu prüfen.

2voto

Reed Copsey Punkte 536986

Die andere (einfachere) Möglichkeit ist, IMO, nur für diesen speziellen Fall zu testen, und wenn es existiert, wenden Sie eine Transformation auf Ihre Abfrage Punkt und das Polygon. Wenn es zum Beispiel den Anti-Meridian überspannt, verschieben Sie einfach alles um einen bestimmten Längengrad, damit es den Meridian nicht überspannt, und führen Sie Ihren Standardtest durch.

1voto

Augustus Punkte 294

Das ist wahrscheinlich übertrieben, aber man könnte in Erwägung ziehen, sphärische Polygone zu verwenden, anstatt die Karte als Ebene zu behandeln. Hier ist ein Bibliothek in Java, das sie behandelt und Punkt-in-Kugel-Polygon-Prüfungen durchführen kann. Wenn Sie allerdings Polygone haben, die mehr als die Hälfte des Globus oder beide Pole umfassen, könnten Sie Probleme bekommen, da die Definition des eingeschlossenen Bereichs nicht mehr funktioniert.

1voto

Lawrence Ward Punkte 529

Kann man nicht einfach alle Längenkoordinaten auf die positive Seite des GW-Meridians "verschieben", indem man 360 addiert? z.B.: die Koordinate ist -178Grad und wird dann zu +182Grad, -1Grad wird zu 359Grad, 1 Grad wird zu 361 usw...

Ich weiß nicht, wie sich das auf die Masten auswirkt, aber für alles, was die Masten nicht berührt, würde es wahrscheinlich gut funktionieren.

0voto

marxy Punkte 398

Vielen Dank für die Vorschläge. Letztendlich ist das Polygon, gegen das ich teste, ein Rechteck. Wenn es also den Antemeridian überspannt (es hat Längengrade mit unterschiedlichen Vorzeichen), zerschneide ich es in zwei Polygone, eines auf jeder Seite, und suche nach Objekten, die sich mit einem von ihnen schneiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X