Karten-Spielerei

  • Hallo!


    Ich habe da mal ein kleines Problem:
    Ich programmiere zur Zeit gelegentlich an einem C#-Tool herum, das es einem ermöglichen soll, digitale Satellitenfotos zu kalibrieren und anschließend anzuzeigen, zu kombinieren oder z.B. mit GPS Tracks zu überlagern oder daraus durch markieren bestimmter Punkte Tracks zu erzeugen und ähnliche Spielereien.
    Die Kalibrierung läuft dabei so: Mein Programm bietet die Möglichkeit die Bilder zu laden und einzelne Punkte auszuwählen und somit Paare aus Pixel-Koordinaten und Geo-Koordinaten anzugeben (je mehr desto besser). Mit Hilfe dieser Paare ermittle ich eine Transformation zwischen Bild- und Geo-Koordinaten. Als Transformation verwende ich dabei zweidimensionale Polynome 1. Grades.
    Die habe ich auch mal mit Bildern aus GoogleEarth (die natürlich ihrerseits schon irgendwie vorverarbeitet sind) getestet und das funktioniert ganz gut (ich habe mir mal erlaubt, einen Screenshot anzuhängen).
    Nun wäre es natürlich schon, wenn man auch gescannte Landkarten damit kalibrieren könnte, wobei die momentane Transformation da wohl nicht mehr funktionieren dürfte. Mir schwebt dabei vor, für verschiedene Kartenprojektionen jeweils eine Transformation vorzuhalten, die folgendes Interface implementiert, womit sie direkt in die bestehende Software eingebunden werden könnte:


    public interface Transform
    {
    PPoint FromGeoToImage(PPoint p);
    PPoint FromImageToGeo(PPoint p);
    }


    Die Transformation wird also aus Punkt-Korrespondenzen "Pixel-Koordinaten <-> vom User einzugebende Daten" erstellt und liefert dann jeweils die Umrechnung Geo- in Pixel-Koordinaten und umgekehrt.
    Nun endlich meine Frage: Gibt es da irgendwelche Open-Source Software, auf die ich zurückgreifen könnte, um dieses Problem zu lösen? Ich habe definitiv zu wenig Ahnung von der ganzen Theorie, um das selber machen zu können und auch nicht wirklich Lust, mir das anzueignen, schließlich ist das Ganze nur eine Spielerei.


    Grüße,
    Blombo

  • Hallo Blombo,


    wenn du ein Opensourceprojekt mit Koordinatenberechnungen suchst kann ich nur Proj.4 empfehlen. Darin sind alle üblichen Projektionen enthalten der Link müsste http://proj.maptools.org sein. Der Code ist in C++ es gibt aber auch eine Portierung in Java.

    Einmal editiert, zuletzt von geometer ()

  • Ich denke für deine Vorstellung, Karten kalibrieren und mit Vektorobjekten/Tracks überlagern gibt es die GDAL-Bibliothek.


    http://www.gdal.org/


    Man kann die GDAL-Tools auch gut in Shellskripts nutzen, z.B. mache ich das hier:
    http://forum.pocketnavigation.de/tid1053510-sid.htm


    Beispiel: NASA-Sat-Weltkarte mit 100 MB, einmal die Gesamtkarte kalibrieren und dann habe ich die in handliche Kacheln zerstückelt und automatisch kalibrieren lassen. Mit Shapefiles könnte man sogar noch Städtenamen, Grenzen oder Tracks überlagern.


    Allerdings ist das alles C und kein C#


    p.s.: NASA WorldWind greift mit dem WMS-Protokoll auf Karten zu:
    http://worldwind.arc.nasa.gov/
    da werden gleich die richtigen Kalibrierwerte mitgeliefert.
    Ich denke, dass könnte man auch in eigenen Programmen nutzen.
    Die Satellitendaten der NASA sind Public Domain.

    Einmal editiert, zuletzt von frank334 ()

  • Danke für die vielen Tipps. Diese Bibliotheken/Programme sehen alle recht vielversprechend aus. Ich denke ich werde sie mir in den nächsten Tagen mal genauer ansehen und feststellen, was sich am besten für mein Projekt eignet.
    Sobald ich ein einigermaßen "reifes" Programm vorzuweisen habe, werde ich das hier mal zur Verfügung stellen.


    Gruß,
    Blombo