我在我的项目中使用谷歌地图apis v2。现在我想将谷歌地图api版本更改为v3。在旧代码中,我以下列方式解析json字符串
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"));
但是当我将Google地图版本更改为v3并生成网址
时http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=51.520205,-0.1379954
并向服务器发送请求。获取没有地标的json。
如何在google map api v3中获得地标?
答案 0 :(得分:1)
响应的结构在地理编码Web服务的V3中发生了变化。您需要修改代码以重新映射到新结构。虽然不是那么难。
例如,代码中的FullAddress
基于formatted_address
和Street
= route
。等等。您可以在此处查看完整的元素列表:
http://code.google.com/apis/maps/documentation/geocoding/#Types
答案 1 :(得分:0)
查看Google Maps API v3 Geocoder Tool中的代码,它可能包含您所需的内容。
但有一件事:在http://maps.google.com/maps/api/geocode/json处直接向API生成请求 是在JavaScript中正确的做法。它恰好起作用,因为API在同一个域中,但你永远不应该这样做。相反,您应该始终使用属于Maps JavaScript V3 API的Geocoding Service。
使用此服务实际上根本不需要解析JSON响应,API会为您完成,然后您将拥有一个Geocoding Results数组。在那里,results[0]
会替换json.getJSONArray("Placemark").getJSONObject(0);
要了解如何翻译整个地址提取代码,请查看上述地理编码器工具的源代码。 V3不是对象树,而是为您提供一个平面数组(address_component
)。每个组件都有short_name
,long_name
和Address Component Types的数组(types
)。这些类型告诉您组件如何相互关联。
此外,您永远不应该假设总会有任何给定类型的组件。您当前的代码一味地依赖于响应中locality
的存在,但情况并非总是如此。