地理院地図などで使用されるGeoJSON形式のデータから、名前(name)と緯度・経度をCSV形式に抽出する作業は、手作業では非常に手間がかかります。本記事では、GeoJSONの構造を理解し、半自動でCSVに整形する方法を解説します。
GeoJSONの構造を理解する
GeoJSONは通常、FeatureCollection形式で保存され、各Featureにプロパティ(nameなど)とgeometry(PointやPolygon)の座標情報が含まれています。
1地点が複数行に跨る場合は、coordinates配列のネストが深くなっていることが多く、単純にコピーしてもCSVに変換しにくくなります。
Pythonでの半自動抽出方法
Pythonの標準ライブラリやpandasを使うことで、GeoJSONからname、緯度、経度を抽出し、CSVに整形できます。
具体例として、次のような手順があります。
- jsonモジュールでGeoJSONを読み込む
- Featureごとにproperties[‘name’]とgeometry[‘coordinates’]を取得
- 緯度経度を列に分けてリスト化
- pandas.DataFrameに変換し、CSVに書き出す
CSVの列配置例
目的の形式に合わせて、列を A 空欄, B “name”, C 空欄, D 緯度, E 経度 に並べることが可能です。リスト化したデータフレームに空欄列を追加し、必要な順序に並び替えます。
例えば、df = pd.DataFrame(data, columns=[‘name’, ‘latitude’, ‘longitude’])として、空欄列を挿入して列順を変更することができます。
ポイントと注意点
GeoJSON内の1地点が複数行に跨る場合、coordinatesが多次元配列になっている可能性があります。Pointタイプであれば、coordinates[0]が経度、coordinates[1]が緯度です。PolygonやLineStringの場合はループ処理が必要です。
不要なネストをflatten(平坦化)して抽出すると、CSV化がスムーズになります。
まとめ
GeoJSON形式のデータからname、緯度、経度を半自動でCSVに抽出するには、Pythonとpandasを使った処理が有効です。Featureごとのプロパティとgeometryを取得し、必要な列構成に整形することで、手作業を大幅に省略できます。複数行に跨る座標はネストを平坦化することを忘れずに行いましょう。


コメント