🗾

Pythonライブラリを使って、Mapbox の Tilesetsを更新する方法

2024/06/13に公開

Pythonを用いてMapboxのTilesetsを更新する方法を紹介いたします。

※ChatGPTと対話しながらたどり着いた内容ですので、もし間違っている点などございましたらコメントいただけると助かります。

準備1:MapboxのPythonライブラリをインストール

pip3 install mapbox

https://pypi.org/project/mapbox/

準備2:Mapbox Studio でTileset を作成

https://www.mapbox.jp/mapbox-studio

処理:CSVデータをアップロードしてTilesetを更新

import mapbox
from mapbox import Uploader

#アクセストークン
mapbox_token = 'aaa'
service = Uploader(access_token=mapbox_token)

#ターゲットとなる mapboxのtilesetを指定
uploads_dest_id = 'bbb'
tileset_name = 'ccc'

with open('/Users/yourname/file.csv', 'rb') as src:
    print(type(src))
    upload_resp = service.upload(src, tileset=tileset_name, name=uploads_dest_id)

if upload_resp.status_code != 201:
    print("Upload failed:", upload_resp.json())
else:
    print("Upload successful")
  • uploads_dest_id は、Tilesets の "アカウント名.xxxxx" の "xxxxx" の部分
  • tileset_name は、任意のものを設定可能

実践:シェアサイクルステーションマップ

どんな場面でこのプログラムを使っているかというと、
地図上に可視化したシェアサイクルのステーションのデータを日次で更新しています。

https://api.mapbox.com/styles/v1/keiji/clq3vqvpg00o601re68ogfe9w.html?title=view&access_token=pk.eyJ1Ijoia2VpamkiLCJhIjoiY2pvMHZ5ODg4MDRrdjNwcXFwNnA2cWpiZSJ9.lIZIHvCxbduQcrBGEhJ-IQ&zoomwheel=true&fresh=true#11.95/35.6696/139.64287

調査:作業メモ

調べてみたが、結局よくわからないこともあったので後学のためにメモを残しておきます。
ご存じの方がいらっしゃいましたら、ぜひコメントいただけると幸いです。

  • max_zoomlevel, min_zoomlevelなどを指定してアップロードするオプションは見つけられなかった。

  • 作成されるtileのprecision(精度)やTileの面積がどのように決められるのかは調べてみたがわからず、アップロード時に指定する方法もなさそうだった。

  • 実際、2つの類似したファイルからtileをupload をしたが、precisionとTileの面積が大きく異なるTileが作成された。特に実務上問題があるわけではないのだが、理由がわからないため少し気持ちが悪いなといったところ。

参考:公式マニュアル

https://docs.mapbox.com/api/maps/uploads/

Discussion