2012-02-02 48 views
0

我在我的項目中使用谷歌地圖apis v2。現在我想將google map api版本更改爲v3。在舊的代碼我是解析JSON字符串以下列方式我怎樣才能獲得地圖標記在谷歌地圖api v3?

JSONObject placemark = json.getJSONArray("Placemark").getJSONObject(0);  
        AddressDetail address = new AddressDetail(); 
        address.setFullAddress(placemark.getString("address")); 
        JSONObject area = placemark.getJSONObject("AddressDetails").getJSONObject("Country").getJSONObject("AdministrativeArea"); 
        address.setCounty(area.getString("AdministrativeAreaName")); 
        JSONObject subArea = area.getJSONObject("SubAdministrativeArea"); 
        address.setTown(subArea.getString("SubAdministrativeAreaName")); 
        JSONObject locality = subArea.getJSONObject("Locality"); 
        address.setLocalityName(locality.getString("LocalityName")); 
        address.setPostCode(locality.getJSONObject("PostalCode").getString("PostalCodeNumber")); 
        address.setStreet(locality.getJSONObject("Thoroughfare").getString("ThoroughfareName")); 

,但是當我改變谷歌地圖的版本v3和生成的URL

http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=51.520205,-0.1379954

,併發送請求server.Getting json沒有地標。

我該如何在google map api v3中獲得地標?

回答

1

響應的結構在地理編碼Web服務的V3中發生了變化。您需要修改代碼以重新映射到新結構。雖然這並不困難。

例如,您的代碼中的FullAddress基於formatted_addressStreet = route。等等。你可以在這裏看到完整的元素列表:

http://code.google.com/apis/maps/documentation/geocoding/#Types

0

看看Google Maps API v3 Geocoder Tool中的代碼,它可能有你所需要的。

但有一件事:直接向http://maps.google.com/maps/api/geocode/json上的API生成請求是而不是在JavaScript中是正確的做法。它正好工作,因爲API在同一個域中,但你永遠不應該這樣做。相反,您應始終使用屬於Google Maps JavaScript V3 API一部分的Geocoding Service

使用這個服務你根本不需要解析JSON響應,API會爲你做,然後你將有一個Geocoding Results的數組。在那裏,results[0]將被替換json.getJSONArray("Placemark").getJSONObject(0);

要了解如何翻譯整個地址提取代​​碼,請查看上述地理編碼器工具的源代碼。 V3代替對象樹,爲您提供了一個平面陣列(address_component)。每個組件具有short_namelong_nameAddress Component Types的陣列(types)。這些類型告訴你組件如何相互關聯。

此外,你永遠不應該認爲總會有任何給定類型的組件。您當前的代碼盲目地依賴於locality在響應中的存在,但情況並非總是如此。