Có dịch vụ nào để xuất bản đồ OpenStreetMap (OSM) tham chiếu theo định dạng GeoTiff không?


12

Có dịch vụ nào có sẵn để xuất bản đồ OpenStreetMap (OSM) tham chiếu địa lý theo định dạng GeoTiff không?

Câu trả lời:


10

Không có dịch vụ hoặc công cụ có sẵn mà tôi có thể nghĩ đến. Nhưng nếu bạn cảm thấy thoải mái với dòng lệnh và sẵn sàng dành thời gian mày mò, đây là một cách có thể làm việc

  1. Tải về shapefile OSM.
  2. Nhập shapefile vào TileMill. .
  3. Khi bạn tạo kiểu cho nó, hãy xuất nó dưới dạng PNG tham chiếu địa lý .

    • Lệnh sau sẽ hoạt động khi bạn đã cài đặt nik2img ; nó sẽ tạo ra một tệp PNG và khớp thế giới từ xuất khẩu TileMill của bạn: 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. Sử dụng gdal_translate để chuyển đổi nó thành GeoTIFF.

    • Lệnh sau sẽ hoạt động: gdal_translate -of GTiff -a_srs <desired projection, probably EPSG:3857, as above> <desired file name>.png <desired file name>.tiff

Có ai đã làm điều này? Tôi đã từng tạo ra tệp thế giới PNG +, nhưng không thể tìm ra cách để gdal_translate sử dụng tệp thế giới. Có vẻ như phiên bản 0.6, nik2img được cho là sản xuất GeoTIFF trực tiếp, nhưng nó không xuất hiện trong thử nghiệm của tôi.
Z O.

2

Tôi cũng không biết về một công cụ. Nếu bạn không thoải mái với dòng lệnh, tôi sẽ tải xuống dữ liệu từ OSM, tải vào máy tính để bàn và xuất GeoTiff HOẶC sử dụng QGIS với plugin này và sau đó tạo Geotif trống cho khu vực bạn quan tâm và sau đó xem nếu bạn có thể hợp nhất dữ liệu vào tập tin trống. Tôi đã không thử điều đó ở QGIS, nhưng với một số công việc thì điều đó là có thể. Bạn sẽ muốn kiểm tra các điều khoản cấp phép cho OSM trước khi làm điều đó.


Nếu bạn lưu chế độ xem QGIS hiện tại dưới dạng hình ảnh PNG, bạn cũng có được một tệp thế giới, có nghĩa là GeoTIFF chỉ là một chuyển đổi gdal_translate nhanh chóng ....
Spainedman 10/03/2015

0

Tôi giả sử bạn đã có biểu định kiểu cơ bản của mình và tính năng tạo độ dốc liên quan đã được thiết lập - nếu không, hãy xem trang github cho biểu định kiểu của bạn (ví dụ: 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))

Tệp cấu hình ( osm.cfg) trông giống như:

[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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.