Android Google Maps API 網絡服務用於網絡定位、計算路線、獲取經緯度、獲取詳細地址等

extends:http://blog.csdn.net/h7870181/article/details/12505883java

 

Google Maps API 網絡服務  git

官網地址 :web

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

 

其實就是一些接口,供咱們調用,如:json

一、根據地址獲取經緯度api

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

二、計算路線數據app

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

三、根據經緯度獲取詳細地址工具

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("北京","上海");  
相關文章
相關標籤/搜索