Wie kann ich bei einem gegebenen Satz von Koordinaten die Mindestgrenzen berechnen?


13

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.

Bildbeschreibung hier eingeben

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):

Bildbeschreibung hier eingeben

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].


1
Ich habe dieses Problem noch nie in Betracht gezogen, es ist eine großartige Frage. Ein weiteres Beispiel, wo eine flache Erde unsere Arbeit erleichtern würde! Ich freue mich auf einige Lösungen dafür.
sgrieve

Ich denke, Sie müssen expliziter sein in Bezug auf "(mit 'gültig' meine ich Bereiche, die explizit den Antimeridian berücksichtigen)" - Ich vermute, das Wort Minimum muss in der Frage vor die Schranken gehen.
Ian Turton

Können Sie Ihr Bild erneut hinzufügen, kann dies hilfreich sein, um Ihr Problem zu erläutern.
Mapperz

1
iant: explizit geklärt 'gültiger' Mapperz: neu hinzufügen? Zeigt es sich nicht? Ich kann es gut sehen.
Pris

1
Nun, die Koordinaten sind in Lon / Lat und werden verwendet, um eine Datenbank abzufragen, um geografische Daten abzurufen. Genau genommen können Sie dies in ein reines mathematisches Problem umwandeln (obwohl dies über viele Dinge in GIS gesagt werden kann)
Pris

Antworten:


5

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:

-135, -76, 164

Dann würde ich die am weitesten links stehende Koordinate wieder rechts hinzufügen: -135 + 360 = 225

-135, -76, 164, 225

Jetzt können wir die Lücken zwischen den Koordinaten berechnen:

-135 (59) -76 (240) 164 (61) 225
             .......

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.


Das funktioniert in den meisten Fällen, denke ich. Betrachten Sie aber mein Beispiel mit dem zusätzlichen Längengrad (+60) [als vierten Punkt in der Poly]. In diesem Fall möchte ich -180 bis 180. Mit Ihrer Methode würde ich 61 bis 180 und -76 bis -180 erhalten.
Pris

@Pris - Du willst also, dass der Längengrad 180 / -180 (immerhin derselbe Punkt) in jedem Fall Teil der Box ist, auch wenn das nicht die kleinstmögliche Box ist?
Martinstöckli

Ich denke, der Hauptunterschied besteht darin, dass die Punkte ein Polygon bilden. Siehe meine Bearbeitung.
Pris

@Pris - Na ja, das sieht wirklich knifflig aus. Es ist so, als würde jeder Punkt einer Kante zwischen zwei Punkten auch als Eckpunkt gezählt.
Martinstöckli

1

Mit der Google Maps-API ist dies in Javascript ganz einfach. Hier ist, wie Sie es clientseitig mit dieser API machen würden:

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

Hey, danke für die Antwort, aber ich suche nach der tatsächlichen Methode, anstatt eine API aufzurufen oder eine bereits vorhandene Lösung zu verwenden.
Pris

Sie gaben mir die Methode bounds.extend, ich suchte nach genau dieser Lösung, also danke!
Thomson Comer

Funktioniert das mit Polygonen? Ich sehe dich mit Rectangle.
Danny G

1

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:

Bildbeschreibung hier eingeben

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.