根据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);
}
});
答案 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应用限制。
我希望这有帮助!