티스토리 뷰
openstreetmap을 사용할 때 아래와 같은 식으로 url을 사용하게 되지요!
tile.openstreetmap.org/{z}/{x}/{y}.png
여기서 {z}는 zoom, {x}, {y}는 타일의 좌표(tile number)라고 말할 수 있습니다.
만약 타일의 좌표(tile number)만 알고 있는데 wgs84 좌표계의 x,y 위경도를 알고싶다거나,
혹은 wgs84 좌표계의 x,y 위경도만 알고 있는데 이 좌표의 OSM 타일의 좌표를 알고 싶을 때!
서로 변환할 수 있는 코드가 존재합니다.
wgs84 좌표계 x,y를 tile number로 변환하는 경우,
wgs84 좌표계 x,y에 해당되는 tile number의 왼쪽 상단점 (x,y) tile number를 리턴 받게되고,
tile number를 wgs84 좌표계 x,y 위경도로 변환하는 경우,
tile의 왼쪽 상단점 (x,y)을 wgs84좌표계 위경도를 리턴받게 됩니다.
아래의 개발자 문서에서도 0,0을 가리키고 있죠.
주어진 확대/축소 수준에서 특정 타일은 지도의 왼쪽 상단에서 시작하는 0,0의 직교 좌표로 식별할 수 있습니다.
https://developers.planet.com/tutorials/slippy-maps-101/
1. wgs84 좌표계 x,y 를 tile number로 변환하기
(Lon./lat. to tile numbers)
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)
deg2num 파라미터로 x, y, z(zoom)을 넣으면 되구요,
2. tile number를 wgs84 좌표계 x,y 위경도로 변환하기
(Tile numbers to lon./lat.)
import math
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)
num2deg 파라미터로 {x},{y},{Z}를 넣으면 된답니다!
더 자세한 내용을 보시려면 아래 링크를 참조해주세요~!
https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2
'프로그래밍 > Python' 카테고리의 다른 글
[pymongo] mongoDB 컬렉션 복제하기 (clone) (0) | 2021.10.12 |
---|---|
[python] CSV파일 열었는데 list, dict, int형 등이 문자열로 나올 때 해결법! (0) | 2021.10.12 |
[python] 데이터타입을 문자열로 출력하는 방법 (0) | 2021.10.01 |
[Python] requests.exceptions.TooManyRedirects: Exceeded 30 redirects 오류해결 (0) | 2021.09.24 |
[Python] 리스트(배열) 순서 거꾸로 뒤집기 (0) | 2021.09.24 |