Геокодирование вашего местоположения найдено android eclipse

#android #eclipse #gps #geocoding

#Android #eclipse #gps #геокодирование

Вопрос:

В настоящее время мой код отображает местоположение пользователей на карте … используя приведенный ниже код

 private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();

    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            controller.setZoom(8);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}
  

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

Ответ №1:

  1. Поскольку MyLocationOverlay уже реализовано LocationListener , вы могли бы просто подклассировать его и переопределить onLocationChanged метод listener и выполнить геокодирование там (предпочтительно в новой потоковой / асинхронной задаче, чтобы избежать блокирования обработки наложения!).

    Что-то вроде:

     private void initMyLocation() {
        final MyLocationOverlay overlay = new MyLocationOverlay(this, map){
            public void onLocationChanged(android.location.Location location)
            {
                //subclass AsyncTask to take a location parameter for 
                //doInBackground where it geocodes and then passes a String
                //to onPostExecute where you can display a toast
                new MyAsyncTask().execute(location);
    
                //remember to call the parent implementation to avoid breaking
                //MyLocationOverlay default functionality
                super.onLocationChanged(location);
            }
        };
        overlay.enableMyLocation();
    
        overlay.runOnFirstFix(new Runnable() {
            public void run() {
                controller.setZoom(8);
                controller.animateTo(overlay.getMyLocation());
            }
        });
        map.getOverlays().add(overlay);
    }
      
  2. Другим вариантом может быть написание пользовательского LocationListener и регистрация обновлений для местоположения и выполнение практически того же самого, что и в приведенном выше коде. ИМО, это, вероятно, избыточно и неоправданно дорого, поскольку, как объяснялось выше, у вас уже есть LocationListener реализация для подключения, так зачем писать другую?

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

1. @ no.good.at.coding Спасибо.. Он появляется с ошибкой… ‘MyAsyncTask не может быть преобразован в тип’ .. так что, мне создать новый класс для выполнения геокодирования — класс ‘MyAsyncTask’?? Во всех руководствах по геокодированию, которые я нашел, использовались долгота и широта.. итак, могу ли я просто передать свою переменную местоположения для геокодирования? Извините, я очень новичок в Android..

2. @IrishGal Да, если вы видите комментарии во фрагменте, я упоминаю, что вам следует «подкласс AsyncTask». Итак, вам следует создать новый класс, который расширяется AsyncTask , куда вы должны записать код геокодирования там. Причина использования AsyncTask (или любого другого метода, при котором будет создан новый поток) заключается в том, что геокодирование, вероятно, будет дорогостоящей операцией, включающей сетевой ввод-вывод, который заблокирует работу MyLocationOverlay , поскольку мы инициируем ее из этого класса.

3. Кроме того, у Location объекта есть методы getLatitude() и getLongitude() , которые выдадут вам значения широты и долготы, инкапсулированные этим объектом.