问题引出:

今天遇到经纬度坐标转换距离的工作,根据网站登录者的IP确定登录者目前的位置信息,将其经纬度信息与所有的营业厅的经纬度进行对比,网页上显示出距离登录者最近的营业厅地址,本打算就做一个二维坐标距离转换,上网一搜,经纬度距离的计算远远没有想象的那样简单,最终得到如下的公式计算。

经纬度坐标的计算公式为:

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

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

3. 6378.137为地球半径,单位为千米;

计算出来的结果单位为千米。

从google maps的脚本里扒了段代码,是用来计算两点间经纬度距离

1 private const double EARTH_RADIUS = 6378.137;2 private static double rad(doubled)3 {4 return d * Math.PI / 180.0;5 }6 public static double GetDistance(double lat1, double lng1, double lat2, doublelng2)7 {8 double radLat1 =rad(lat1);9 double radLat2 =rad(lat2);10 double a = radLat1 -radLat2;11 double b = rad(lng1) -rad(lng2);12 double s = 2 * Math.asin(Math.sqrt(Math.row(Math.sin(a/2),2) +

13 Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));14 s = s *EARTH_RADIUS;15 s = Math.round(s * 10000) / 10000;16 returns;17 }

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

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

在其他设备若没有类似android的Location的distanceBetween方法开采用如下代码获取

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

1 double distance(double lat1, double lon1, double lat2, doublelon2)2 {3 double theta = lon1 -lon2;4 double dist = Math.sin(deg2rad(lat1)) *Math.sin(deg2rad(lat2))5 + Math.cos(deg2rad(lat1)) *Math.cos(deg2rad(lat2))6 *Math.cos(deg2rad(theta));7 dist =Math.acos(dist);8 dist =rad2deg(dist);9 double miles = dist * 60 * 1.1515;10 returnmiles;11 }12 //将角度转换为弧度

13 static double deg2rad(doubledegree)14 {15 return degree / 180 *Math.PI;16 }17 //将弧度转换为角度

18 static double rad2deg(doubleradian)19 {20 return radian * 180 /Math.PI;21 }

计算方位角pab,

其中lat_a, lng_a是A的纬度和经度; lat_b, lng_b是B的纬度和经度。代码如下:

1 private double gps2d(double lat_a, double lng_a, double lat_b, doublelng_b)2 {3 double d = 0;4 lat_a=lat_a*Math.PI/180;5 lng_a=lng_a*Math.PI/180;6 lat_b=lat_b*Math.PI/180;7 lng_b=lng_b*Math.PI/180;8

9 d=Math.sin(lat_a)*Math.sin(lat_b)+Math.cos(lat_a)*Math.cos(lat_b)* Math.cos(lng_b-lng_a);10 d=Math.sqrt(1-d*d);11 d=Math.cos(lat_b)*Math.sin(lng_b-lng_a)/d;12 d=Math.asin(d)*180/Math.PI;13 //d = Math.round(d*10000);

14 returnd;15 }

地图应用接口中使用的经纬度单位是NTU,您需要把其它单位的经纬度值转化过来,以下为常用的转换关系:

基本转换:

NTU = 度*100000

度 = NTU/100000

例如:

经度 = 116.21345°

纬度 = 39.445875°

NTU经度:116.21345 * 100000 = 11621345(NTU)

NTU纬度:39.445874*100000=3944587(NTU)

度分转换:

将度分单位数据转换为度单位数据

度=度+分/60

例如:

经度 = 116°20.12’

纬度 = 39°12.34’

经度 = 116 + 20.12 / 60 = 116.33533°

纬度 = 39 + 12.34 / 60 = 39.20567°

NTU经度 = 116.33533 * 100000 = 11633533(NTU)

NTU纬度 = 39.20567 * 100000 = 3920567(NTU)

度分秒转换:

将度分秒单位数据转换为度单位数据

度 = 度 + 分 / 60 + 秒 / 60 / 60

例如:

经度 = 116°20’43”

纬度 = 39°12’37”

经度 = 116 + 20 / 60 + 43 / 60 / 60 = 116.34528°

纬度 = 39 + 12 / 60 + 37 / 60 / 60 = 39.21028°

NTU经度 = 116.34528 * 100000 = 11634528(NTU)

NTU纬度 = 39.21028 * 100000 = 3921028(NTU)

其格式的经纬值先转换度,再采用上面的运算。

与经纬度有关的基础知识:

NTU 相当于十万分之一度。

如何计算经度方向距离

比如: 点A的纬度为3995400,点B的纬度为3995300,则这两个点在沿着纬线的方向相差100米。

点A的经度为11695400,点B的经度为11695300,则这两个点在沿着经线的方向相差大约为77米,

该值的计算方法可以用近似公式:

经度方向距离 = 经度差 * cos(纬度值) = 100 * cos(39) = 77米。

如何计算两点间距离

比如:点A的经度为11695400,纬度为3995400。点B的经度为11695300,纬度为3995300。

公式:两点间距离 = [ (A点经度 - B点经度)^2 + (A点纬度 - B点纬度)^2 ] ^ (1/2) = [ (11695400 - 11695300)^2

+ (3995400 - 3995300)^2 ] ^(1/2) =(10000+10000) ^ (1/2) =141米

java 距离转坐标_Java经纬读坐标的距离计算相关推荐

  1. java中定义坐标_Java 基础接口——坐标

    定义一个"点"(Point)类用来表示三维空间中的点(有三个坐标).要求如下: (1)可以生成具有特定坐标的点对象. (2)提供可以设置三个坐标的方法. (3)提供可以计算该&qu ...

  2. java随机产生十个坐标_java中随机坐标

    你的问题有两个:1.出现的位置不允许再出现2.当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复).如果你的问题是这样的话,答案如下:整个的思路:有一个地鼠类,地鼠类里面有一个创 ...

  3. java多线程 文件夹_java多线程读同一个文件

    java多线程同时读取一个文件,这个方法可行吗?不可行. 多线程能够提高效率是因为现在的cpu普遍是多核cpu, 多条线程可以在多个内核中同时执行来提高计算效率.但是计算机磁盘的磁头只有一个,即使多条 ...

  4. java字符串转公式_java把字符串转化成公式计算的示例

    java把字符串转化成公式计算的示例 如下所示: static ScriptEngine jse = new ScriptEngineManager().getEngineByName("J ...

  5. java百度地图坐标_java腾讯地图与百度地图坐标转换

    /** * 坐标转换,腾讯地图转换成百度地图坐标 * @param lat 腾讯纬度 * @param lon 腾讯经度 * @return 返回结果:经度,纬度 */ public String m ...

  6. 经纬高坐标转东北天坐标

    目录 1 问题描述 2 解决方案 2.1 经纬高转ECEF 2.2 ECEF转东北天 2.3 代入求解 2.3.1 东向化简 2.3.2 北向化简 2.3.3 天向化简 2.4 总结 1 问题描述 已 ...

  7. javascript 计算两个坐标的距离 米_斜交桥梁桩基坐标复核计算

    理解下面计算步骤必须看懂桥梁各部位细部图纸,具体参见视频课程内部桥梁识图课程. ①桥梁桩号核对及各墩台中心桩号计算 一般桥梁图纸都会已知桥梁中心桩号,有的图纸会给出桥梁起终点桩号,对于桥梁起终点桩号各 ...

  8. 三边测量法:通过三点坐标和到三点的距离,返回第4点位置

    public class IBeaconLocation {//计算手机与蓝牙基站的距离public static double calculateAccuracy(iBeaconClass.iBea ...

  9. JAVA使用JTS 判断坐标点是否在坐标多边形内部

    JAVA使用JTS 判断坐标点是否在坐标多边形内部 思路 Geometry之间的关系 API及参考博客 代码 依赖 工具类 测试类 思路 判断坐标点是否在坐标多边形内部,首先不能直接计算坐标点,是需要 ...

最新文章

  1. 大盘点 | 2020年5篇目标检测算法最佳综述
  2. 前端智能化的加速时刻:华为机器视觉的创新方程式
  3. 低压抽屉柜常见故障处理方法_低压配电设备常见故障分析,处理办法介绍
  4. python连接ftp服务器获取文件内容_python 访问ftp服务器文件
  5. 发布水晶报表时需要在服务器进行如下操作
  6. Android getRunningTasks和getRunningAppProcesses失效
  7. 二叉搜索树 java_二叉查找树之 Java的实现【下】
  8. linux 查看进程存在时间
  9. mysql c3p0 释放连接_mysql重启后,防止c3p0丢掉连接数_mysql
  10. HDU1846 Brave Game
  11. CentOS5.2下安装yum
  12. 基于XMPP协议的即时聊天工具之发送文件
  13. access查询出生日期格式转换_Access时间格式处理
  14. IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)
  15. PHP 网页支付支付宝支付接口对接
  16. Frequent Pattern
  17. Pandownload 开发者被抓了,但是其背后,百度难道不需要反思吗?
  18. opencv二值化的cv2.threshold函数
  19. srs直播 java开发,使用 SRS/OBS/VLC 快速搭建直播服务系统
  20. 闪压压缩解压软件官方版

热门文章

  1. python 动态图形_在matplotlib中动态更新图形
  2. 美国 普渡 计算机科学本科,美国大学本科普渡大学CS怎么样?
  3. Java基础知识英文选择题1——Basic of Java Programs.
  4. 牛客网在线判题系统JavaScript(V8)使用,附美团赛码系统判题系统使用
  5. 3D Slicer 中导入STL文件
  6. 【智能车竞赛】第18届比赛规则整理以及往届对比
  7. 【历史上的今天】9 月 27 日:“3Q 大战”正式打响;第一个被通缉的电脑黑客;知名“美女病毒”作者被定罪
  8. 美国国土安全部仍然使用 COBOL 语言
  9. asp:DropDownList动态绑定数据,设置默认值
  10. [论文阅读]PointRend: Image Segmentation as Rendering