Es gibt keinen Service oder ein sofort verfügbares Tool, an das ich denken kann. Aber wenn Sie sich in der Kommandozeile wohlfühlen und ein wenig basteln möchten, gibt es folgende Möglichkeiten
Der folgende Befehl sollte funktionieren, sobald Sie nik2img installiert haben . Aus Ihrem TileMill-Export wird eine PNG- und passende Weltdatei erstellt:
nik2img.py <TileMill export name>.xml <desired file name>.png -d <pixel width> <pixel height> --srs <desired projection, probably 900913> --bbox <bounding box parameters> -v -w pgw
Verwenden Sie gdal_translate , um es in ein GeoTIFF zu konvertieren.
Der folgende Befehl sollte funktionieren:
gdal_translate -of GTiff -a_srs <desired projection, probably EPSG:3857, as above> <desired file name>.png <desired file name>.tiff
Hat das jemand gemacht? Ich habe es bis zur Erstellung der PNG + -Weltdatei geschafft, kann aber nicht herausfinden, wie gdal_translate die Weltdatei verwendet. Es sieht so aus, als ob nik2img ab Version 0.6 GeoTIFF direkt produzieren soll, aber dies scheint in meinen Tests nicht der Fall zu sein.
Z O.
2
Ich kenne auch kein Werkzeug. Wenn Sie mit der Befehlszeile nicht vertraut sind, lade ich die Daten von OSM herunter, lade sie in ein Desktop-GIS und exportiere ein GeoTiff ODER verwende QGIS mit diesem Plugin und erstelle dann ein leeres Geotif für den Bereich, an dem Sie interessiert sind Überprüfen Sie, ob Sie die Daten in der leeren Datei zusammenführen können. Ich habe das in QGIS noch nicht ausprobiert, aber mit etwas Arbeit sollte es möglich sein. Bevor Sie dies tun, sollten Sie die Lizenzbedingungen für OSM überprüfen.
Wenn Sie die aktuelle QGIS-Ansicht als PNG-Bild speichern, erhalten Sie auch eine Weltdatei, dh ein GeoTIFF ist nur eine schnelle Konvertierung von gdal_translate entfernt ....
Spacedman
0
Ich gehe davon aus, dass Sie Ihr grundlegendes Stylesheet und das relevante Hillshading bereits eingerichtet haben - ansonsten finden Sie auf der Github-Seite Ihr Stylesheet (z. B. https://github.com/hotosm/HDM-CartoCSS ).
#!/usr/bin/python
from datetime import datetime
from subprocess import call
import ConfigParser
import math
import dateutil.tz
roughLatRadius = 110574
roughLonRadius = 111111
description = 'Generated from OSM data - unknown date'
copyright = '(C) OpenStreetMap contributors, see http://www.openstreetmap.org/copyright'
def getDimensions(lon, lat, geosize, scale):
latDims = geosize * roughLatRadius / scale
lonDims = geosize * math.cos(math.radians(lat)) * roughLonRadius / scale
return str(int(math.ceil(lonDims))) + " " + str(int(math.ceil(latDims)))
def renderOneImage(lon, lat, geosize, scale):
dims = getDimensions(lon, lat, geosize, scale)
extent = str(lon) + " " + str(lat) + " " + str(lon + geosize) + " " + str(lat + geosize)
output_file = "osm_hot_" + extent.replace(" ", "_") + "_" + str(scale) + "m" + ".tif"
temp_file = "temp.png"
now = datetime.utcnow().replace(tzinfo=dateutil.tz.gettz('UTC')).isoformat()
print "Generating", output_file
call("nik2img.py --format=RGB24 --world-file=pgw --mapnik-version=1 --dimensions " + dims + " --srs=4326 --no-open --bbox " + extent + " osm_hot_style.xml " + temp_file, shell=True)
call('gdal_translate -a_srs EPSG:4326 -q -mo "TIFFTAG_ARTIST=WhoEver" -mo "TIFFTAG_IMAGEDESCRIPTION=' + description + '" -mo "TIFFTAG_COPYRIGHT=' + copyright + '" -mo "TIFFTAG_DOCUMENTNAME=OSM Humanitarian Style map - ' + str(scale) + 'm per pixel" -mo "TIFFTAG_DATETIME=' + now + '" ' + temp_file + " " + output_file, shell=True)
def makerange(start, end, step):
while start < end:
yield start
start += step
def renderImages(min_x, min_y, max_x, max_y, stepsize, scale):
for lon in makerange(min_x, max_x, stepsize):
for lat in makerange(min_y, max_y, stepsize):
renderOneImage(lon, lat, stepsize, scale)
if __name__ == '__main__':
config = ConfigParser.ConfigParser()
config.read('osm.cfg')
description = 'Generated from OSM data as of ' + config.get('Metadata', 'ExtractDate', 0)
copyright = config.get('Metadata', 'CopyrightStatement', 0)
for scale in ['100', '50', '20', '10', '5', '2', '1', '0.5']:
for entry in config.items(scale):
(entry_name, entry_value) = entry
(min_x, min_y, max_x, max_y, stepsize) = entry_value.split(',')
renderImages(float(min_x), float(min_y), float(max_x), float(max_y), float(stepsize), float(scale))
Die Konfigurationsdatei ( osm.cfg) sieht folgendermaßen aus:
[Metadata]
ExtractDate: 2015-03-05T21:21:02Z
CopyrightStatement: (C) OpenStreetMap contributors, see http://www.openstreetmap.org/copyright
[100]
# around 2 degree steps are good at 100 metres
phillipines: 118, 4, 127, 20, 2
[50]
# around 1-2 degree steps are good at 50 metres
phillipines: 118, 4, 127, 20, 1
[20]
# around 0.5 to 1 degree steps are good at 20 metres
samar: 124, 11, 126, 13, 0.5
northwest: 120, 12.4, 124.5, 14.5, 0.5
northofmanila: 120, 14.5, 122.4, 19.6, 0.5
[10]
# roughly 0.4 degree steps are sane at 10 metres
[5]
# around 0.2 degree steps are good at 5 metres
[2]
# around 0.1 degree steps are good at 2 metres
guiuan: 125.5, 10.9, 125.8, 11.1, 0.1
tacloban: 124.8, 11.1, 125.1, 11.4, 0.1
legazpi: 123.5, 13.1, 123.8, 14.5, 0.1
manila: 120.8, 14.2, 121.2, 14.7, 0.1
subicbay: 120.1, 14.7, 120.4, 15.0, 0.1
[1]
# around 0.05 degree steps are good at 1 metre
[0.5]
# around 0.02 degree steps are good at 0.5 metres
tacloban: 124.8, 11.1, 125.1, 11.4, 0.02
Ich kenne auch kein Werkzeug. Wenn Sie mit der Befehlszeile nicht vertraut sind, lade ich die Daten von OSM herunter, lade sie in ein Desktop-GIS und exportiere ein GeoTiff ODER verwende QGIS mit diesem Plugin und erstelle dann ein leeres Geotif für den Bereich, an dem Sie interessiert sind Überprüfen Sie, ob Sie die Daten in der leeren Datei zusammenführen können. Ich habe das in QGIS noch nicht ausprobiert, aber mit etwas Arbeit sollte es möglich sein. Bevor Sie dies tun, sollten Sie die Lizenzbedingungen für OSM überprüfen.
quelle
Ich gehe davon aus, dass Sie Ihr grundlegendes Stylesheet und das relevante Hillshading bereits eingerichtet haben - ansonsten finden Sie auf der Github-Seite Ihr Stylesheet (z. B. https://github.com/hotosm/HDM-CartoCSS ).
Die Konfigurationsdatei (
osm.cfg
) sieht folgendermaßen aus:quelle