जवाबों:
ऐसी कोई सेवा या आसानी से उपलब्ध उपकरण नहीं है जिसके बारे में मैं सोच सकता हूं। लेकिन अगर आप कमांड लाइन पर सहज हैं और कुछ समय के लिए छेड़छाड़ करने के लिए तैयार हैं, तो यहां एक तरीका है जो काम कर सकता है
एक बार जब आप इसे स्टाइल कर लेते हैं, तो इसे एक भू-संदर्भित पीएनजी के रूप में निर्यात करें ।
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
इसे GeoTIFF में बदलने के लिए gdal_translate का उपयोग करें ।
gdal_translate -of GTiff -a_srs <desired projection, probably EPSG:3857, as above> <desired file name>.png <desired file name>.tiff
मैं एक उपकरण के बारे में भी नहीं जानता। यदि आप कमांड लाइन पर सहज नहीं हैं, तो मैं OSM से डेटा डाउनलोड करूँगा, एक डेस्कटॉप GIS में लोड करूँगा और एक GeoTiff निर्यात करूँगा या इस प्लगइन के साथ QGIS का उपयोग करूँगा और फिर जिस क्षेत्र में आपकी रुचि है, उसके लिए एक खाली Geotif बनाएं। देखें कि क्या आप डेटा को खाली फ़ाइल में मर्ज कर सकते हैं। मैंने QGIS में कोशिश नहीं की है, लेकिन कुछ काम के साथ यह संभव होना चाहिए। आप ऐसा करने से पहले OSM के लिए लाइसेंस की शर्तों की जांच करना चाहेंगे।
मुझे लगता है कि आपके पास आपकी मूल स्टाइलशीट और पहले से सेट की गई प्रासंगिक पहाडी है - अन्यथा आपकी स्टाइलशीट के लिए जीथब पृष्ठ देखें (जैसे 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))
कॉन्फ़िगरेशन फ़ाइल ( osm.cfg
) इस प्रकार है:
[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