Karten über WMS erzeugen?

  • Hallo,


    hat jemand Erfahrung bzw. einen Tipp wie man Karten für Glopus über Web Map Service (WMS) erzeugt. Über diesen Webservice stellen u.a. die Vermessungsämter kalibrierte Karten zur Verfügung.


    Beispiel:
    [URL=http://gdz1.leipzig.ifag.de/servlet/com.esri.wms.Esrimap?servicename=dtk200_500_1000_a10_gk4_wms&service=WMS&version=1.1.0&request=Getmap&SRS=EPSG:31468&bbox=4450000,5310000,4460000,5320000&width=1000&Height=1000&layers=DTK500-V&FORMAT=image/png]http://gdz1.leipzig.ifag.de/se…DTK500-V&FORMAT=image/png[/URL]


    cache7

  • Hallo,


    ich kenne bisher kein fertiges Tool, mit dem das einfach zu bewerkstelligen ist. Für meinen Eigengebrauch habe ich mir eine kleine Tool-Sammlung aus Windows-Batch-Dateien, Perl-Skripten und Java-Programmen gebastelt, mit der man im Endeffekt automatisch Kacheln von WMS-Servern herunterladen und Glopus-Kal-Dateien erzeugen kann.


    Leider ist das Ganze eine ziemliche Bastellösung, die eine größere Menge zu installierender Tools und Anpassungen im Quellcode für jeden WMS-Service voraussetzt. Wenn aber hier sonst keine Lösung gefunden wird und größeres Interesse besteht, könnte ich mich nochmal dransetzen und das weiterentwickeln, so dass es auch für andere brauchbar wird. Was man allerdings beachten muss, ist, dass lange nicht jeder WMS-Service von den Nutzungsbedingungen her das Herunterladen größerer Gebiete erlaubt.


    Gruß,
    René

  • Im CacheWolf (Forum von Geoclub.de Unterforum CacheWolf) wurde unlängst so etwas eingebaut, was sehr komfortabel und universell arbeitet.
    Eventuell wäre es eine Idee, mit dem CacheWolf die Karten mit Kalibrierungsdatei herunterzuladen und die Kalibrierung nit einem noch zu erstellenden Tool in die Glopus-Kalibrierung zu ändern...

  • Hallo nochmal,


    das ist natürlich eine sehr elegante Lösung. CacheWolf kann sogar Glopus-Kal-Dateien einlesen - leider nicht schreiben. Der WMS-Download ist relativ komfortabel und scheint auch ganz gut zu funktionieren (Achtung: man muss die BE (Bleeding Edge) Version von CacheWolf herunterladen).


    Beim Download von WMS-Karten werden wfl-Dateien geschrieben. Leider habe ich dazu keine Dokumentation gefunden. Allerdings gab es hier schonmal einen Thread dazu, wie diese Dateien nach kal konvertiert werden können (Thread). Silver wollte sich das mal ansehen. Ich habe leider auf den ersten Blick nicht erkennen können, wie die Datei aufgebaut ist. Hier gibt es einen interessanten Thread aus dem GeoClub, in dem der umgekehrte Weg diskutiert wird, vielleicht kann man mit den Beispielen ja etwas anfangen oder dort mal nachfragen? Wäre doch was für die Geotools-Skriptsammlung von frank334.


    Gruß,
    René


  • Wenn in der WFL-Datei wirklich das:


    0.0
    0.000098515962
    -0.000062959756
    0.0
    50.308095752683
    13.380016672066
    50.245135996731
    13.47853263354


    drinsteht und der wfl-Name = Kartenname ist , die Pixel immer 256 ists ein leichtes daraus eine kal zu generieren!


    Aber da ich nur Excel schreib ists wohl besser es nimmt sich dies frank334 an oder noch besser Peter befähigt den GMM auch fremd Kalibrationen zu importieren.


    Gruß
    Silver

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


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

  • Hallo,


    ja, so sehen die wfl-Dateien aus. Inzwischen habe ich herausgefunden, dass die vier letzten Zeilen die Koordinaten der Punkte oben links und unten rechts enthalten. Leider sind mir die ersten vier Zeilen nicht ganz klar, diese sind wohl Parameter für eine affine Transformation. Ohne deren Bedeutung genau zu kennen und einen Algorithmus für die affine Transformation zu implementieren, lassen sich wohl die beiden anderen Ecken nicht berechnen. Und nur eine Zwei-Punkt-Kalibrierung reicht mir von der Genauigkeit her leider nicht aus.


    Gruß,
    René

  • Sind das nicht zufällig die gleichen affinen Parameter wie in den WorldFiles? Dazu habe ich in den geotools einen WorldFile -> Glopus KAL Konverter drin. Kann man sicher irgendwie umschreiben/verwursten, auch wenn noch eine Koordinate zusätzlich drin ist (WorldFile hat nur ein long/lat-Paar drin).

  • Hallo,


    keine Ahnung, was das genau für affine Parameter sind. Da müsste man vielleicht mal im GeoTools/CacheWolf-Forum nachfragen.


    Für mich bleibt mein selbstgeschriebenes kleines Java-Tool das Mittel der Wahl. Ich habe es noch ein wenig aufgearbeitet und vereinfacht, vielleicht ist es ja jetzt auch für andere benutzbar.


    Die Idee ist, die WMS-Beschreibungsdateien von CacheWolf (*.wms) zu benutzen. Im Forum von GeoTools gibt es auch einen Thread, wo diese Dateien gesammelt werden. Das Ergebnis kann man im Subversion von CacheWolf einsehen.


    Nun aber zu meinem Tool:


    Vorab: Ich stelle das jetzt hier einfach mal so ein, wie es jetzt nach ein paar Stunden Arbeit aussieht. Es ist weder besonders schön programmiert, noch hat es eine vernünftige Fehlerbehandlung. Auch eine grafische Benutzeroberfläche gibt es nicht. Wer es nutzen möchte, kann das tun. Ich gebe aber keine Garantieen darauf, dass das Programm tut was es soll und dass es nichts kaputt macht. Also: Verwendung auf eigene Gefahr. Soviel zum "Disclaimer'.


    Voraussetzungen:

    • Installierte Java Runtime Environment (JRE, wer keines hat, kann es kostenlos bei Sun herunterladen). Version sollte relativ egal sein (ich habe mit 1.4.2 getestet)
    • Entpackte PROJ.4 Bibliothek (kann kostenlos unter http://proj.maptools.org/ heruntergeladen werden)


    Installation:
    Einfach die ZIP-Datei in ein beliebiges Verzeichnis entpacken.
    Konfiguration in der WMS2Glopus.ini muss angepasst werden. Hier muss zumindest der Pfad zur cs2cs.exe aus PROJ.4 eingetragen werden. Wer einen Proxy verwenden will/muss kann ihn hier auch eintragen.


    Verwendung:
    Über die Eingabeaufforderung in das Verzeichnis wechseln, in das die ZIP-Datei entpackt wurde. Mit "java WMS2Glopus" bekommt na eine kurze Hilfe zur Verwendung.


    Syntax ist: java WMS2Glopus <wms-configuration> <minx> <miny> <scale> <size> <rows> <cols> [<coordinate-system>]


    Wichtig ist zunächst einmal, eine WMS-Konfigurationsdatei unter wms_configuration abzulegen (zwei Beispiele sind bereits dort (übernommen von CacheWolf), mehr gibts wiegesagt direkt bei CacheWolf oder man schreibt sie selbst). Deren Name (ohne .wms) ist zunächst der erste Parameter wms-configuration.


    Anschließend braucht man die Koordinaten der linken unteren Ecke als minx und miny des zu ladenden Gebietes im entsprechenden Koordinatensystem (am besten mit dem Deutschlandviewer ermitteln).
    Hinweis: GK-System, 6° ist EPSG:31466, 9° ist EPSG:31467 usw.


    Dann braucht man eine Skalierung scale. In der WMS-Konfiguration ist bereits ein RecommendedScale eingetragen. Wenn man den verwenden möchte kann man einfach 0 als scale übergeben.


    Der nächste Parameter size gibt die Kantenlänge einer Kachel in Pixeln an (bei den meisten Diensten ist bei 1000 Schluss, was für Glopus auch optimal ist).


    Dann gibt man noch an wie viele Zeilen (rows) und Spalten (cols) an Kacheln man laden will. Tipp: erstmal nur mit 2x2 ausprobieren, ob man alles richtig eingestellt hat.


    Zuletzt kann man noch ein Koordinatensystem auswählen, in dem die Koordinaten interpretiert werden, wenn in der WMS-Konfig mehrere eingetragen sind (z.B: 31466, 31467 usw.), das ist aber optional, wenn man nichts angibt wird das erste aus der WMS-Konfiguration verwendet.


    Zum Beispiel für den hier von cache7 genannten WMS-Service in der von ihm angegebenen Gegend:
    java WMS2Glopus de_topo_200 4450000 5310000 0 800 2 2


    So, wer mag, kann es ja mal ausprobieren. Feedback gerne hier übers Forum.


    Und zuletzt auch noch der Hinweis: bitte beachtet die Lizenzbedingungen des Karten-Anbieters. In der Regel bekommt man diese durch Aufruf der in der WMS-Konfiguration unter GetCapabilitiesUrl findet. Nicht alle Anbieter erlauben den Download größerer Gebiete.


    Viel Erfolg,
    René


    EDIT: Noch ein Beispiel eingefügt. Verzeichniswechsel eingefügt.
    EDIT2: Neue Version attacht, die den Fehler mit cs2cs.exe behebt (siehe nachfolgende Beiträge).
    EDIT3: Neue Version (v0.3) attacht, die auch mit ausländischen WMS-Servern zurecht kommt.

  • Hallo,


    ich habe heute mal mit dem WMS2Glopus tool rumgespielt.
    Der download der Karten hat auch prima funktioniert. Allerdings scheint Glopus nicht mit den Kalibierungsdateien zurecht zukommen,nachmde ich ein GMF-file erzeugt habe.


    Habe ich vielleicht etwas übersehen?


    Gruß
    Michael

  • Hallo Michael,


    bei mir funktionieren die Karten auch als GMF.


    Daraus, dass du sagst, sie funktionieren nicht, nachdem du ein GMF-file erzeugt hast, schließe ich, dass sie vorher funktioniert haben. Richtig?


    Was heißt jetzt genau, Glopus kommt mit der Kalibrierung nicht zurecht? Erscheinen die Karten völlig unkalibriert, falsch kalibriert oder meldet Glopus einen Fehler oder stürzt ab?


    Kannst du vielleicht mal die KAL-Dateien, die WMS2Glopus erzeugt hat, in eine ZIP-Datei packen und hier hochladen?


    Zuletzt noch, damit ich das nachtesten kann: wie hast du das GMF-File erzeugt und welche Glopus-Version verwendest du?


    Danke,
    René

  • Hallo René,


    um genau zu sein erkennt Glopus auch schon vorher die Kalibrierung nicht, d.h. die Karten erscheinen unkalibriert. Ich habe das ganze einfach nach deinem angegebenen Beispiel gemacht, allerdings für NRW


    Allerdings konnte ich trotzdem mit dem GMM 1.0.0.20 ein GMF erzeugen. Ich habe dazu einfach alle Dateien ausgwählt und mit "Neues GMF erzeugen" die Datei erstellt, was auch funktioniert hat, allerdings ohne Kalibration.


    Ich habe mal ein Zip mit 4 Karten und den entsprechenden Kal-Files hochgeladen. Vielleicht kannst du mir weiter helfen, weil dein tool ist echt genial!


    Vielen Dank,
    Michael

  • Hallo,


    Peter hat recht. Die Koordinaten wurden nicht umgerechnet und sind noch die original Gauß-Krüger-Werte, die aus dem WMS kommen.


    Das Tool verwendet die cs2cs.exe aus der PROJ.4-Bibliothek, um die Koordinaten umzurechnen. Vermutlich ist hier beim Aufruf etwas schief gegangen.


    Hast du die PROJ.4-Bibliothek von hier heruntergeladen (du brauchst die proj446_win32_bin.zip) und entpackt? Kannst du bitte überprüfen, ob in der WMS2Glopus.ini der richtige Pfad zur cs2cs.exe eingetragen ist (liegt in dem entpackten Verzeichnis unter proj\bin)? Wichtig ist, dass dort der Backslash \ durch zwei Backslashs \\ ersetzt wird (wie im Beispiel in der WMS2Glopus.ini). Am besten entpackst du direkt nach C:\Programme, dann kannst du die Original-Ini-Datei aus meinem ZIP verwenden.


    Falls du hier nicht schon selbst einen Fehler findest, ändere bitte in der WMS2Glopus.ini den Parameter "debug" von "debug=false" auf "debug=true" und starte WMS2Glopus. Die Ausgabe (in der Eingabeaufforderung mit der Maus markieren und Enter drücken, dann ist sie in der Zwischenablage) kopierst du dann bitte mal hier ins Forum oder schickst sie mir per PN, dann kann ich das analysieren. Am besten auch die WMS2Glopus.ini beifügen.


    Danke und viel Erfolg,
    René

  • Schon mal viele Dank für die Hilfe.


    Ich hatte tatsächlich einen slash in meiner Pfadangabe vergessen. Das hab ich jetzt geändert, aber jetzt passiert gar nichts mehr. Das selbe passiert, nachdem ich alles in den Standardpfaden installiert habe.


    Deshalb hier mal die Meldung, die im Debug-Mode ausgespuckt wird:


    D:\wms2glopus>java WMS2Glopus de_topo_200 4450000 5310000 0 800 2 2
    Loading row 0 column 0 ... DEBUG: scale = 20.0
    DEBUG: meter per tile = 16000
    DEBUG: overlap = 800
    DEBUG: cs2csInput: 4450000.0 5326000.0
    DEBUG: cs2csOutput: Using from definition: init=epsg:31468 datum=potsdam
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at WMS2Glopus.convertPointsFromXYtoLatLong(WMS2Glopus.java:246)
    at WMS2Glopus.loadTileWMS(WMS2Glopus.java:173)
    at WMS2Glopus.main(WMS2Glopus.java:135)


    D:\wms2glopus>


    Ach Mensch, keine Ahnung, was jetzt schon wieder falsch läuft...

  • Hallo,


    tja, das war wohl mein Fehler, sorry. Man muss, um cs2cs verwenden zu können noch eine Umgebungsvariable setzen. Bitte probier mal die an diesem Posting attachte neue Version aus, die setzt das automatisch. Außerdem habe ich das Fehlerhandling an dieser Stelle verbessert.


    Viel Erfolg!
    René