I want to parse the google map API for reverse geocoding in android

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

this link gives me the following result This xml file does not seem to contain related style information. The document tree is shown below.

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> 

I want to get long_name, locale and country from xml I tried different messages, but didn’t get the perfect answer, can someone please direct me how to parse this XML into android?

+6
source share
2 answers

Raghunandan is right. However, if your goal is simply to get "long_name", locality, etc. Using the Google Maps API, you can try the following way to get it. You can get the answer in the form of JSON, which seems to me to be more structured. You can try the URL first: http://maps.google.com/maps/api/geocode/json?latlng=23.0043673,72.5411868999996&sensor=false

I use the following method all the time and it works for me. This may help you get what you are trying:

You can get the latitude and longitude, and then query the Google servers to respond using a JSON object containing various information about the location coordinates. Here is the function:

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

Now you can parse JSON to get whatever you want. For example, suppose you want a full formatted_address, here is how you can get:

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

If you want to know more about how to extract the necessary data from the JSON type that you get in response, see the answers on Android - how to parse JSONObject and JSONArrays question. Hope this helps you.

Update

I hope you read the answers to the above question. Now, for example: If you want to get JSON Array from address_components , then just do something like

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

Now you can get the first long_name as follows:

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

So try to compare the template here with the JSON response you get. This will allow you to figure out how to go about getting any item. Here, the result was JSONARray, so I got it as a JSONArray. Then I took the first JSONArray result object, whose name was address_components and value was another JSONArray. Then, because I wanted to get the first long_name , so I took the first address_component JSONArray again and asked to get the value component whose name was long_name . I hope you now understand a little how you can read values.

PS: I did not run the last two lines, but formulated logically. Hope this makes you understand. All the best!

+27
source

An easy way to get an accurate result. Hope this helps!

just enter this line where you want the address:

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

Then add this,

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

Source: https://habr.com/ru/post/945825/


All Articles