计算两个坐标经纬度之间的距离(5种方式)

您所在的位置:网站首页 仓库储存方法多1度直线的距离 计算两个坐标经纬度之间的距离(5种方式)

计算两个坐标经纬度之间的距离(5种方式)

2024-06-26 16:53:40| 来源: 网络整理| 查看: 265

目录

概述

方式一

方式二

方式三

方式四

1.POM引入第三方依赖:

2.代码:

3.执行操作:

4.执行结果:

建议

概述

计算两个坐标之间的距离,话不多说,搞起来!!!!   拿去用吧,不谢....

方式一

反余弦计算方式

/** * 地球半径,单位m */ private static final double EARTH_RADIUS = 6378137; /** * 根据经纬度,计算两点间的距离 * * @param longitude1 第一个点的经度 * @param latitude1 第一个点的纬度 * @param longitude2 第二个点的经度 * @param latitude2 第二个点的纬度 * @return 返回距离,单位m */ public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) { // 纬度 double lat1 = Math.toRadians(latitude1); double lat2 = Math.toRadians(latitude2); // 经度 double lng1 = Math.toRadians(longitude1); double lng2 = Math.toRadians(longitude2); // 纬度之差 double a = lat1 - lat2; // 经度之差 double b = lng1 - lng2; // 计算两点距离的公式 double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2))); // 弧长乘地球半径, 返回单位: 米 s = s * EARTH_RADIUS; return s; } 方式二

基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多。

/** * 默认地球半径,赤道半径(单位m) */ private static double EARTH_RADIUS1 = 6371000; /** * 转化为弧度(rad) */ private static double rad(double d) { return d * Math.PI / 180.0; } /** * @param lon1 第一点的精度 * @param lat1 第一点的纬度 * @param lon2 第二点的精度 * @param lat2 第二点的纬度 * @return 返回的距离,单位m * */ public static double getDistance2(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_RADIUS1; s = Math.round(s * 10000) / 10000; return s; } 方式三

反余弦计算方式

private static final double EARTH_RADIUS11 = 6371000; // 平均半径,单位:m;不是赤道半径。赤道为6378左右 public static double getDistance3(Double lat1,Double lng1,Double lat2,Double lng2) { // 经纬度(角度)转弧度。弧度用作参数,以调用Math.cos和Math.sin double radiansAX = Math.toRadians(lng1); // A经弧度 double radiansAY = Math.toRadians(lat1); // A纬弧度 double radiansBX = Math.toRadians(lng2); // B经弧度 double radiansBY = Math.toRadians(lat2); // B纬弧度 // 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值 double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX) + Math.sin(radiansAY) * Math.sin(radiansBY); // System.out.println("cos = " + cos); // 值域[-1,1] double acos = Math.acos(cos); // 反余弦值 // System.out.println("acos = " + acos); // 值域[0,π] // System.out.println("∠AOB = " + Math.toDegrees(acos)); // 球心角 值域[0,180] return EARTH_RADIUS11 * acos; // 最终结果 } 方式四

利用第三方jar包计算

1.POM引入第三方依赖: org.gavaghan geodesy 1.1.3 2.代码: /** * 计算两个经纬度之间的距离 * @param gpsFrom 第一个经纬度 * @param gpsTo 第二个经纬度 * @param ellipsoid 计算方式 * @return 返回的距离,单位m */ public static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid) { //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离 GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo); return geoCurve.getEllipsoidalDistance(); } 3.执行操作: public static void main(String[] args) { double lon1 = 39.111111; double lat1 = 116.111111; double lon2 = 39.222222; double lat2 = 116.222222; GlobalCoordinates source = new GlobalCoordinates(lon1, lat1); GlobalCoordinates target = new GlobalCoordinates(lon2, lat2); double meter1 = getDistanceMeter(source, target, Ellipsoid.Sphere); double meter2 = getDistanceMeter(source, target, Ellipsoid.WGS84); System.out.println("Sphere坐标系计算结果:"+meter1 + "米"); System.out.println("WGS84坐标系计算结果:"+meter2 + "米"); } 4.执行结果:

Sphere坐标系计算结果:15633.361234640292米WGS84坐标系计算结果:15632.349374386973米

建议

我通过这几个方式测试,根据结果反馈,感觉方式四中Sphere坐标系计算结果相对来说偏差小一点.

期待大家的三连击,你们的支持是我的动力。加油,猿友们!!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭