たたみラボ

  • about
  • member
  • r&d
  • blog
  • tatamicast

blog

RSS

Where2.0:Google Geocoderで複数の候補を返すサンプル

icon June 15, 2006 7:24 AM by ooi1 このエントリーを含むはてなブックマーク

大井宏友です。

舩見研究員のレポートにある、Google Geocoderのサンプルでは、複数の地名や駅名、たとえば愛知県と神奈川県にある「ふじがおか」駅を検索すると、愛知県の藤ヶ丘駅だけがヒットするのですが、それを拡張して複数の候補が戻ってきたらそれを全てプロットするサンプルを作成しました。

Google Geocoder APIを使った、複数候補をすべてプロットするサンプル

ソースコードは次のような感じです。

<scriptsrc="http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=(your key)"
type="text/javascript"></script>
<scripttype="text/javascript"src="./json.js"></script>
<scripttype="text/javascript">

//<![CDATA[
var map = null;
var geocoder = null;
var aaa;
var map_bounds;

function showAddress(address) {
geocoder.getLocations(address, myCallback);
}

function myCallback(response){
map.clearOverlays();
var aaa = "";

if (!response || response.Status.code != 200) {
alert("Sorry, we were unable to geocode that address " + response.Status.code);
} else {
aaa += '<ol>';
for(var i = 0; i< response.Placemark.length; i++){
place = response.Placemark[i];
address = place.address;
aaa += '<li>' + place.address + '</li>';
point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
if(i == 0){
map_bounds = new GLatLngBounds(point);
}
marker = new GMarker(point);
map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(place.address + '<br>' + '<b>Country code:</b> '
+ place.AddressDetails.Country.CountryNameCode);
});

map_bounds.extend(point);
}

aaa += '</ol>';

var northEastPoint = map_bounds.getNorthEast();
var southWestPoint = map_bounds.getSouthWest();
var newcenter = new GLatLng((northEastPoint.lat() + southWestPoint.lat()) / 2 , (northEastPoint.lng() + southWestPoint.lng()) / 2 );
map.setCenter(newcenter);
var zLevel = map.getBoundsZoomLevel(map_bounds);
map.setZoom(zLevel);
document.getElementById("aaa").innerHTML = aaa;
}
}

function ll2address(){
var point = map.getCenter();
}
//]]>
</script>

geocoder.getLatLon()のかわりに、geocoder.getLocations()を使用します。このメソッドのCallbackには、リファレンスに書かれているすべてのJSONオブジェクトが渡されますので、サンプルではその中のエラーコードを見て成功だった場合はすべての候補をプロットして、addressをリストに追加しています。失敗だった場合はエラーコードを表示するようにしました。

ひらがながカタカナに!

住所の代わりに『勝どき駅』と、最後に『駅』をつけるとちゃんと駅の緯度経度を優れものですが、残念ながら駅名検索をすると、addressの値のすべてのひらがながカタカナになってしまいました。

  • 『勝どき』→『勝ドキ』
  • 『あざみ野』→『アザミ野』
  • 『藤ヶ丘』→『藤ガ丘』
こんな感じですので、複数候補をユーザーに選択させたい場合は一工夫が必要ですね…残念

(追記)この記事を書いた二日後に、日本のGeocoderは提供中止になってしまいました。帰国後に識者の方々とお話したのですが、技術的にではないところで「いろいろある」みたいで、今後も復活するのは難しそうです。

TRACKBACKS

ページトップへ



(C) RECRUIT MEDIA COMMUNICATIONS CO., LTD.