ShogoHirasawa / 2023-syuron

修士課程 卒論用リポジトリ
1 stars 1 forks source link

文京区のDEMタイル(ラスター)を作成 #20

Open ShogoHirasawa opened 11 months ago

ShogoHirasawa commented 11 months ago

データソース

基盤地図情報 ダウンロードサービス の5339-45と5339-46(文京区)

DLしてきたデータ

FG-GML-5339-45-DEM5A.zip FG-GML-5339-46-DEM5A.zip

データ変換

xmlで配布されていたので、GeoTIFFに変換。コンバートにはQGISのプラグイン「QuickDEM4JP」を利用。 https://qiita.com/nokonoko_1203/items/b99aa733cb215305f8aa

変換後データ

bunkyo_DEM.tif.zip

ShogoHirasawa commented 11 months ago

出力する形式ミスった

MapLibre GLJSで表示するにはRGBタイルのスタイルで出力する必要があるらしい。 https://qiita.com/T-ubu/items/c35023e1df2362bd8e7f

ShogoHirasawa commented 11 months ago

表現がびみょい

RGBタイルのスタイルで出力して、タイル化したがカクついた表示になる

Image

ShogoHirasawa commented 11 months ago

国土地理院の標高データからタイルを作成

データソース: 標高第2版データ1-2 -90N°~0°, 0°~90W°(Geotiff 213MB)

関東の部分だけ切り取ってタイル化

データ:

Image

ShogoHirasawa commented 11 months ago

うまくいかず

Image

ShogoHirasawa commented 11 months ago

カクつく

Image

ShogoHirasawa commented 11 months ago

ver1.0

ShogoHirasawa commented 11 months ago

ver2.0

所感: 荒すぎるような気もする。標高低いところは薄すぎて見えない。

Image Image

ShogoHirasawa commented 11 months ago

ver3.0

ShogoHirasawa commented 11 months ago

ver4.0

結果

びみょかった

Image Image

ShogoHirasawa commented 11 months ago

ver5.0(とりあえず完成)

Image

import os
import requests
from tqdm import tqdm

# 取得したいズームレベル
ZOOM = 13

# タイルのx, yの範囲を指定
# タイル番号確認はここから https://maps.gsi.go.jp/development/tileCoordCheck.html
MIN_X, MAX_X = 7274, 7277
MIN_Y, MAX_Y = 3224, 3266

# ベースURL
BASE_URL = "https://cyberjapandata.gsi.go.jp/xyz/dem_png/{z}/{x}/{y}.png"

# 画像を保存するディレクトリを指定
SAVE_DIR = "tiles"

# 必要ならユーザーエージェントをセット
HEADERS = {}

# タイルの総数を計算して、tqdmのtotalパラメータに渡します
total_tiles = (MAX_X - MIN_X + 1) * (MAX_Y - MIN_Y + 1)

# 進捗バーを作成します。
pbar = tqdm(total=total_tiles, desc="Downloading tiles", dynamic_ncols=True)

# x, yの範囲でループしてタイルをダウンロード
for x in range(MIN_X, MAX_X + 1):
    for y in range(MIN_Y, MAX_Y + 1):
        # ファイルのURLを作成します。
        url = BASE_URL.format(z=ZOOM, x=x, y=y)

        # 保存先のファイルパスを作成
        file_dir = os.path.join(SAVE_DIR, str(ZOOM), str(x))
        os.makedirs(file_dir, exist_ok=True)
        file_path = os.path.join(file_dir, f"{y}.png")

        # リクエストを送り、レスポンスをチェック
        response = requests.get(url, headers=HEADERS)
        if response.status_code == 200:
            # レスポンスのコンテンツ(画像データ)をファイルとして保存
            with open(file_path, "wb") as f:
                f.write(response.content)
        else:
            print(f"Failed to download tile {x}/{y} (status code: {response.status_code})")

        # プログレスバーでDLの状況を表示
        pbar.update(1)

# プログレスバーをクローズ。
pbar.close()

実行結果:

::1 - - [13/Oct/2023 18:03:11] code 404, message File not found
::1 - - [13/Oct/2023 18:03:11] "GET /tiles/12/3637/1611.png HTTP/1.1" 404 -
::1 - - [13/Oct/2023 18:03:11] code 404, message File not found
::1 - - [13/Oct/2023 18:03:11] "GET /tiles/13/7278/3224.png HTTP/1.1" 404 -
::1 - - [13/Oct/2023 18:03:11] code 404, message File not found
::1 - - [13/Oct/2023 18:03:11] "GET /tiles/12/3638/1611.png HTTP/1.1" 404 -
::1 - - [13/Oct/2023 18:03:11] code 404, message File not found
::1 - - [13/Oct/2023 18:03:11] "GET /tiles/13/7278/3223.png HTTP/1.1" 404 -
::1 - - [13/Oct/2023 18:03:11] code 404, message File not found
::1 - - [13/Oct/2023 18:03:11] "GET /tiles/13/7278/3225.png HTTP/1.1" 404 -
.
.
.