2012-02-02 47 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在响应中的存在,但情况并非总是如此。