`
antkingwei
  • 浏览: 42056 次
  • 性别: 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
分享到:
评论

相关推荐

    校园导航问题 输入两个地点可得出两点之间的路径

    这些算法可以计算出两点间的最短路径,考虑到实际的行走路径和可能的障碍。在校园环境中,要考虑的因素可能包括步行路径、自行车道、禁止通行区域等。 接着,**路线规划**是将距离计算的结果转化为具体的行走指示。...

    安卓GPS地图导航定位指南相关-Android驴友社交系统源码(需要谷歌地图).rar

    要实现导航功能,开发者需要利用第三方服务,如谷歌地图的Directions API,计算两点之间的最优路线。API返回的JSON数据包含了路线的详细信息,如步骤、距离、预计行驶时间等,应用可以根据这些信息绘制导航路径并...

    Google地图,最大步行距离路线!

    标题中的“Google地图,最大步行距离路线!”表明我们要探讨的是如何使用Google Maps来找到步行时的最大距离路线。在Google Maps中,用户可以规划路径,包括驾车、公交、骑行以及步行路线。这里关注的是步行模式下,...

    奥维-地图-免安装

    作为一款跨平台的应用,奥维地图支持多种地图源,包括高德地图和谷歌地图等知名服务商,用户可以轻松在这些地图之间切换,满足不同场景下的需求。 在奥维地图中,你可以进行以下主要操作: 1. **地图浏览**:用户...

    地图路径规划

    首先,地图路径规划的基本概念是找到两点之间的最短或最优路径。这通常通过Dijkstra算法、A*搜索算法等图论方法实现。Dijkstra算法是一种基于贪心策略的全局最短路径算法,适用于所有边非负权重的图;而A*算法则在...

    WebGIS 让小车沿着指定路径行走

    本资源主要涉及两个关键知识点:地理坐标系与投影坐标系,以及在谷歌3D环境下实现小车沿指定路径行走的动画。 首先,我们来深入理解地理坐标系和投影坐标系。地理坐标系是以地球的自然形状——椭球体为参考基准,...

    定位与地图

    导航功能方面,虽然基础的MapKit框架不直接提供路径规划或者导航指令功能,但通过使用第三方服务如Google Maps或Apple自家的MapKit JS,可以在应用中嵌入路线规划和导航功能。 总结起来,iOS地图开发涉及的核心技术...

    GoogleEarth-Windows客户的

    此外,还可以计算两点之间的直线距离或实际驾驶距离,对于户外运动爱好者或物流规划来说极具实用性。 教育和研究领域也是Google Earth的一大应用。教师可以利用其丰富的地理信息带领学生进行虚拟实地考察,科学家则...

    google earth用户手册

    - **测量工具**: 测量两点或多点之间的距离或计算特定区域的面积。 - **电子邮件分享**: 通过邮件分享当前视图。 - **打印功能**: 打印当前视图以便记录或存档。 - **Google Maps 浏览**: 单击此按钮可在网页浏览器...

    关于从接收的地理位置信息中识别匹配旅程的地图的介绍说明.rar

    这些数据通常由地图提供商,如谷歌地图、高德地图等,通过航空摄影、卫星图像分析以及实地调查来收集和更新。 匹配过程涉及两个主要步骤:轨迹处理和地图匹配算法。轨迹处理是对原始GPS数据进行预处理,包括去除...

    google earth

    7. **测量与导航工具**:谷歌地球提供了距离和面积测量工具,用户可以测量两点间的直线距离或划定区域的面积。同时,还有简单的导航功能,为用户提供路线规划。 8. **飞行模拟**:用户可以设置起始和目的地,开启...

    openlayers动态线

    通过结合以上知识点,你可以在OpenLayers地图上创建出动态的、具有闪烁效果的行进路线,模拟从起点到终点的过程。在实际项目中,`olMoveLine`这样的文件可能包含了实现这一功能的完整JavaScript代码,包括地图初始化...

    Android-一款的Android原生跑步运动应用

    通过不断收集用户的经纬度坐标,保存到本地数据库或发送到服务器,然后在地图上画出运动轨迹。 "存储数据库信息"这部分,Android提供SQLite数据库系统,用于存储应用内的结构化数据,如用户的运动记录、个人信息等...

    基于android的骑行软件

    同时,软件还需实时追踪用户的GPS位置并在地图上绘制运动轨迹,让用户清楚地看到自己的行进路线。 三、服务器端交互 为了实现数据的存储和同步,骑行软件需要与服务器进行交互。这通常涉及网络编程,如使用HTTPS...

    计步和方向传感器组合, 实现记录人行走的轨迹

    在Android平台上,开发一款能够记录用户行走轨迹的应用,通常会涉及到计步传感器(Step Sensor)和方向传感器(Orientation Sensor)的结合使用。这两种传感器在移动设备中广泛存在,为运动健康应用提供了重要的数据...

    黑莓GPS轨迹绘图软件

    - 测量距离:用户可以测量两点之间的直线或实际行走距离。 - 速度计:实时显示当前速度,对于驾驶或骑行者特别有用。 - 高度计:显示海拔高度,适用于登山或徒步旅行。 五、安全与隐私 使用GPSGuru时,用户应注意...

    两步路户外助手APP在生物多样性调查中的应用.pdf

    两步路户外助手是一款能够在手机和平板电脑上使用的专业户外软件,具有离线地图下载及导航、路线设计、轨迹记录、兴趣点标记、数据共享等功能,可为生物多样性的调查提供极大的便利性与可靠性。 两步路户外助手软件...

    福建省石狮市自然门学校2020学年七年级地理上学期9月月考试题 新人教版.doc

    11. **地图应用**:电子地图如谷歌地图、百度地图等,提供路线规划、距离查询等功能,可以放大或缩小查看细节。 12. **地图上的方向判断**:有经纬网的地图,经线指示南北,纬线指示东西;有指向标的地图按指向标...

    ShortestWalkingRoute:最短步行路线安卓应用

    这两种算法都是图论中的经典路径查找算法,能够找到两点之间的最短路径。A*算法结合了Dijkstra算法的全局最优性与启发式搜索的效率,通过评估函数预测每个节点到目标节点的代价,从而更早地找到最佳路径。考虑到步行...

Global site tag (gtag.js) - Google Analytics