파이썬으로 지리원지도 타일을 깔아
배경
「지도를 배경으로 노선도를 만들고 싶다」라고 하는 경우, 지금까지 자신의 수작업으로 지리원 지도 타일 화상 Excel 방안지에 복사해 깔고 있었습니다만, 매우 귀찮은 작업이므로 Python에 하게 하는 것 했습니다.
지리원 지도 타일이란?
자세한 것은 여기 에 기재되어 있습니다만, 요컨대 국토 지리원이 작성한 지형도를 타일 화상으로 이용할 수 있어요라는 것입니다.
타일 화상에는 좌표치가 있어, 이번은 그것을 지정하는 것으로, 원하는 영역의 지도를 취득하기로 하고 있습니다.
그 좌표치는 국토지리원의 타일 좌표 확인 페이지 에서 확인해 주십시오.
타일 이미지 얻기
먼저 필요한 라이브러리를 가져옵니다.
필요한 경우 install하십시오.
( pip install requests
등)
chiriinMap.pyimport cv2
import numpy as np
import os
import requests
타일 이미지를 가져오고 저장할 함수를 다음과 같이 정의합니다.
아래에서는 현재 디렉토리에 tile
라는 폴더를 준비하여 저장하고 있습니다.
덧붙여서 1장 분만이므로,
이런 느낌입니다.
chiriinMap.pydef get_tile(z, x, y):
"""
今回は標準地図を取得するとしてURLを指定する。
与えられた座標に対応する地理院地図タイル画像を保存する。
"""
url = "https://cyberjapandata.gsi.go.jp/xyz/std/{}/{}/{}.png".format(z, x, y)
file_name = "tile/{}_{}_{}.jpg".format(z, x, y)
response = requests.get(url)
image = response.content
with open(file_name, "wb") as aaa:
aaa.write(image)
영역을 지정하여 타일 이미지 얻기
앞의 get_tile
함수에서는 지도 타일 1장분 밖에 취득할 수 없으므로, 영역 통째로 취득하도록(듯이) 합니다.
장래에 대비해, 원하는 화상이 이미 존재하고 있는 경우는 스킵 시키고 있습니다.
다만, 전회의 취득으로부터 너무 시간이 경과하고 있는 경우, 지도가 갱신되고 있는 경우도 있으므로, 그러한 경우는 화상을 삭제하면 좋다고 생각합니다.
다음 섹션에서 여러 타일 이미지를 한 장으로 정리하므로 개별 이미지는 매번 지워 버릴 수 있습니다.
그 근처는 여러분에게 맡깁니다.
chiriinMap.pydef get_tile_area(north_west, south_east):
"""
北西端・南東端のタイル座標を指定した上で、タイル画像を取得する。
"""
assert north_west[0] == south_east[0], "ズームレベルzを確認してください。"
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[1]-north_west[1]+1):
for j in range(south_east[2]-north_west[2]+1):
filepath = path = "tile/{}_{}_{}.jpg".format(zoom, i+north_west[1], j+north_west[2])
if os.path.exists(filepath) == True:
continue
get_tile(zoom, i+north_west[1], j+north_west[2])
영역의 타일 이미지를 하나의 이미지로 결합
방대한 시간을 보냈던 깔개 작업은 다음과 같이 극복합니다.
마지막 이미지의 이름은 자유롭게 변경하십시오.
chiriinMap.pydef cat_tile(north_west, south_east):
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[2]-north_west[2]+1):
im_h_lst = []
for j in range(south_east[1]-north_west[1]+1):
path = "tile/{}_{}_{}.jpg".format(zoom, j+north_west[1], i+north_west[2])
im1 = cv2.imread(path,-1)
im_h_lst.append(im1)
im_h = cv2.hconcat(im_h_lst)
im_v_lst.append(im_h)
im_v = cv2.vconcat(im_v_lst)
cv2.imwrite("tile/tile.png", im_v)
해보자
해보겠습니다.
chiriinMap.pynorth_west = (15, 28223, 13124)
south_east = (15, 28244, 13144)
get_tile_area(north_west, south_east)
cat_tile(north_west, south_east)
이런 느낌입니다. 후쿠오카현의 이토시마 반도입니다.
수작업이라면 몇 시간이 걸릴까...
이것으로 즐길 수 있네요. 덧붙여서,이 이미지 그대로 30MB 정도 있습니다.
화질을 떨어뜨려도 좋은 경우는, 사이즈 다운하는 것이 좋을지도 모릅니다.
출처
지도 이미지: 국토 지리원
Reference
이 문제에 관하여(파이썬으로 지리원지도 타일을 깔아), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/alphaCnc/items/861ac393cc7e184d128c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
자세한 것은 여기 에 기재되어 있습니다만, 요컨대 국토 지리원이 작성한 지형도를 타일 화상으로 이용할 수 있어요라는 것입니다.
타일 화상에는 좌표치가 있어, 이번은 그것을 지정하는 것으로, 원하는 영역의 지도를 취득하기로 하고 있습니다.
그 좌표치는 국토지리원의 타일 좌표 확인 페이지 에서 확인해 주십시오.
타일 이미지 얻기
먼저 필요한 라이브러리를 가져옵니다.
필요한 경우 install하십시오.
( pip install requests
등)
chiriinMap.pyimport cv2
import numpy as np
import os
import requests
타일 이미지를 가져오고 저장할 함수를 다음과 같이 정의합니다.
아래에서는 현재 디렉토리에 tile
라는 폴더를 준비하여 저장하고 있습니다.
덧붙여서 1장 분만이므로,
이런 느낌입니다.
chiriinMap.pydef get_tile(z, x, y):
"""
今回は標準地図を取得するとしてURLを指定する。
与えられた座標に対応する地理院地図タイル画像を保存する。
"""
url = "https://cyberjapandata.gsi.go.jp/xyz/std/{}/{}/{}.png".format(z, x, y)
file_name = "tile/{}_{}_{}.jpg".format(z, x, y)
response = requests.get(url)
image = response.content
with open(file_name, "wb") as aaa:
aaa.write(image)
영역을 지정하여 타일 이미지 얻기
앞의 get_tile
함수에서는 지도 타일 1장분 밖에 취득할 수 없으므로, 영역 통째로 취득하도록(듯이) 합니다.
장래에 대비해, 원하는 화상이 이미 존재하고 있는 경우는 스킵 시키고 있습니다.
다만, 전회의 취득으로부터 너무 시간이 경과하고 있는 경우, 지도가 갱신되고 있는 경우도 있으므로, 그러한 경우는 화상을 삭제하면 좋다고 생각합니다.
다음 섹션에서 여러 타일 이미지를 한 장으로 정리하므로 개별 이미지는 매번 지워 버릴 수 있습니다.
그 근처는 여러분에게 맡깁니다.
chiriinMap.pydef get_tile_area(north_west, south_east):
"""
北西端・南東端のタイル座標を指定した上で、タイル画像を取得する。
"""
assert north_west[0] == south_east[0], "ズームレベルzを確認してください。"
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[1]-north_west[1]+1):
for j in range(south_east[2]-north_west[2]+1):
filepath = path = "tile/{}_{}_{}.jpg".format(zoom, i+north_west[1], j+north_west[2])
if os.path.exists(filepath) == True:
continue
get_tile(zoom, i+north_west[1], j+north_west[2])
영역의 타일 이미지를 하나의 이미지로 결합
방대한 시간을 보냈던 깔개 작업은 다음과 같이 극복합니다.
마지막 이미지의 이름은 자유롭게 변경하십시오.
chiriinMap.pydef cat_tile(north_west, south_east):
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[2]-north_west[2]+1):
im_h_lst = []
for j in range(south_east[1]-north_west[1]+1):
path = "tile/{}_{}_{}.jpg".format(zoom, j+north_west[1], i+north_west[2])
im1 = cv2.imread(path,-1)
im_h_lst.append(im1)
im_h = cv2.hconcat(im_h_lst)
im_v_lst.append(im_h)
im_v = cv2.vconcat(im_v_lst)
cv2.imwrite("tile/tile.png", im_v)
해보자
해보겠습니다.
chiriinMap.pynorth_west = (15, 28223, 13124)
south_east = (15, 28244, 13144)
get_tile_area(north_west, south_east)
cat_tile(north_west, south_east)
이런 느낌입니다. 후쿠오카현의 이토시마 반도입니다.
수작업이라면 몇 시간이 걸릴까...
이것으로 즐길 수 있네요. 덧붙여서,이 이미지 그대로 30MB 정도 있습니다.
화질을 떨어뜨려도 좋은 경우는, 사이즈 다운하는 것이 좋을지도 모릅니다.
출처
지도 이미지: 국토 지리원
Reference
이 문제에 관하여(파이썬으로 지리원지도 타일을 깔아), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/alphaCnc/items/861ac393cc7e184d128c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
import numpy as np
import os
import requests
def get_tile(z, x, y):
"""
今回は標準地図を取得するとしてURLを指定する。
与えられた座標に対応する地理院地図タイル画像を保存する。
"""
url = "https://cyberjapandata.gsi.go.jp/xyz/std/{}/{}/{}.png".format(z, x, y)
file_name = "tile/{}_{}_{}.jpg".format(z, x, y)
response = requests.get(url)
image = response.content
with open(file_name, "wb") as aaa:
aaa.write(image)
앞의
get_tile
함수에서는 지도 타일 1장분 밖에 취득할 수 없으므로, 영역 통째로 취득하도록(듯이) 합니다.장래에 대비해, 원하는 화상이 이미 존재하고 있는 경우는 스킵 시키고 있습니다.
다만, 전회의 취득으로부터 너무 시간이 경과하고 있는 경우, 지도가 갱신되고 있는 경우도 있으므로, 그러한 경우는 화상을 삭제하면 좋다고 생각합니다.
다음 섹션에서 여러 타일 이미지를 한 장으로 정리하므로 개별 이미지는 매번 지워 버릴 수 있습니다.
그 근처는 여러분에게 맡깁니다.
chiriinMap.py
def get_tile_area(north_west, south_east):
"""
北西端・南東端のタイル座標を指定した上で、タイル画像を取得する。
"""
assert north_west[0] == south_east[0], "ズームレベルzを確認してください。"
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[1]-north_west[1]+1):
for j in range(south_east[2]-north_west[2]+1):
filepath = path = "tile/{}_{}_{}.jpg".format(zoom, i+north_west[1], j+north_west[2])
if os.path.exists(filepath) == True:
continue
get_tile(zoom, i+north_west[1], j+north_west[2])
영역의 타일 이미지를 하나의 이미지로 결합
방대한 시간을 보냈던 깔개 작업은 다음과 같이 극복합니다.
마지막 이미지의 이름은 자유롭게 변경하십시오.
chiriinMap.pydef cat_tile(north_west, south_east):
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[2]-north_west[2]+1):
im_h_lst = []
for j in range(south_east[1]-north_west[1]+1):
path = "tile/{}_{}_{}.jpg".format(zoom, j+north_west[1], i+north_west[2])
im1 = cv2.imread(path,-1)
im_h_lst.append(im1)
im_h = cv2.hconcat(im_h_lst)
im_v_lst.append(im_h)
im_v = cv2.vconcat(im_v_lst)
cv2.imwrite("tile/tile.png", im_v)
해보자
해보겠습니다.
chiriinMap.pynorth_west = (15, 28223, 13124)
south_east = (15, 28244, 13144)
get_tile_area(north_west, south_east)
cat_tile(north_west, south_east)
이런 느낌입니다. 후쿠오카현의 이토시마 반도입니다.
수작업이라면 몇 시간이 걸릴까...
이것으로 즐길 수 있네요. 덧붙여서,이 이미지 그대로 30MB 정도 있습니다.
화질을 떨어뜨려도 좋은 경우는, 사이즈 다운하는 것이 좋을지도 모릅니다.
출처
지도 이미지: 국토 지리원
Reference
이 문제에 관하여(파이썬으로 지리원지도 타일을 깔아), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/alphaCnc/items/861ac393cc7e184d128c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def cat_tile(north_west, south_east):
zoom = north_west[0]
im_v_lst = []
for i in range(south_east[2]-north_west[2]+1):
im_h_lst = []
for j in range(south_east[1]-north_west[1]+1):
path = "tile/{}_{}_{}.jpg".format(zoom, j+north_west[1], i+north_west[2])
im1 = cv2.imread(path,-1)
im_h_lst.append(im1)
im_h = cv2.hconcat(im_h_lst)
im_v_lst.append(im_h)
im_v = cv2.vconcat(im_v_lst)
cv2.imwrite("tile/tile.png", im_v)
해보겠습니다.
chiriinMap.py
north_west = (15, 28223, 13124)
south_east = (15, 28244, 13144)
get_tile_area(north_west, south_east)
cat_tile(north_west, south_east)
이런 느낌입니다. 후쿠오카현의 이토시마 반도입니다.
수작업이라면 몇 시간이 걸릴까...
이것으로 즐길 수 있네요. 덧붙여서,이 이미지 그대로 30MB 정도 있습니다.
화질을 떨어뜨려도 좋은 경우는, 사이즈 다운하는 것이 좋을지도 모릅니다.
출처
지도 이미지: 국토 지리원
Reference
이 문제에 관하여(파이썬으로 지리원지도 타일을 깔아), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/alphaCnc/items/861ac393cc7e184d128c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬으로 지리원지도 타일을 깔아), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/alphaCnc/items/861ac393cc7e184d128c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)