`
antkingwei
  • 浏览: 40699 次
  • 性别: Icon_minigender_1
  • 来自: 日照
社区版块
存档分类
最新评论

在google地图上画出两点的行走路线

阅读更多




 
 新建一个图层

package com.android.antkingwei.google.direction;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;

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 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) {
		   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) {
	      super.draw(canvas, mapView, shadow);
	   }
	}

 主类

package com.android.antkingwei.google.direction;

import java.net.HttpURLConnection;
import java.net.URL;

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

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends MapActivity {
	private MapView myMapView;
	private GeoPoint geoPoint;
	private MapController myMC;
	private String[] pairs;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     
        myMapView = (MapView) findViewById(R.id.mapview);
    	geoPoint = null;
    	myMapView.setSatellite(false);
    	//通过地名
    	//pairs = getDirectionData("ahmedabad", "vadodara");
    	//通过四个坐标
        pairs = getUrl(22.5348,113.97246,35.422006,119.524095);
    	String[] lngLat = pairs[0].split(",");
    	// STARTING POINT
    	GeoPoint startGP = new GeoPoint((int)(Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0]) * 1E6));
    	myMC = myMapView.getController();
    	geoPoint = startGP;
    	myMC.setCenter(geoPoint);
    	myMC.setZoom(8);
    	myMapView.getOverlays().add(new DirectionPathOverlay(startGP, startGP));
    	// NAVIGATE THE PATH
    	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]);
    		}
    	// END POINT
    	myMapView.getOverlays().add(new DirectionPathOverlay(gp2, gp2));
    	myMapView.getController().animateTo(startGP);
    	myMapView.setBuiltInZoomControls(true);
    	myMapView.displayZoomControls(true);
        
    }
	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
	/**
	 * 通过四个坐标点,获得KML然后通过DOM解析
	 * @param fromLat
	 * @param fromLon
	 * @param toLat
	 * @param toLon
	 * @return
	 */
	public String[] getUrl(double fromLat,double fromLon,double toLat,double toLon){
		   String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr="+fromLat+","+fromLon+"&daddr="+toLat+","+toLon+"&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;
	}
	/**
	 * 通过连个地名获得KML然后进行DOM解析
	 * @param srcPlace
	 * @param destPlace
	 * @return
	 */
	private String[] getDirectionData(String srcPlace, String destPlace) {
		   String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr="+srcPlace+"&daddr="+destPlace+"&ie=UTF&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;
		}
}
 
  • 大小: 43.2 KB
  • 大小: 37.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics