Python + py-staticmaps で OpenStreetMap や地理院地図の画像を取得する


概要

  • Python 用ライブラリの py-staticmaps を使って OpenStreetMap や地理院地図の画像を取得する

今回の環境

  • macOS Catalina + Python 3.9.0 + py-staticmaps 0.1.1

py-staticmaps のインストール

py-staticmaps パッケージをインストールする。

$ pip install py-staticmaps

依存ライブラリとして pycairo や s2sphere 等もインストールされる。

OpenStreetMap の地図画像を取得する

ソースコード。

import staticmaps

# Context オブジェクトを生成してズームレベルと緯度・経度を指定
# 緯度・経度は create_latlng で生成した s2sphere.LatLng オブジェクトを指定
context = staticmaps.Context()
context.set_zoom(17)
context.set_center(staticmaps.create_latlng(35.170560, 136.882090))

# 画像の横幅と縦幅を指定して pycairo の cairo.ImageSurface オブジェクトを取得
image_surface = context.render_cairo(800, 600)

# 地図画像 PNG ファイルを出力
image_surface.write_to_png('osm.png')

実行結果。

地理院地図の地図画像を取得する

ソースコード。

import staticmaps

# 国土地理院の地理院タイル用の TileProvider オブジェクトを生成
tile_provider_chiriin = staticmaps.TileProvider(
  name='chiriin',
  url_pattern='https://cyberjapandata.gsi.go.jp/xyz/std/$z/$x/$y.png', # 地理院タイルURL
  attribution='Source: Geospatial Information Authority of Japan', # 日本語が使えないので英語表記
  max_zoom=18, # 使用可能な最大ズームレベル
)

# Context オブジェクトを生成して TileProvider とズームレベルと緯度・経度を指定
context = staticmaps.Context()
context.set_tile_provider(tile_provider_chiriin)
context.set_zoom(14)
context.set_center(staticmaps.create_latlng(35.170560, 136.882090))

# 画像の横幅と縦幅を指定して pycairo の cairo.ImageSurface オブジェクトを取得
image_surface = context.render_cairo(800, 600)

# 地図画像 PNG ファイルを出力
image_surface.write_to_png('chiriin.png')

実行結果。

参考資料