Drawing a line/path on Google Maps

后端 未结 13 1004
执笔经年
执笔经年 2020-11-22 05:23

I\'ve been busy for a long time finding out how to draw a line between two (GPS) points on the map in HelloMapView but with no luck.

Could anyone please tell me how

13条回答
  •  时光取名叫无心
    2020-11-22 05:39

    // This Activity will draw a line between two selected points on Map
    
    public class MainActivity extends MapActivity {
     MapView myMapView = null;
     MapController myMC = null;
     GeoPoint geoPoint = null;
    
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
    
    
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      myMapView = (MapView) findViewById(R.id.mapview);
      geoPoint = null;
      myMapView.setSatellite(false);
    
      String pairs[] = getDirectionData("ahmedabad", "vadodara");
      String[] lngLat = pairs[0].split(",");
    
      // STARTING POINT
      GeoPoint startGP = new GeoPoint(
        (int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double
          .parseDouble(lngLat[0]) * 1E6));
    
      myMC = myMapView.getController();
      geoPoint = startGP;
      myMC.setCenter(geoPoint);
      myMC.setZoom(15);
      myMapView.getOverlays().add(new DirectionPathOverlay(startGP, startGP));
    
      // NAVIGATE THE PATH
    
      GeoPoint gp1;
      GeoPoint gp2 = startGP;
    
      for (int i = 1; i < pairs.length; i++) {
       lngLat = pairs[i].split(",");
       gp1 = gp2;
       // watch out! For GeoPoint, first:latitude, second:longitude
    
       gp2 = new GeoPoint((int) (Double.parseDouble(lngLat[1]) * 1E6),
         (int) (Double.parseDouble(lngLat[0]) * 1E6));
       myMapView.getOverlays().add(new DirectionPathOverlay(gp1, gp2));
       Log.d("xxx", "pair:" + pairs[i]);
      }
    
      // END POINT
      myMapView.getOverlays().add(new DirectionPathOverlay(gp2, gp2));
    
      myMapView.getController().animateTo(startGP);
      myMapView.setBuiltInZoomControls(true);
      myMapView.displayZoomControls(true);
    
     }
    
     @Override
     protected boolean isRouteDisplayed() {
      // TODO Auto-generated method stub
      return false;
     }
    
     private String[] getDirectionData(String srcPlace, String destPlace) {
    
      String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr="
       + srcPlace + "&daddr=" + destPlace
       + "&ie=UTF8&0&om=0&output=kml";
    
      Log.d("URL", urlString);
      Document doc = null;
      HttpURLConnection urlConnection = null;
      URL url = null;
      String pathConent = "";
    
      try {
    
       url = new URL(urlString.toString());
       urlConnection = (HttpURLConnection) url.openConnection();
       urlConnection.setRequestMethod("GET");
       urlConnection.setDoOutput(true);
       urlConnection.setDoInput(true);
       urlConnection.connect();
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
       DocumentBuilder db = dbf.newDocumentBuilder();
       doc = db.parse(urlConnection.getInputStream());
    
      } catch (Exception e) {
      }
    
      NodeList nl = doc.getElementsByTagName("LineString");
      for (int s = 0; s < nl.getLength(); s++) {
       Node rootNode = nl.item(s);
       NodeList configItems = rootNode.getChildNodes();
       for (int x = 0; x < configItems.getLength(); x++) {
        Node lineStringNode = configItems.item(x);
        NodeList path = lineStringNode.getChildNodes();
        pathConent = path.item(0).getNodeValue();
       }
      }
      String[] tempContent = pathConent.split(" ");
      return tempContent;
     }
    
    }
    
    
    //*****************************************************************************
    
    DirectionPathOverlay
    
    public class DirectionPathOverlay extends Overlay {
    
        private GeoPoint gp1;
        private GeoPoint gp2;
    
        public DirectionPathOverlay(GeoPoint gp1, GeoPoint gp2) {
            this.gp1 = gp1;
            this.gp2 = gp2;
        }
    
        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
                long when) {
            // TODO Auto-generated method stub
            Projection projection = mapView.getProjection();
            if (shadow == false) {
    
                Paint paint = new Paint();
                paint.setAntiAlias(true);
                Point point = new Point();
                projection.toPixels(gp1, point);
                paint.setColor(Color.BLUE);
                Point point2 = new Point();
                projection.toPixels(gp2, point2);
                paint.setStrokeWidth(2);
                canvas.drawLine((float) point.x, (float) point.y, (float) point2.x,
                        (float) point2.y, paint);
            }
            return super.draw(canvas, mapView, shadow, when);
        }
    
        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            // TODO Auto-generated method stub
    
            super.draw(canvas, mapView, shadow);
        }
    
    }
    

提交回复
热议问题