Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌地图Api方向_Android_Google Maps_Driving Directions_Map Directions - Fatal编程技术网

Android 谷歌地图Api方向

Android 谷歌地图Api方向,android,google-maps,driving-directions,map-directions,Android,Google Maps,Driving Directions,Map Directions,我可以在应用程序中的谷歌地图上标记两个点,然后计算地图上的方向以及路线导航吗?否地图活动不提供此类功能。您必须通过Google Maps Web API进行请求。否地图活动不提供此类功能。您必须通过Google Maps Web API进行请求。我正在创建一个应用程序,用于获取地图中两点之间的行驶方向 步步为营 步骤1首先创建一个类MyOverlay.java,用于绘制路径 import android.graphics.Bitmap; import android.graphics.C

我可以在应用程序中的谷歌地图上标记两个点,然后计算地图上的方向以及路线导航吗?

否地图活动不提供此类功能。您必须通过Google Maps Web API进行请求。

否地图活动不提供此类功能。您必须通过Google Maps Web API进行请求。

我正在创建一个应用程序,用于获取地图中两点之间的行驶方向

步步为营

步骤1首先创建一个类MyOverlay.java,用于绘制路径

    import android.graphics.Bitmap;
import android.graphics.Canvas; 
import android.graphics.Color;
import android.graphics.Paint; 
import android.graphics.Point; 
import android.graphics.RectF; 
import android.util.Log;
//import android.util.Log;

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.Projection; 

public class MyOverLay extends Overlay 
{ 
  private GeoPoint gp1;
  private GeoPoint gp2;
  private int mRadius=6;
  private int mode=0;
  private int defaultColor;
  private String text="";
  private Bitmap img = null;


  public MyOverLay(GeoPoint gp1,GeoPoint gp2,int mode) //  GeoPoint is a int. (6E)
  { 

    this.gp1 = gp1; 
    this.gp2 = gp2;
    this.mode = mode;
    defaultColor = 999; // no defaultColor

  } 


  public MyOverLay(GeoPoint gp1,GeoPoint gp2,int mode, int defaultColor) 
  { 
    this.gp1 = gp1; 
    this.gp2 = gp2;
    this.mode = mode;
    this.defaultColor = defaultColor;
  } 

  public void setText(String t)
  {
      this.text = t;
  }

  public void setBitmap(Bitmap bitmap)
  {
      this.img = bitmap;
  }

  public int getMode()
  {
      return mode;
  }

  @Override 
  public boolean draw 
  (Canvas canvas, MapView mapView, boolean shadow, long when) 
  { 

    Projection projection = mapView.getProjection(); 
    if (shadow == false) 
    {      

      Paint paint = new Paint(); 
      paint.setAntiAlias(true); 


      Point point = new Point(); 
      projection.toPixels(gp1, point);
      // mode=1¡Gstart 
      if(mode==1)
      {
        if(defaultColor==999)
            paint.setColor(Color.BLUE);   
        else
            paint.setColor(defaultColor);   


        RectF oval=new RectF(point.x - mRadius, point.y - mRadius,  
                             point.x + mRadius, point.y + mRadius); 
        // start point
        canvas.drawOval(oval, paint); 
      }
      // mode=2¡Gpath 
      else if(mode==2)
      {
        if(defaultColor==999)
            paint.setColor(Color.RED);   
        else
            paint.setColor(defaultColor);   

        Point point2 = new Point(); 
        projection.toPixels(gp2, point2);
        paint.setStrokeWidth(5);
        paint.setAlpha(120);       
        canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);       
      }
      /* mode=3¡Gend */
      else if(mode==3)
      {
        /* the last path */

        if(defaultColor==999)
            paint.setColor(Color.GREEN);   
        else
            paint.setColor(defaultColor);   

        Point point2 = new Point(); 
        projection.toPixels(gp2, point2);
        paint.setStrokeWidth(5);
        paint.setAlpha(120);
        canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);


        RectF oval=new RectF(point2.x - mRadius,point2.y - mRadius,  
                             point2.x + mRadius,point2.y + mRadius); 
        /* end point */
        paint.setAlpha(255);
        canvas.drawOval(oval, paint);
      }
      /* mode=4¡Gcar */
      else if(mode==4)
      {

        if(defaultColor==999)
            paint.setColor(Color.GREEN);   
        else
            paint.setColor(defaultColor);   

        Point point2 = new Point(); 
        projection.toPixels(gp2, point2); 
        paint.setTextSize(20);
        paint.setAntiAlias(true); 
        canvas.drawBitmap(img, point2.x, point2.y,paint);      
        canvas.drawText(this.text, point2.x, point2.y, paint);
    //    Log.d(TAG, "Draw the text="+this.text+ " at point="+point2.x + "," + point2.y);
      }

      else if(mode==5)
      {

        if(defaultColor==999)
            paint.setColor(Color.GREEN);   
        else
            paint.setColor(defaultColor);   

        Point point2 = new Point(); 
        projection.toPixels(gp2, point2); 
        paint.setTextSize(20);
        paint.setAntiAlias(true); 
        canvas.drawBitmap(img, point2.x, point2.y,paint);



    //    Log.d(TAG, "Draw the text="+this.text+ " at point="+point2.x + "," + point2.y);
      }



    } 
    return super.draw(canvas, mapView, shadow, when); 
  } 


} 
步骤2:创建一个类名DrivingDirectionActivity.java

   import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;

import com.android.code.R;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

/**
 * @author ashish
 * 
 *  
 *
 */
public class DrivingDirectionActivity extends MapActivity {



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.google_map_driving_direction_view);

        MapView mapView = (MapView) findViewById(R.id.myMapView1);

        double src_lat = 28.632808;
        double src_long = 77.218276;
        double dest_lat = 28.588535;
        double dest_long = 77.255130;
        GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
                (int) (src_long * 1E6));
        GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
                (int) (dest_long * 1E6));

        DrawPath(srcGeoPoint, destGeoPoint, Color.GREEN, mapView);

        mapView.getController().animateTo(srcGeoPoint);
        mapView.getController().setZoom(15);

    }

    /* (non-Javadoc)
     * @see com.google.android.maps.MapActivity#isRouteDisplayed()
     */



    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
    private void DrawPath(GeoPoint src, GeoPoint dest, int color,MapView mMapView01) {

        // connect to map web service
        Document doc = getDocument(makeUrl(src,dest));
        System.out.println(doc.toString());
        try {

            if (doc.getElementsByTagName("GeometryCollection").getLength() > 0) {

                // String path =
                // doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName();
                String path = doc.getElementsByTagName("GeometryCollection")
                        .item(0).getFirstChild().getFirstChild()
                        .getFirstChild().getNodeValue();

                Log.d("xxx", "path=" + path);

                String[] pairs = path.split(" ");
                String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude
                                                        // lngLat[1]=latitude
                                                        // lngLat[2]=height

                // src
                GeoPoint startGP = new GeoPoint((int) (Double.parseDouble(lngLat[1]) * 1E6),
                                                    (int) (Double.parseDouble(lngLat[0]) * 1E6));
                mMapView01.getOverlays().add(new MyOverLay(startGP, startGP, 1));

                GeoPoint gp1;
                GeoPoint gp2 = startGP;
                for (int i = 1; i < pairs.length; i++) {
                    // the last one would be crash

                    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));
                    mMapView01.getOverlays().add(new MyOverLay(gp1, gp2, 2, color));
                    Log.d("xxx", "pair:" + pairs[i]);
                }
                mMapView01.getOverlays().add(new MyOverLay(dest, dest, 3)); // use
                                                                            // the
                                                                            // default
                                                                            // color
            }
        } catch ( Exception e) {

            e.printStackTrace();
        }  

    }

    private Document getDocument(String urlString) {
        // TODO Auto-generated method stub

        Document doc = null;
        HttpURLConnection urlConnection = null;
        URL url = null;
        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) {
            // TODO: handle exception
        }

        return doc;
    }

    private String makeUrl(GeoPoint src, GeoPoint dest) {
        // TODO Auto-generated method stub

        // get the kml (XML) doc. And parse it to get the coordinates(direction
        // route).

        StringBuilder urlString = new StringBuilder();
        urlString.append("http://maps.google.com/maps?f=d&hl=en");
        urlString.append("&saddr=");// from
        urlString.append(Double.toString((double) src.getLatitudeE6() / 1.0E6));
        urlString.append(",");
        urlString.append(Double.toString((double) src.getLongitudeE6() / 1.0E6));
        urlString.append("&daddr=");// to
        urlString.append(Double.toString((double) dest.getLatitudeE6() / 1.0E6));
        urlString.append(",");
        urlString.append(Double.toString((double) dest.getLongitudeE6() / 1.0E6));
        urlString.append("&ie=UTF8&0&om=0&output=kml");

        Log.d("xxx", "URL=" + urlString.toString());
        return urlString.toString();
    }

}
import javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.xml.sax.SAXException;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.util.Log;
导入com.android.code.R;
导入com.google.android.maps.GeoPoint;
导入com.google.android.maps.MapActivity;
导入com.google.android.maps.MapView;
/**
*@作者ashish
* 
*  
*
*/
公共类驱动方向活动扩展了MapActivity{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.google\u map\u driving\u direction\u view);
MapView MapView=(MapView)findViewById(R.id.myMapView1);
双src_lat=28.632808;
双src_long=77.218276;
双目的地纬度=28.588535;
双端长=77.255130;
地质点SRCEOPINT=新的地质点((int)(src_lat*1E6),
(int)(src_long*1E6);;
地质点destGeoPoint=新的地质点((int)(dest_lat*1E6),
(国际)(目的地长*1E6));
绘图路径(srcGeoPoint、destGeoPoint、Color.GREEN、mapView);
mapView.getController().animateTo(srcGeoPoint);
mapView.getController().setZoom(15);
}
/*(非Javadoc)
*@see com.google.android.maps.MapActivity#isRouteDisplayed()
*/
受保护的布尔值isRouteDisplayed(){
//TODO自动生成的方法存根
返回false;
}
专用空心绘制路径(地质点src、地质点dest、int颜色、地图视图mMapView01){
//连接到地图web服务
Document doc=getDocument(makeUrl(src,dest));
System.out.println(doc.toString());
试一试{
if(doc.getElementsByTagName(“GeometryCollection”).getLength()>0){
//字符串路径=
//doc.getElementsByTagName(“GeometryCollection”).item(0.getFirstChild().getFirstChild().getNodeName();
字符串路径=doc.getElementsByTagName(“GeometryCollection”)
.item(0).getFirstChild().getFirstChild()
.getFirstChild().getNodeValue();
Log.d(“xxx”,“path=“+path”);
String[]pairs=path.split(“”);
字符串[]lngLat=pairs[0]。拆分(“,”;//lngLat[0]=经度
//lngLat[1]=纬度
//lngLat[2]=高度
//src
地质点startGP=新的地质点((int)(Double.parseDouble(lngLat[1])*1E6),
(int)(Double.parseDouble(lngLat[0])*1E6));
mMapView01.getOverlays().add(新的MyOverLay(startGP,startGP,1));
地质点gp1;
地质点gp2=startGP;
for(int i=1;i