Маршрут на картах Google не отображается должным образом

Я пытаюсь создать приложение GPS, которое может показывать направления между двумя местами. Для декодирования полилиний я использую код отсюда: Декодирование полилиний из Google Maps Direction API с помощью Java. Я хочу показать свой маршрут более точно, чем это, я могу сделать это через kml, но это работает только для очень небольших расстояний, после чего размер файла достигает предела. Вот скриншот для Бостон-Сиэтл, где линии на карте не следуют дороге, а пересекают дороги
введите описание изображения здесь

Вот как я использую 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;
            }
        }
    }
}
}

person Yogesh    schedule 25.04.2012    source источник
comment
@Agarwal Нет, это еще не решено.   -  person Yogesh    schedule 30.04.2012


Ответы (1)


Перейдите по этой ссылке, чтобы нарисовать путь проезда. в вашем приложении. Вам просто нужно добавить четыре класса, присутствующих в ссылке в вашем проекте, и вызвать следующие строки, когда вам нужно отобразить маршрут.

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

// Также добавьте разрешение в файл манифеста

<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