2011-06-23 28 views

回答

1

您應該在地圖上添加Overlay並覆蓋它的方法onDraw()。這樣你就可以在地圖上繪製任何你想要的東西。

0

使用這種它工作正常,我

mapView.setBuiltInZoomControls(true); 
      mapController = mapView.getController(); 
      ArrayList allGeoPoints = getDirections(8.487495, 76.948623,toLat 10.015861, 76.341867toLon); 
      GeoPoint moveTo = new GeoPoint(startLattitude, startLongigude); 
      mapController.setCenter(moveTo); 
      //mc.animateTo(moveTo); 
      mapController.setZoom(12); 
      mapView.getOverlays().add(new MyOverlay(allGeoPoints)); 


public static ArrayList getDirections(double lat1, double lon1, double lat2, double lon2) { 
     String url = "http://maps.googleapis.com/maps/api/directions/xml?origin=" +lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric"; 
     String tag[] = { "lat", "lng" }; 
     ArrayList listOfGeopoints = new ArrayList(); 
     HttpResponse response = null; 
     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(url); 
      response = httpClient.execute(httpPost, localContext); 
      InputStream in = response.getEntity().getContent(); 
      DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      Document doc = builder.parse(in); 
      Log.e("********************** ",new JsonOperations().convertStreamToString(in).toString()); 
      if (doc != null) { 
       NodeList nl1, nl2; 
       nl1 = doc.getElementsByTagName(tag[0]); 
       nl2 = doc.getElementsByTagName(tag[1]); 
       if (nl1.getLength() > 0) { 
        listOfGeopoints = new ArrayList(); 
        for (int i = 0; i < nl1.getLength(); i++) { 
         Node node1 = nl1.item(i); 
         Node node2 = nl2.item(i); 
         double lat = Double.parseDouble(node1.getTextContent()); 
         double lng = Double.parseDouble(node2.getTextContent()); 
         listOfGeopoints.add(new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6))); 
        } 
       } else { 
        // No points found 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return listOfGeopoints; 
    } 

而且myoverlay類

public class MyOverlay extends Overlay { 

    private ArrayList allGeoPoints; 

    public MyOverlay(ArrayList allGeoPoints) { 
     super(); 
     this.allGeoPoints = allGeoPoints; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) { 
     super.draw(canvas, mv, shadow); 
     drawPath(mv, canvas); 
     return true; 
    } 

    public void drawPath(MapView mv, Canvas canvas) { 
     int xPrev = -1, yPrev = -1, xNow = -1, yNow = -1; 
     Paint paint = new Paint(); 
     paint.setColor(Color.BLUE); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(4); 
     //paint.setAlpha(100); 
     if (allGeoPoints != null) 
      for (int i = 0; i < allGeoPoints.size() - 4; i++) { 
       GeoPoint gp = (GeoPoint) allGeoPoints.get(i); 
       Point point = new Point(); 
       mv.getProjection().toPixels(gp, point); 
       xNow = point.x; 
       yNow = point.y; 
       if (xPrev != -1) { 
        canvas.drawLine(xPrev, yPrev, xNow, yNow, paint); 
       } 
       xPrev = xNow; 
       yPrev = yNow; 
      } 
    } 
} 
相關問題