2008年9月1日 星期一

Google Map IP定位 - 自動載入使用者位置

使用Google Ajax API可以在JavaScript中依Client IP來決定使用者的位置。簡單說就是 IP geocoding。Google Ajax API的IP Geocoding應與Google Analytics一致的,經大約測試結果,可以大致定到北中南的位置。不過有時侯還是會有問題,例如在台中,程式卻判定在台北三重,我想詳細的位置還是中華信電比較清楚。

以下是Google Map範例。
使用Google Ajax API亦可直接使用Google Map,不需再申請Google Map API key。
















原本Google Map API建立地圖物建的方式





var map = new GMap2(document.getElementById("map"));




Google Ajax API建立地圖及取得使用者IP、座標





<script>


  google.load("maps", "2", {callback: initialize});


 


  function initialize() {


    // 預設位置


      var zoom = 3;


    var latlng = new google.maps.LatLng(23.5, 121.5);


    var location = "顯示預設位置.";


 


    // 若由IP找到座標位置,就用以下的座標為主


    if (google.loader.ClientLocation) {


      zoom = 13;


      latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);


      location = "顯示 IP-based 位置: <b>" + getFormattedLocation() + "</b>";


    } 


   


    document.getElementById("location").innerHTML = location;


    //建立地圖


    var map = new google.maps.Map2(document.getElementById('map'));


    map.setCenter(latlng, zoom);


    map.addControl(new GLargeMapControl());


    map.addControl(new GMapTypeControl());


  }


 


  //取得地名資訊


  function getFormattedLocation() {


    if (google.loader.ClientLocation.address.country_code == "US" &&


      google.loader.ClientLocation.address.region) {


      return google.loader.ClientLocation.address.city + ", " 


          + google.loader.ClientLocation.address.region.toUpperCase();


    } else {


      return  google.loader.ClientLocation.address.city + ", "


          + google.loader.ClientLocation.address.country_code;


    }


  }


 


</script>







以上程式碼,修改自Google Map範例