Как рассчитать уровень масштабирования для результатов Android Geocoder

Я использую геокодер Android, чтобы разрешить поиск местоположения в моем приложении на основе карты. Геокодирование работает хорошо, и приложение успешно центрирует MapView по результатам геокодирования. Проблема в том, что я не знаю, какой уровень масштабирования использовать при перемещении на новое место. Параметр location_query может быть улицей или страной — как мне узнать, насколько увеличить масштаб, чтобы отобразить результирующее местоположение? То есть на что мне заменить ????

public void goToPlace(String location_query) {

    List<Address> addresses;
    Geocoder gc = new Geocoder(_ctx);

    addresses = gc.getFromLocationName(location_query, 1);
    if (addresses != null) {
        Address a = addresses.get(0);
        int lat = (int) (a.getLatitude() * 1E6);
        int lon = (int) (a.getLongitude() * 1E6);
        mapController.animateTo(new GeoPoint(lat, lon));
        mapController.setZoom(???);
    }
}

person Mzzzzzz    schedule 15.04.2011    source источник


Ответы (3)


Моя идея состоит в том, чтобы использовать метод getAddressLine для выбора соответствующего уровня масштабирования. Как говорят документы:

Возвращает строку адреса, пронумерованную заданным индексом (начиная с 0), или null, если такой строки нет.

Таким образом, для страны он возвращает только 1 строку адреса, для города 2 строки, для улицы 3 строки. Для каждого случая можно использовать разный уровень масштабирования.

person peter.bartos    schedule 10.10.2011

API геокодирования Android предоставляют только широту и долготу. С другой стороны, API-интерфейсы веб-геокодирования предоставляют широту, долготу и область просмотра, необходимые для масштабирования карты. Вывод заключается в том, что до тех пор, пока Google не решит расширить свои Android API, вам нужно использовать веб-API для получения отсутствующих данных масштабирования окна просмотра.

К счастью, использование веб-API не слишком сложно благодаря библиотеке GeocoderPlus, которая выполняет за вас все запросы веб-API и парсинг JSON и возвращает в качестве результатов только объекты Java. Он имеет интерфейс, похожий на родной Geocoder, и доступен в формате JAR для включения в ваше приложение для Android.

Ознакомьтесь с сообщением в блоге ниже, чтобы узнать об использовании: http://bricolsoftconsulting.com/perfect-geocoding-zoom-part-2/

person Theo    schedule 08.11.2011

Вы можете сделать setZoom(18) или что-то в этом роде, поскольку у вас есть только одна точка для отображения.

Если у вас есть несколько точек, вам нужно zoomToSpan. Что вам нужно сделать, так это найти, что пары min и max lat/lng передают разницу между ними в приведенную выше функцию, чтобы получить оптимальный уровень масштабирования.

person Josnidhin    schedule 26.04.2011
comment
Извините, это не сработает для моего приложения. Установка уровня масштабирования на 18 после того, как пользователь ищет «Америка», заставляет вас смотреть на какую-то сельскую местность недалеко от Коффивилля, штат Канзас. Геокодер должен предоставлять некоторую меру протяженности геокодированного названия места, как это делает REST Geocoder API. - person Mzzzzzz; 26.04.2011