Code for Sapporo主催の第1回OpenStreetMapハッカソンに参加してきました。
第1回OpenStreetMapハッカソン – Code for Sapporo | Doorkeeper
最近、ここ2〜3年で緯度経度や地図を使うプログラムを作ること、または作りたいと思うことが多いです。
GISというようなすごいものではなく、もっともっともっともっと軽いものなのですが、GoogleMapを利用しようとするとライセンス的に難しくて使えず、でもお客さんからするとGoogleMapみたいのがいいってところですね(黒〜グレーゾーンでやってる人は多いのだろうけど・・・)。
そのため、以前からOpenStreetMapは気にはなっていました。
ただ、ポスグレはあまり知らないしGISのベース知識もないので、いろいろと後回しになっていました。
今回は良い機会ということでハッカソンに参加させてもらいました。
一番の発見
まず、OpenStreetMapは「サーバーにインストールして地図サーバーのベースにするためのオープンソース・ソフトウェア」だと思っていました。
もちろんそういった面もあるのでしょうが、そもそもGoogleMap的なサービスもあるのだと知りました。
基本中の基本なんでしょうけど、一番の収穫です(*´ω`*)
ハッカソン
今回のハッカソンでは、午前中に古川さんがOpenStreetMapについての概要や活用事例についてお話され、午後からはアイディアソンチームとハッカソンチームに別れ作業をしました。
私はハッカソングループに参加しました。
そもそもOpenStreetMapを触ったこともないので、まずはユーザー登録からです。
サービス自体はわかりやすくてユーザー登録してからチュートリアルにしたがって編集の仕方を覚えれば、結構簡単にエリアを追加していけます。
(いきなり間違った名称を設定してしまい、焦って削除しましたが、画面から消えなくて焦りましたw )
ハッカソンチームの内容ですが、そもそもみんなOpenStreetMapについて詳しいわけでもなかったので、グループの1人が個人で作成されたという MamaPapaMaps の札幌のデータを使って、同じようなものをOpenStreetMap側で作ってみることになりました。
ただ、いきなりOpenStreetMapに入れてしまうと確認や編集が大変だということで、MapBoxというサービスを利用してプロトタイプを作ることにしました。
MapBoxでは、背景の地図としてOpenStreetMapを利用して、MapBoxで持っているポイントデータをレイヤーをのせるような形で表示できます。(仕組みは調べていませんが、GoogleMapsAPIを利用して地図上にJavaScriptでポイントをデータを追加するような感じですかね?)
MapBoxではgeoJSON, csvなどからデータを取り込むことができます。CSVで取り込めるのは私のような地図素人には助かります。
また取り込んだデータは、mapBoxの画面上ではtitleとdescriptionしか表示されませんが、OpenStreetMapで使うタグ情報(例えば、amenity=kindergarden)も取り込むことができます。これらは画面上は見えないけど、MapBox内部では保持しているようで、geoJSONやKMLとして出力した時にはそれらの情報も一緒に出力されます。
今回は、札幌の保育所データをCSVに変換してもらい、OpenStreetMapで使用したいタグ情報をCSVに入れ込み、データを取り込みました。
できたのはこんな感じです。
データを取り込んで、MapBoxで表示するだけであれば割と簡単ですが、これを更にOpenStreetMapに取り込んで、札幌の幼稚園を検索! ということをするにはいくつか課題があります。
- 元データが、例えば札幌市のHPに乗っていた場合、それをOpenStreetMapに載せても大丈夫かという確認が必要となる。
今回のデータは国土数値情報(?)のデータ(?)みたいなので大丈夫っていってたような気がします。
http://nlftp.mlit.go.jp/ksj/ これかな?? - 住所から緯度経度を調査するとき、GoogleMapなんかは使っちゃだめ。
オープンなものとして、CSV Geocoding Service というサービスを使って住所から緯度経度を取得する必要がある。 - 住所からの緯度経度を取得したとしても、正確な位置がずれる。というか、町までしかない住所だと特に大幅にずれる。
その場合、地図を目で見て位置を合わせる必要があるが、そのときに位置をGoogleMapで確認して特定してはだめ。 - OpenStreetMapに保育所を取り込んだとすると、検索するためのタグが必要になるが、現在利用できるタグとしては、amenity=kindergardenしかない。幼稚園、保育園、認可、非認可、営業時間などがない。
(まだDraftだが、amenity=childecare2.0というタグがあり、これが使えるようになるとこの問題はクリアできる) - あとはそもそもOpenStreetMapへの一括取り込み方法を知らない(JOSMというツールを使うとよいと聞いた)
結局のところ、OpenStreetMapに新たに場所を特定して落としこむには、国が公開しているオープンデータを利用するか、草の根的にぽちぽちする以外は権利上むずかしいって印象でした。そりゃそうだよね。
地図を綺麗にするのはどうなんでしょ。災害があった地域をみんなで地図を書き足して綺麗にした、とかいってたけどそれは何をみてやったのだろう。
ひとまず、ちょっとわかったので、次は自前でOpenStreetMap鯖をつくろう。ポスグレポスグレー。