获取行车方向的android代码

Posted

技术标签:

【中文标题】获取行车方向的android代码【英文标题】:android code for getting driving direction 【发布时间】:2012-06-22 08:50:54 【问题描述】:

我目前正在做一个需要获取行车路线的 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);



【问题讨论】:

查看这些 SO 帖子 ***.com/questions/2643993/… 和 ***.com/questions/2023669/… [***.com/questions/1612533/… [1]: ***.com/questions/1612533/… 看看这个 我不想画路径。我想知道行车路线 【参考方案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);

【讨论】:

以上是关于获取行车方向的android代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MapView 中绘制显示行车方向的箭头?

Android 谷歌地图 行车路线

关于谷歌地图android中的“获取路线”功能

截图框架代码原理 android 11

Android获取相机位图的方向?并向后旋转-90度

获取Android设备的方向,Sensor和SensorManager实现手机旋转角度