我如何在谷歌地图api v3中获得地点标记?

时间:2012-02-02 09:39:12

标签: java google-maps google-maps-api-3

我在我的项目中使用谷歌地图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中获得地标?

2 个答案:

答案 0 :(得分:1)

响应的结构在地理编码Web服务的V3中发生了变化。您需要修改代码以重新映射到新结构。虽然不是那么难。

例如,代码中的FullAddress基于formatted_addressStreet = 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_namelong_nameAddress Component Types的数组(types)。这些类型告诉您组件如何相互关联。

此外,您永远不应该假设总会有任何给定类型的组件。您当前的代码一味地依赖于响应中locality的存在,但情况并非总是如此。