Я создаю приложение для Android, и мне нужно использовать геолокацию.
Я начал с использования API геокодирования от Android ( android.location.geocoder ), но он вызывает некоторые проблемы (время ожидания ответа от сервера ), которое кажется общим в соответствии с тем, что я прочитал.
Чтобы приложение работало при возникновении такого рода ошибок, я использую веб-службу Geocoding .
Теперь приложение работает каждый раз. Проблема заключается в том, что результаты, возвращаемые геокодером из API и геокодером из веб-службы, не совпадают.
Например, веб-служба возвращает только 3 адреса с только именем города и страной, тогда как геокодирование из API возвращает около 8 адресов с именем функции, проезжей частью, местностью …
Вопрос заключается в следующем: есть ли способ сделать результаты веб-службы точно такими же, как и те, что указаны в API?
РЕДАКТИРОВАТЬ
Вот мой класс MainGeocoder:
public class MainGeocoder { private Geocoder geocoderAPI; private GeocoderRest geocoderRest; public MainGeocoder(Context context) { geocoderAPI = new Geocoder(context); geocoderRest = new GeocoderRest(context); } public List<Address> getFromLocationName(String search, int maxResults) { List<Address> addresses; try { addresses = geocoderAPI.getFromLocationName(search, maxResults); return addresses; } catch (IOException e) { e.printStackTrace(); try { addresses = geocoderRest.getFromLocationName(search, maxResults); return addresses; } catch (IOException e1) { return null; } catch (LimitExceededException e1) { return null; } } } }
Он в основном пытается получить список адресов из Geocoder API. Если выбрано исключение IO, он получает этот список из веб-службы, используя класс GeocoderRest, который был вставлен здесь: https://stackoverflow.com/a/15117087/3571822
Есть ли способ сделать результаты из веб-службы точно такими же, как и те, что указаны в API?
Просто нет. В большинстве попыток всегда будет разница между этими двумя геокодирами. Поскольку android.location.Geocoder использует внутреннюю службу, которую вы не можете отслеживать в исходном коде, вы никогда не увидите, где именно находится разница, но спрашиваете Google. И я не думаю, что они передадут эту информацию.
Btw, используемый вами класс GeocoderRest не анализирует даже половину информации, содержащейся в ответе. Обычно веб-сервис гораздо надежнее, чем API в SDK.