Coğrafi referanslı OpenStreetMap (OSM) haritalarını GeoTiff formatında dışa aktarma hizmeti var mı?


12

Coğrafi referanslı OpenStreetMap (OSM) haritalarını GeoTiff formatında dışa aktarmak için kullanılabilecek bir hizmet var mı?

Yanıtlar:


10

Düşünebileceğim bir hizmet ya da hazır araç yok. Ancak komut satırında rahatsanız ve biraz zaman harcamak istiyorsanız, işte size yol gösterebilir

  1. OSM şekil dosyasını indirin.
  2. Şekil dosyasını TileMill'e aktarın. .
  3. Stil uyguladıktan sonra, coğrafi referanslı PNG olarak dışa aktarın .

    • Aşağıdaki komut nik2img yüklendikten sonra çalışmalıdır ; TileMill dışa aktarmanızdan bir PNG ve eşleşen dünya dosyası üretecektir: 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
  4. GeoTIFF'e dönüştürmek için gdal_translate kullanın .

    • Aşağıdaki komut çalışmalıdır: gdal_translate -of GTiff -a_srs <desired projection, probably EPSG:3857, as above> <desired file name>.png <desired file name>.tiff

Bunu yapan var mı? Ben PNG + dünya dosyasını üreten kadar aldım, ama dünya dosyasını kullanmak için gdal_translate almak için nasıl çalışamaz. 0.6 sürümünden itibaren, nik2img'in GeoTIFF'yi doğrudan üretmesi gerekiyor, ancak testimde görünmüyor.
Z O.

2

Ben de bir alet bilmiyorum. Komut satırında rahat değilseniz, OSM'den veri indirir, masaüstü GIS'e yükler ve bir GeoTiff'i dışa aktarırım VEYA bu eklentiyle QGIS'i kullanır ve sonra ilgilendiğiniz alan için boş bir Geotif oluşturur ve sonra verileri boş dosyada birleştirip birleştiremeyeceğinize bakın. Bunu QGIS'de denemedim, ancak bazı çalışmalarla mümkün olmalı. Bunu yapmadan önce OSM için lisans koşullarını kontrol etmek isteyeceksiniz.


Geçerli QGIS görünümünü bir PNG görüntüsü olarak kaydederseniz, aynı zamanda bir dünya dosyası da alırsınız, yani GeoTIFF sadece hızlı bir gdal_translate dönüşümüdür ....
Spacedman

0

Temel stil sayfanızın ve ilgili hillshading'in zaten kurulu olduğunu varsayıyorum - aksi takdirde stil sayfanızın github sayfasına bakın (örn. 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))

Yapılandırma dosyası ( osm.cfg) şöyle görünür:

[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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.