국토 지리원의 고도 타일을 파이썬으로 가져옵니다.
1. 이 기사에 대하여
이전 기사에서 지리원 타일을 자바 스크립트로 얻는 방법을 썼다.
자바스크립트에서 국토지리원의 고도 타일을 제대로 얻으세요 - Qiita
지리원 타일 및 고도 타일의 사양 · 타일 좌표의 조사 방법 등에 대해서는 상기의 기사를 참조.
파이썬에서도 본질적으로 변하지 않지만, Pandas를 사용하면 편하기 때문에 여기에 적는다.
또한, 복수의 타일 좌표에 걸쳐 타일을 취득 및 결합하는 방법도 소개한다.
원래는 다음 기사에서 사용하기 위해 썼다.
PFN제의 최적화 툴 「Optuna」로 후지산을 등정
2. 고도 타일을 얻는 방법
기본적으로는 타일 좌표를 포함한 GET
리퀘스트를 보내는 것만.
Pandas의 read_csv
함수를 사용하면, 지정한 URL로부터의 데이터의 취득·CSV의 퍼스를 일괄로 해 주기 때문에 편해진다.
바다 등에서 표고에 e
라는 값이 들어 있는 경우가 있지만 .replace
메서드를 호출하는 것만으로 0m로 변환할 수 있다.
import pandas as pd
def fetch_tile(z, x, y):
url = "https://cyberjapandata.gsi.go.jp/xyz/dem/{z}/{x}/{y}.txt".format(z=z, x=x, y=y)
df = pd.read_csv(url, header=None).replace("e", 0)
return df.values
반환값의 형태는 numpy.ndarray
가 되도록(듯이) 하고 있다.
이제 고도 타일을 2차원 Numpy Array로 취급할 수 있게 된다.
3. 사용법
위와 같이 정의한 fetch_tile
함수에 타일 좌표를 주는 것만.
그대로 Matplotlib의 imshow
함수로 시각화하면, 제대로 북이 상·동이 오른쪽이 되도록 표시된다(๑˃̵ᴗ˂̵)
nabewari = (13, 7262, 3232) # タイル座標 (z, x, y)
nabewari_tile = fetch_tile(*nabewari)
# 可視化も簡単
import matplotlib.pyplot as plt
plt.imshow(nabewari_tile)
4. 다중 타일 결합
복수의 타일 좌표에 걸쳐 직사각형 영역을 취득하고 싶은 경우, 이하와 같은 함수를 사용하면 된다. 이전 장의 fetch_tile
는 정의되었다.
def fetch_all_tiles(north_west, south_east):
""" 北西端・南東端のタイル座標を指定して、長方形領域の標高タイルを取得 """
assert north_west[0] == south_east[0], "タイル座標のzが一致していません"
x_range = range(north_west[1], south_east[1]+1)
y_range = range(north_west[2], south_east[2]+1)
return np.concatenate(
[
np.concatenate(
[fetch_tile(north_west[0], x, y) for y in y_range],
axis=0
) for x in x_range
],
axis=1
)
예를 들면 다음과 같은 영역을 취득하고 싶은 경우
좌상과 우하의 타일 좌표를 지정하면 된다.
여기에서는 타일 수가 2x2이지만, 직사각형 영역이라면 뭐든 좋다.
tile = fetch_all_tiles((14, 14523, 6464), (14, 14524, 6465))
print(tile.shape) # (512, 512)
이상
Reference
이 문제에 관하여(국토 지리원의 고도 타일을 파이썬으로 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1227/items/877d966da9a5af53b05d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
기본적으로는 타일 좌표를 포함한
GET
리퀘스트를 보내는 것만.Pandas의
read_csv
함수를 사용하면, 지정한 URL로부터의 데이터의 취득·CSV의 퍼스를 일괄로 해 주기 때문에 편해진다.바다 등에서 표고에
e
라는 값이 들어 있는 경우가 있지만 .replace
메서드를 호출하는 것만으로 0m로 변환할 수 있다.import pandas as pd
def fetch_tile(z, x, y):
url = "https://cyberjapandata.gsi.go.jp/xyz/dem/{z}/{x}/{y}.txt".format(z=z, x=x, y=y)
df = pd.read_csv(url, header=None).replace("e", 0)
return df.values
반환값의 형태는
numpy.ndarray
가 되도록(듯이) 하고 있다.이제 고도 타일을 2차원 Numpy Array로 취급할 수 있게 된다.
3. 사용법
위와 같이 정의한 fetch_tile
함수에 타일 좌표를 주는 것만.
그대로 Matplotlib의 imshow
함수로 시각화하면, 제대로 북이 상·동이 오른쪽이 되도록 표시된다(๑˃̵ᴗ˂̵)
nabewari = (13, 7262, 3232) # タイル座標 (z, x, y)
nabewari_tile = fetch_tile(*nabewari)
# 可視化も簡単
import matplotlib.pyplot as plt
plt.imshow(nabewari_tile)
4. 다중 타일 결합
복수의 타일 좌표에 걸쳐 직사각형 영역을 취득하고 싶은 경우, 이하와 같은 함수를 사용하면 된다. 이전 장의 fetch_tile
는 정의되었다.
def fetch_all_tiles(north_west, south_east):
""" 北西端・南東端のタイル座標を指定して、長方形領域の標高タイルを取得 """
assert north_west[0] == south_east[0], "タイル座標のzが一致していません"
x_range = range(north_west[1], south_east[1]+1)
y_range = range(north_west[2], south_east[2]+1)
return np.concatenate(
[
np.concatenate(
[fetch_tile(north_west[0], x, y) for y in y_range],
axis=0
) for x in x_range
],
axis=1
)
예를 들면 다음과 같은 영역을 취득하고 싶은 경우
좌상과 우하의 타일 좌표를 지정하면 된다.
여기에서는 타일 수가 2x2이지만, 직사각형 영역이라면 뭐든 좋다.
tile = fetch_all_tiles((14, 14523, 6464), (14, 14524, 6465))
print(tile.shape) # (512, 512)
이상
Reference
이 문제에 관하여(국토 지리원의 고도 타일을 파이썬으로 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1227/items/877d966da9a5af53b05d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
nabewari = (13, 7262, 3232) # タイル座標 (z, x, y)
nabewari_tile = fetch_tile(*nabewari)
# 可視化も簡単
import matplotlib.pyplot as plt
plt.imshow(nabewari_tile)
복수의 타일 좌표에 걸쳐 직사각형 영역을 취득하고 싶은 경우, 이하와 같은 함수를 사용하면 된다. 이전 장의
fetch_tile
는 정의되었다.def fetch_all_tiles(north_west, south_east):
""" 北西端・南東端のタイル座標を指定して、長方形領域の標高タイルを取得 """
assert north_west[0] == south_east[0], "タイル座標のzが一致していません"
x_range = range(north_west[1], south_east[1]+1)
y_range = range(north_west[2], south_east[2]+1)
return np.concatenate(
[
np.concatenate(
[fetch_tile(north_west[0], x, y) for y in y_range],
axis=0
) for x in x_range
],
axis=1
)
예를 들면 다음과 같은 영역을 취득하고 싶은 경우
좌상과 우하의 타일 좌표를 지정하면 된다.
여기에서는 타일 수가 2x2이지만, 직사각형 영역이라면 뭐든 좋다.
tile = fetch_all_tiles((14, 14523, 6464), (14, 14524, 6465))
print(tile.shape) # (512, 512)
이상
Reference
이 문제에 관하여(국토 지리원의 고도 타일을 파이썬으로 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sw1227/items/877d966da9a5af53b05d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)