Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

Google Maps API 网络服务  

官网地址 :

https://developers.google.com/maps/documentation/webservices/?hl=zh-cn


其实就是一些接口,供我们调用,如:

1、根据地址获取经纬度

http://maps.google.com/maps/api/geocode/json?address=北京&language=zh-CN&sensor=false

2、计算路线数据

http://maps.googleapis.com/maps/api/directions/json?origin=北京&destination=上海&sensor=false&mode=driving

3、根据经纬度获取详细地址

http://maps.google.com/maps/api/geocode/json?latlng="latlng"&language=zh-CN&sensor=false

等等还有很多,大家可以自己去找找


给大家介绍一下如果利用这些接口

实现网络定位:

首先获取经纬度

	/**
	 * 獲取本地
	 * @param context
	 * @return
	 */
	public String getLocation(Context context){
		LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        // 返回所有已知的位置提供者的名称列表,包括未获准访问或调用活动目前已停用的。
        //List<String> lp = lm.getAllProviders();
        Criteria criteria = new Criteria();  
        criteria.setCostAllowed(false); 
        //设置位置服务免费 
        criteria.setAccuracy(Criteria.ACCURACY_COARSE); //设置水平位置精度
         //getBestProvider 只有允许访问调用活动的位置供应商将被返回
        String  providerName = lm.getBestProvider(criteria, true);

        if (providerName != null)
        {        
            Location location = lm.getLastKnownLocation(providerName); 
            if(location!=null){
	            //获取维度信息
	            double latitude = location.getLatitude();
	            //获取经度信息
	            double longitude = location.getLongitude();
	            return latitude+","+longitude;
            }
        } 
        return ""; 
	}

调用API,我这里写了一个工具类

package com.techrare.utils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

public class MapsApiUtils {
	private static MapsApiUtils mapsApiUtils = new MapsApiUtils();
	
	/**
	 * 单例模式
	 * 
	 * @return
	 */
	synchronized public static MapsApiUtils getInstance() {
		return mapsApiUtils;
	}
	
	/**
	 * 根据API地址和参数获取响应对象HttpResponse
	 * 
	 * @param params
	 * @param url
	 * @return
	 */
	private HttpResponse post(Map<String, Object> params, String url) {

		HttpClient client = new DefaultHttpClient();
		HttpPost httpPost = new HttpPost(url);
		httpPost.addHeader("charset", HTTP.UTF_8);
		httpPost.setHeader("Content-Type",
				"application/x-www-form-urlencoded; charset=utf-8");
		HttpResponse response = null;
		if (params != null && params.size() > 0) {
			List<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();
			for (String key : params.keySet()) {
				nameValuepairs.add(new BasicNameValuePair(key, (String) params
						.get(key)));
			}
			try {
				httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,
						HTTP.UTF_8));
				response = client.execute(httpPost);
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (RuntimeException e) {
				e.printStackTrace();
			}
		} else {
			try {
				response = client.execute(httpPost);
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return response;
	}
	
	/**
	 * 得到JSON值
	 * 
	 * @param params
	 * @param url
	 * @return
	 */
	private Object getValues(Map<String, Object> params, String url) {
		String token = "";
		HttpResponse response = post(params, url);
		if (response != null) {
			try {
				token = EntityUtils.toString(response.getEntity());
				response.removeHeaders("operator");
			} catch (ParseException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return token;
	}
	
	/**
	 * 根据google API 获取两地的路線
	 * @param origin 起點
	 * @param destination 終點
	 * @param mode 出行方式 driving駕車,  walking步行, bicycling自行車, transit公交車
	 * @param sensor 是否来自装有位置传感器的设备  true Or false
	 * @return
	 */
	public Object getRoutes(String origin, String destination) {
		String url = "http://maps.googleapis.com/maps/api/directions/json?origin="+ origin +"&" +
				"destination="+ destination +"&sensor=false&mode=driving&region=zh";
		return getValues(null, url);
	}
	
	/**
	 * 根据經緯度 获取地理位置
	 * LatLng 經緯度以逗號隔開  緯度,經度
	 * @return
	 */
	public Object getAddress(String latlng) {
		String url = "http://maps.google.com/maps/api/geocode/json?latlng="+
				latlng+"&language=zh-CN&sensor=false";
		return getValues(null, url);
	}
	
	/**
	 * 根據地址獲取經緯度
	 * @return
	 */
	public Object getLatlng(String str) {
		String url = "http://maps.google.com/maps/api/geocode/json?address="+
				str+"&language=zh-CN&sensor=false";
		return getValues(null, url);
	}
}

调用getAddress()方法 传递经纬度来获取详细地址 返回的是JSON字符串,大家解析一下就可以

MapsApiUtils.getInstance().getAddress(getLocation(context));

計算路线数据 

可以得到起点到终点的时间和路程

调用getRoutes() 方法,传起点和终点

MapsApiUtils.getInstance().getLatLng("39.90403,116.407526");

根据地址获取经纬度

MapsApiUtils.getInstance().getRoutes("北京","上海");


還有很多大家可以到官網上看看,也很容易理解的。


你可能感兴趣的:(Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等)