Как получить долготу широты из более чем 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.

Ответ 1

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

Объявите эти переменные выше ваших 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);

    }

И укажите запись внутри файла манифест

<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" />

Ответ 2

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

Как упоминалось в ссылке ниже

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

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

  • "ОК" означает, что ошибок не было; адрес был успешно проанализирован и возвращен хотя бы один геокод.

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