一、简介
二、代码
1.xml
(1)AndroidManifest.xml
1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 2 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 3 <uses-permission android:name="android.permission.INTERNET"/>
2.java
(1)MainActivity.java
1 package com.location4; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 7 import org.apache.http.HttpEntity; 8 import org.apache.http.HttpResponse; 9 import org.apache.http.client.ClientProtocolException; 10 import org.apache.http.client.HttpClient; 11 import org.apache.http.client.methods.HttpGet; 12 import org.apache.http.impl.client.DefaultHttpClient; 13 14 import android.annotation.SuppressLint; 15 import android.app.Activity; 16 import android.os.Bundle; 17 import android.os.StrictMode; 18 import android.view.View; 19 import android.view.View.OnClickListener; 20 import android.widget.Button; 21 22 import com.google.gson.Gson; 23 24 /** 25 * 根据地址查询经纬度: 26 * http://maps.google.com/maps/api/geocode/json?address=SFO&sensor=false 27 * 28 * 根据经纬度查询地址: 29 * http://maps.google.com/maps/api/geocode/json?latlng=40.124356,-73.961472&sensor=false 30 * 31 * bounds的作用:在指定的经纬度范围内查询 32 * http://maps.google.com/maps/api/geocode/json?address=SFO & bounds=39.125367,-118.326182|42.271635,-40.287321 & sensor=false 33 * 34 * region的作用:在给定国家代码的国家中查询(es:西班牙) 35 * http://maps.google.com/maps/api/geocode/json?address=Toledo&sensor=false®ion=es 36 */ 37 38 @SuppressLint("NewApi") 39 public class MainActivity extends Activity { 40 41 private Button geocodingButton = null; 42 43 @Override 44 protected void onCreate(Bundle savedInstanceState) { 45 super.onCreate(savedInstanceState); 46 setContentView(R.layout.activity_main); 47 if (android.os.Build.VERSION.SDK_INT > 9) { 48 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 49 StrictMode.setThreadPolicy(policy); 50 } 51 52 geocodingButton = (Button)findViewById(R.id.geoButton); 53 geocodingButton.setOnClickListener(new OnClickListener() { 54 @Override 55 public void onClick(View v) { 56 //针对上一节中Geocoder服务不可用的情况,此处使用google maps中的服务替代 57 //String url = "http://maps.google.com/maps/api/geocode/json?address=SFO&sensor=false"; 58 String url = "http://maps.google.com/maps/api/geocode/json?latlng=40.124356,-73.961472&sensor=false"; 59 HttpClient client = new DefaultHttpClient(); 60 StringBuilder responseData = new StringBuilder(""); 61 try { 62 //向指定的url发送http请求 63 HttpResponse response = client.execute(new HttpGet(url)); 64 //取得服务器返回的响应 65 HttpEntity entity = response.getEntity(); 66 BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); 67 String line = ""; 68 while((line = reader.readLine()) != null) { 69 responseData.append(line); 70 } 71 } catch (ClientProtocolException e) { 72 e.printStackTrace(); 73 } catch (IOException e) { 74 e.printStackTrace(); 75 } 76 Gson gson = new Gson(); 77 GeoResult geoResult = gson.fromJson(responseData.toString(), GeoResult.class); 78 System.out.println(responseData); 79 System.out.println(geoResult); 80 } 81 }); 82 } 83 }
(2)GeoResult.java
1 package com.location4; 2 3 import java.util.List; 4 5 public class GeoResult { 6 7 private String status; 8 private List<Result> results; 9 public String getStatus() { 10 return status; 11 } 12 public void setStatus(String status) { 13 this.status = status; 14 } 15 public List<Result> getResults() { 16 return results; 17 } 18 public void setResults(List<Result> results) { 19 this.results = results; 20 } 21 @Override 22 public String toString() { 23 return "GeoResult [status=" + status + ", results=" + results + "]"; 24 } 25 }
(3)Result.java
1 package com.location4; 2 3 import java.util.Arrays; 4 5 public class Result { 6 7 private String[] types; 8 private String formatted_address; 9 private String place_id; 10 public String getPlace_id() { 11 return place_id; 12 } 13 public void setPlace_id(String place_id) { 14 this.place_id = place_id; 15 } 16 public String[] getTypes() { 17 return types; 18 } 19 public void setTypes(String[] types) { 20 this.types = types; 21 } 22 public String getFormatted_address() { 23 return formatted_address; 24 } 25 public void setFormatted_address(String formatted_address) { 26 this.formatted_address = formatted_address; 27 } 28 @Override 29 public String toString() { 30 return "Result [types=" + Arrays.toString(types) 31 + ", formatted_address=" + formatted_address + ", place_id=" 32 + place_id + "]"; 33 } 34 }
(4)http://maps.google.com/maps/api/geocode/json?latlng=40.124356,-73.961472&sensor=false
和http://maps.google.com/maps/api/geocode/xml?latlng=40.124356,-73.961472&sensor=false的返回结果分别如下:
1 { 2 "results" : [ 3 { 4 "address_components" : [ 5 { 6 "long_name" : "511", 7 "short_name" : "511", 8 "types" : [ "street_number" ] 9 }, 10 { 11 "long_name" : "Ocean Avenue", 12 "short_name" : "Ocean Ave", 13 "types" : [ "route" ] 14 }, 15 { 16 "long_name" : "Sea Girt", 17 "short_name" : "Sea Girt", 18 "types" : [ "locality", "political" ] 19 }, 20 { 21 "long_name" : "Monmouth County", 22 "short_name" : "Monmouth County", 23 "types" : [ "administrative_area_level_2", "political" ] 24 }, 25 { 26 "long_name" : "New Jersey", 27 "short_name" : "NJ", 28 "types" : [ "administrative_area_level_1", "political" ] 29 }, 30 { 31 "long_name" : "美国", 32 "short_name" : "US", 33 "types" : [ "country", "political" ] 34 }, 35 { 36 "long_name" : "08750", 37 "short_name" : "08750", 38 "types" : [ "postal_code" ] 39 }, 40 { 41 "long_name" : "2712", 42 "short_name" : "2712", 43 "types" : [ "postal_code_suffix" ] 44 } 45 ], 46 "formatted_address" : "511 Ocean Ave, Sea Girt, NJ 08750美国", 47 "geometry" : { 48 "location" : { 49 "lat" : 40.131507, 50 "lng" : -74.028998 51 }, 52 "location_type" : "ROOFTOP", 53 "viewport" : { 54 "northeast" : { 55 "lat" : 40.1328559802915, 56 "lng" : -74.02764901970851 57 }, 58 "southwest" : { 59 "lat" : 40.1301580197085, 60 "lng" : -74.03034698029151 61 } 62 } 63 }, 64 "place_id" : "ChIJSUENuniIwYkRm9pgGolNa2s", 65 "types" : [ "street_address" ] 66 }, 67 { 68 "address_components" : [ 69 { 70 "long_name" : "美国", 71 "short_name" : "US", 72 "types" : [ "country", "political" ] 73 } 74 ], 75 "formatted_address" : "美国", 76 "geometry" : { 77 "bounds" : { 78 "northeast" : { 79 "lat" : 71.3867745, 80 "lng" : -66.9502861 81 }, 82 "southwest" : { 83 "lat" : 18.9106768, 84 "lng" : 172.4458955 85 } 86 }, 87 "location" : { 88 "lat" : 37.09024, 89 "lng" : -95.712891 90 }, 91 "location_type" : "APPROXIMATE", 92 "viewport" : { 93 "northeast" : { 94 "lat" : 49.38, 95 "lng" : -66.94 96 }, 97 "southwest" : { 98 "lat" : 25.82, 99 "lng" : -124.39 100 } 101 } 102 }, 103 "place_id" : "ChIJCzYy5IS16lQRQrfeQ5K5Oxw", 104 "types" : [ "country", "political" ] 105 } 106 ], 107 "status" : "OK" 108 }
1 <GeocodeResponse> 2 <status>OK</status> 3 <result> 4 <type>street_address</type> 5 <formatted_address>511 Ocean Ave, Sea Girt, NJ 08750美国</formatted_address> 6 <address_component> 7 <long_name>511</long_name> 8 <short_name>511</short_name> 9 <type>street_number</type> 10 </address_component> 11 <address_component> 12 <long_name>Ocean Avenue</long_name> 13 <short_name>Ocean Ave</short_name> 14 <type>route</type> 15 </address_component> 16 <address_component> 17 <long_name>Sea Girt</long_name> 18 <short_name>Sea Girt</short_name> 19 <type>locality</type> 20 <type>political</type> 21 </address_component> 22 <address_component> 23 <long_name>Monmouth County</long_name> 24 <short_name>Monmouth County</short_name> 25 <type>administrative_area_level_2</type> 26 <type>political</type> 27 </address_component> 28 <address_component> 29 <long_name>New Jersey</long_name> 30 <short_name>NJ</short_name> 31 <type>administrative_area_level_1</type> 32 <type>political</type> 33 </address_component> 34 <address_component> 35 <long_name>美国</long_name> 36 <short_name>US</short_name> 37 <type>country</type> 38 <type>political</type> 39 </address_component> 40 <address_component> 41 <long_name>08750</long_name> 42 <short_name>08750</short_name> 43 <type>postal_code</type> 44 </address_component> 45 <address_component> 46 <long_name>2712</long_name> 47 <short_name>2712</short_name> 48 <type>postal_code_suffix</type> 49 </address_component> 50 <geometry> 51 <location> 52 <lat>40.1315070</lat> 53 <lng>-74.0289980</lng> 54 </location> 55 <location_type>ROOFTOP</location_type> 56 <viewport> 57 <southwest> 58 <lat>40.1301580</lat> 59 <lng>-74.0303470</lng> 60 </southwest> 61 <northeast> 62 <lat>40.1328560</lat> 63 <lng>-74.0276490</lng> 64 </northeast> 65 </viewport> 66 </geometry> 67 <place_id>ChIJSUENuniIwYkRm9pgGolNa2s</place_id> 68 </result> 69 <result> 70 <type>country</type> 71 <type>political</type> 72 <formatted_address>美国</formatted_address> 73 <address_component> 74 <long_name>美国</long_name> 75 <short_name>US</short_name> 76 <type>country</type> 77 <type>political</type> 78 </address_component> 79 <geometry> 80 <location> 81 <lat>37.0902400</lat> 82 <lng>-95.7128910</lng> 83 </location> 84 <location_type>APPROXIMATE</location_type> 85 <viewport> 86 <southwest> 87 <lat>25.8200000</lat> 88 <lng>-124.3900000</lng> 89 </southwest> 90 <northeast> 91 <lat>49.3800000</lat> 92 <lng>-66.9400000</lng> 93 </northeast> 94 </viewport> 95 <bounds> 96 <southwest> 97 <lat>18.9106768</lat> 98 <lng>172.4458955</lng> 99 </southwest> 100 <northeast> 101 <lat>71.3867745</lat> 102 <lng>-66.9502861</lng> 103 </northeast> 104 </bounds> 105 </geometry> 106 <place_id>ChIJCzYy5IS16lQRQrfeQ5K5Oxw</place_id> 107 </result> 108 </GeocodeResponse>