经纬度简介

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的

假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈

就叫作“赤道”。在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”;构成这些圆圈的线段,

叫做纬线。我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬。

北极就是北纬90度,南极就是南纬90度。纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,

两极和高纬度地区无夏,中纬度地区四季分明。

其次,从北极点到南极点,可以画出许多南北方向的与地球赤道垂直的大圆圈,这叫作“经圈”;构成这

些圆圈的线段,就叫经线。公元1884平面坐标图年,国际上规定以通过英国伦敦近郊的格林尼治天文台的

经线作为计算经度的起点,即经度零度零分零秒,也称“本初子午线”。在它东面的为东经,共180度;

在它西面的为西经,共180度。因为地球是圆的,所以东经180度和西经180度的经线是同一条经线。各国

公定180度经线为“国际日期变更线”。为了避免同一地区使用两个不同的日期,国际日期变线在遇陆地时

略有偏离。

每一经度和纬度还可以再细分为60分,每一分再分为60秒以及秒的小数。利用经纬线,我们就可以确定

地球上每一个地方的具体位置,并且把它在地图或地球仪上表示出来。例如问北京的经纬度是多少?我们

很容易从地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测

出来,就可以确定船在海洋中的位置和前进方向。 纬度共有90度。赤道为0度,向两极排列,圈子越小,

度数越大。

横线是纬度,竖线是经度。

当然可以计算,四元二次方程。

经度和纬度都是一种角度。经度是个两面角,是两个经线平面的夹角。因所有经线都是一样长,为了度量

经度选取一个起点面,经1884年国际会议协商,决定以通过英国伦敦近郊、泰晤士河南岸的格林尼治皇家

天文台(旧址)的一台主要子午仪十字丝的那条经线为起始经线,称为本初子午线。本初子午线平面是起

点面,终点面是本地经线平面。某一点的经度,就是该点所在的经线平面与本初子午线平面间的夹角。在

赤道上度量,自本初子午线平面作为起点面,分别往东往西度量,往东量值称为东经度,往西量值称为西

经度。由此可见,一地的经度是该地对于本初子午线的方向和角距离。本初子午线是0°经度,东经度的最

大值为180°,西经度的最大值为180°,东、西经180°经线是同一根经线,因此不分东经或西经,而统称

180°经线。

纬度是个线面角。起点面是赤道平面,线是本地的地面法线。所谓法线,即垂直于参考扁球体表面的线。

某地的纬度就是该地的法线与赤道平面之间的夹角。纬度在本地经线上度量,由赤道向南、北度量,向北

量值称为北纬度,向南量值称为南纬度。由此可见,一地的纬度是该地对于赤道的方向和角距离。赤道是

0°纬线,北纬度的最大值为90°,即北极点;南纬度的最大值为90°,即南极点。

经纬度互换

度换算成度分秒

度(DDD):E 108.90593度    N 34.21630度

如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.

同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度

因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。

关于经纬度十进制表示法对于两个点,在纬度相等的情况下:经度每隔0.00001度,距离相差约1米;每隔0.0001度,距离相差约10米;每隔0.001度,距离相差约100米;每隔0.01度,距离相差约1000米;每隔0.1度,距离相差约10000米。

对于两个点,在经度相等的情况下:

纬度每隔0.00001度,距离相差约1.1米;每隔0.0001度,距离相差约11米;每隔0.001度,距离相差约111米;每隔0.01度,距离相差约1113米;每隔0.1度,距离相差约11132米。

根据地球上任意两点的经纬度计算两点间的距离

方法1:由于地球是椭球体,这个太难算了,如果假设地球是球体,可以使用以下公式:设地球上某点的经度为A,纬度为B, 则这点的空间坐标是 x=cos(B)*cos(A) y=cos(B)*sin(A) z=sin(B) 设地球上两点的空间坐标分别为(x1,y1,z1),(x2,y2,z2) 则它们的夹角为 C=acos(x1*x2+y1*y2+z1*z2),C是角度 则两地距离为 C/180*pi*R,其中R为地球平均半径6371 误差不超过1%

地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

Distance = R*Arccos(C)*Pi/180

这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile

如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)

Distance = R*Arccos(C)*Pi/180

以上通过简单的三角变换就可以推出。

如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)

Distance = R*Arccos(C)*Pi/180

也就是:

C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)

Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)

/**

* 转化为弧度(rad)

* */

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

/**

* 基于余弦定理求两经纬度距离

* @param lon1 第一点的精度

* @param lat1 第一点的纬度

* @param lon2 第二点的精度

* @param lat3 第二点的纬度

* @return 返回的距离,单位km

* */

public static double LantitudeLongitudeDist(double lon1, double lat1,double lon2, double lat2) {

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double radLon1 = rad(lon1);

double radLon2 = rad(lon2);

if (radLat1

radLat1 = Math.PI / 2 + Math.abs(radLat1);// south

if (radLat1 > 0)

radLat1 = Math.PI / 2 - Math.abs(radLat1);// north

if (radLon1

radLon1 = Math.PI * 2 - Math.abs(radLon1);// west

if (radLat2

radLat2 = Math.PI / 2 + Math.abs(radLat2);// south

if (radLat2 > 0)

radLat2 = Math.PI / 2 - Math.abs(radLat2);// north

if (radLon2

radLon2 = Math.PI * 2 - Math.abs(radLon2);// west

double x1 = EARTH_RADIUS * Math.cos(radLon1) * Math.sin(radLat1);

double y1 = EARTH_RADIUS * Math.sin(radLon1) * Math.sin(radLat1);

double z1 = EARTH_RADIUS * Math.cos(radLat1);

double x2 = EARTH_RADIUS * Math.cos(radLon2) * Math.sin(radLat2);

double y2 = EARTH_RADIUS * Math.sin(radLon2) * Math.sin(radLat2);

double z2 = EARTH_RADIUS * Math.cos(radLat2);

double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)+ (z1 - z2) * (z1 - z2));

//余弦定理求夹角

double theta = Math.acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / (2 * EARTH_RADIUS * EARTH_RADIUS));

double dist = theta * EARTH_RADIUS;

return dist;

}private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)

/**

* 转化为弧度(rad)

* */

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

/**

* 基于余弦定理求两经纬度距离

* @param lon1 第一点的精度

* @param lat1 第一点的纬度

* @param lon2 第二点的精度

* @param lat3 第二点的纬度

* @return 返回的距离,单位km

* */

public static double LantitudeLongitudeDist(double lon1, double lat1,double lon2, double lat2) {

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double radLon1 = rad(lon1);

double radLon2 = rad(lon2);

if (radLat1

radLat1 = Math.PI / 2 + Math.abs(radLat1);// south

if (radLat1 > 0)

radLat1 = Math.PI / 2 - Math.abs(radLat1);// north

if (radLon1

radLon1 = Math.PI * 2 - Math.abs(radLon1);// west

if (radLat2

radLat2 = Math.PI / 2 + Math.abs(radLat2);// south

if (radLat2 > 0)

radLat2 = Math.PI / 2 - Math.abs(radLat2);// north

if (radLon2

radLon2 = Math.PI * 2 - Math.abs(radLon2);// west

double x1 = EARTH_RADIUS * Math.cos(radLon1) * Math.sin(radLat1);

double y1 = EARTH_RADIUS * Math.sin(radLon1) * Math.sin(radLat1);

double z1 = EARTH_RADIUS * Math.cos(radLat1);

double x2 = EARTH_RADIUS * Math.cos(radLon2) * Math.sin(radLat2);

double y2 = EARTH_RADIUS * Math.sin(radLon2) * Math.sin(radLat2);

double z2 = EARTH_RADIUS * Math.cos(radLat2);

double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)+ (z1 - z2) * (z1 - z2));

//余弦定理求夹角

double theta = Math.acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / (2 * EARTH_RADIUS * EARTH_RADIUS));

double dist = theta * EARTH_RADIUS;

return dist;

}

方法2:google地图提供的方法:

对上面的公式解释如下:

1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;

2.a=Lat1 – Lat2 为两点纬度之差  b=Lung1 -Lung2 为两点经度之差;

3.6378.137为地球半径,单位为千米;

计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米。

计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。

private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)

/**

* 转化为弧度(rad)

* */

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

/**

* 基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下

* @param lon1 第一点的精度

* @param lat1 第一点的纬度

* @param lon2 第二点的精度

* @param lat3 第二点的纬度

* @return 返回的距离,单位km

* */

public static double GetDistance(double lon1,double lat1,double lon2, double lat2)

{

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 - radLat2;

double b = rad(lon1) - rad(lon2);

double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));

s = s * EARTH_RADIUS;

//s = Math.round(s * 10000) / 10000;

return s;

}

private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)

/**

* 转化为弧度(rad)

* */

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

/**

* 基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下

* @param lon1 第一点的精度

* @param lat1 第一点的纬度

* @param lon2 第二点的精度

* @param lat3 第二点的纬度

* @return 返回的距离,单位km

* */

public static double GetDistance(double lon1,double lat1,double lon2, double lat2)

{

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 - radLat2;

double b = rad(lon1) - rad(lon2);

double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));

s = s * EARTH_RADIUS;

//s = Math.round(s * 10000) / 10000;

return s;

}

给定经纬度计算距离_根据两点经纬度计算距离相关推荐

  1. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  2. php 经纬度两点间距离公式,PHP根据两点间的经纬度计算距离,php两点经纬度计算...

    PHP根据两点间的经纬度计算距离,php两点经纬度计算 这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $l ...

  3. JavaScript:实现计算二维平面上两点之间的距离算法(附完整源码)

    JavaScript:实现计算二维平面上两点之间的距离算法 /*Calculate the mathematical properties involving coordinatesCalculate ...

  4. matlab 计算大圆距离,已知两点经纬度计算两点之间的大圆距离

    Const r As Double = 6378137 '地球半径常量 Const PI As Double = 3.1415926 '圆周率常量 Private Type LatLog lat As ...

  5. 无向图中两点之间的距离_自然语言处理中距离计算总结

    距离计算在自然语言处理中得到广泛使用,不同距离计算方式应用与不同的环境,其中也产生了很多不同的效果. 1 余弦距离 余弦夹角也可以叫余弦相似度.集合中夹角可以用来衡量两个向量方向的差异,机器学习中借用 ...

  6. 为什么不可以使用哈曼顿距离_请对比下欧式距离和曼哈顿距离的差别

    ●今日面试题分享● 在k-means或kNN,我们常用欧氏距离来计算最近的邻居之间的距离,有时也用曼哈顿距离,请对比下这两种距离的差别 解析: 欧氏距离,最常见的两点之间或多点之间的距离表示法,又称之 ...

  7. crout分解计算例题_专题:化学方程式计算

    一. 根据化学方程式的简单计算 (1) 根据化学方程式计算的依据 化学方程式表达的信息之一是反应物与生成物之间在"遵循固定质量比"的前提下的质量守恒.根据这一信息,可以利用化学方程 ...

  8. 边缘计算架构_多接入边缘计算框架与参考架构简介

    1. 引言 在2014年,欧洲电信标准化协会(European Telecommunications Standards Institute, ETSI)将边缘计算与移动通信网络融合,提出了移动边缘计 ...

  9. 两个经纬度偏角_怎么根据两个经纬度计算出航向

    C/C++ codedouble CChartCtrl::CalcltDirct(float fStarPtx, float fStarPty, float fEndPtx, float fEndPt ...

  10. 根据经纬度计算范围_高考地理地理计算专题

    关注公众号,免费获取高考考点知识汇总 地理计算专题 1.经纬度计算:经度差与地方时差算经度--地方时每相差1小时,经度相差1°:纬差法与正午太阳高度算纬度--正午太阳相差多小,纬度相差多少:北极星的仰 ...

最新文章

  1. 8个开发必备的PHP功能
  2. Shell关于Wget命令的使用技巧
  3. C#获取邮件客户端保存的邮箱密码
  4. 为什么java可跨平台执行,java为什么可以跨平台执行
  5. android调用另一app的xml,Android 7.0+调用其他App打开文件
  6. iphone xh5打开ppt预览_教你如何用iPhone拍全景照片
  7. android音频系统之AudioTrack的使用
  8. SAP UI5 函数节流和异步完成令牌的应用
  9. 仓库处理中 无法修改_上海电商仓储物流公司,冷链仓库-上海玖日仓储
  10. 旅行商问题的n种解法
  11. linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源
  12. 【Elasticsearch】es shard split 使用分析
  13. 贪心算法——字典序最小问题
  14. mysql:多表查询方式
  15. 微博用户信息源代码爬取_爬取微博用户公开信息,分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!...
  16. android studio调整字体大小,如何在Android Studio中增加字体大小?
  17. 模式识别与智能系统类毕业论文文献都有哪些?
  18. python模拟支付宝扫码登录_Python爬虫模拟登录支付宝并获取订单信息
  19. 直播网站服务器带宽多少合适,开直播网速要求(开直播要多少兆宽带)
  20. ISO七层模型与TCP/IP四层参考模型逐层解析

热门文章

  1. BIM技术优秀论文14篇
  2. Visio 直角连接线增加直角拐弯的方法, 取消自动附着,取消自动捕捉
  3. 如何解决MySQL闪退
  4. windows最好用的mp3格式转换软件推荐
  5. C语言编程学习的经验
  6. 【洛谷试炼场】新手村:洛谷的第一个任务
  7. 如何将网页保存保存为PDF格式?
  8. es 的分布式架构原理
  9. 2021-08-13 sql练习
  10. 自定义注解-用spel表达式 获取方法入参对象的的 get方法入参