開発裏話

それはマッシュアップ・アワード4で「フライヤーコレクション」のコーディングをしている時だった。
個展の情報を取得して、そのギャラリーの場所をグーグルマップ上にアイコンで表示しようとしていた。
あるとき、ANNAIのCIO 紀野がこう言った。
京都だけぜんぜん場所が取得できないんですよねぇ・・

地図となると余計なことまでしたがるロカポの上田が、京都の「○○通○○東入ル」の住所、
特にメジャーと思われる「はてな」本社の住所で各地図サイトで調べてみた。
検索対象『京都市中京区御池通間之町東入ル』
その結果がこれ。

 

Googleマップ: 検索結果なし

googlemaps_ng

Yahoo!地図: 検索結果なし
(注:Yahoo!さんは2008/9/1に通り名検索に対応したそうです!)

yahoomap_ng

 

WindowsLiveサーチ: 「京都市中京区」までに切られて検索windowslive_ng

 

Mapion通り名には対応していません」 ある意味潔いmapion_ng

アルプスラボ 検索結果なしalpslab_ng

 

ちず丸 「京都市中京区」までに切られて検索chizumaru_ng

 

MapFanWeb 検索結果なしmapfan_ng

 

ゼンリンいつもガイド 検索結果なしitsumoguide_ng

 

Goo地図 検索結果なしgoomap_ng

 

ライブドア地図 「京都市中京区」までに切られて検索livedoormap_ng

 

NAVITIME京都市中京区御池通間之町東入ル」と出てきたので「もしかすると?」と期待するも・・・・・・navitime_looksok

結局「京都市中京区の住所一覧からプルダウンしていかないといけない」つまりは「京都市中京区」までに切られて検索
(注・・・これはNavitimeさんのトップページから通り名検索ができなかっただけで、地図のあるメイン画面や携帯電話サービスからはこの当時も検索できていたようです。2009/3) navitime_ng

と勝手に「中京区」で切られてしまうものをアウトとすると

全滅!

 

普段から地図でいろいろやっているものの、コレにはさすがに驚いた!。
(注:Yahoo!さんは2008/9/1に通り名検索に対応したそうです!)
(注: 弊社では未確認ですが、
2009/2/25にNaviTimeさんから頂いたご連絡によると通り名対応されているそうです。)

グーグルやYahooでは時々検出することもあるが、動きから予測すると、ローカルサーチ用の情報として登録されているレストラン・ホテル・店舗などの住所表記と一致した場合だけのようで、汎用的に使えるわけではないようだ。

京都の通り名のジオコーダくらいあるだろう?と思って、地図・GISの事ならなんでも知っているオークニーの森さんに尋ねてみると、するとジオセンスの小林さんが京都ジオコーダ(京都通り名マップ)を完成させたらしいという情報が!
ジオセンスの小林さんなら既に面識があったので、早速アポとって尋ねる。

小林さんによると、京都ジオコーダは作りかけで、京都の各通りの座標データ入力まで終わったところらしい。更正途中とのことだが各交差点の位置が分かれば大体計算で出せそう。
ということで小林さんにご承諾頂いて通りのデータを頂いた。
これと平行して、京都市役所に聞き込みに行く。京都市役所で「道路明示課」なる部署に聞きに行く。担当の方は親切だったが、どうもここは担当部署ではないらしい。
改めて受付で

「京都の通り名の規則を調べているのですが、何処の課に行けばいいですか?」

受付の人は親切に市街地整備課やら観光課やら街歩き推進課(だったかな?)やら片っ端から電話をかけてくれるも、ほとんどタライ回し状態。
最終的に普通の市民相談を受け付けているところのお兄さんが、個人的見解をいろいろ教えてくれた。
あとは、街で郵便配達中の人を捕まえてきいたり、実際に街を歩いてみたり。あとは京都出身の友人知人に問い合わせる。

その時の調査結果はこちらにまとめてある。

その後、通り名のデータは頂いたが、そこから交差している全交差点の座標を計算することに。
単純に全通り×全通りで交差地点検出のプログラムを書いたが、通りが300ほどあり、そのなかの全地点(正確には線分)を総当りで計算すると、処理が多すぎてウチのパソコンでは無理。

実はGISは素人のロカポ上田。GISを旨く使えば交差点を出すなんて早いはずなんですけど・・・

なんとか半分手作業で全交差点のデータを作成。
ここまでくればあとは簡単。たぶん。

もともと正確な場所を表す表記ではないため、簡易的にある交差点と隣の交差点の中間ということにしている。

さあ、出来た、と思ってテストのサンプルとなる京都の住所を抜き出すべく、Googleで「京都市」で検索してみると、、、

なんと、、、

「住所:京都市三条大橋西詰」

・・・おいおいおいおい、、それは三条木屋町と書いてくれないと困ります・・・
でも探してみると、よくあるようなので
鴨川、加茂川、高野川のメジャーな橋についてはこれも対応!
橋用にもう一つテーブルを作ることになってしまった。。。。

さて、いよいよリリース。
その前に、これを使うのはマッシュアッパーだろうから、マッシュアップアワードをはじめ数々の賞を取り続けているマッシュアッパーの頂点の一人!ともいえるクリエイトシステムの太田さんに聞いてみよう!ということに。

さすがは太田さん。これまで沢山のマッシュアップサービスを世に出してきただけあって、リクエストはすごくシンプルかつ納得の答え。
それは、インプット・アウトプットを独自のフォーマットとせず、グーグルやヤフーのものと同じフォーマットにして、最小限の変更で京都ジオコーダが使えるようにして欲しいと。
ごもっとも。

ということで、急遽改造に。
できるだけ最小限の変更で既存のアプリが京都対応になれば、全てのマッシュアッパーに使ってもらえる!

ということで、こんな感じで京都対応に変わります。詳しくはAPIの使い方をご覧ください。
1.グーグルのHTTPサービスの場合は
変更前                     http://maps/google.com/maps/geo?・・・・・・・・・・・
変更後 http://api.geodosu.com/{API_KEY}/maps/google.com/maps/geo?・・・・・・・・・・・

2. ヤフーのHTTPサービスの場合は
変更前                     http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch?・・・・・・・・・・・
変更後 http://api.geodosu.com/{API_KEY}/map.yahooapis.jp/LocalSearchService/V1/LocalSearch?・・・・・・・・・・・

3.グーグルのAPIの場合は
スクリプトを読み込んで
<script src="http://api.geodosu.com/geodosu/gclientgeocoder_geodosuextension.js" type="text/javascript" charset="utf-8"></script>
変更前 geocoder = new GClientGeocoder();

変更後 geocoder = new GClientGeocoderWithGeodosu(”{API_KEY}”);

これだけです。

 

「京都の通り名が検出できないのです」

と言っても

「それは無理でしょう、、仕方ありません」と当然のように皆さん(京都の人も含む!)言いますが、まだどこにも無いなら、作らないと!

ということで京都通り名ジオコーダー「ジオどす」、ぜひ使ってください。

ちなみに

「京都市」が入っていれば「○○区」が省略されていてもOK
(口語風に「京都市四条烏丸」でもOK)

口語風に「四条烏丸」だけでもOK(2009年2月7日より)

通り名の送りは「通り」「通」「(少略)」のどれでもOK
上ル下ルの「ル」は「る」でも「がる」でも「ガル」でもOK
東入ル西入ルの「入ル」は「入る」でも「イル」でもOK
とかなり融通の利く仕様になってます!