Il n'y a aucun service ou outil facilement disponible auquel je peux penser. Mais si vous êtes à l'aise sur la ligne de commande et prêt à passer du temps à bricoler, voici un moyen qui peut fonctionner
La commande suivante devrait fonctionner une fois que vous avez installé nik2img ; il produira un fichier PNG et un monde correspondant à partir de votre exportation TileMill:
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
Quelqu'un a-t-il fait cela? J'ai réussi à produire le fichier mondial PNG +, mais je ne peux pas trouver comment obtenir que gdal_translate utilise le fichier mondial. Il semble qu'à partir de la version 0.6, nik2img est censé produire directement GeoTIFF, mais cela n'apparaît pas dans mes tests.
Z O.
2
Je ne connais pas non plus d'outil. Si vous n'êtes pas à l'aise sur la ligne de commande, je téléchargerais les données depuis OSM, les chargerais dans un SIG de bureau et exporterais un GeoTiff OU utiliserais QGIS avec ce plugin et créerais ensuite un Geotif vide pour la zone qui vous intéresse et ensuite voyez si vous pouvez fusionner les données dans le fichier vide. Je n'ai pas essayé cela dans QGIS, mais avec du travail, cela devrait être possible. Vous devrez vérifier les conditions de licence pour OSM avant de le faire.
Si vous enregistrez la vue QGIS actuelle en tant qu'image PNG, vous obtenez également un fichier mondial, ce qui signifie qu'un GeoTIFF n'est qu'une conversion rapide de gdal_translate ....
Spacedman
0
Je suppose que vous avez déjà configuré votre feuille de style de base et l'ombrage pertinent - sinon consultez la page github pour votre feuille de style (par exemple 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))
Le fichier de configuration ( osm.cfg) ressemble à:
[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
Je ne connais pas non plus d'outil. Si vous n'êtes pas à l'aise sur la ligne de commande, je téléchargerais les données depuis OSM, les chargerais dans un SIG de bureau et exporterais un GeoTiff OU utiliserais QGIS avec ce plugin et créerais ensuite un Geotif vide pour la zone qui vous intéresse et ensuite voyez si vous pouvez fusionner les données dans le fichier vide. Je n'ai pas essayé cela dans QGIS, mais avec du travail, cela devrait être possible. Vous devrez vérifier les conditions de licence pour OSM avant de le faire.
la source
Je suppose que vous avez déjà configuré votre feuille de style de base et l'ombrage pertinent - sinon consultez la page github pour votre feuille de style (par exemple https://github.com/hotosm/HDM-CartoCSS )
Le fichier de configuration (
osm.cfg
) ressemble à:la source