1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-01

概要

  • 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')

実行結果。

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')

実行結果。

chiriin.png

参考資料

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?