gratis google ejemplos java android xml-parsing reverse-geocoding

java - ejemplos - google maps api key free



Quiero analizar la API de Google Map para el geocodálogo inverso en Android (2)

Manera simple de obtener el resultado exacto. Espero eso ayude !

simplemente ponga esta línea donde quiere la dirección:

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

Luego agrega esto,

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

http://maps.googleapis.com/maps/api/geocode/xml?latlng=23.0043673,72.5411868999996&sensor=false

este enlace me da el siguiente resultado. Este archivo XML no parece tener ninguna información de estilo asociada. La estructura del documento se muestra a continuación.

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>

Quiero buscar el long_name, la localidad y el país del xml. He intentado varias publicaciones pero no obtuve la respuesta perfecta. ¿Alguien puede guiarme, cómo analizar este XML en Android?


Raghunandan tiene razón. Sin embargo, si su objetivo es obtener el ''long_name'', la localidad, etc. utilizando la API de Google Maps, es posible que desee probar de la siguiente manera para obtenerlo. Puede obtener la respuesta en forma de JSON, que creo que es más estructurado. Primero puede probar la URL: http://maps.google.com/maps/api/geocode/json?latlng=23.0043673,72.5411868999996&sensor=false

Uso el siguiente método todo el tiempo y funciona para mí. Puede ayudarte a obtener lo que estás intentando:

Puede obtener la latitud y la longitud y luego solicitar servidores de Google, para responder con un objeto JSON que contiene diversa información sobre las coordenadas de la ubicación. Aquí está la función:

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

Ahora puedes analizar el JSON para obtener lo que quieras. Por ejemplo, supongamos que quiere una formateo_dirección completa, así es como puede obtener:

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

Si desea obtener más información sobre cómo extraer los datos deseados del tipo de JSON que obtendrá en respuesta, consulte las respuestas en Android: cómo analizar las preguntas de JSONObject y JSONArrays . Espero que te ayude

Actualización :

Espero que hayas leído las respuestas a la pregunta anterior. Ahora, por ejemplo: si quieres obtener una matriz JSON de address_components , entonces haz algo como

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

Ahora puedes obtener el primer long_name siguiente manera:

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

Intente ver cómo se compara el patrón aquí con la respuesta JSON que está obteniendo. Esto te hará entender cómo acercarse para obtener cualquier elemento. Aquí, el result fue JSONARray, así que lo obtuve como JSONArray. Luego tomé el primer objeto del result JSONArray cuyo name era address_components y el value era otro JSONArray. Luego, porque quería obtener el primer long_name , así que tomé de nuevo el primer objeto del address_component JSONArray y luego solicité el value del componente cuyo nombre era long_name . Espero que ahora entiendas un poco cómo puedes leer valores.

PD: No ejecuté las dos últimas líneas, sino que las formulé lógicamente. Espero que te haga entender. ¡Todo lo mejor!