User:Ajoessen/eigene Tiles

From OpenStreetMap Wiki
Jump to: navigation, search

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>