Сократите использование Google Адресов с помощью API GeoCoding в Android / iOS - PullRequest
0 голосов
/ 24 мая 2018

Согласно руководству по оптимизации карт можно сократить использование Google Places с помощью API GeoCoding для получения местоположения места по идентификатору места.

API геокодирования

Если ваше приложение обрабатывает введенные пользователем адреса, адреса иногда бывают неоднозначными (неполными, с ошибками или плохо отформатированы).Вы можете устранить неоднозначность адресов с помощью автозаполнения.Затем используйте идентификаторы мест, чтобы получить их местоположение.

Мобильный

Карты

Для мобильных приложений используйте Maps SDK для Android или Maps SDK для iOS при отображении карты,Мобильные SDK бесплатны и имеют неограниченную квоту.Используйте Maps Static API или Maps JavaScript API, когда требования исключают использование мобильных SDK.

Возможна ли такая оптимизация с использованием Android?

Пакет геокодера в расположении Android не предоставляет никаких данных.метод для извлечения адреса из placeId только из лат, long или name:

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 Code:

// 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 голосов
/ 24 мая 2018

Встроенный геокодер Android API не поддерживает получение адресов по идентификатору места.К сожалению, Google Maps Android SDK также не предоставляет встроенный Geocoder.Запрос на функцию существует в течение длительного времени, но, похоже, он не имеет высокого приоритета:

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

Итак, чтобы использовать идентификатор места в запросах, вы придерживаетесь REST API,Существует клиентская библиотека Java для веб-служб API Карт Google, которую вы можете найти на github:

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

Вы можете использовать эту библиотеку для вызова API геокодирования из вашего кода Java в Android.

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));

Обратите внимание, что ключ API для веб-служб должен отличаться от ключа API, который вы использовали в приложении Android, поскольку веб-службы не поддерживают ограничение приложения Android.

Я надеюсь, что этопомогает!

...