2009-10-18 75 views
1

我正在使用Google Maps API來反向查找地址,特別是國家,城市和郵政編碼。我遇到的問題是,使用地理編碼器輸入特定的經緯度時,您會根據地址詳細信息的準確性獲得一系列結果。例如,如果您點擊街道,地址詳細信息的準確性爲8,地址如下所示; 「街道,城市,國家代碼」「街道,城市郵編,國家代碼」。如果你點擊另一個地點,你可以得到地址詳細信息的準確性5返回;城市郵編,國家代碼。Google Maps API反向查詢地址詳細信息準確性

我正在尋找的是城市,郵政編碼和國家。有沒有辦法強制Google地圖始終返回地址細節準確性5或將分解的元素返回到各個部分,即城市,郵政編碼和國家/地區。

這是我使用來獲取信息的代碼:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps JavaScript API Example: Reverse Geocoder</title> 
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAMkjr3Dq_jK6GSFYDFzaHTBRoJ0TBOI_XK4bTNi9dL2l04KlxphRNL_k0peOib9IHF6T2KwlVmOb6uQ" type="text/javascript"></script> 
    <script type="text/javascript"> 

     var map; 
     var geocoder; 
     var address; 

     function initialize() { 

      var zoom = 10; 

      map = new GMap2(document.getElementById("map_canvas")); 
      map.setCenter(new GLatLng(40.730885, -73.997383), zoom); 
      map.setUIToDefault(); 
      GEvent.addListener(map, "click", getAddress); 
      geocoder = new GClientGeocoder(); 
     } 

     function getAddress(overlay, latlng) { 
      if (latlng != null) { 
       address = latlng; 
       geocoder.getLocations(latlng, showAddress); 
      } 
     } 

     function showAddress(response) { 
      map.clearOverlays(); 
      if (!response || response.Status.code != 200) { 
       alert("Status Code:" + response.Status.code); 
      } else { 
       place = response.Placemark[0]; 
       point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]); 
       marker = new GMarker(point); 
       map.addOverlay(marker); 

       var message = '<b>orig latlng:</b>' + response.name + '<br/>' + 
           '<b>latlng:</b>' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '<br>' + 
           '<b>Status Code:</b>' + response.Status.code + '<br>' + 
           '<b>Status Request:</b>' + response.Status.request + '<br>' + 
           '<b>Address:</b>' + place.address + '<br>' + 
           '<b>Accuracy:</b>' + place.AddressDetails.Accuracy + '<br>' + 
           '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode; 

       marker.openInfoWindowHtml(message); 
      } 
     } 


    </script> 
    </head> 

    <body onload="initialize()"> 
    <div id="map_canvas" style="width: 800px; height: 600px"></div> 
    </body> 
</html> 

任何幫助將不勝感激。我最後的手段是解析地址字符串,但它感覺像是過度殺傷。必須有一個更清潔的方式。

我目前在看的getLocations()方法也許解析JSON結果可能會產生我要找的字段。

Thanx。

回答

1

您需要處理應用程序中不同的精度級別... API無法爲您做所有事情;)。我同意,如果您可以向地理編碼器口授您想要的精確度級別,那麼它現在就不存在了。也許谷歌將在未來實現它,但在那之前,你必須解析你的應用程序的結果。這篇文章有不同準確度值的細分:Picking the most accurate geocode