Ich habe einen Satz Koordinaten in lon / lat. Es gibt immer mindestens 3 geordnete Koordinaten, die eine Poly bilden (wenn sie flach projiziert wurden). Wie kann ich die Mindestgrenzen für diese Koordinaten als Satz gültiger Längen- und Breitengrade berechnen? (Mit "gültig" meine ich Bereiche, die explizit den Antimeridian berücksichtigen). Es ist schwer zu erklären, wonach ich suche, damit ich ein Bild habe.
Der Fall auf dem Bild ist trivial; Sie finden nur das absolute Minimum und Maximum für alle Punkte. Dies funktioniert jedoch nicht in allen Fällen. Gibt es eine generische Lösung?
Bearbeiten: Um zu verdeutlichen, was ich mit "gültig" meine, sage ich, ich habe drei Längengrade in meinem Datensatz: -76, -135 und 164. Die Werte kreuzen den Antimeridian und ich möchte, dass die resultierenden Bereiche aufgeteilt werden: -76 bis -180 UND 164 bis 180.
Noch mehr Klarheit. Die Punkte bilden ein Polygon. In bestimmten Fällen kann der erforderliche Bereich also zwischen -180 und +180 liegen (dh die vollen 360 Grad):
Das Bild links zeigt die Länge von vier Koordinaten, die auf einer Erdhälfte vorkommen. Stellen Sie sich vor, Sie blicken auf den Nordpol (schwarzer Punkt). Das Rosa zeigt den minimalen Längsbereich, der das Polygon umfasst (das Polygon wird zwischen den vier Punkten in Lila angezeigt). Der Fall auf der linken Seite hätte zwei Längsbereiche: [-180 bis -120] und [135 bis 180] (nur visuell geschätzt)
Das Bild rechts zeigt einen anderen Fall, in dem die Punkte den ganzen Weg um die Erde verlaufen. Dieser Bereich wäre [-180 bis 180].
quelle
Antworten:
Hoffe ich verstehe die frage richtig ...
Wir können das Problem für Längen- und Breitengrad getrennt lösen, also nehme ich Ihr Beispiel mit den Längengraden: -76, -135 und 164.
Zuerst würde ich sie bestellen:
Dann würde ich die am weitesten links stehende Koordinate wieder rechts hinzufügen: -135 + 360 = 225
Jetzt können wir die Lücken zwischen den Koordinaten berechnen:
Die größte Lücke (240) muss die Grenze des minimalen Begrenzungsrahmens sein, der Teil, der nicht zum Rahmen gehört . Die gepunktete Linie ist der größte Teil des Kreises, den wir aussparen können. In unserem Beispiel bedeutet dies, dass der Begrenzungsrahmen mit 164 beginnt, -135 enthält und mit -76 endet.
quelle
Mit der Google Maps-API ist dies in Javascript ganz einfach. Hier ist, wie Sie es clientseitig mit dieser API machen würden:
quelle
Ich glaube, ich hätte einen Weg gefunden, dies zu tun. Meine vorläufige Implementierung funktioniert, aber ich bin mir nicht sicher, ob es Randfälle gibt, die ich verpasst habe. Wenn mit dieser Lösung etwas nicht stimmt, weisen Sie darauf hin.
Angesichts der Tatsache, dass es mir darum geht, die Lang- / Langzeitbereiche für das Polygon und nicht nur die Punkte zu ermitteln, aus denen es besteht, besteht eine Möglichkeit, das Problem zu lösen, darin, die geordneten Koordinaten von Anfang bis Ende zu „durchlaufen“. Sie verfolgen, wie weit Sie in Bezug auf den Erdmittelpunkt im Uhrzeigersinn und gegen den Uhrzeigersinn gereist sind , und fahren fort, bis Sie das Polygon vervollständigt haben:
Sie können die Entfernung zwischen CW und CCW von Ihrem Startpunkt abrufen. Auf diese Weise erhalten Sie im Normalfall genügend Informationen, um die korrekten Grenzen abzuleiten (links im Bild). In dem Fall, in dem das Polygon vollständig um das Zentrum herum verläuft oder dieses schneidet, beträgt der zurückgegebene Bewegungswinkel 360 Grad.
Diese Methode funktioniert auch, wenn das Polygon die Erdoberfläche „umarmt“, anstatt sie zu durchschneiden. Wenn Sie also ein Polygon haben, das jemanden zeigt, der über die Erdoberfläche von Toronto (lon: -79) nach London (lon: -5) nach Tokio (lon: 139) und zurück (in derselben Reihenfolge) reist, werden Sie Holen Sie sich den Bereich [-79 bis 139].
Wenn das Polygon über die Mitte schneidet (stellen Sie sich zwei benachbarte Punkte bei +90 und -90 vor), halte ich dies für einen vollständigen Sweep (360 Grad), obwohl Sie in beide Richtungen gehen könnten.
quelle