Главная » Разработка для Android » Обратное геокодирование

0

При обратном геокодировании возвращаются адреса, соответствующие физическому положению,  указанному  в виде пары широта — долгота. Это обеспечивает  удобный для восприятия контекст, связанный с местополо- жением, возвращенным геолокационным сервисом.

Для обратного поиска нужно передать целевые широту и долготу в ме- тод getFromLocation, принадлежащий объекту Geocoder. Он вернет список адресов, которые, вероятно, совпадают с переданными координатами. Если Geocoder не смог получить ни одного адреса для указанных  координат, он вернет null.

В листинге 8.4 показывается, как применить  обратное геокодирование к вашему последнему известному  местоположению.

Листинг 8.4. вашего последнего известного местоположения

location =

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

double latitude = location.getLatitude();

double longitude = location.getLongitude();

List<Address> addresses = null;

Geocoder gc = new Geocoder(this, Locale.getDefault());

try {

addresses = gc.getFromLocation(latitude, longitude, 10);

} catch (IOException e) {}

Точность и детализация обратного геокодирования зависят от качества информации в базах данных геокодировщика, поэтому качество результа- тов может сильно варьироваться в зависимости от страны  и выбранного языка.

Прямое геокодирование

Прямое геокодирование определяет географические координаты за- данного местоположения.

ПРИМЕЧАНИЕ

Определение «правильное местоположение» варьируется в зависимости от места (географической области), где выполняется поиск. Как правило, оно будет включать стандартные адреса разной степени детализации (от страны до названия улицы и номера дома), почтовые индексы, железно- дорожные станции, достопримечательности и больницы. По большому счету, правильные условия поиска похожи на адреса и места, которые можно ввести в строку поиска на сайте Google Maps.

Для  прямого  геокодирования вызовите  метод getFromLocationName из экземпляра класса Geocoder.  Передайте  ему местоположение, коорди- наты которого хотите получить, а также максимальное число допустимых результатов:

List<Address> result = geocoder.getFromLocationName(aStreetAddress, maxResults);

Возвращенный список объектов Address может содержать несколько со- впадений для заданного местоположения. Каждый объект будет включать широту, долготу и любую другую дополнительную информацию, доступную для этих координат. Это может пригодиться при подтверждении коррект- ности полученного  местоположения и указании  особенностей  местности при поиске достопримечательностей и ориентиров.

ПРИМЕЧАНИЕ

Как и в случае с обратным геокодированием, если не найдено ни одного совпадения, будет возвращен null. Доступность, точность и детализа- ция результатов геокодирования полностью зависят от базы данных, содержащей информацию для местности, из которой ведется поиск.

Важную роль при прямом геокодировании играет объект Locale, пере- данный  геокодировщику. Locale предоставляет географический контекст для интерпретации поисковых запросов, потому как одни и те же названия местностей могут находиться в разных местах. По возможности выбирайте Locale для конкретного региона, чтобы избежать  неоднозначности в гео- графических названиях.

Кроме того, пытайтесь использовать как можно больше информации об адресе. Пример показан в листинге 8.5.

Листинг 8.5. Геокодирование адреса

Geocoder fwdGeocoder = new Geocoder(this, Locale.US);

String streetAddress = "160 Riverside Drive, New York, New York";

List<Address> locations = null;

try {

locations = fwdGeocoder.getFromLocationName(streetAddress, 10);

} catch (IOException e) {}

Для более конкретных результатов задействуйте перегруженный метод getFromLocationName, который  позволяет  ограничить  поиск географиче- скими рамками.

List<Address> locations = null;

try {

locations = fwdGeocoder.getFromLocationName(streetAddress, 10, n, e, s, w);

} catch (IOException e) {}

Данный  перегруженный метод эффективен в сочетании  с элементом управления MapView, так как вы можете ограничить  поиск районом, ото- бражаемым на карте.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии