在Android / iOS中使用GeoCoding API减少Google商家信息的使用

时间:2018-05-24 11:43:24

标签: android ios google-maps google-places

根据maps optimisations guide,可以使用GeoCoding API按地点ID检索地点位置,从而减少Google商家信息的使用。

  

地理编码API

     

如果您的应用程序处理用户类型的地址,则地址有时不明确(不完整,拼写错误或格式不正确)。您可以使用自动填充消除地址歧义。然后,使用地点ID获取地点位置。

     

移动

     

地图

     

对于移动应用,请在显示地图时使用适用于Android的Maps SDK或适用于iOS的Maps SDK。移动SDK是免费的,并具有无限的配额。当需求使用移动SDK排除时,请使用Maps Static API或Maps JavaScript API。

使用Android进行此类优化是否可行?

Android位置包中的Geocoder不会公开任何方法来从placeId仅从lat,long或名称中检索地址:

List<Address> getFromLocation(double latitude, double longitude, int maxResults);

List<Address> getFromLocationName(String locationName, int maxResults);

List<Address> getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude);

Javascript代码:

// This function is called when the user clicks the UI button requesting 
// a geocode of a place ID.
function geocodePlaceId(geocoder, map, infowindow) {
  var placeId = document.getElementById('place-id').value;
  geocoder.geocode({'placeId': placeId}, function(results, status) {
  if (status === 'OK') {
    if (results[0]) {
      map.setZoom(11);
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
      });
      infowindow.setContent(results[0].formatted_address);
      infowindow.open(map, marker);
    } else {
      window.alert('No results found');
    }
  } else {
    window.alert('Geocoder failed due to: ' + status);
  }
});

1 个答案:

答案 0 :(得分:1)

原生Android API地理编码器不支持按地点ID获取地址。不幸的是,谷歌地图Android SDK既不提供内置的Geocoder。功能请求存在很长时间,但看起来它没有高优先级:

https://issuetracker.google.com/issues/35823852

因此,要在请求中使用地点ID,您必须坚持使用REST API。您可以在github上找到适用于Google Maps API Web服务的Java客户端库:

https://github.com/googlemaps/google-maps-services-java

您可以使用此库从Android中的Java代码调用Geocoding API。

GeoApiContext context = new GeoApiContext.Builder()
    .apiKey("AIza...")
    .build();
GeocodingResult[] results =  GeocodingApi.newRequest(context)
    .place("ChIJHzwQtJeLGGARxaSLI71pDSY").await();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(results[0].addressComponents));

请注意,Web服务的API密钥必须与您在Android应用中使用的API密钥不同,因为Web服务不支持Android应用限制。

我希望这有帮助!