🗺️

Overture Maps Foundationのデータを活用したい (1): Placesデータのダウンロード

2023/08/04に公開

はじめに

Overture Maps Foundationというものがあります。

https://overturemaps.org/

背景はこのあたりも見ていただけると分かります。

https://pc.watch.impress.co.jp/docs/news/1464782.html

Overture Maps Foundationは、世界中の地図サービスを強化できるような、共有アセットとしてのオープンな地図データの開発を目的とした取り組み。OpenStreetMapなど既存の地図データと、参加メンバーによる新たな地図データ、加えてAIやマシンラーニング技術を活用し、「現実世界の生きたデジタル記録」としての地図構築を進めていくという。

地図情報は有料/無料のデータソースやAPIが入り乱れているのが現状で、なかなか開発が大変という話があります。そのため、こういった動きは注視しています。

News: データ公開 (2023/7/26)

先日7/26に最初のデータがリリースされました。

https://overturemaps.org/overture-maps-foundation-releases-first-world-wide-open-map-dataset/

ここではPlacesデータをダウンロードして、確認してみた内容のログを残そうと思います。

Places データのダウンロード

データですが、こちらからダウンロードできます。

https://github.com/OvertureMaps/data

Release Notesなどはこちらにあります。

https://overturemaps.org/download/

ライセンスはこのように設定されています。

  • Places Theme: CDLA Permissive v 2.0
  • Buildings Theme: ODbL
  • Transportation Theme: ODbL
  • Administrative Boundaries Theme: CDLA Permissive v 2.0

ダウンロードですが、githubレポジトリにも書いてあるとおりS3経由・Azure経由で、Parquetファイルがダウンロードできるようです。

レポジトリには、Amazon Athenaを使う方法、Microsoft Synapseを使う方法、DuckDBを使う方法、ファイルを直接ダウンロードする方法、の4パターンのドキュメントが用意されているようです (日本語が不正確かもしれませんが…)。

例えば、Placesデータですが、7/26のデータについてはこのように記載されています。

実際にParquetファイルをダウンロードしてみます。といっても、以下のコマンドを実行するだけです。aws-cliは適当にインストールします (M1 Mac環境で試したので、brewでインストールしました)。Overtureはデータを保存したディレクトリです。

aws s3 cp --no-sign-request --recursive s3://overturemaps-us-west-2/release/2023-07-26-alpha.0/theme=places Overture

結果として次のようにダウンロードされました(端末を適当にキャプチャしました)。個別のファイルは280MBぐらいになっているようです。

image

データを確認してみる

pandas

Parquet形式を読みたいので、Pythonから読んでみます。Parquet形式自体はPandasが読めるようですが、OvertureのデータはPandasへの変換で対応していないデータ型があるようで、現状読むことができません。

# 簡単に読むコード
import pandas as pd
pd.read_parquet("./20230725_210643_00079_ayc64_01c760ca-02aa-4387-8b71-b2eaa6c7c700")

次のようなエラーになります。

ArrowNotImplementedError: Not implemented type for Arrow list to pandas: map<string, string ('array_element')>

pyarrow

Pandasがデータを読めずに困ったので、まったく使ったことがないですが pyarrow でデータを読んでみました。こちらは読み込みまでは確認しました。1,942,141 行のデータが格納されているみたいですね。

import pyarrow.parquet
data = pyarrow.parquet.read_table("20230725_210643_00079_ayc64_01c760ca-02aa-4387-8b71-b2eaa6c7c700")

# => 1,942,141
print(data.num_rows)

ダウンロードしたファイルは30個あったので、概算すると30×200万=6000万の情報がダウンロードできているのでしょうか (全部確認していませんが…)。

どのようにデータが格納されているか、は scheme の方に書かれていると思います。実際にPOIのデーアを確認するために、Places の scheme をチラ見してから、データを見てみます。

https://github.com/OvertureMaps/schema/blob/main/schema/places/place.yaml

例えば0行目のaddressを見てみると、次のようなデータでした。

print(data["addresses"][0])

# => <pyarrow.ListScalar: [[('postcode', 'LL57 2NX'), ('freeform', 'Ffordd Bronwydd'), ('country', 'GB')]]>

GBのPOIなんですね。

まとめ

データをダウンロードするまではできたのですが、まだうまく活用できていない状態でした。引き続き触ってみようと思っています。

続き

続きの記事をこちらに公開しました。

https://zenn.dev/takilog/articles/e96d8c1e132db4

Discussion