2012-04-25 28 views
0

私は2か所の間で方向を示すことができるGPSアプリケーションを構築しようとしています。ポリラインをデコードするために私はここからコードを使用しています:Decoding Polylines from Google Maps Direction API with Java。私はこれよりも正確に私のルートを表示したい、私はkmlを介してそれを行うことができますが、それは非常に小さい距離の後にのみ、ファイルサイズが限界に達して動作します。Googleマップのルートが正しく表示されない

:ここでは、地図上の線は道路に従うが、ここでは道路
enter image description here

を交差しないボストン、シアトルのためのスクリーンショットは、私が方向性のAPIを使用しています。ここ

public void drawRoute(String source, String destination) 
{ 
    String strURL = "http://maps.google.com/maps/api/directions/xml?origin=" + source + 
      "&destination=" + destination + "&sensor=false&mode=driving"; 

    String url = strURL.replace(" ", "%20"); 
    HttpGet get = new HttpGet(url); 
    String strResult = ""; 
    try { 
     HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 3000); 
     HttpClient httpClient = new DefaultHttpClient(httpParameters); 
     HttpResponse httpResponse = null; 
     httpResponse = httpClient.execute(get); 
     if (httpResponse.getStatusLine().getStatusCode() == 200){ 
      strResult = EntityUtils.toString(httpResponse.getEntity()); 
     } 
    } 
    catch (Exception e){ } 

    if (-1 == strResult.indexOf("<status>OK</status>")){ 
     this.finish(); 
     return; 
    } 

    int pos = strResult.indexOf("<overview_polyline>"); 
    pos = strResult.indexOf("<points>", pos + 1); 
    int pos2 = strResult.indexOf("</points>", pos); 
    strResult = strResult.substring(pos + 8, pos2); 

    List<GeoPoint> points = decodePoly(strResult); 

    RouteOverlay mOverlay = new RouteOverlay(points); 
    overlayList.add(mOverlay); 

    if (points.size() >= 2){ 
     controller.animateTo(points.get(0)); 
    } 
    map.invalidate(); 
} 

は私RouteOverlayクラスでどのようになっています

public class RouteOverlay extends Overlay{ 
private List<GeoPoint> points; 
private Paint paint; 

public RouteOverlay(List<GeoPoint> points) { 
    this.points = points; 
    paint = new Paint(); 
    paint.setColor(Color.BLUE); 
    paint.setAlpha(150); 
    paint.setAntiAlias(true); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(4); 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{ 
    if (!shadow) 
    { 
     Projection projection = mapView.getProjection(); 
     if (points != null && points.size() >= 2) 
     { 
      Point start = new Point(); 
      projection.toPixels(points.get(0), start); 
      for (int i = 1; i < points.size(); i++) 
      { 
       Point end = new Point(); 
       projection.toPixels(points.get(i), end); 
       canvas.drawLine(start.x, start.y, end.x, end.y, paint); 
       start = end; 
      } 
     } 
    } 
} 
} 
+0

に権限を追加するには、問題が解決されますか? –

+0

@Agarwalいいえ、まだ解決されていません。 – Yogesh

答えて

1

このlinkを参照すると、アプリケーションに運転経路が表示されます。プロジェクトのリンクにある4つのクラスを追加し、ルートを表示する必要があるときは、次の行を呼び出すだけです。

SharedData data = SharedData.getInstance(); 
data.setAPIKEY("0RUTLH7cqd6yrZ0FdS0NfQMO3lioiCbnH-BpNQQ");//set your map key here 
data.setSrc_lat(17);//set your src lat 
data.setSrc_lng(78);//set your src lng 
data.setDest_lat(18);//set your dest lat 
data.setDest_lng(77);//set your dest lng 
startActivity(new Intent(YourActivity.this,RoutePath.class));//add RoutePath in your manifeast file 

//また、あなたのmanifeastファイル

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
関連する問題