当前位置: 代码迷 >> Android >> Android Google Maps API 网络服务用来网络定位、计算路线、获取经纬度、获取详细地址等
  详细解决方案

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

热度:118   发布时间:2016-04-28 07:51:38.0
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("北京","上海");


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


  相关解决方案