Получение широты и долготы местоположения EditText Android

Итак, я пытаюсь создать поле EditText, в котором пользователь может ввести название улицы. Затем мое приложение получит широту/долготу этой улицы и разместит маркер в этом местоположении геоточки на карте (с использованием API Google Maps v2). На данный момент у меня настроено поле EditText, а также карта с функцией ручного добавления маркеров в указанные геоточки.

Пример: если пользователь введет "Grafton Street" в поле EditText, приложение получит широту/долготу (53.342094, -6.259868) и впоследствии поместит маркер в этой точке на карте с помощью функции GeoPoint или, возможно, даже выделит вся дорога (как видно в направлениях Google и т. д.).

Моя проблема в том, что я не уверен, как на самом деле получить широту и долготу введенного местоположения для передачи в мою функцию addMarker. Любые идеи или предложения будут с благодарностью!

РЕДАКТИРОВАТЬ: Решено, см. мой ответ ниже.


person Dan Coghlan    schedule 16.01.2013    source источник


Ответы (4)


Во-первых, вам нужно будет использовать GoeCoder, чтобы получить имя и преобразовать его в Lat\Long:

http://developer.android.com/reference/android/location/Geocoder.html

Затем вы будете использовать GeoPoint, чтобы получить широту\длину в качестве аргумента и преобразовать его в GeoPoint (для отображения на карте).

https://developers.google.com/maps/documentation/android/v1/reference/com/google/android/maps/GeoPoint

person Booger    schedule 16.01.2013
comment
Добавил еще один ответ. На самом деле вам нужно будет использовать оба этих API. - person Booger; 16.01.2013
comment
Великолепно, это похоже на то, что я искал. Я проверю это и посмотрю, смогу ли я заставить его работать. - person Dan Coghlan; 16.01.2013

Я использовал ответы, представленные ниже, и мне удалось заставить его работать. Я создал новый LatLong, а не GeoPoint просто потому, что функция addMarkerHere использует этот тип. Вот код, который я использовал для тех, кому он может понадобиться в будущем:

Geocoder g = new Geocoder(this);
    List<Address> addressList = null;
    String searchRoad = "Insert Road Name Here!";
    try {
        addressList = g.getFromLocationName(searchRoad, 1);

    } catch (IOException e) {
        Toast.makeText(this, "Location not found",     Toast.LENGTH_SHORT)
                    .show();
            e.printStackTrace();

    } finally {
        Address address = addressList.get(0);

        if (address.hasLatitude() && address.hasLongitude()) {
            double selectedLat = address.getLatitude();
            double selectedLng = address.getLongitude();
            LatLng Road = new LatLng(selectedLat, selectedLng);
            Marker Custom = map.addMarker(new MarkerOptions()
                    .position(searchedRoad).title("Here is the road location")
                    .snippet("Hon the lads"));
    }
person Dan Coghlan    schedule 17.01.2013
comment
Плюс 1 за ввод этого ответа для будущих пользователей. Спасибо за это. - person Booger; 08.02.2013

Это называется геокодирование. Вы отправляете запрос, они возвращают список мест, которые совпали. Анализируя эти результаты, получайте геометрию на 1-м месте в этом списке.

person Fido    schedule 16.01.2013

Ваше упрощенное объяснение - хорошая идея и хороший прикладной проект.

Но даже если ваше краткое объяснение очень простое, нелегко дать вам ответ, который вы хотите получить, потому что это прикладной проект. Вы должны собрать множество примеров кодов и документов с помощью поиска в Google.

Во-первых, ознакомьтесь с этим официальным руководством по Android.

Во-вторых, загрузите пример кода из документов выше.

person BBonDoo    schedule 16.01.2013
comment
В-третьих, ознакомьтесь с этим хорошим руководством. Это руководство очень хорошее, даже если это старая версия Android. Теперь доступно. - person BBonDoo; 16.01.2013
comment
В-четвертых, для получения более подробной информации о EditText см. руководство по EditText для входных данных по адресу этот связанный сайт. Я надеюсь, что вы добьетесь успеха в создании своего хорошего приложения. - person BBonDoo; 16.01.2013