2010-12-10 5 views

답변

15

이 코드를 사용하십시오. UR의 요구 사항에 따라 코드를 수정

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; 
    } 
} 

MapRouteOverlay.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); 
    } 
} 

MapOverlay.java :

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(); 
    } 

} 
+0

, 내가 얻을 : 가 android.app.IntentReceiverLeaked : 활동 dk.lector.ao.mobile.shop.map.EmbeddedMapViewActivity 원래 등록 된 IntentReceiver com.google.android[email protected]4139a3b8를 유출했다 이리. unregisterReceiver()에 대한 호출이 누락 되었습니까? 이 모든 사항이 적합 할 수 있습니까? –

+0

독일어로 완성 된 "der wahnsinn"))) thx a lot – cV2

+0

안녕하세요, 'R.drawable.green_a' 및'R.drawable.green_b'은 무엇입니까? – pawel

관련 문제