實現網絡定位:
首先獲取經緯度
[java]
/**
* 獲取本地
* @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,我這裡寫了一個工具類
[java]
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®ion=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字符串,大家解析一下就可以
[java]
MapsApiUtils.getInstance().getAddress(getLocation(context));
計算路線數據
可以得到起點到終點的時間和路程
調用getRoutes() 方法,傳起點和終點
[java]
MapsApiUtils.getInstance().getLatLng("39.90403,116.407526");
根據地址獲取經緯度
[java]
MapsApiUtils.getInstance().getRoutes("北京","上海");
還有很多大家可以到官網上看看,也很容易理解的。