2012-06-22 58 views
0

我目前正在做一個android應用程序,需要獲取駕駛方向。我有源點和目標點的經緯度,我得到了兩點之間的路徑,但我無法得到駕駛方向。 plz幫助我... path的代碼如下Android代碼獲取駕駛方向

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

     myMapView.getOverlays().add(new DirectionPathOverlay(gp2, gp2)); 

     myMapView.getController().animateTo(startGP); 
     myMapView.setBuiltInZoomControls(true); 
     myMapView.displayZoomControls(true); 



} 


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.java

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

} 
+0

檢查這些SO帖子http://stackoverflow.com/questions/2643993/how-to-display-a-route-between-two-geocoords-in-google-maps和http:// stackoverflow。 com/questions/2023669/j2me-android-blackberry-driving-directions-route-between-two-locations/2023685#2023685 – Orlymee

+0

[http://stackoverflow.com/questions/1612533/android-drivingdirections-removed-since-api -1-0-how-to-do-in-1-5-1-6] [1] [1]:http://stackoverflow.com/questions/1612533/android- drivingdirections-removed-since-api-1-0-how-to-do-in-1-5-1-6 檢查這個 – Manikandan

+0

我不想繪製路徑。我想獲得駕駛方向 – user1057197

回答

1

試試這個代碼顯示方向從當前位置的地方。

locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 

    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     lat = (double) (location.getLatitude()); 
     lng = (double) (location.getLongitude()); 

    } else { 
     Log.d(TAG, "Cannot get the location"); 
    } 

    final Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://maps.google.com/maps?" + "saddr="+ lat + "," + lng + "&daddr="+hotelLat+","+hotelLng)); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent);