Rute peta Google tidak ditampilkan dengan benar

Saya mencoba membuat aplikasi GPS yang dapat menunjukkan arah antara 2 tempat. Untuk mendekode polyline saya menggunakan kode dari sini: Mendekode Polyline dari Google Maps Direction API dengan Java. Saya ingin menunjukkan rute saya lebih akurat dari ini, saya dapat melakukannya melalui kml tetapi ini berfungsi untuk jarak yang sangat kecil hanya setelah ukuran file mencapai batas. Berikut tangkapan layar Boston-Seattle dengan garis di peta tidak mengikuti jalan tetapi memotong jalan
masukkan deskripsi gambar di sini

Inilah cara saya menggunakan API petunjuk arah

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

Ini kelas RouteOverlay saya:

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

person Yogesh    schedule 25.04.2012    source sumber
comment
@Agarwal Tidak, ini belum terselesaikan.   -  person Yogesh    schedule 30.04.2012


Jawaban (1)


Lihat tautan ini untuk menggambar jalur mengemudi dalam lamaran Anda. Anda hanya perlu menambahkan empat kelas yang ada di tautan di proyek Anda dan memanggil baris di bawah ini ketika Anda perlu menampilkan rutenya.

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

//Tambahkan juga izin ke file manifes Anda

<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>
person Shankar Agarwal    schedule 30.04.2012