Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android使用twoo POI-s在地图视图上绘制路线_Android_Android Mapview - Fatal编程技术网

Android使用twoo POI-s在地图视图上绘制路线

Android使用twoo POI-s在地图视图上绘制路线,android,android-mapview,Android,Android Mapview,如何在地图视图上绘制两个poi-s之间的路线?请阅读以下代码。根据您的要求修改代码 MapDirection.java: public class MapDirection extends MapActivity{ MapView mapview; MapRouteOverlay mapoverlay; Context _context; List<Overlay> maplistoverlay; Drawable drawable,drawable2; M

如何在地图视图上绘制两个poi-s之间的路线?

请阅读以下代码。根据您的要求修改代码

MapDirection.java:

public class MapDirection extends MapActivity{

  MapView mapview;
  MapRouteOverlay mapoverlay;
  Context _context;
  List<Overlay> maplistoverlay;
  Drawable drawable,drawable2;
  MapOverlay mapoverlay2,mapoverlay3;
  GeoPoint srcpoint,destpoint;
  Overlay overlayitem;
  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);  
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.map_direction);
    RegisterActivities.registerActivity(this);
    mapview=(MapView)this.findViewById(R.id.mapview);

    callMap();
  }
  private void callMap() {


    srcpoint=new GeoPoint((int)(Data.src_lat_date*1E6),(int)(Data.src_long_data*1E6));
    maplistoverlay=mapview.getOverlays();
    drawable=this.getResources().getDrawable(R.drawable.green_a);
    mapoverlay2=new MapOverlay(drawable);
    OverlayItem overlayitem = new OverlayItem(srcpoint, "", "");
    mapoverlay2.addOverlay(overlayitem);
    maplistoverlay.add(mapoverlay2);

    destpoint=new GeoPoint((int)(Data.dest_lat_data*1E6),(int)(Data.dest_long_data*1E6));
    drawable2=this.getResources().getDrawable(R.drawable.green_b);
    mapoverlay3=new MapOverlay(drawable2);
    OverlayItem overlayitem3 = new OverlayItem(destpoint, "", "");
    mapoverlay3.addOverlay(overlayitem3);
    maplistoverlay.add(mapoverlay3);


    double dest_lat = Data.dest_lat_data;
    double dest_long = Data.dest_long_data;

    GeoPoint srcGeoPoint = new GeoPoint((int) (Data.src_lat_date* 1E6),
        (int) (Data.src_long_data * 1E6));
    GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
        (int) (dest_long * 1E6));

    DrawPath(srcGeoPoint, destGeoPoint, Color.BLUE, mapview);

    mapview.getController().animateTo(srcGeoPoint);
    mapview.getController().setZoom(13);
    //mapview.setStreetView(true);
    mapview.setBuiltInZoomControls(true);
    mapview.invalidate();


  }
  private void DrawPath(GeoPoint src, GeoPoint dest, int color,
      MapView mMapView01) {



    // connect to map web service
    StringBuilder urlString = new StringBuilder();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");//from
    urlString.append( Double.toString((double)src.getLatitudeE6()/1.0E6 ));
    urlString.append(",");
    urlString.append( Double.toString((double)src.getLongitudeE6()/1.0E6 ));
    urlString.append("&daddr=");//to
    urlString.append( Double.toString((double)dest.getLatitudeE6()/1.0E6 ));
    urlString.append(",");
    urlString.append( Double.toString((double)dest.getLongitudeE6()/1.0E6 ));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    Log.d("xxx","URL="+urlString.toString());

    //System.out.println(urlString);
    // get the kml (XML) doc. And parse it to get the coordinates(direction route).
    Document doc = null;
    HttpURLConnection urlConnection= null;
    URL url = null;
    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());

      if(doc.getElementsByTagName("GeometryCollection").getLength()>0)
      {
        //String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName();
        String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getFirstChild().getNodeValue() ;
        Log.d("xxx","path="+ path);
        String [] pairs = path.split(" ");
        String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude lngLat[1]=latitude lngLat[2]=height
        // src
        GeoPoint startGP = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6));
        //mMapView01.getOverlays().add(overlayitem);
        GeoPoint gp1;
        GeoPoint gp2 = startGP;
        for(int i=1;i<pairs.length;i++) // the last one would be crash
        {
          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));
          mMapView01.getOverlays().add(new MapRouteOverlay(gp1,gp2,2,color));
          Log.d("xxx","pair:" + pairs[i]);
        }
        //mMapView01.getOverlays().add(new MapRouteOverlay(dest,dest, 3)); // use the default color
      }
    }
    catch (MalformedURLException e)
    {
      e.printStackTrace();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    catch (ParserConfigurationException e)
    {
      e.printStackTrace();
    }
    catch (SAXException e)
    {
      e.printStackTrace();
    }


  }
  @Override
    protected boolean isRouteDisplayed() {
      // TODO Auto-generated method stub
      return false;
    }
}
MapOverlay.java:

public class MapRouteOverlay extends Overlay {

  private GeoPoint gp1;
  private GeoPoint gp2;

  private int mode=0;
  private int defaultColor;




  public MapRouteOverlay(GeoPoint gp1,GeoPoint gp2,int mode) // GeoPoint is a int. (6E)
  {
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.mode = mode;
    defaultColor = 999; // no defaultColor

  }

  public MapRouteOverlay(GeoPoint gp1,GeoPoint gp2,int mode, int defaultColor)
  {
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.mode = mode;
    this.defaultColor = defaultColor;
  }

  public int getMode()
  {
    return mode;
  }

  public boolean draw
    (Canvas canvas, MapView mapView, boolean shadow, long when)
    {
      Projection projection = mapView.getProjection();
      if (shadow == false)
      {

        Paint paint = new Paint();
        paint.setAntiAlias(true);
        Point point = new Point();
        projection.toPixels(gp1, point);

        if(mode==2)
        {
          if(defaultColor==999)
            paint.setColor(Color.RED);
          else
            paint.setColor(defaultColor);
          Point point2 = new Point();
          projection.toPixels(gp2, point2);
          paint.setStrokeWidth(5);
          paint.setAlpha(120);
          canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
        }

      }
      return super.draw(canvas, mapView, shadow, when);
    }
}
public class MapOverlay extends ItemizedOverlay {
  private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

  public MapOverlay(Drawable _defaultMarker) {

    super(boundCenterBottom(_defaultMarker));
  }

  @Override
  protected OverlayItem createItem(int i) {
    return mOverlays.get(i);
  } 
  public void addOverlay(OverlayItem overlay) {
      mOverlays.add(overlay);
      populate();
  }

  @Override
  public int size() {
    return mOverlays.size();
  }

}
公共类MapOverlay扩展了ItemizeOverlay{
private ArrayList mOverlays=new ArrayList();
公共地图覆盖(可绘制_defaultMarker){
超级(boundCenterBottom(_defaultMarker));
}
@凌驾
受保护的OverlayItem createItem(int i){
返回mOverlays.get(i);
} 
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
}

使用此选项时,我得到:android.app.IntentReceiver泄漏:Activity dk.lector.ao.mobile.shop.map.EmbeddedMapViewActivity已泄漏IntentReceiver com.google.android.maps.NetworkConnectivityListener$ConnectivityBroadcastReceiver@4139a3b8原来是在这里注册的。是否缺少对unregisterReceiver()的调用?这是对的吗?嘿,什么是
R.drawable.green\u a
R.drawable.green\u b
?@SudiptaforAndroid谢谢你,但是你知道什么样的图像吗?@pawel,我想它们是你在地图上的图钉,也许你可以使用png图像文件。