地名や住所から緯度・経度を取得する

Yahoo! JavaScriptマップAPIで、Y.GeoCoder()を使って、地名や住所から緯度・経度を求めるサンプルプログラムです。

住所
function getLatLng(address) {
  // いったん地物をクリア
  myMap.clearFeatures();

  // ジオコーダのコンストラクタ
  var geocoder = new Y.GeoCoder();

  // geocodeリクエストを実行。
  // 第1引数はqueryプロパティに検索したい住所を入れればOK。
  // 第2引数はコールバック関数。
  geocoder.execute({
    query : address
  } , function(ydf) {
    // 結果が1つ以上あれば・・
    if (ydf.result.count > 0) {
      // 結果の表示範囲。結果が1つとは限らないので、Y.LatLngBoundsで用意。
      var myBounds = new Y.LatLngBounds();

      for (var i = 0; i < ydf.features.length; i++) {
        // 緯度経度を取得
        var latlng = ydf.features[i].latlng;

        // 検索結果地が含まれるように範囲を拡大
        myBounds.extend(ydf.features[i].latlng);

        // あとはご自由に・・・
        var myMarker = new Y.Marker(ydf.features[i].latlng);
        myMarker.bindInfoWindow("(緯度,経度)=<br>(" + ydf.features[i].latlng + ")<br>" + ydf.features[i].property.Address);
        myMap.addFeature(myMarker);
      }
      // 範囲を移動
      myMap.drawBounds(myBounds);

    } else {
      alert("見つかりません。");
    }
  });
}

Y.GeoCoder()クラスのexecuteの第1引数の query プロパティに住所や地名を与えると、第2引数のコールバック関数には、検索結果が引数として渡されます。見つかった場合には、結果がたとえ1つであっても配列として渡されるので、ループさせて取り出します。

見つからなかった場合はresult.countやfeatures.lengthが0になるのでそれで判定。