はじめに
国土数値情報のようなオープンデータでは地理データがShapefileとして公開されていることも多いです。
しかし、BigQueryではShapefileをそのまま読みこむことができません。
この記事では国土数値情報として公開されているようなShapefileをBigQueryに取り込む方法を紹介します。
Shapefileの準備
国土数値情報 湖沼データをダウンロードして使用しました。
座標系はJGD2000となっています。
GeoPandasのインストール
Python環境にGeoPandasをインストールします。
この記事の執筆にあたってはGoogle Colaboratoryを使用しており、手軽に試したい方はこちらをおすすめします。
もちろんそれ以外のPython環境でも動作します。
今回は以下のようにpipを用いてインストールしました。
!pip install ‘geopandas==0.12.2’
ShapefileをGeoJSONに変換
以下のようなスクリプトを実行してGeoJSONへ変換します。
BigQueryでは座標系としてWGS84を指定することが望ましいため座標系の変換も行います。
最後の行のdriverはGeoJSONではなくGeoJSONSeqを指定することに注意します。
import geopandas
# ファイル読み込み Colabの場合は事前にファイルをアップロードしておく
gdf = geopandas.read_file('zip://W09-05_GML.zip')
# 座標系の設定
gdf = gdf.set_crs('JGD2000')
# 座標系をWGS84に変換する
gdf = gdf.to_crs('WGS84')
# GeoJSON形式で変換する
gdf.to_file('output.geojson', driver='GeoJSONSeq')
GeoJSONからのテーブル作成
gcloud CLIを使って下記のコマンドを実行します。
今回はスキーマを自動検出としています。
gcloud CLIのインストールについては割愛します。
bq load \
--source_format=NEWLINE_DELIMITED_JSON \
--json_extension=GEOJSON \
--autodetect \
PROJECT_NAME:DATASET_NAME.TABLE_NAME \
output.geojson
実行すると読み込みが確認できました。
おわりに
BigQueryにShapefileで定義された地理データを読み込む方法を紹介しました。
これを応用してShapefileで公開されている豊富なオープンデータを活用しましょう。
参考
地理空間データの操作 | BigQuery – Google Cloud