在网上找到一个同学的方法,挺强大的,分享一下。
这个方法是调用google map direction方法,解析返回的路线数据,然后画到地图上。
直接给出两个函数:
public void routeShow(String startPoint,String endPoint)
{
Log.i("start point",startPoint);
Log.i("end point",endPoint);
String url ="http://maps.google.com/maps/api/directions/xml?origin="+String.valueOf(startPoint)+
"&destination="+String.valueOf(endPoint)+"&sensor=false&mode=driving";
HttpGet get = new HttpGet(url);
String strResult = "" ;
try {
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 3000 );
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse httpResponse = null ;
httpResponse = httpClient.execute(get);
if (httpResponse.getStatusLine().getStatusCode() == 200 ){
strResult = EntityUtils.toString(httpResponse.getEntity());
}
} catch (Exception e) {
return ;
}
if (- 1 == strResult.indexOf( "<status>OK</status>" )){
Toast.makeText(this ,"获取导航路线失败!",Toast.LENGTH_SHORT).show();
// this.finish();
return ;
}
int pos = strResult.indexOf( "<overview_polyline>" );
pos = strResult.indexOf("<points>" , pos + 1 );
int pos2 = strResult.indexOf( "</points>" , pos);
strResult = strResult.substring(pos + 8 , pos2);
//////////把返回的数据加载到地图上去
List<GeoPoint> points = decodePoly(strResult);
Polyline mOverlay = new Polyline(points,methodSelected); //这个是一个画直线的方法
List<Overlay> overlays = mapView.getOverlays();
overlays.add(mOverlay);
routePolyline.add(mOverlay);
if (points.size() >= 2 ){
mapController.animateTo(points.get(0));
}
mapView.invalidate();
}
/**
* 解析返回xml中overview_polyline的路线编码
*
* @param encoded
* @return
*/
private List<GeoPoint> decodePoly(String encoded) {
List<GeoPoint> poly = new ArrayList<GeoPoint>();
int index = 0 , len = encoded.length();
int lat = 0 , lng = 0 ;
while (index < len) {
int b, shift = 0 , result = 0 ;
do {
b = encoded.charAt(index++) - 63 ;
result |= (b & 0x1f ) << shift;
shift += 5 ;
} while (b >= 0x20 );
int dlat = ((result & 1 ) != 0 ? ~(result >> 1 ) : (result >> 1 ));
lat += dlat;
shift = 0 ;
result = 0 ;
do {
b = encoded.charAt(index++) - 63 ;
result |= (b & 0x1f ) << shift;
shift += 5 ;
} while (b >= 0x20 );
int dlng = ((result & 1 ) != 0 ? ~(result >> 1 ) : (result >> 1 ));
lng += dlng;
GeoPoint p = new GeoPoint(( int ) ((( double ) lat / 1E5) * 1E6),
(int ) ((( double ) lng / 1E5) * 1E6));
poly.add(p);
}
return poly;
}
看下效果:
现在google map 并没有对android 的map sdk 进行direction的封装,所以还是调用web的方式,这个比较慢。