都道府県境界用のデータで取得したzipファイルを解凍すると、以下の7種類のファイルがアーカイブされています。
- ne_10m_admin_1_states_provinces.cpg
- ne_10m_admin_1_states_provinces.dbf
- ne_10m_admin_1_states_provinces.prj
- ne_10m_admin_1_states_provinces.README.html
- ne_10m_admin_1_states_provinces.shp
- ne_10m_admin_1_states_provinces.shx
- ne_10m_admin_1_states_provinces.VERSION.txt
この、shp を使用して GeoJSON に変換します。変換には、README、VERSION 以外のファイルも使われるので、このディレクトリの状態で変換する方が賢明です。
GeoJSON への変換には、GDAL ライブラリのogr2ogrを使用します。
単純に、shp → GeoJSON であれば次のコマンド形式で変換できます。
|
ogr2ogr -f 出力形式 出力ファイル 入力ファイル |
本来であれば、範囲を日本だけに絞りたいところですが、shp をエディタで見ることもできないので取り敢えず単純に変換します。
|
ogr2ogr -f GeoJSON ne_10m_admin_1_states_provinces.geojson ne_10m_admin_1_states_provinces.shp |
その結果、65MB程の大きなGeoJSON ファイルが出力されます(変換時にエラーが出ますが、ファイルが出力されていれば問題ありません)。
GeoJSON のファイルサイズが大きいので、エディタによっては読み込めないかもしれません。
私の場合は、Chrome アプリの JSON Editor を使用していますが、これが実に優れモノで JSON を使用する場合の必須アイテムですね。
閑話休題、このデータ内に admin と言う項目があり、そこに国名が入っているので、これで国を絞ることが出来そうです。
ogr2ogr には、sql 指定が可能なので、国名を指定して再実行してみます。今回は、出力を japan.geojson にします。
|
ogr2ogr -f GeoJSON -sql ` "SELECT * FROM ne_10m_admin_1_states_provinces WHERE admin = 'Japan'" ` japan.geojson ne_10m_admin_1_states_provinces.shp |
これで、出力ファイルは650KB程まで縮小します。
その中を、エディタや先程の JSON Editor で見ると、以下のような問題が見えて来ます。
- データの並びが都道府県順でない
- 不要なコードが多数ある(都道府県名の多国語表記など)
- データの欠落(静岡県が???表記になっている)
都道府県順出力は ORDER BY句を指定することで実現できそうです。
また、不要な項目を排し必要な項目だけを選択すれば、2と3の問題も解消できますので
先程のコマンドを次のように変更します。
|
ogr2ogr -f GeoJSON -sql ` "SELECT type,iso_3166_2,name_ja,latitude,longitude FROM ne_10m_admin_1_states_provinces WHERE admin = 'Japan' ORDER BY iso_3166_2" ` japan.geojson ne_10m_admin_1_states_provinces.shp |
各項目の内容は以下の通り。
№ |
項目名 |
内容 |
1 |
type |
GeoJSON 必須項目 |
2 |
iso_3166_2 |
都道府県コード:JP-XX の形式で記録 |
3 |
name_ja |
都道府県名(任意) |
4 |
latitude |
都道府県庁の緯度(任意) |
5 |
longitude |
都道府県庁の経度(任意) |
GeoJSON のプロパティには、ユニークな識別子を設定する必要があるとのことなので、iso_3166_2 がそれに該当します。
これで、見通しの良いすっきりした GeoJSON が作成できたと思います。