위도 경도에서 지리원 타일을 다운로드하다

7842 단어 Python
국토지리원은 지도와 항공사진 등을 지리원 벽돌 형태로 제공한다
좌표 좌표 좌표의 위도 경도가 아닌 좌표 값을 얻다.
OpenStreetMap의wiki에서,빌려주세요.
#from
#https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Python

import math

#緯度経度からタイル座標を計算
def deg2num(lat_deg, lon_deg, zoom):
    lat_rad = math.radians(lat_deg)
    n = 2.0 ** zoom
    xtile = int((lon_deg + 180.0) / 360.0 * n)
    ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)
    return (xtile, ytile)

#今回は使わないけど,タイル座標から緯度経度
def num2deg(xtile, ytile, zoom):
    n = 2.0 ** zoom
    lon_deg = xtile / n * 360.0 - 180.0
    lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
    lat_deg = math.degrees(lat_rad)
    return (lat_deg, lon_deg)
지리원 타일에서 다운 받으면 이런 느낌이에요.
import requests
def download_from_gsi(z, x, y, def_url, fname):
    url = def_url.format(z,x,y)
    response = requests.get(url)
    if response.status_code == 200:
        image = response.content
        with open(fname, "wb") as f:
            f.write(image)
    else:
        raise Exception("{} returned {}".format(response.url, response.status_code))
사용법은 이런 느낌이다. 이 예는 하늘나무의 좌표의 항공 사진이다.
#zはズームレベル.18が一番拡大した状態
z = 17
lat = 35.710163
lon = 139.8105428

def_url = "https://cyberjapandata.gsi.go.jp/xyz/ort/{}/{}/{}.jpg"
fname ="test.png"

x,y = deg2num(lat, lon, z)

download_from_gsi(z, x, y, def_url, fname)
결과는 이런 이미지를 얻었다.

건설 도중 사진인가?
def_url지리원 타일 일람의 url을 참고하세요.
(주의사항은 jpg일 때도 있고 pg일 때도 있다.)

좋은 웹페이지 즐겨찾기