2015-05-29 3 views
11

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

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); возвращает нуль для некоторых адресов, например, если у меня есть ArrayList из 7 адресов, тогда я получаю только 4-5 значений LatLong.

+0

... Пожалуйста, проверьте мое решение ниже –

+0

Хм, я вижу этот вопрос вы столкнулись в настоящее время. Вы не можете получить lat/lon, если вы не можете получить местоположение с адреса. –

+0

Он не вернет адрес, который LatLng предоставит вам. У каждого LatLng нет имени местоположения. –

ответ

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

спасибо @Ravindra Kushwaha, но он все еще не работает. –

+0

У вас есть ENTRY внутри файла манифеста? –

+0

да. Если вы хотите, я могу поделиться манифестом также –

0

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

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

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

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

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

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

+0

Спасибо @joyson. Я проверю это. –