• ANDROID_MARS学习笔记_S03_006_geocoding、HttpClient


    一、简介

    二、代码
    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&region=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>

     

     

  • 相关阅读:
    生成缩略图
    Log4net 记录日志
    cs端调用webApi
    抽象工厂
    简单工厂
    DataSet读取XML
    EntityFramework+WCF
    构造函数基础
    延迟加载
    位运算
  • 原文地址:https://www.cnblogs.com/shamgod/p/5203990.html
Copyright © 2020-2023  润新知