Как получить широту и долготу из более чем 500 адресов?

У меня более 700 адресов в базе. Я хочу построить их по регионам. Я реализовал этот код:

public LatLng getSingleLocationFromAddress(String strAddress)
{
    Geocoder coder = new Geocoder(this, Locale.getDefault());
    List<Address> address = null;
    Address location = null;
    GeoPoint p1 = null;
    LatLng temp = null;//new LatLng(26.0000, 121.0000);
    String strAddresNew = strAddress.replace(",", " ");
    try
    {
        address = coder.getFromLocationName(strAddresNew, 1);
        if (!address.isEmpty())
        {
            location = address.get(0);
            location.getLatitude();
            location.getLongitude();
            temp = new LatLng(location.getLatitude(), location.getLongitude());
            Log.d("Latlng : ", temp + "");
        } else
        {
            arrTemp.add(strAddress);
            System.out.println(arrTemp);
        }
    } catch (IOException e)
    {
        Toast.makeText(mContext, e.toString(), Toast.LENGTH_LONG).show();
        e.printStackTrace();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    return temp;
}

Но проблема в том, что я вызываю этот метод в цикле следующим образом:

Marker TP1 = googleMap.addMarker(new MarkerOptions().position(getSingleLocationFromAddress(fullAddress)));

Строка coder.getFromLocationName(strAddresNew, 1); возвращает null для некоторых адресов, например, если у меня есть ArrayList из 7 адресов, я получаю только 4-5 значений LatLong.


person Community    schedule 29.05.2015    source источник
comment
... Пожалуйста, проверьте мое решение ниже   -  person Ravindra Kushwaha    schedule 29.05.2015
comment
Хм, я вижу проблему, с которой вы столкнулись сейчас. Вы не можете получить широту/долготу, если не можете определить местоположение по адресу.   -  person Daniel Nugent    schedule 29.05.2015
comment
Он не вернет имя местоположения, предоставленное вами LatLng. У каждого LatLng нет имени местоположения.   -  person M D    schedule 29.05.2015
comment
Существуют API, которые возвращают широту и долготу адреса. Может быть, было бы целесообразно использовать один из них?   -  person camiblanch    schedule 12.07.2016


Ответы (2)


Используйте приведенные ниже строки кода... Это может быть вам полезно

Объявите эти переменные над вашими Oncreate или OncreatView.

List<Address> From_geocode = null;
private double sLat, sLong;
private Geocoder geocoder;

Затем внутри вашего oncreate или oncreateVIew используйте эти строки кода

geocoder = new Geocoder(getActivity());

    try {
        From_geocode = geocoder.getFromLocationName("PUT THE ADDRESS HERE", 1);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    if (From_geocode.size() > 0) {
        System.out.println("2");
        From_geocode.get(0).getLatitude(); // getting
        // latitude
        From_geocode.get(0).getLongitude();

        sLat = From_geocode.get(0).getLatitude();
        sLong = From_geocode.get(0).getLongitude();

        System.out.println("LATITUTE====="+sLat+"   LONGITUTE====="+sLong);

    }

И укажите запись в файле manifest.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
person Ravindra Kushwaha    schedule 29.05.2015
comment
спасибо @Ravindra Kushwaha, но это все еще не работает. - person ; 29.05.2015
comment
Да.. Я дал все разрешения - person ; 29.05.2015
comment
Есть ли какое-либо исключение в вашем приложении ИЛИ Вы использовали мой код и поместили адрес в строку ПОМЕСТИТЕ АДРЕС ЗДЕСЬ в моем коде??? - person Ravindra Kushwaha; 29.05.2015
comment
Нет, нет никаких исключений. просто From_geocode возвращает это [] т.е. пустое без долготы - person ; 29.05.2015
comment
Не могли бы вы добавить код в комментарий.... Который вы изменили в соответствии с моим кодом... Вставьте только этот код... нет всего кода - person Ravindra Kushwaha; 29.05.2015

Хотя база данных Google обширна, возможно, что некоторые из предоставленных вами адресов не могут быть геокодированы. Следовательно, вы не получите широту/долготу для этих адресов. Возможно, вы могли бы проверить статус ответа.

Как указано в ссылке ниже

https://developers.google.com/maps/documentation/geocoding/#StatusCodes

Поле «статус» в объекте ответа геокодирования содержит статус запроса и может содержать отладочную информацию, помогающую выяснить, почему геокодирование не работает. Поле «статус» может содержать следующие значения:

  1. «ОК» означает, что ошибок не возникло; адрес был успешно проанализирован, и был возвращен как минимум один геокод.

  2. «ZERO_RESULTS» ​​означает, что геокодирование прошло успешно, но не дало результатов. Это может произойти, если геокодеру был передан несуществующий адрес.

person Joyson    schedule 29.05.2015
comment
Спасибо @joyson. Я проверю это. - person ; 29.05.2015