GMM

  • Ich habe eine Papierkarte mit aufgedrucktem UTM-Raster gescant und dann von Hand kalibriert (Einstellung bei Kartenkalibrieung: Universal Trasverse Mercator. Die einzelnen Karten passen sehr genau. Bei eingeblendeten Tracks bin ich aber von der Genauigkeit nicht so begeistert. In TOP 50 sind sie haargenau, in der gescanten Karte jedoch nicht. Ich weiß jedoch nicht, ob das an der Karte oder den Kalibrierungspunkten liegt.


    Kann das mit der Einstellung unter "Projektion der Kartenansicht" zusammenhängen? Was bewirkt die Einstellung?

  • Mir ist bei der Arbeit mit GMM 1.0.0.26 bzw. 1.0.0.28 aufgefallen, dass sich eingeblendete Tracks oder POI´s in Glopus auf der Karte verschieben, wenn sich die Skalierung ändert. Genauer: Ich arbeite meistens mit Karten in 100%, 50% und 25% Auflösung. Die 100%-Karte erzeuge ich aus der Originalkarte mit der Funktion "Teilen". Die 50 und 25% Karten ebenfalls aus der Originalkartendatei über "Neu berechnen" mit entsprechender Skalierung.


    Setzt man nun auf der 100%-Karte einen POI z.B. exakt auf eine Kreuzung und verkleinert die Kartendarstellung bis zum Wechsel auf die 50% Karte verschiebt sich der POI bezogen auf die Karte nach Norden. Das Gleiche ist bei Tracks zu beobachten.


    Ebenso erkennt man bei genauem Hinschauen an den geteilten Kartensegmenten einen leichten Versatz der Karte, d.h. bei Wegen, die etwa diagonal über die Kartensegmente laufen, wird der Übergang durch eine leichte Treppe sichtbar.


    Könnte es sein, dass sich in den Umrechungsroutinen von GMM leichte Rechenfehler eingeschlichen haben? In diesem Zusammenhang:
    GMM erzeugt .kal-Dateien für die Segmente der Größe (x,y). Der erste Punkt liegt auf (0,0). Trotzdem wird der diagonal gegnüberliegende Punkt ebenfalls auf (x,y) statt (x-1,y-1) berechnet, d.h. dieser Punkt liegt bereits außerhalb des Segmentes.
    Vergleicht man die .kal Dateien mit den generierten Daten von sdsnetz.de stellt man fest, dass dort Size (x,y) und Point (x-1,y-1) verwendet wird.


    Letzteres könnte eine Erklärung für die Treppenbildung sein.


    Wird bei geodetic einfach linear gerechnet?

    Gruss


    Spürnase

  • Es wird in jedem Koordinatensystem linear gerechnet - nur eben mit der richtigen Projektion. Ungenauigkeiten konnte ich bisher keine entdecken. Allerdings sind die beschriebenen Fehler zu erwarten, wenn man die falsche Projektion eingestellt hat. Wenn das Top50 Karten sind, sollte Gauss-Krüger richtig sein.

  • Es handelt sich in diesem Fall um eine Wanderkarte der Niederlande, die es für mehr Geld identisch als topografische Karte gibt, allerdings ohne Wanderwege, dafür mit Längen- & Breitengraden. Meines Wissens war auf dieser WGS84 vermerkt. Das gleiche Phänomen habe ich aber bei auch bei anderen Karten.


    Ich habe nun den Scan der Karte mit ALLEN verfügbaren Projektionen geteilt und alle Varianten auf dem PC geladen. Auf dem Originalscan habe ich an wahlloser Position einen kurzen Track gezeichnet, der halbwegs exakt auf der Strasse liegt.
    Wechsle ich die Ansicht auf irgend eine geteilte Karte liegt der Track IMMER daneben und zwar ziemlich identisch. Ich habe den jeweiligen Ausschnitt als .jpg angehängt. Der auf 50% verkleinerte und geteilte Ausschnitt geodetic liegt offenbar wieder drauf. 25% ist auch i.O. soweit erkennbar.


    Kann ich noch etwas anderes falsch machen?

  • Was die eingestellte Projektion für die zu teilenden Karten angeht, hast Du völlig recht, die Einstelloption habe ich gar nicht wahrgenommen. Danke dafür.


    Aber: Nach einigem Ausrobieren bin ich ziemlich sicher, dass bei Einstellung geodetic gar keine Projektion in GMM berechnet wird, richtig? Jedenfalls konnte ich keinen Pixel Krümmung nach dem Teilen erkennen. D.h. teile ich eine Karte mit dieser Einstellung, müßte der Track exakt da liegen, wo er auch auf der nicht geteilten Karte liegt - und das ist aber (je nach Vorlage) abhängig vom Teilerfaktor. Interessanterweise passiert das scheinbar nicht, wenn die Originalkarte exakt rechtwinklig zu den Koordinaten liegt (die Karte wird also nicht leicht gedreht). Dabei taucht der Fehler grundsätzlich immer in vertikaler Richtung auf. Kann Du mir das erklären?

    Gruss


    Spürnase

  • Hmm, jetzt bin ich mir gar nicht mehr sicher, ob beim "Teilen" die Projektion auch wirklich genutzt wird. Diese Funktion war eine der ersten in dem Projekt und ich bin mir nicht sicher, inwieweit ich die nach einführen der Projektion angepasst habe. Ich habe diese Funktion auch selber gar nicht mehr genutzt.
    Nimm doch bitte mal die Funktion "Neuberechnen", die auch Teilen kann aber bei mehreren Karten sogar den Vorteil hat, Überlappungen zu minimieren.


    Momentan bin ich mit Glopus ausgelastet. Wenn ich mal wieder am GMM schraube, werde ich das Teilen mal prüfen.

  • Zitat

    Original von Peter Kirst
    Hmm, jetzt bin ich mir gar nicht mehr sicher, ob beim "Teilen" die Projektion auch wirklich genutzt wird. Diese Funktion war eine der ersten in dem Projekt und ich


    Mir ist die Projektionsunterstützung auch noch rätselhaft. Es wäre hilfreich, wenn du sagen könntest wo und wie genau das in GMM+Glopus berücksichtigt wird und welche Optionen dazu in den KAL-Files möglich sind. Vorteilhaft wäre das z.B. bei großen Mercatorkarten für den Ozi-Explorer oder bei Geotiff's, die man automatisch und projektionsrichtig ins KAL-Format bringen könnte. Hier ist die bisherige Lösung oft ungenau (je nach Maßstab).


    Es geht vor allem um die Kalibrierpunkte und die Bildpixel zu GPS-Koordiinate- Umrechung. Oder auch beim Neuberechnen der Kalibierpunkte beim Kartenteilen ist das wertvoll. Lineare Teilung wäre bei nicht-geodetic-Karten nur verschenkte Genauigkeit. Eine Reprojektion der Bildkarten würde ich aber nicht machen, das verzerrt nicht nur, sondern macht hässliche Fransen an den Bilddaten. Siehe reprojezierte Weltkarte.

  • Wenn Du z.B. 2 Punkte in der Karte definiert hast und Du willst z.B. für die Teilung den Punkt in der Mitte bestimmen, dann berechnest Du bei geodetic sowohl für die Bildpunkte als auch für die Koordinaten den Mittelwert, richtig?


    Wenn die Karte nun in einem anderen Koordinatensystem vorliegt und Du kennst die jeweilige Umrechnung in dieses und von diesem Koordinatensystem, dann ist der Weg fast der Gleiche:
    Der Bildpunkt ist wie gehabt der Mittelwert, die beiden Koordinaten rechnest Du erst mal in das "richtige" Koordinatensystem, bildest jetzt den Mittelwert und rechnest zurück in geodetic. Auf diese Weise bekommst Du die exakte geodetic Koordinate für diesen Punkt.


    Beantwortet das Deine Frage?

  • Zitat

    Original von Peter Kirst
    Nimm doch bitte mal die Funktion "Neuberechnen", die auch Teilen kann aber bei mehreren Karten sogar den Vorteil hat, Überlappungen zu minimieren.


    Genau das ist es! Mit "Neu berechnen" ist der Versatz verschwunden. D.h. Finger weg von der "teilen"-Funktion!


    Mir ist allerdings bei Benutzung der "Neu berechnen"-Funktion aufgefallen, dass gnadenlos der gesamte Bereich berechnet wird, wo GMM kal-Dateien im Verzeichnis findet. Die Grafik wird aber nur verwendet von den tatsächlich markierten Dateien. Weil GMM meine Projektionstestkarte im Verzeichnis gefunden hatte, die über 20 Längen-und Breitengrade geht, hatte ich zig zehntausende Kacheln mit schwarzer Grafik (mußte bei 15 GB Kacheldaten und endlosem Rattern die Notbremse ziehen). Nach verschieben der nicht markierten (kal-) Dateien konzentrierte sich GMM dann auf die markierte Datei. Hat das einen praktischen Hintergrund?


    Ach ja, und noch eine Frage: In Glopus ist rechts neben dem Button für die Längenmessung und links vom Button für die Kartenausrichtung ein Icon, dem ich keinerlei Funktion zuweisen kann (so etwa Campingplatzsymbol mit Palme). Was ist das für eine Funktion?

    Gruss


    Spürnase

  • Zitat

    Original von Peter Kirst
    Wenn Du z.B. 2 Punkte in der Karte definiert hast und Du willst z.B. für die Teilung den Punkt in der Mitte bestimmen, dann berechnest Du bei geodetic sowohl für die Bildpunkte als auch für die Koordinaten den Mittelwert, richtig?


    Richtig. Bei geodetic stehen Bildpixelkoordinate und geografische Koordinate im linearen Zusammenhang. D.h. für beide reicht der Mittelwert zur Teilung


    Zitat


    Wenn die Karte nun in einem anderen Koordinatensystem vorliegt und Du kennst die jeweilige Umrechnung in dieses und von diesem Koordinatensystem, dann ist der Weg fast der Gleiche:
    Der Bildpunkt ist wie gehabt der Mittelwert, die beiden Koordinaten rechnest Du erst mal in das "richtige" Koordinatensystem, bildest jetzt den Mittelwert und rechnest zurück in geodetic. Auf diese Weise bekommst Du die exakte geodetic Koordinate für diesen Punkt.


    Ich gehe davon aus, dass das Rasterbild in gleich große Teile zerstückelt wird. D.h. im Bildpixel-Koordinatensystem gibt es wieder eine lineare Teilung. Durch die Projektion ist die Teilung im geografischen Koordinatenraum allerdings nicht mehr linear. Ich hab's nicht ganz verstanden: machst du wirklich in diesem geografischen Gradzahlensystem eine Mittelung? Das würde ja nicht mehr zu einer gleichmäßigen Kachelaufteilung im Rasterbildraum passen und würde zu Positionierungsfehlern führen. Eine "geodetic" Koordinate gibt es hier erstmal gar nicht, weil überhaupt keine geodetic-Projektion vorliegt (sondern Mercator etc.). Was Glopus später mit den Kacheln macht ist eine andere Sache. Für die Berechnung der Teilungspunkte einer "großen" Karte wäre eine geodetic-Näherung erstmal grob falsch. Die Näherung ist erst bei "kleinen" Kacheln unauffällig.


    Übrigens hab ich mir die Sachen damals durch den Kopf gehen lassen, als ich in den geotools den Kartenteiler für Geotiff-Karten auf GDAL-Basis programmiert hatte. Das war prinzipiell die gleiche Problematik. Glücklicherweise hat GDAL bereits die Rücktransformation der Kalibrierpunkte eingebaut.


    Zitat

    Beantwortet das Deine Frage?


    Nicht ganz. Es geht vor allem um die 3 Punkte:
    - Projektionsrichtige Berechnung der neuen Kalibrierpunkte in der GMM-Kartenteilung?
    - Welche Optionen hat KAL bezüglich Projektionen?
    - Wie geht Glopus damit um (verzerrt bzw. reprojeziert es Kacheln, oder wird die Bildpixel-zu-geografischer Gradkoordinate in Abhängigkeit der Projektion besser berechnet)?


    Nun, ist nicht tragisch wenn diverse Sachen nur angenähert werden. Aber es ist schon interessant, wie es läuft und ob es einen Genauigkeitsgewinn bringt, wenn ich den OZI2KAL-Konverter entsprechend anpasse. Ob ein Track weit neben oder auf der Strasse liegt ist schon ein Unterschied.

  • Spürnase:
    Im GMM gibt es auch die Möglichkeit einen Bereich zu markieren (drittt-letztes Icon in der Toolbar). Damit kann man genau festlegen, welchen Bereich mal "Neuberechnen" will.
    Das Glopus Icon schaltet die POI/Routendarstellung ein uns aus.


    frank334:
    Angenommen Du hast eine Papierkarte mit Koordinatengitter mit der Projektion "istmiregal" und willst die genaue Position an einer Kreuzung bei Pixelpunkt x,y in long,lat. Was machst Du? Über lineare Berechnung ausgehend von dem Koordinatengitter die Koordinaten im Kartensystem "istmiregal" bestimmen und dann in Long, Lat umrechnen. Genau das macht Glopus und genauer geht es auch nicht.
    Natürlich setzt das ganze vorraus, dass die Karte entsprechend der Projetion linear abgedruckt ist. Das kann ein Problem sein, wenn z.B. eine Wanderkarte mit einem Weitwinkel abfotorgafiert wird.
    Probiere es einfach mal für eine 2 Punkt Kalibrierung aus! Im GMM habe ich bei den überarbeiteten Kapture Dialogen damit einen "Projektions-Test" bzw. Scan realisiert. Das entsprechende Programm gibt mir die Koordinaten von 2 Eckpunkten und dem Mittelpunkt. GMM berechnet für alle eingebauten Projektionen auf diese Weise selber den Mittelpunkt und vergleicht mit den zurückgegebenen Werten. Bei kleinem Maßstab und Glopus typischer Kartengröße ist die Projektion sogar egal (alle Projektionen wollen mehr oder weniger die Welt linear wiedergeben). In Deutschland sind die Abweichung dagegen enorm, mit der richtigen Projetion dagegen in der Regen immer noch 0,0.
    Den ganzen Berechnungsalgo von Glopus kann ich hier wohl nicht wiedergeben, aber definitiv rechnet Glopus bei den unterstützen Projetionen nicht auf Näherung sondern exakt, also Pixelgenau. Hat schließlich auch eine Weile gedauert das zu implementieren.
    Mangelwahre ist dagegen die fehlende Unterstützung im gmf und wie ich schon geschrieben habe, weiß ich noch nicht, ob das kal Format so bleiben soll. Theoretisch gibt es x verschiedene Projektionen die teilweise noch über verschiedene Parameter angepasst werden können. Das kal kennt nur die Wichtigsten und "nimmt" bei bestimmten Parametern wie den Gauss-Krüger-Streifen einfach den default Wert für den Kartenmittelpunkt.

  • Zitat

    Original von Spürnase
    Ach ja, und noch eine Frage: In Glopus ist rechts neben dem Button für die Längenmessung und links vom Button für die Kartenausrichtung ein Icon, dem ich keinerlei Funktion zuweisen kann (so etwa Campingplatzsymbol mit Palme). Was ist das für eine Funktion?


    Damit kannst du die POI's und Routen ein und Ausblenden!
    Übrigens bei der Längenmessung ändert sich das in POI bewirkt aber das selbe!



    Gruß
    Silver


    PS: Mist ! Jetzt hab ich schon extra lang gewartet und war doch nur nee Minute langsammer wie der Meister !" ;D ;D ;D

    Regioausflug.de Wandertourenplaner für Odenwald, Rhön, Mittelrhein und Taunus!!!!


    Ein Stau ist nur hinten blöd - vorne gehts !!!!

    Einmal editiert, zuletzt von Silver34 ()

  • Zitat

    Original von Silver34
    Übrigens bei der Längenmessung ändert sich das in POI bewirkt aber das selbe!


    Das ist noch ein Bug. Ich wollte das überall auf POI ändern, weil mein Icon eh keiner versteht. :-D)

    Zitat

    Original von Silver34
    PS: Mist ! Jetzt hab ich schon extra lang gewartet und war doch nur nee Minute langsammer wie der Meister !" ;D ;D ;D

    :PDabei habe ich ewig an der Erklärung formuliert... :D

  • Zitat

    Original von Peter Kirst
    Angenommen Du hast eine Papierkarte mit Koordinatengitter mit der Projektion "istmiregal" und willst die genaue Position an einer Kreuzung bei Pixelpunkt x,y in long,lat. Was machst Du? Über lineare Berechnung ausgehend von dem Koordinatengitter die Koordinaten im Kartensystem "istmiregal" bestimmen und dann in Long, Lat umrechnen. Genau das macht Glopus und genauer geht es auch nicht.
    Natürlich setzt das ganze vorraus, dass die Karte entsprechend der Projetion linear abgedruckt ist. Das kann ein Problem sein, wenn z.B. eine Wanderkarte mit einem Weitwinkel abfotorgafiert wird.
    Probiere es einfach mal für eine 2 Punkt Kalibrierung aus! Im GMM habe ich



    Ok, schiefes Foto mal ausgenommen, dann stimmen die Projektion und die Projektionsformeln sowieso nicht mehr. Aber nehmen wir als Beispiel mal die Mercatorprojektion, Formeln siehe:
    http://de.wikipedia.org/wiki/Mercator-Projektion


    Die ist ziemlich nichtlinear und zudem noch von einem weiteren Parameter lamda0 abhängig.


    Jetzt geht es um die Abbildung eine Bildpunktes P(x,y) auf einen geografischen Ort G(long,lat) der Karte. Die Abbildung
    P(x,y) <-> G(long,lat)


    Bei geodetic ist es nur eine Verschiebung und Streckung in 2D, wird also durch 2*2=4 Werte vollständig beschrieben. Ein linearer Zusammenhang mit Offset. Daher reichen auch 2 Kalibrierpunkte (entspricht 4 Bestimmungsgleichungen). Bei Mercator kommt noch lambda0 dazu, also reichen 2 Kalibrierpunkte nicht mehr. Der Test den du vorschlägst kann daher nicht eine korrekte Projektionsunterstützung zeigen. Auch müssen wir klar zwischen Datum und Projektion unterscheiden. Datum ist ja 'nur' eine gewisse 'Zählweise' für die G-Koordinate. Problematisch für die Bildverarbeitung sind die verschiedenen Projektionen.


    Anwendung:
    - Bei der GMM-Kartenteilung kann man z.B. die Grafik in gleichgroße Kacheln aufteilen, also linear im P(x,y)-Koordinatensystem. Im G(long,lat)-System ist das dann nicht mehr linear, d.h. der Teilungspunkt nicht mittig. Der neue Teilungspunkt kann durch Rücktransformation P->G aber exakt bestimmt werden. Machst du das so?
    - In Glopus ist die Sache schwieriger, wenn Kacheln mit verschiedenen Projektionen nebeneinander gesetzt werden. Das kann irgendwo nicht gutgehen. Es gibt eigentlich nur 2 Möglichkeiten:
    1. man reprojeziert man die Kacheln Pixel für Pixel. Viel Rechenaufwand, aber exakt
    2. die Kacheln werden nur wie früher skaliert dargestellt, also rechteckig. Aber: beim Einzeichnen von Tracks oder der Darstellung des Positionsmarkers wird die korrekte G->P Transformation benutzt. Nachteil: Track kann an Kachelgrenzen kleine Sprünge machen.


    Ich vermute 1. würde den PDA überfordern, also wäre nur die 2. Lösung praktikabel. Oder aber, es gibt keine Projektionsunterstützung. Wie machst du es denn nun?


    Bei kleinen Top50/25-Kacheln fallen die Unterschiede gar nicht auf. Von daher bin ich bisher auch ganz gut mit der geodetic-Näherung zurechtgekommen. Allerdings, die Mercator-Deutschlandkarte war damit prinzipbedingt überhaupt nicht benutzbar. Ich hab's dann mit manueller Reprojektion in geodetic probiert (mit gdalwarp). Dann war es korrekt, aber die Karte hässlich verzerrt. Gut, in Deutschland geht es mit der Generalkarte noch ganz gut. Nur im Ausland mit dünner Kartenbasis hätte man u.U. schon enorme Probleme, und müsste auf Alternativprogramme wie Ozi ausweichen.


    Zitat


    Den ganzen Berechnungsalgo von Glopus kann ich hier wohl nicht wiedergeben, aber definitiv rechnet Glopus bei den unterstützen Projetionen nicht auf Näherung sondern exakt, also Pixelgenau. Hat schließlich auch eine Weile gedauert das zu implementieren.


    Also die G(long,lat) -> P(x,y) Transformation nimmt jeweils die richtige Projektionsformel? Also nicht nur das richtige Datum, sondern auch die entsprechend parametrisierte Projektion? Dann sollte es an den Kachelübergängen (bei 'großen Kartenkacheln') Sprünge im Track geben, was zwar unschön ist, aber lieber so als ein Track der neben der Straße liegt.


    Zitat


    verschiedene Parameter angepasst werden können. Das kal kennt nur die Wichtigsten und "nimmt" bei bestimmten Parametern wie den Gauss-Krüger-Streifen einfach den default Wert für den Kartenmittelpunkt.


    Was ist "default"? Wäre schade, wenn das nur in Deutschland funktioniert und bei ausländischen Karten nicht. In KAL-Dateien kann doch problemlos der Zentralmeridiansparameter untergebracht werden.


    Wie gesagt, wenn du die verschiedenen KAL-Parameter dokumentierst und die Projektionen unterstützt, könnte man über einen OZI2KAL-Konverter nachdenken, der diese Werte mit überträgt. Bei vielen großräumigen Karten würde das einen enormen Gewinn an Genauigkeit bringen.