愛車:マツダアテンザ
Webを中心とした、ビジネス&テクノロジーに関する思いつき
by F-shin
[ このサイトについて ] [ F-shinについて ] [ トップ ]
author:えふしん
photo_20.jpg
藤川真一について


モバツイの中の人
人の良いジョンカビラと言われます。ソフト哲学者を目指します。
AMN sponsor rolls
応援します!
ツイッターやるなら
for iPhone App
Google Friend Connect
このカテゴリ[Web系]の最新30件
ワーナー作品のオンデマンド配信サービス「ワーナーオンデマンド」 動画ベーススライドプレゼンよりも、スライドベース動画プレゼンの方がWeb向き。 mixiアプリやるならAmazon EC2 モバツイが月間1億PV到達の見通し ツイッターとはなんぞや?のわかりやすい回答 ツイッターか?ブログか?思考の整理学 【Best Mobile Based Twitter App】モバツイッターがTOP5にノミネートされました。投票のご協力を!【敵はtweetie2】 【Best Mobile Based Twitter App】モバツイッターのOpen Web Awardsへの投票のご協力をお願いします! モバツイッターが日経ビジネスアソシエに掲載されました。 ネットビジネスで商標は大事です。 twitterによって世界が集約され心の戦争が起きる おまとめマンxTwitterキャンペーン セカイカメラは、21世紀のネットスケープになるか?! 「食事中なう」が無意味だと?あれ?ライフログってなんだか意味わかってる? 岡田有花さんに取材された! EC2のロードバランサーのIPアドレスが変わる罠 twitterの「つぶやき」の有効期間は2分 究極のスモールスタートの方法 自宅サーバからEC2へ 技術や用語に興味ないユーザーを「一般ユーザー」と括るのキケン アマゾンEC2 ナイトセミナ 第 2 回に出演します。 モバツイッターの政治家アカウント一時サスペンドの話 【twitter話】ネットを使う人には2種類のタイプがある ビバ☆ヒウィッヒヒーは、ネットコミュニケーションの問題をズバリ突いている うっかりしてたらモバツイの延べ登録ユーザー数が10万人を超えていました。 POPitがカラメルの商品紹介&アフィリエイトに対応! twitterは「みんなのもの」じゃない。 入力フォームの美学と現実 日本人にとって一番使われてるハッシュタグ ツイッターはステートレスなコミュニケーションでありつづけて欲しい。 夜のプロトコル「NO_04「We love twitter & tumblr.」~あの娘、ぼくがリブログ決めたらどんな顔するだろう~」に参加した。
[このカテゴリをもっと見る]
F's Garage関連
Powered by
Movable Type
■お知らせ
モバツイッターが、Open Web AwardsのBest Mobile Based Twtter Appを受賞しました!

November 12, 2008

携帯GPSの緯度、経度情報から「文字の住所」を引くのが逆ジオコーディング(リバースジオコーディング)

Google Maps apiに新たに追加された逆ジオコーディングは、モバツイッターのイマココにとっては待ってました!的なサービスで、公開されたことを聞きつけたその日に組み込んだのですが、どうも取れない住所があるとのことで、多くの人の力を借りてテストしているので、ここに公開しておきます。


まずこんな感じのURLに、latとlonに緯度と経度をそれぞれ渡してGoogleに問い合わせる。



http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll=${lat}%2C${lon}&key=${apikey}


すると、まぁ普通は、こんな感じのレスポンスが返ってくるわけですよ。




<kml xmlns="http://earth.google.com/kml/2.0"><Response>
<name>xx.xxxxx,xxxx.xxxxxx</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>

<Placemark id="p1">
<address>Japan東京都渋谷区宇田川町40?5</address>
<AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>JP</CountryNameCode>
<CountryName>Japan</CountryName>
<AdministrativeArea>
<AdministrativeAreaName>東京都</AdministrativeAreaName>
<Locality><LocalityName>渋谷区</LocalityName>
<DependentLocality>
<DependentLocalityName>宇田川町</DependentLocalityName>
</DependentLocality>
</Locality>

</AdministrativeArea></Country>
</AddressDetails>
<Point><coordinates>xx.xxx.,xxxxxx</coordinates>
</Point>
</Placemark>
<Placemark id="p2">
<address>Japanジーンズメイト・渋谷東急ハンズ前店</address>
<AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>JP</CountryNameCode>
<CountryName>Japan</CountryName>
</Country>
</AddressDetails>
<Point>
<coordinates>xxxx,xxx,xxxx</coordinates>
</Point>
</Placemark>




故にこんな感じの関数でさくっと住所を取ってました。



require_once "HTTP/Request.php";
$api_url ="http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll=${lat}%2C${lon}&key=${apikey}";

$req =& new HTTP_Request($api_url);
if (!PEAR::isError($req->sendRequest())) {
$ret = $req->getResponseBody();
}else{
return false;
}

if (isset($ret)){
try{
$areas = new SimpleXMLElement($ret);
}catch(Exception $e){}
}

if (!isset($areas) || !$areas || $areas->Error){
return false;
}

if (isset($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->AdministrativeAreaName)){
$pref = strval($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->AdministrativeAreaName);
}else{
$pref = '';
}

if (isset($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->LocalityName)){
$city = strval($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->LocalityName);
}else{
$city = '';
}

if (isset($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->DependentLocality->DependentLocalityName)){

$town = strval($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->DependentLocality->DependentLocalityName);
}else{
$town = '';
}
if (isset($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->Thoroughfare->ThoroughfareName)){
$town = strval($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->Thoroughfare->ThoroughfareName);
}else{
$town = '';
}

if (isset($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->DependentLocality->Thoroughfare->ThoroughfareName)){
$number = strval($areas->Response->Placemark->AddressDetails->Country->AdministrativeArea->Locality->DependentLocality->Thoroughfare->ThoroughfareName);
}else{
$number = '';
}

$loc_data = array(
'lat'=>$lat,
'lon'=>$lon,
'pref'=>$pref ,
'city'=>$city,
'town'=>$town,
'number'=>$number);

return $loc_data;

そしたらうまく表示されない場所があるとのこと。

そのためモバツイユーザーの方にご協力を仰いで、うまくいかない情報を教えてもらって、どんな情報が返ってきてるのか調べてみました。

まず、ダメなのはこんな感じ。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>xxxx.xxxxx,xxx.xxxx</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>Japan阪神高速13号東大阪線</address>
<AddressDetails Accuracy="6" xmlns="urn:oasis:names:tc:ciqxsdschema:xAL:2.0">
<Country>
<CountryNameCode>JP</CountryNameCode>
<CountryName>Japan</CountryName>
<AddressLine>阪神高速13号東大阪線</AddressLine>
</Country>
</AddressDetails>
<ExtendedData>
<LatLonBox xmlns="http://maps.google.com/geo?output=kml">
<north>xx.xxxx</north>
<south>xx.xxxx</south>
<east>xx.xxxx</east>
<west>xx.xxxx</west>
</LatLonBox>
</ExtendedData>
<Point>
<coordinates>xx.xxxx</coordinates>
</Point>
</Placemark>
</Response>
</kml>

は、阪神高速・・・・。

高速道路が捕捉されてしまうと、道路が優先されるらしい。

更に、最悪のケースだと、

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>xxxx,xxxxx</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>Japan東北自動車道</address>
<AddressDetails 
Accuracy="6" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>JP</CountryNameCode>
<CountryName>Japan</CountryName>
<AddressLine>東北自動車道</AddressLine>
</Country>
</AddressDetails>
<Point>
<coordinates>xxxx,xxxx,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>

東北自動車道ってどんな長さだよ。

高速道路が取れるのはそれはそれで嬉しいケースもあるでしょうが、できれば住所の付属情報に高速道路をぶら下げて欲しいところだし、何よりイマココでは嬉しくないので、結局、こういう情報が返ってきた場合は、他のサービスに取りに行かざるを得ない状況です。

(あんたはカーナビかいな。首都高の下にある道走ってたら高速乗っちゃってるーみたいな)

逆ジオコーディングは、以前は主に個人の方がご提供されていて、モバツイッターでもinvcoderというサービスを使わせていただいていたのですが、ある時期から連続で500エラーが出まくりになって、うわーこりゃ、どこかのサービスが負荷かけまくってるんだろうなぁとか思ってたのですが、残念ながらGoogleがダメだったら、invcoderに問い合わせて、それがダメなら、シリウスラボさんの逆ジオコーディングサービスに問い合わせに行くみたいな状態に戻っちゃいました。

一番近いの緯度経度情報を抽出するロジックのコードさえあれば自分で作るんですが。。(数式見たけど、難しくて意味がわからん)


ということで、低コストに利用可能な逆ジオコーディングの決定版もない状態、なのかな?!


##ていうかドキュメントも読まずに組み込んだので実はそうならないための引数とかあったらごめんなさい。

■同じカテゴリ[Web系]のエントリー
<<前の記事 ロリポップ 7周年でファミコン(本物)プレゼントキャンペーン!
>>次の記事 Twitterが生き残るために、を読んだ
■このblogの書き込み最新3件
グッドデザイン賞に出てたおしゃれなサイクロン掃除機がなんと半額以下。 SEOには、運用のSEOと設計のSEOの2つのフェーズがある。 ワーナー作品のオンデマンド配信サービス「ワーナーオンデマンド」
この記事への提案、提言一覧

使いづらいには変わりないというオチですが、複数情報がとれるようですねー

検証されている方の日記がありました。

GoogleMapsAPI の逆ジオコーダー機能 ~続編~|創業日記
http://fairyware.jp/weblog/2008/11/googlemapsapi_2.html

2008/11/14 22:59 つー
この記事への提案、提言









あなたの情報を保存しますか?