2013-05-25 15 views
6

http://maps.googleapis.com/maps/api/geocode/xml?latlng=23.0043673,72.5411868999996&sensor=falseIch möchte

Link gibt mir Datei zugeordnet jede Art Informationen zu haben scheint nicht Dieses XML folgendes Ergebnis Google Map API für die reverse Geocode in Android analysieren. Der Dokumentenbaum ist unten abgebildet.

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> 

Ich möchte die long_name, Ort und Land aus der XML holen i verschiedene Funktionen versucht, aber knapp über die perfekte Antwort bekommen kann mir jemand bitte leite, wie diese XML in Android analysieren ??

+0

den Parser wählen und Ihre XML-Daten analysieren. http://developer.android.com/training/basics/network-ops/xml.html – Raghunandan

+0

Es gibt viele long_names. Auf welchen möchten Sie zugreifen? –

Antwort

26

Raghunandan hat Recht. Wenn Sie jedoch nur den 'Langnamen', die Lokalität usw. mit der Google Maps-API abrufen möchten, sollten Sie den folgenden Weg versuchen, um sie zu erhalten. Sie können die Antwort in Form von JSON bekommen, die strukturierter ist. Sie können selbst die URL zuerst versuchen: http://maps.google.com/maps/api/geocode/json?latlng=23.0043673,72.5411868999996&sensor=false

Ich benutze die folgende Methode die ganze Zeit und es funktioniert für mich. Es kann Ihnen helfen, das zu bekommen, was Sie versuchen:

Sie können den Breiten- und Längengrad erhalten und dann Google-Server anfordern, um mit einem JSON-Objekt zu antworten, das verschiedene Informationen über die Standortkoordinaten enthält. Hier ist die Funktion:

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; 
} 

Jetzt können Sie den JSON parsen, um zu bekommen, was auch immer Sie wollen. Angenommen, Sie komplette formatted_address wollen, hier ist, wie Sie bekommen können:

// 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(); 

} 

Wenn Sie mehr wissen, wie Sie die gewünschten Daten aus der Art der JSON zu extrahieren, die Sie als Antwort zu bekommen, sehen Antworten auf Android - How to parse JSONObject and JSONArrays Frage. Hoffe es hilft dir.

aktualisieren:

Hoffe, Sie haben die Antworten auf obige Frage lesen. Nun, zum Beispiel: Wenn Sie JSON Array von address_components erhalten möchten, dann tun Sie nur so etwas wie

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

Jetzt können Sie die erste long_name erhalten wie folgt:

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

So versuchen, vergleichen, um zu sehen, die Muster hier zur JSON Antwort, die Sie erhalten. Dadurch werden Sie verstehen, wie Sie sich nähern können, um ein Element zu erhalten. Hier war result JSONARray, also habe ich es als JSONArray bekommen. Dann nahm ich das erste Objekt des result JSONArray, dessen nameaddress_components war und das value ein weiteres JSONArray war. Dann, weil ich das erste long_name bekommen wollte, nahm ich wieder das erste Objekt des address_component JSONArray und bat dann um den value der Komponente, deren Name long_name war. Hoffe jetzt verstehst du ein bisschen wie du Werte lesen kannst.

P.S: Ich habe die letzten zwei Zeilen nicht ausgeführt, aber logisch formuliert. Hoffe es lässt dich verstehen. Alles Gute!

+0

Prost das hat mir geholfen – brux

+0

Froh, dass es dir @brux geholfen hat. –

+0

EXELLENT ANTWORT! –

0

Einfache Möglichkeit, genaues Ergebnis zu erhalten. Ich hoffe es hilft !

gerade auf diese Zeile, wo Sie Adresse:

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

dieses Dann fügen,

//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;**