Как получить долготу широты из более чем 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" указывает, что геокод был успешным, но не дал никаких результатов. Это может произойти, если геокодер был передан несуществующий адрес.