지리 참조 된 OSM (OpenStreetMap) 맵을 GeoTiff 형식으로 내보내는 서비스가 있습니까?


답변:


10

내가 생각할 수있는 서비스 나 쉽게 사용할 수있는 도구가 없습니다. 그러나 커맨드 라인에 익숙하고 시간을 들여 기꺼이 시간을 보내고 싶다면 여기에 작동 할 수있는 방법이 있습니다.

  1. OSM shapefile을 다운로드하십시오.
  2. shapefile을 TileMill로 가져옵니다. .
  3. 스타일 을 지정하면 지리 참조 된 PNG로 내보내십시오 .

    • nik2img를 설치하면 다음 명령이 작동합니다 . TileMill 내보내기에서 PNG 및 일치하는 세계 파일이 생성됩니다. 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. gdal_translate 를 사용 하여 GeoTIFF로 변환하십시오.

    • 다음 명령이 작동해야합니다. gdal_translate -of GTiff -a_srs <desired projection, probably EPSG:3857, as above> <desired file name>.png <desired file name>.tiff

누구든지 이것을 했습니까? PNG + world 파일을 만들 때까지 얻었지만 gdal_translate를 사용하여 world 파일을 사용하는 방법을 해결할 수는 없습니다. 버전 0.6과 같이 nik2img는 GeoTIFF를 직접 생성해야하지만 테스트에는 나타나지 않습니다.
Z O.

2

나는 도구도 모른다. 커맨드 라인에 익숙하지 않다면 OSM에서 데이터를 다운로드하고 데스크탑 GIS에로드하고 GeoTiff를 내보내 거나이 플러그인으로 QGIS 를 사용하고 관심있는 영역에 빈 Geotif를 만든 다음 데이터를 빈 파일로 병합 할 수 있는지 확인하십시오. QGIS에서는 시도하지 않았지만 약간의 작업으로 가능할 것입니다. 이를 수행하기 전에 OSM에 대한 라이센스 조건을 확인해야합니다.


현재 QGIS 뷰를 PNG 이미지로 저장하면 월드 파일도 얻을 수 있습니다. 즉 GeoTIFF는 gdal_translate로 빠르게 변환됩니다.
Spacedman

0

기본 스타일 시트와 관련 언덕 음영이 이미 설정되어 있다고 가정합니다. 그렇지 않으면 스타일 시트의 github 페이지를 참조하십시오 (예 : 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.