2013-05-25 18 views
6

http://maps.googleapis.com/maps/api/geocode/xml?latlng=23.0043673,72.5411868999996&sensor=falsechcę analizować Google Map API dla odwrotnej Geokodując w Androidzie

ten link daje mi następujący wynik Ten plik XML nie zawiera żadnych informacji o stylach z nim związanych. Drzewo dokumentu pokazano poniżej.

This XML file does not appear to have any style information associated with it. The document tree is shown below. 
<GeocodeResponse> 
<status>OK</status> 
<result> 
<type>route</type> 
<formatted_address> 
Dharnidhar Road, Vasna, Ahmedabad, Gujarat 380007, India 
</formatted_address> 
<address_component> 
<long_name>Dharnidhar Road</long_name> 
<short_name>Dharnidhar Road</short_name> 
<type>route</type> 
</address_component> 
<address_component> 
<long_name>Vasna</long_name> 
<short_name>Vasna</short_name> 
<type>sublocality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>380007</long_name> 
<short_name>380007</short_name> 
<type>postal_code</type> 
</address_component> 
<geometry> 
<location> 
<lat>23.0043870</lat> 
<lng>72.5419184</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>23.0030380</lat> 
<lng>72.5405695</lng> 
</southwest> 
<northeast> 
<lat>23.0057360</lat> 
<lng>72.5432674</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>23.0041405</lat> 
<lng>72.5414125</lng> 
</southwest> 
<northeast> 
<lat>23.0046335</lat> 
<lng>72.5424244</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>neighborhood</type> 
<type>political</type> 
<formatted_address> 
Yashkamal Society, Ahmedabad, Gujarat 380007, India 
</formatted_address> 
<address_component> 
<long_name>Yashkamal Society</long_name> 
<short_name>Yashkamal Society</short_name> 
<type>neighborhood</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>380007</long_name> 
<short_name>380007</short_name> 
<type>postal_code</type> 
</address_component> 
<geometry> 
<location> 
<lat>23.0089040</lat> 
<lng>72.5446990</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>23.0016970</lat> 
<lng>72.5373369</lng> 
</southwest> 
<northeast> 
<lat>23.0125600</lat> 
<lng>72.5510640</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>23.0016970</lat> 
<lng>72.5373369</lng> 
</southwest> 
<northeast> 
<lat>23.0125600</lat> 
<lng>72.5510640</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>sublocality</type> 
<type>political</type> 
<formatted_address>Vasna, Ahmedabad, Gujarat, India</formatted_address> 
<address_component> 
<long_name>Vasna</long_name> 
<short_name>Vasna</short_name> 
<type>sublocality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>23.0043673</lat> 
<lng>72.5411869</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>22.9964810</lat> 
<lng>72.5357220</lng> 
</southwest> 
<northeast> 
<lat>23.0125600</lat> 
<lng>72.5530250</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>22.9964810</lat> 
<lng>72.5357220</lng> 
</southwest> 
<northeast> 
<lat>23.0125600</lat> 
<lng>72.5530250</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>postal_code</type> 
<formatted_address>Ahmedabad, Gujarat 380007, India</formatted_address> 
<address_component> 
<long_name>380007</long_name> 
<short_name>380007</short_name> 
<type>postal_code</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>22.9967321</lat> 
<lng>72.5500596</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>22.9810681</lat> 
<lng>72.5317127</lng> 
</southwest> 
<northeast> 
<lat>23.0220193</lat> 
<lng>72.5760833</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>22.9810681</lat> 
<lng>72.5317127</lng> 
</southwest> 
<northeast> 
<lat>23.0220193</lat> 
<lng>72.5760833</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>locality</type> 
<type>political</type> 
<formatted_address>Ahmedabad, Gujarat, India</formatted_address> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>23.0395677</lat> 
<lng>72.5660045</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>22.9028759</lat> 
<lng>72.4541115</lng> 
</southwest> 
<northeast> 
<lat>23.1378156</lat> 
<lng>72.7026413</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>22.9028759</lat> 
<lng>72.4541115</lng> 
</southwest> 
<northeast> 
<lat>23.1378156</lat> 
<lng>72.7026413</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>administrative_area_level_2</type> 
<type>political</type> 
<formatted_address>Ahmedabad, Gujarat, India</formatted_address> 
<address_component> 
<long_name>Ahmedabad</long_name> 
<short_name>Ahmedabad</short_name> 
<type>administrative_area_level_2</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>23.0395677</lat> 
<lng>72.5660045</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>22.0185745</lat> 
<lng>71.5979016</lng> 
</southwest> 
<northeast> 
<lat>23.4630890</lat> 
<lng>72.8419331</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>22.0185745</lat> 
<lng>71.5979016</lng> 
</southwest> 
<northeast> 
<lat>23.4630890</lat> 
<lng>72.8419331</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>administrative_area_level_1</type> 
<type>political</type> 
<formatted_address>Gujarat, India</formatted_address> 
<address_component> 
<long_name>Gujarat</long_name> 
<short_name>GJ</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>22.2586520</lat> 
<lng>71.1923805</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>20.1279540</lat> 
<lng>68.1628352</lng> 
</southwest> 
<northeast> 
<lat>24.7057090</lat> 
<lng>74.4764881</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>20.1279540</lat> 
<lng>68.1628342</lng> 
</southwest> 
<northeast> 
<lat>24.7057090</lat> 
<lng>74.4764881</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
<result> 
<type>country</type> 
<type>political</type> 
<formatted_address>India</formatted_address> 
<address_component> 
<long_name>India</long_name> 
<short_name>IN</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>20.5936840</lat> 
<lng>78.9628800</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>6.7471389</lat> 
<lng>68.1627956</lng> 
</southwest> 
<northeast> 
<lat>35.5043404</lat> 
<lng>97.3955550</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>6.7471389</lat> 
<lng>68.1623859</lng> 
</southwest> 
<northeast> 
<lat>35.5043404</lat> 
<lng>97.3955550</lng> 
</northeast> 
</bounds> 
</geometry> 
</result> 
</GeocodeResponse> 

Chcę pobrać long_name, lokalizację i kraj z xml Próbowałem różne stanowiska, ale nie dostać doskonałą odpowiedź może ktoś proszę kierować mi, w jaki sposób można przeanalizować ten XML do android ??

+0

wybrać parser i analizowania danych XML. http://developer.android.com/training/basics/network-ops/xml.html – Raghunandan

+0

Istnieje wiele long_names. Którą chcesz uzyskać dostęp? –

Odpowiedz

26

Raghunandan ma rację. Jeśli jednak Twoim celem jest uzyskanie nazwy "long_name", lokalizacji itp. Przy użyciu Google Maps API, możesz spróbować wykonać poniższe czynności w następujący sposób. Możesz uzyskać odpowiedź w formie JSON, która według mnie jest bardziej uporządkowana. Możesz najpierw wypróbować adres URL: http://maps.google.com/maps/api/geocode/json?latlng=23.0043673,72.5411868999996&sensor=false

Używam poniższej metody przez cały czas i działa ona dla mnie. Może ci pomóc uzyskać to, czego próbujesz:

Możesz uzyskać szerokość i długość geograficzną, a następnie poprosić serwery google, aby odpowiedzieć obiektem JSON zawierającym różne informacje o współrzędnych lokalizacji. Oto funkcja:

public JSONObject getLocationInfo(double lat, double lng) { 

    HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=false"); 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response; 
    StringBuilder stringBuilder = new StringBuilder(); 

    try { 
     response = client.execute(httpGet); 
     HttpEntity entity = response.getEntity(); 
     InputStream stream = entity.getContent(); 
     int b; 
     while ((b = stream.read()) != -1) { 
      stringBuilder.append((char) b); 
     } 
    } catch (ClientProtocolException e) { 
     } catch (IOException e) { 
    } 

    JSONObject jsonObject = new JSONObject(); 
    try { 
     jsonObject = new JSONObject(stringBuilder.toString()); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return jsonObject; 
} 

Teraz możesz przeanalizować JSON, aby uzyskać co chcesz. Na przykład, załóżmy, że chcesz kompletny formatted_address, oto jak można dostać:

// get lat and lng value 
JSONObject ret = getLocationInfo(lat, lng); 
JSONObject location; 
String location_string; 
try { 
    //Get JSON Array called "results" and then get the 0th complete object as JSON   
    location = ret.getJSONArray("results").getJSONObject(0); 
    // Get the value of the attribute whose name is "formatted_string" 
    location_string = location.getString("formatted_address"); 
    Log.d("test", "formattted address:" + location_string); 
} catch (JSONException e1) { 
    e1.printStackTrace(); 

} 

Jeśli chcesz wiedzieć więcej o tym, jak wydobyć żądane dane z rodzaju JSON, że dostaniesz odpowiedź, patrz odpowiedzi na pytanie Android - How to parse JSONObject and JSONArrays. Mam nadzieję, że ci to pomoże.

Aktualizacja:

nadzieję, że przeczytać odpowiedzi na powyższe pytanie. Teraz, na przykład: Jeśli chcesz uzyskać JSON Array address_components, a potem po prostu zrobić coś

JSONArray addressComp = ret.getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); 

teraz można dostać pierwszy long_name następująco:

String long_name1 = addressComp.getJSONObject(0).getString("long_name"); 

Więc sprawdźmy porównaj na wzór odpowiedzi JSON, którą otrzymujesz. To pozwoli ci zrozumieć, jak podejść do uzyskania dowolnego elementu. Tutaj, result był JSONARray, więc dostałem go jako JSONArray. Następnie wziąłem pierwszy obiekt z result JSONArray, którego name był address_components, a value był kolejnym JSONArray. Następnie, ponieważ chciałem uzyskać pierwsze long_name, więc ponownie wziąłem pierwszy obiekt z address_component JSONArray, a następnie poprosiłem o uzyskanie value komponentu o nazwie long_name. Mam nadzieję, że teraz rozumiesz nieco, jak możesz odczytać wartości.

P.S: Nie wykonałem dwóch ostatnich linii, ale sformułowałem logicznie. Mam nadzieję, że to sprawia, że ​​rozumiesz. Wszystkiego najlepszego!

+0

Wiwaty to pomogło mi – brux

+0

Cieszę się, że pomogło ci @brux. –

+0

DOSKONAŁA ODPOWIEDZ! –

0

Prosty sposób na uzyskanie dokładnego wyniku. Mam nadzieję, że to pomoże !

wystarczy umieścić ten wiersz, w którym chcesz adres:

String Adress_final=new GeocodeAPI().execute().get(); 

następnie dodać to,

//calling web geocoder api to get the address 

    protected class GeocodeAPI extends AsyncTask<String, String, String> 
    { 

     String participantURL = Config.GooglePlacesAPI+"latlng="+Lat+","+Lng+"&sensor=false"; 
     JSONObject json; 

     @Override 
     protected void onPreExecute() 
     { 
      System.out.println("participantURL==>>"+participantURL); 
      // Create a progressdialog mProgressDialog 
      mProgressDialog = new ProgressDialog(getActivity()); 
      // Set progressdialog title 
      mProgressDialog.setTitle("Please Wait"); 
      // Set progressdialog message 
      mProgressDialog.setMessage("Loading Location..."); 
      mProgressDialog.setIndeterminate(false); 
      // Show progressdialog 
      mProgressDialog.show(); 
     } 


     @Override 
     protected String doInBackground(String... params) { 
      JSONParser jsonParser = new JSONParser(); 
      System.out.println("participantURL==>>"+participantURL); 
      System.out.println("latitude & Longitude=="+Lat+","+Lng); 
      List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 


      try { 
       json = jsonParser.getJSONFromUrl(participantURL, parameters); 
       System.out.println("********Return from JSONParser class********"); 
       System.out.println("json=="+json); 

       if (json != null) { 

        // get lat and lng value 

        JSONObject location; 

        try { 
         //Get JSON Array called "results" and then get the 0th complete object as JSON   
         location = json.getJSONArray("results").getJSONObject(0); 
         System.out.println("location==>>>"+location); 
         // Get the value of the attribute whose name is "formatted_string" 
         location_string = location.getString("formatted_address"); 
         System.out.println("location_string==>>>"+location_string); 
         Log.d("test", "formattted address:" + location_string); 
        } catch (JSONException e1) { 
         e1.printStackTrace(); 
        } 

       } 
       }catch (Exception error) { 
        error.getMessage(); 
       } 


      return location_string;** 
Powiązane problemy