您的位置:首页 > 理论基础 > 计算机网络

ANDROID_MARS学习笔记_S03_006_geocoding、HttpClient

2016-02-20 21:09 1116 查看
一、简介





二、代码
1.xml
(1)AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>


2.java
(1)MainActivity.java

package com.location4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.google.gson.Gson;

/**
* 根据地址查询经纬度:
* http://maps.google.com/maps/api/geocode/json?address=SFO&sensor=false *
* 根据经纬度查询地址:
* http://maps.google.com/maps/api/geocode/json?latlng=40.124356,-73.961472&sensor=false *
* bounds的作用:在指定的经纬度范围内查询
* http://maps.google.com/maps/api/geocode/json?address=SFO & bounds=39.125367,-118.326182|42.271635,-40.287321 & sensor=false
*
* region的作用:在给定国家代码的国家中查询(es:西班牙)
* http://maps.google.com/maps/api/geocode/json?address=Toledo&sensor=false®ion=es */

@SuppressLint("NewApi")
public class MainActivity extends Activity {

private Button geocodingButton = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}

geocodingButton = (Button)findViewById(R.id.geoButton);
geocodingButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//针对上一节中Geocoder服务不可用的情况,此处使用google maps中的服务替代
//String url = "http://maps.google.com/maps/api/geocode/json?address=SFO&sensor=false";
String url = "http://maps.google.com/maps/api/geocode/json?latlng=40.124356,-73.961472&sensor=false";
HttpClient client = new DefaultHttpClient();
StringBuilder responseData = new StringBuilder("");
try {
//向指定的url发送http请求
HttpResponse response = client.execute(new HttpGet(url));
//取得服务器返回的响应
HttpEntity entity = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
String line = "";
while((line = reader.readLine()) != null) {
responseData.append(line);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Gson gson = new Gson();
GeoResult geoResult = gson.fromJson(responseData.toString(), GeoResult.class);
System.out.println(responseData);
System.out.println(geoResult);
}
});
}
}


(2)GeoResult.java

package com.location4;

import java.util.List;

public class GeoResult {

private String status;
private List<Result> results;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Result> getResults() {
return results;
}
public void setResults(List<Result> results) {
this.results = results;
}
@Override
public String toString() {
return "GeoResult [status=" + status + ", results=" + results + "]";
}
}


(3)Result.java

package com.location4;

import java.util.Arrays;

public class Result {

private String[] types;
private String formatted_address;
private String place_id;
public String getPlace_id() {
return place_id;
}
public void setPlace_id(String place_id) {
this.place_id = place_id;
}
public String[] getTypes() {
return types;
}
public void setTypes(String[] types) {
this.types = types;
}
public String getFormatted_address() {
return formatted_address;
}
public void setFormatted_address(String formatted_address) {
this.formatted_address = formatted_address;
}
@Override
public String toString() {
return "Result [types=" + Arrays.toString(types)
+ ", formatted_address=" + formatted_address + ", place_id="
+ place_id + "]";
}
}


(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的返回结果分别如下:

{
"results" : [
{
"address_components" : [
{
"long_name" : "511",
"short_name" : "511",
"types" : [ "street_number" ]
},
{
"long_name" : "Ocean Avenue",
"short_name" : "Ocean Ave",
"types" : [ "route" ]
},
{
"long_name" : "Sea Girt",
"short_name" : "Sea Girt",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Monmouth County",
"short_name" : "Monmouth County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "New Jersey",
"short_name" : "NJ",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "美国",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "08750",
"short_name" : "08750",
"types" : [ "postal_code" ]
},
{
"long_name" : "2712",
"short_name" : "2712",
"types" : [ "postal_code_suffix" ]
}
],
"formatted_address" : "511 Ocean Ave, Sea Girt, NJ 08750美国",
"geometry" : {
"location" : {
"lat" : 40.131507,
"lng" : -74.028998
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 40.1328559802915,
"lng" : -74.02764901970851
},
"southwest" : {
"lat" : 40.1301580197085,
"lng" : -74.03034698029151
}
}
},
"place_id" : "ChIJSUENuniIwYkRm9pgGolNa2s",
"types" : [ "street_address" ]
},
{
"address_components" : [
{
"long_name" : "美国",
"short_name" : "US",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "美国",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 71.3867745,
"lng" : -66.9502861
},
"southwest" : {
"lat" : 18.9106768,
"lng" : 172.4458955
}
},
"location" : {
"lat" : 37.09024,
"lng" : -95.712891
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 49.38,
"lng" : -66.94
},
"southwest" : {
"lat" : 25.82,
"lng" : -124.39
}
}
},
"place_id" : "ChIJCzYy5IS16lQRQrfeQ5K5Oxw",
"types" : [ "country", "political" ]
}
],
"status" : "OK"
}


<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
<formatted_address>511 Ocean Ave, Sea Girt, NJ 08750美国</formatted_address>
<address_component>
<long_name>511</long_name>
<short_name>511</short_name>
<type>street_number</type>
</address_component>
<address_component>
<long_name>Ocean Avenue</long_name>
<short_name>Ocean Ave</short_name>
<type>route</type>
</address_component>
<address_component>
<long_name>Sea Girt</long_name>
<short_name>Sea Girt</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Monmouth County</long_name>
<short_name>Monmouth County</short_name>
<type>administrative_area_level_2</type>
<type>political</type>
</address_component>
<address_component>
<long_name>New Jersey</long_name>
<short_name>NJ</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
<address_component>
<long_name>美国</long_name>
<short_name>US</short_name>
<type>country</type>
<type>political</type>
</address_component>
<address_component>
<long_name>08750</long_name>
<short_name>08750</short_name>
<type>postal_code</type>
</address_component>
<address_component>
<long_name>2712</long_name>
<short_name>2712</short_name>
<type>postal_code_suffix</type>
</address_component>
<geometry>
<location>
<lat>40.1315070</lat>
<lng>-74.0289980</lng>
</location>
<location_type>ROOFTOP</location_type>
<viewport>
<southwest>
<lat>40.1301580</lat>
<lng>-74.0303470</lng>
</southwest>
<northeast>
<lat>40.1328560</lat>
<lng>-74.0276490</lng>
</northeast>
</viewport>
</geometry>
<place_id>ChIJSUENuniIwYkRm9pgGolNa2s</place_id>
</result>
<result>
<type>country</type>
<type>political</type>
<formatted_address>美国</formatted_address>
<address_component>
<long_name>美国</long_name>
<short_name>US</short_name>
<type>country</type>
<type>political</type>
</address_component>
<geometry>
<location>
<lat>37.0902400</lat>
<lng>-95.7128910</lng>
</location>
<location_type>APPROXIMATE</location_type>
<viewport>
<southwest>
<lat>25.8200000</lat>
<lng>-124.3900000</lng>
</southwest>
<northeast>
<lat>49.3800000</lat>
<lng>-66.9400000</lng>
</northeast>
</viewport>
<bounds>
<southwest>
<lat>18.9106768</lat>
<lng>172.4458955</lng>
</southwest>
<northeast>
<lat>71.3867745</lat>
<lng>-66.9502861</lng>
</northeast>
</bounds>
</geometry>
<place_id>ChIJCzYy5IS16lQRQrfeQ5K5Oxw</place_id>
</result>
</GeocodeResponse>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: