2008/03/13

[google map]getLatLngのコールバック関数を外だし関数にする

GoogleMapApiのサービスセクションのジオコーディングに紹介されているgetLatLngメソッドは、コールバック関数に無名関数を参照していて、関数を外だしにできなかなーと思っていろいろ試してみたらできたので書いてみたいと思います。

まずはじめにAPIに紹介されていたソース

var  map  =  new  GMap2(document.getElementById("map_canvas"));
var  geocoder  =  new  GClientGeocoder();
function  showAddress(address)  {
    geocoder.getLatLng(
        address,
        function(point)  {
            if  (!point)  {
                alert(address  +  "  not  found");
            }  else  {
                map.setCenter(point,  13);
                var  marker  =  new  GMarker(point);
                map.addOverlay(marker);
                marker.openInfoWindowHtml(address);
            }
        }
    );
}

via:[googleMapsApi]ジオコーディング

で、今回問題となっているのは、コールバック関数の

function(point) {
・・・
}

の部分で、これを外だしファンクションに変更

var  map  =  new  GMap2(document.getElementById("map_canvas"));
var  geocoder  =  new  GClientGeocoder();
var  gv_address;
function  showAddress(address)  {
    //グローバル変数にセット
    gv_address = address;
    geocoder.getLatLng(
        gv_address,
        lf_setGmap
    );
}

//経度・緯度を取得後呼ばれる関数
function  lf_setGmap(point)  {
  if  (!point)  {
    alert(gv_address  +  "  not  found");
  }  else  {
    map.setCenter(point,  13);
    var  marker  =  new  GMarker(point);
    map.addOverlay(marker);
    marker.openInfoWindowHtml(gv_address);
  }
}

上の実装方法で、外だしファンクションでいけるはず!!

コールバック関数を外に出して、見た目はよくなったと思います。

addressをいったん、グローバル変数にセットしているのは、経度・緯度取得後、再度、住所を参照したいので、セットしました。

しかも、こうすることで、検索中にテキストの内容が書き換えられても検索元の住所を参照することができます。


 

0 コメント:

コメントを投稿