close
下面方法只能用來畫點到點的直線,如果想畫兩地點之間的多點導航路線(需連網) 請參考
範例: http://www.linuxidc.com/Linux/2011-05/36375p2.htm
觀念: http://www.cnblogs.com/janken/archive/2012/05/08/2489575.html
Google Directions API : https://developers.google.com/maps/documentation/directions/?hl=zh-TW
首先先將下面的程式碼寫成外部或內部的class 此class 的建構子只要給好路徑的座標(依順序)就可以繪製直線路線(不需網路)
class MapViewDrawPath extends Overlay{ GeoPoint[] geoPoints = null; Point[] points = null; Path[] paths = null; float[] drawPoint = null; /** * * @param geoPoints 路徑座標(請依序排列) */ public MapViewDrawPath(GeoPoint...geoPoints){ this.geoPoints = geoPoints; //初始化Point points = new Point[geoPoints.length]; for(int i=0 ; i < points.length ; i++)points[i] = new Point(); //初始化Path paths = new Path[geoPoints.length-1];//路徑數比座標數少1 for(int i=0;i< paths.length;i++)paths[i] = new Path(); drawPoint = new float[(geoPoints.length-1)*4]; } @Override public void draw(Canvas canvas,MapView mapView,boolean shadow){ super.draw(canvas, mapView, shadow); Paint paint = new Paint(); paint.setColor(Color.GRAY);//畫筆的顏色 paint.setAlpha(255);//不透明度 paint.setDither(true); paint.setStyle(Paint.Style.STROKE);//樣式 paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeWidth(2);//寬度 Projection projection = mapView.getProjection(); for(int i=0;i < geoPoints.length;i++){ projection.toPixels(geoPoints[i],points[i]); } int count = 0; for(int i=0;i< drawPoint.length;i+=2){ if(i==0){ drawPoint[i] = points[count].x; drawPoint[i+1] = points[count].y; count++; }else if(i>= drawPoint.length-2){ drawPoint[i] = points[points.length-1].x; drawPoint[i+1] = points[points.length-1].y; }else{ drawPoint[i] = points[count].x; drawPoint[i+1] = points[count].y; drawPoint[i+2] = points[count].x; drawPoint[i+3] = points[count].y; i+=2; count++; } } canvas.drawLines(drawPoint, paint); } }
然後在主要的MapViewActivity裡
//測試資料 GeoPoint g1 = new GeoPoint((int)(25.107984*1000000),(int)(121.562244*1000000));//台北 GeoPoint g2 = new GeoPoint((int)(24.28202*1000000),(int)(120.950821*1000000));//台中 GeoPoint g3 = new GeoPoint((int)(22.763835*1000000),(int)(121.145502*1000000));//台東 //依下面範例撰寫 MapViewDrawPath dp = new MapViewDrawPath(g1,g2,g3); mapView.getOverlays().add(dp);
文章標籤
全站熱搜
留言列表