`
zhiweiofli
  • 浏览: 511627 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

获得两点间的GPS距离

阅读更多

现在LBS越来越流行,计算地理位置的距离的需求十分普及,以下我就分享一下自己平时用来获得两点间的GPS距离的实用方法:

在android中可采用如下代码获取距离:

Java代码

public double getDistance(double lat1, double lon1,
 double lat2, double lon2) {
        float[] results=new float[1];
        Location.distanceBetween(lat1, lon1, lat2, lon2, results);
        return results[0];
}
 


在其他设备若没有类似android的Location的distanceBetween方法,可以采用如下代码获取,该方法的参数为正常的经纬度数据,将返回以KM为单位的值:


Java代码

public static double geo_distance(double lat1, double lng1, double lat2,
			double lng2) {
		// earth's mean radius in KM
		double r = 6378.137;
		lat1 = Math.toRadians(lat1);
		lng1 = Math.toRadians(lng1);
		lat2 = Math.toRadians(lat2);
		lng2 = Math.toRadians(lng2);
		double d1 = Math.abs(lat1 - lat2);
		double d2 = Math.abs(lng1 - lng2);
		double p = Math.pow(Math.sin(d1 / 2), 2) + Math.cos(lat1)
				* Math.cos(lat2) * Math.pow(Math.sin(d2 / 2), 2);
		double dis = r * 2 * Math.asin(Math.sqrt(p));
		return dis;
	}
 
更多地采用类似google map的地理位置参数可以参考以下方法,实用弧度作为参数,并返回外国流行的mile作为单位的值:

//将角度转换为弧度
public static double deg2rad(double degree) {
        return degree / 180 * Math.PI;
}
//将弧度转换为角度
public static double rad2deg(double radian) {
        return radian * 180 / Math.PI;
}
 
double distance(double lat1, double lon1, double lat2, double lon2) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
                                + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
                                * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        double miles = dist * 60 * 1.1515;
        return miles;}

这个计算得出的结果是英里,如果要转换成公里,需要乘以1.609344,若是海里需要乘以0.8684.

 

最后在提供另一思路,采用weiservice请求方式,直接获取返回的更为精准的结果,例如实用国内比较有名的地图服务提供商MapABC的webservice接口:

 

http://search1.mapabc.com/sisserver?highLight=false&config=CDX&ver=2.0&x1= ??? &y1= ??? &x2= ??? &y2= ??? &enc=utf-8&resType=json & a_k= "your key" &ctx=1933347&a_nocache=715403361154

 

以json格式返回结果,使用时注意要到其官网 申请一key...

 

 

 

 

2
4
分享到:
评论

相关推荐

    gps两点经纬度计算距离和方向角

    通过两点经纬度坐标,得到两点的距离和角度。进行高斯转化。

    Android 知道地图上两个点,算出两点间距离和两点相对于北极的方向

    Android 知道地图上两个点,算出两点间距离和两点相对于北极的方向,顺时针0,360。另外还有知道两个点的经纬度,想要得到一个点相对于另一个点的位置,前后左右,这个比较复杂,如果有需要的可以留言给我,我就上传...

    python提取gps数据,利用folium库生成位置分布图,包含百度坐标转换以及两点距离换算函数

    根据GPS坐标信息得到设备分布位置,以及根据相邻位置坐标获取设备移动距离,这里使用python对GPS模块输出的位置坐标信息进行提取,并使用python库对坐标位置进行描点,生成设备位置分布图,根据前后两点的坐标计算出...

    python提取gps数据,利用folium库生成位置分布图,包含百度坐标转换以及两点距离换算函数.zip

    根据GPS坐标信息得到设备分布位置,以及根据相邻位置坐标获取设备移动距离,这里使用python对GPS模块输出的位置坐标信息进行提取,并使用python库对坐标位置进行描点,生成设备位置分布图,根据前后两点的坐标计算出...

    ComputeGps2AzEl.zip_方位俯仰_经纬度 计算坐标

    利用经纬度信息计算两点相对极坐标关系,获得距离、方位、俯仰

    GPS定位导航和授时产品的开发

    信息,能够实现在航线上的偏航距的计算,而定点导航只能计算两点的距离和方位角。 彝统采用经纬坐标和高斯克吕格坐标两种坐标系统。另外,在GPS定位过程中由于 电离层折射,伪码的不确定性以及坐标转换等造成的误差...

    wince的GPS模拟器

    Virace GPS Simulator V0.3.1 自述文件 2009.6.7 ====================================================================== Virace GPS Simulator是什么? ==================================================...

    大数据在交通中的应用——gps数据.pdf

    在童晓君的硕士论文,利用GPS数据研究了居民出行特 征,分析了居民每天的总行程数、每小时的行程数以及出发时 间的分布情况。对居民节假日和工作日的出行情况进行了比 较分析。最后,利用出租车的速度对居民出行...

    基本的DV-HOP仿真程序1,2.docx

    基于测距的定位算法需要测量临近节点的绝对距离和方位,并且用节点间的实际距离来得到未知节点的位置信息。无需测距的定位算法就不用测量这些信息。它是用传感器节点之间的估计距离凭借网络连通性等信息来算出未知...

    GNSS原理与应用

    目前GPS系统提供的定位精度是优于10米,而为得到更高的定位精度,我们通常采用差分GPS技术:将一台GPS接收机安置在基准站.上进行观测。根据基准站已知精密坐标,计算出基准站到卫星的距离改正数,并由基准站实时将这...

    A型GPS-OEM板定位精度综合测试 (2005年)

    通过进行两种型号的GPS接收机在静态和动态条件下的对比测试,分析得到了A型GPS-OEM接收机的数据采集时间、距基站距离对定位精度的影响规律,并测定了该型接收机的面积测量精度。因此得出,该型接收机能够满足1:1万底...

    计算机系安卓系统开发毕业设计.docx

     Android支持的定位方式大致可以分为两种,分别是GPS定位和Network定位 .该系统主要利用GPS定位作为基本的位置来源,实现对手机用户的定位,将采集到的位置信息返回给签到系统的服务器,服务器完成签到信息的存储。...

    毕业设计-基于地面三维激光扫描技术的三维模型重建.doc

    三维激光扫描仪发射器发出一个激光脉冲 信号,这个信号经物体表面漫反射以后,沿着几乎相同的路径反方向传回到接收器,可 以计算出目标点与扫描仪之间的距离,控制编码器同步测量的每个激光脉冲横向扫描角 度观测值...

    GeoToolKit.V.4.1.1.0,很实用的GNSS数据处理程序

    由两点位置计算各类大地方位角和各类边长。 工程控制网长度变形评估,支持标准3度带、任意投影、抵偿面投影、抵偿面任意投影等变形评估类型;支持测区四至信息加载;可以计算最大变形量,并进行限差审核。 7)控制网...

    疯狂Android讲义源码

     7.5 补间(Tween)动画 292  7.5.1 Tween动画与Interpolator 292  7.5.2 位置、大小、旋转度、透明度  改变的补间动画 293  7.5.3 自定义补间动画 298  7.6 使用SurfaceView实现动画 300  7.6.1 SurfaceView...

    疯狂Android讲义.part2

    18.6.9 两个转折点的连接 629 18.6.10 找出最短距离 636 18.7 本章小结 638 第19章 电子拍卖系统 639 19.1 系统功能简介和架构设计 640 19.1.1 系统功能简介 640 19.1.2 系统架构设计 641 19.2 JSON简介 643 19.2.1 ...

    疯狂Android讲义.part1

    18.6.9 两个转折点的连接 629 18.6.10 找出最短距离 636 18.7 本章小结 638 第19章 电子拍卖系统 639 19.1 系统功能简介和架构设计 640 19.1.1 系统功能简介 640 19.1.2 系统架构设计 641 19.2 JSON简介 643 19.2.1 ...

    1954北京坐标转80大地坐标转换软件

    要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最远点间的距离不大于30Km(经验值),这可以用三参数,即X平移,Y平移,Z平移,而将X旋转,Y旋转,Z旋转,尺度变化K视为0,所以三参数只是七...

Global site tag (gtag.js) - Google Analytics