GIS

ShapefileをGeoPandasでGeoJSONに変換してBigQueryへ取り込む方法

はじめに

国土数値情報のようなオープンデータでは地理データが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

API Reference – GeoPandas

Y.N
GRIでデータ分析やアルゴリズム開発、ForecastFlowの開発に携わっています。