🗺️

ShapefileをGeoJSONへ変換する

2021/07/01に公開

前提のお話

行政組織が公表するGISデータはShapefile形式で配布されることがこれまで多かったです。これは業界標準のアプリケーションであるArcGISでサポートされている形式で、これまで多用されてきました。

ところがウェブブラウザ上で地図表現が様々に可能となってくると、以下のような理由から、Shapefile形式が利用しづらいことが明らかになります。

  • バイナリー形式でブラウザ上ではレンダリング出来ない(出来なくはないがそのための特別なしくみが必要)
  • 別々の拡張子を持つ複数のファイルで管理することの煩雑さ
  • 私企業がファイル形式の所有権を保有することのあやうさ

そこで以下の特徴をもつGeoJSONが広く使われるようになってきました。

  • テキスト形式でブラウザ上でレンダリング可能
  • 一つのファイルにすべてを格納
  • オープンフォーマット

過去のデータとして公表済の行政組織のGISデータは、わざわざコストをかけてShapefile形式からGeoJSON形式へ変換し再掲載することはなかなかなく、利用者が自分の手で変換作業を行う必要があります。

どんな方法があるのか

新しい手法から順に並べています。新しい手法の方がインストールにかかる手間が軽い傾向にあります。

  • mapshaper.org を利用する
  • Streaming Shapefile Parserに含まれる shp2json を利用する
  • GDALというパッケージに含まれる ogr2ogr 機能を利用する
  • QGISというデスクトップアプリケーションを用いる

どの手法を用いる場合でも、複数拡張子があるShapefileのうち、.shpファイルを読み込ませます。
(すると同一階層・同一ファイル名・別拡張子のファイル群は自動的に参照されます)

mapshaper.org を利用する

  1. mapshaper.orgにアクセスします。
  2. Shapefileをアップロードします。
  3. ファイルの内容が描画されます。
  4. 右上のExportボタンを押し、表示されるモーダル・ダイアログにて、File formatからGeoJSONを選びます。

Streaming Shapefile Parserに含まれる shp2json を利用する

公式サイト

(初回のみ)Nodeパッケージとしてインストールします

$ npm install -g shapefile

実行例(インプットファイルの文字コードを特定する場合)

$ shp2json --encoding Shift-JIS input.shp -o output.geojson
$ shp2json --encoding UTF-8 input.shp -o output.geojson

実行例(インプットファイルの文字コードを特定しない場合)

$ shp2json input.shp -o output.geojson

GDALというパッケージに含まれる ogr2ogr 機能を利用する

CLIからの実行

ogr2ogr -f GeoJSON *.geojson *.shp
ogr2ogr -f GeoJSON -t_srs crs:84 [name].geojson [name].shp

シェルコマンドを書いて、複数ファイルを一括変換

conversion.sh
function shp2geojson() {
  ogr2ogr -f GeoJSON "$1.geojson" "$1.shp"
}

for var in *.shp; do shp2geojson ${var%\.*}; done

参照

QGISというデスクトップアプリケーションを用いる

たくさんのウェブや書籍に記載があるため省略します。

Discussion