User:Ajoessen/eigene Tiles
Vorbemerkungen
Nachfolgend wird dokumentiert, wie man OSM-kompatible Tiles aus anderen Quellen erzeugen und verwenden kann. Als Vorlage dienen die Blue Marble Bilder der Welt land_shallow_topo von der Nasa von http://visibleearth.nasa.gov/view.php?id=57752. Diese liegen in folgenden Auflösungen vor:
2048x1024
8192x4096
21600x10800
21600x21600 West+Ost
Die Bilder sind auf das Gradnetz projeziert, decken also -180°West/180°Ost und -90°Süd/90°Nord ab. Es sind allerdings keine Georeferenzierungsdaten in den Bildern enthalten.
Das Format 8192x4096 ist in den Beispieldaten zu uDig bereits georeferenziert als bluemarble.tif enthalten.
Die optimale Zoomstufe lässt sich berechnen aus log(minpix/256)/log(2)
Georeferenzieren der Vorlage
Zur Georeferenzierung wird das Programm QGis verwendet.
Einstellungen/Projekteinstellungen
Koordinatensystem(KBS)
Suchen: 4326 Finden
OK
Erweiterungen/Georeferenzierung/Georeferenzierung
Datei/Raster öffnen und Vorlage wählen (hier 21600x10800)
Bearbeiten/Punkte hinzufügen
linke obere Ecke wählen (grob angepeilt reicht)
X: -180 Y: 90
OK
rechte obere Ecke wählen
X: 180 Y: 90
OK
linke untere Ecke Wählen
X: 180 Y: -90
rechte untere Ecke wählen
X: -180 Y: -90
anschließend in der GCP-Tabelle abändern durch doppelklicken auf die Zahlen:
srcX srcY 0 0 21600 0 21600 10800 0 10800
Einstellungen/Transformationseinstellungen
Ausgaberaster: Auf Ordnersymbol klicken, Pfad wählen und Name festlegen, z.B. Bluemarble-21600
Ziel-KBS: EPSG:4326
[x] Wenn fertig In QGIS laden
OK
Datei/Georeferenzierung beginnen
Datei/Beenden/Discard
Zur Kontrolle werden die Küsten-Shapefiles herangezogen, die bei der Generierung der Mapnik-Karten verwendet werden:
Layer/Vektorlayer hinzufügen
Quelle/Durchsuchen
D:\osm\mapnik\world_boundaries\word_boundaries_m.shp
Open
Innerhalb von 85°Nord/Süd sollten beide Darstellungen deckungsgleich sein.
Analog kann mit den größeren Dateien West und Ost verfahren werden. Hier liegen die X-Grenzen bei -180°/0° bzw 0°/180°; und 0/21600 für srcY.
gdal installieren und modifizieren
Zum Erzeugen der Tiles wird das gdal-Modul gdal2tiles verwendet. Zur Installation wird OSGeo4W verwendet. Von der Projektseite den Installer herunterladen und starten.
Fortgeschrittene Installation
(*) Aus dem Internet installieren
Wurzelverzeichnis: C:\OSGeo4W
Lokales Paketverzeichnis: D:Download\GIS\osgeo4w
(*) Direkte Verbindung
Ansicht: Voll
Pakete: gdal, gdal-python
Weiter
Fertig stellen
gdal2tiles nummeriert die tiles entsprechend der TMS-Spezifikation von unten nach oben. Google und OSM zählen andersherum; deswegen muß der Python-Code angepasst werden.
Wechseln in Verzeichnis C:\OSGeo4W\bin
Sicherungskopie von gdal2tiles.py anlegen
Editieren mit notepad++:
Zeile 475: # self.generate_metadata()
Zeile 882: self.error ... ESPG:xyz -> EPSG:xyz
Zeile 1186:
Einfügen: ty1=(2**tz - 1) - ty
tilefilename = os.path.join ... ty -> ty1
Zeile 1330:
Einfügen: ty2=(2**tz - 1) - ty
tilefilename = os.path.join ... ty -> ty2
Zeile 1363:
Einfügen: y2=(2**(tz+1) - 1) - y
tilefilename = os.path.join ... y -> y2
Tiles erzeugen
Arbeitsverzeichnis anlegen, z.B. D:\Karten\osgeo4w\gdal2tiles
Um die Umgebungsvariablen für OSGeo4W unabhängig von der Mapnik-Installation zu halten, werden die Variablen in der aufrufenden batch definiert:
bluemarble.bat:
@echo off set OSGEO4W_ROOT=C:\OSGeo4W PATH=%OSGEO4W_ROOT%\bin;%PATH% for %%f in (%OSGEO4W_ROOT%\etc\ini\*.bat) do call %%f gdal2tiles --s_srs EPSG:4326 --zoom 0-5 D:\Karten\Geotiff\BlueMarble\bluemarble.tif D:\Tiles\test pause
Diese Datei liest die Geotiff-Datei bluemarble.tif, und erzeugt tiles der Zoomstufen 0 bis 5 im Tile-Verzeichnis test.
Verwendung der Tiles
Um auf die Tiles zugreifen zu können, wird ein lokaler Apache-Server installiert. Dieser ist im Paket MS4W enthalten. Da die Tiles nicht in einem Unterverzeichnis von ms4w liegen, wird das Startverzeichnis von ms4w entsprechend angepasst.
Verzeichnis D:\ms4w\Apache\conf
Datei httpd.conf
Zeile 180:
DocumentRoot "D:\Tiles"
Zeile 207:
<Directory "D:\Tiles">
Zur Kontrolle im Firefox "localhost" eingeben. Es sollte der Inhalt des Tiles-Verzeichnisses aufgelistet werden.
JOSM
Bearbeiten/Einstellungen
WMS/TMS
plus-Schaltfläche
Menüname festlegen
Reiter TMS
TMS URL: http://127.0.0.1/myMapnik/{zoom}/{x}/{y}.png
(Grafikformat beachten!)
Zoom: maximal vorhandene Zoomstufe +1
OK
Die Tiles stehen dann beim Herunterladen und als Hintergrundbild zur Verfügung
Openlayers
siehe Osmviewer und GPXviewer
Qlandkarte
Karte/Karte
Reiter Stream
Rechtsklick auf OpenStreetMap -> TMS Karte hinzufügen
Name: Topo URL: http://localhost/Topo/%1/%2/%3.png
Transparente Layer sind hier nicht zu anderen Layern zuschaltbar
Quantum GIS
Hier wird das plugin Openlayers von Sourcepole benötigt.
Unter Windows 7: Verzeichnis C:/Benutzer/<Benutzername>/.qgis/python/plugins/openlayers
Datei openlayers_plugin.py
nach Zeile 116 (id+= 1) einfügen:
self.olLayerTypeRegistry.add( OlLayerType(self, id, 'myMapnik', 'osm_icon.png', 'myMapnik.html', True) ) id += 1 self.olLayerTypeRegistry.add( OlLayerType(self, id, 'Topo', 'osm_icon.png', 'Topo.html', True) ) id += 1
Unterverzeichnis html:
Datei osm.html duplizieren auf myMapnik.html und editieren mit notepad++
Zeile 32+33:
"myMapnik" "file:///D:/Tiles/myMapnik/${z}/${x}/${y}.png",
Zeile 43:
map.setCenter(new OpenLayers.LonLat(7, 51), 8);
Datei duplizieren auf Topo.html
Zeile 31-33:
var Topo = new OpenLayers.Layer.OSM( "Topo", "file:///D:/Tiles/Topo/${z}/${x}/${y}.png",
Zeile 41:
map.addLayer(Topo);
Für diese Konfiguration wird der Apache-Server nicht benötigt.
Nach dem Laden eines Qgis-Projektes mit Openlayers-Layer sind die Tiles zumeist ein wenig versetzt. Nach einmaligem Verschieben des Kartenbildes passt es aber wieder.
Taho.exe
Mit diesem Programm von Dimitri Junker lassen sich Tiles zu größeren Rasterbildern zusammensetzen. Ein Worldfile für EPSG:3395 kann auch erstellt werden. Für diese Konfiguration wird der Apache-Server nicht benötigt.
Datei defsrc.taho im Programmverzeichnis:
<?xml version="1.0" encoding="ISO-8859-1"?> <taho version="1.0" creator="Taho.exe - http://www.dimitri-junker.de/html/openstreetmap.html"> <mapallsrc> <src> <name>MyMapnik</name> <prefix>MyM</prefix> <url>file:///D:/Tiles/myMapnik</url> <type>0</type> <maxzoom>15</maxzoom> </src> <src> <name>Topo</name> <prefix>Topo</prefix> <url>file:///D:/Tiles/Topo</url> <type>0</type> <maxzoom>16</maxzoom> </src> <src> <name>Bahn</name> <prefix>Bahn</prefix> <url>file:///D:/Tiles/Bahn</url> <type>1</type> <maxzoom>15</maxzoom> </src> <src> <name>Rad</name> <prefix>Rad</prefix> <url>file:///D:/Tiles/Bahn</url> <type>1</type> <maxzoom>15</maxzoom> </src> <src> <name>Wander</name> <prefix>Wander</prefix> <url>file:///D:/Tiles/Bahn</url> <type>1</type> <maxzoom>15</maxzoom> </src> ... </mapallsrc> </taho>
Viking
Unter Windows 7: Verzeichnis C:/Benutzer/<benutzername>/.viking
Datei maps.xml
Wichtig ist, dass jeder layer seine eigenen Namen und id bekommt.
<objects> <object class="VikSlippyMapSource"> <property name="label">myMapnik</property> <property name="hostname">localhost</property> <property name="url">/myMapnik/%d/%d/%d.png</property> <property name="id">101</property> </object> <object class="VikSlippyMapSource"> <property name="label">bahn</property> <property name="hostname">localhost</property> <property name="url">/bahn/%d/%d/%d.png</property> <property name="id">102</property> </object> <object class="VikSlippyMapSource"> <property name="label">rad</property> <property name="hostname">localhost</property> <property name="url">/rad/%d/%d/%d.png</property> <property name="id">103</property> </object> <object class="VikSlippyMapSource"> <property name="label">Topo</property> <property name="hostname">localhost</property> <property name="url">/Topo/%d/%d/%d.png</property> <property name="id">104</property> </object> </objects>