はじめに
こんにちは!千葉市在住の大学3年生です。
面白そうなコンテスト PLATEAU NEXT AWARD 2025 を見つけたので、「よーし、地元のデータで何か作ってみるか!」と思い、千葉市のPLATEAUデータを触ってみました。
すると、3D都市モデルのリアルさや網羅性に感動する一方で、開発者目線で見ると「おっと…これはなかなかヤバいぞ…」という点もいくつか見つかったので、供養も兼ねて共有したいと思います。
何がヤバかったのか?
早速ですが、僕が見つけたヤバいポイントは以下の3つです。
① GeoJSONのキーが日本語
まずはこちらのGeoJSONデータをご覧ください。避難所のデータの一部です。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [140.130926, 35.585171]
},
"properties": {
"レベル": 3,
"住所": "千葉県千葉市中央区南町1丁目",
"収容人数": "-1",
"名称": "JFE健保千葉グランド一帯",
"対象とする災害の分類": "指定なし",
"施設の種類": "広域避難所",
"施設規模": "-1",
"行政区域": "12101",
"高さ": "37.3"
}
}
お分かりいただけたでしょうか...。 propertiesの中のキーが見事に日本語です。
これは、多くのプログラミング言語で data.properties.住所 のような直感的なアクセスができず、 data.properties['住所'] のように書く必要があったり、環境によっては文字化けのリスクも伴います。 おそらく、行政が内部で使っているGISソフトのテーブル定義がそのままエクスポートされた結果だと考えられますが、APIとして使うには一手間必要になりそうです。
② 数値が全部 "文字列" になっている
もう一度、先ほどの避難所データを見てみましょう。
{
...
"properties": {
...
"収容人数": "-1",
...
"高さ": "37.3"
}
}
高さ は明らかに数値(浮動小数点数)なのに、"37.3" と文字列(String)型になっています。 これでは、プログラム側で parseFloat() のような型変換をしない限り、大小比較や計算ができません。
さらに興味深いのが "収容人数": "-1" です。 おそらく「データなし」や「不明」を意味する値だと思われますが、それなら null を使うのが一般的です。-1 という値は、うっかり数値変換するとそのまま計算に使ってしまい、バグの原因になりそうです。
まとめ:これはむしろチャンスかもしれない
と、ここまで「ヤバい」点を挙げてきましたが、これはオープンデータを扱う上での「あるある」であり、文句を言いたいわけではありません。 むしろ、このコンテストにおいて、これらの課題は大きなチャンスだと感じています。
課題1(日本語キー) → 英語キーに変換するスクリプトを書く
課題2(データ欠損) → 他のオープンデータ(地理院地図など)で補完する
課題3(データ型) → 適切な型に変換し、-1のような値はnullに置換する
こうした「データクレンジング(前処理)」を丁寧に行い、そのプロセス自体も作品の一部としてアピールすることで、「不完全なデータを適切に扱える技術力」を示す絶好の機会になります。
もし同じようにPLATEAUデータを触っていて「うーん…」となっている方がいたら、その課題こそが面白い作品への入り口かもしれません。 僕もこの「ヤバい」データと向き合いながら、開発を進めてみようと思います。
※追記
整形したgeoJSONデータをGitHubに公開しました。
https://github.com/tatsukikitamura/chiba-geoJSON