`
antkingwei
  • 浏览: 41140 次
  • 性别: 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中,用户可以规划路径,包括驾车、公交、骑行以及步行路线。这里关注的是步行模式下,...

    地图路径规划

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

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

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

    奥维-地图-免安装

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

    GoogleEarth-Windows客户的

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

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

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

    openlayers动态线

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

    google earth

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

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

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

    基于android的骑行软件

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

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

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

    黑莓GPS轨迹绘图软件

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

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

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

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

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

    android校园导航

    - 最短路径算法:Dijkstra算法或A*搜索算法可找到两点间的最短路径,优化导航效率。 - 哈希表:用于快速查找和存储地点信息,提高查询速度。 3. **GPS和定位服务**: - 使用Android的Location API获取用户的实时...

    基于Android平台的位置检索系统毕业论文.docx

    在本系统中,Google Map API起到了关键作用,不仅用于显示地图,还提供了路线搜索和导航功能。 5. **需求分析**:在设计位置检索系统时,首先要进行需求分析,明确系统的目标用户、功能需求以及性能指标。例如,...

    GPS应用程序设计 源代码

    5. **地图API集成**:通常会集成像Google Maps API或Mapbox API这样的服务,以获取地图图像、路线规划和其他地图特性。 6. **定位服务**:在移动设备上,需要处理权限请求,调用设备的定位服务,并处理各种定位模式...

    GPSVIEWER工具

    例如,用户可以测量两点之间的直线距离或实际行走距离,检查特定点的海拔高度,或者通过时间轴回放整个轨迹。这些功能有助于用户深入理解运动过程中的各种细节。 除了基本的查看和分析功能,GPSVIEWER还可以进行...

Global site tag (gtag.js) - Google Analytics