Frage

Ich habe eine Reihe von Breiten-/Längengradpaaren, die auf einer (geografisch verzerrten) Karte auf bekannte x/y-Koordinaten abgebildet werden.

Dann habe ich noch ein weiteres Breiten-/Längengradpaar.Ich möchte es so gut wie möglich auf der Karte darstellen.Wie mache ich das?

Zuerst habe ich beschlossen, ein lineares Gleichungssystem für die drei nächstgelegenen Breiten-/Längenpunkte zu erstellen und daraus eine Transformation zu berechnen, aber das funktioniert überhaupt nicht gut.Da es sich um ein lineares System handelt, kann ich auch keine weiteren Punkte in der Nähe verwenden.

Sie können nicht davon ausgehen, dass Norden oben ist:Alles, was Sie haben, sind die vorhandenen Lat/Long->X/Y-Zuordnungen.

BEARBEITEN:Es handelt sich nicht um eine Mercator-Projektion oder ähnliches.Zur besseren Lesbarkeit ist es willkürlich verzerrt (denken Sie an eine U-Bahn-Karte).Ich möchte nur die nächsten 5 bis 10 Zuordnungen verwenden, damit sich Verzerrungen in anderen Teilen der Karte nicht auf die Zuordnung auswirken, die ich zu berechnen versuche.

Darüber hinaus befindet sich die gesamte Karte in einem sehr kleinen geografischen Gebiet, sodass Sie sich keine Sorgen um den Globus machen müssen – die Annahme einer flachen Erde reicht aus.

War es hilfreich?

Lösung

Gibt es genauere Angaben zur Art der Verzerrung?Wenn beispielsweise Ihre Breiten- und Längengrade mithilfe einer Mercator-Projektion auf Ihrer 2D-Karte „verzerrt“ werden, ist dies bei der Umrechnung der Fall leicht verfügbar.

Wenn die Karte wirklich willkürlich verzerrt ist, können Sie viele Dinge ausprobieren, aber das einfachste wäre wahrscheinlich die Berechnung von a gewichteter Durchschnitt aus Ihren vorhandenen Punktzuordnungen.Ihre Gewichte könnten der quadratische Kehrwert des x/y-Abstands von Ihrem neuen Punkt zu jedem Ihrer vorhandenen Punkte sein.

Etwas Pseudocode:

estimate-latitude-longitude (x, y)

    numerator-latitude := 0
    numerator-longitude := 0
    denominator := 0

    for each point,
        deltaX := x - point.x
        deltaY := y - point.y
        distSq := deltaX * deltaX + deltaY * deltaY
        weight := 1 / distSq

        numerator-latitude += weight * point.latitude
        numerator-longitude += weight * point.longitude
        denominator += weight

    return (numerator-latitude / denominator, numerator-longitude / denominator)

Dieser Code liefert eine relativ einfache Näherung.Wenn Sie die Art und Weise, wie die Projektion die geografischen Koordinaten verzerrt, genauer bestimmen können, können Sie wahrscheinlich viel besser abschneiden.

Andere Tipps

In Ordnung.Aus theoretischer Sicht kann man angesichts der Tatsache, dass die Verzerrung „willkürlich“ ist und jede Lösung die Modellierung dieser willkürlichen Verzerrung erfordert, offensichtlich keine „Antwort“ erhalten.Allerdings wird jede Lösung darin bestehen, (normalerweise implizit) ein Modell der Verzerrung vorzuschreiben, das die Realität der Situation widerspiegeln kann oder auch nicht.

Da Sie offenbar am meisten an Modellen interessiert sind, die eine Art lokale Kontinuität der Verzerrungsabbildung voraussetzen, ist die naheliegendste Wahl die, die Sie bereits ausprobiert haben:lineare Interpolation zwischen den nächstgelegenen Punkten.Um darüber hinauszugehen, sind anspruchsvollere mathematische und numerische Analysekenntnisse erforderlich.

Sie gehen jedoch zu Unrecht davon aus, dass Sie dies nicht auf weitere Punkte ausdehnen können.Dies ist möglich, indem Sie einen Ansatz der kleinsten Fehlerquadrate verwenden.Finden Sie die lineare Antwort, die den Fehler der anderen Punkte minimiert.Dies ist wahrscheinlich die einfachste Erweiterung.Mit anderen Worten: Nehmen Sie die fünf nächstgelegenen Punkte und versuchen Sie, eine lineare Näherung zu finden, die den Fehler dieser Punkte minimiert.Und nutzen Sie das.Ich würde es als nächstes versuchen.

Wenn das nicht funktioniert, ist die Annahme der Linearität über die Fläche von N Punkten hinfällig.An diesem Punkt müssen Sie entweder auf ein quadratisches oder kubisches Modell upgraden.An diesem Punkt wird die Mathematik hektisch.

Das Problem besteht darin, dass die Kugel auf verschiedene Arten verzerrt werden kann. Wenn Sie beispielsweise alle Punkte auf dem Äquator kennen, können Sie weiter entfernte Punkte nicht kartieren.

Sie benötigen bessere „nahe“ Punkte, dann können Sie davon ausgehen, dass diese drei Punkte auf einer Ebene mit dem vierten liegen, und die Interpolation durchführen – in dem Wissen, dass der Abstand der Längengrade eine Funktion und keine Konstante ist.

Ähm.Vielleicht übersehe ich hier etwas zu der Frage, aber wenn Sie Lang-/Breitengradinformationen haben, haben Sie auch die Richtung Norden?

Anscheinend müssen Sie geodätische Koordinaten einem projizierten Koordinatensystem zuordnen.Zum Beispiel osgb zu wgs84.

Die Mathematik ist nicht trivial, aber der Code besteht aus nur wenigen Zeilen.Wenn ich mehr Zeit hätte, würde ich mehr posten, aber ich brauche eine Dusche, damit es langweilig wird und ich verlinke Wikipedia Eintrag, der ziemlich gut ist.

Notiz:Beitragsdusche bearbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top