最近在工作中遇到这么一个需求:给你两个经、纬度,计算出这两个经、纬度相差多远?
在网上找了找资料,还是有很多答案的,分享给小伙伴们,拿走不谢😉
一、pom引入依赖
<dependency>
<groupId>org.gavaghan</groupId>
<artifactId>geodesy</artifactId>
<version>1.1.3</version>
</dependency>
二、编写后台代码
计算函数:
/**
* 计算距离
*
* @param from 经纬度源
* @param to 比较的经纬度
* @param ellipsoid 坐标系
* @return double
*/
public static double getDistanceMeter(GlobalCoordinates from, GlobalCoordinates to, Ellipsoid ellipsoid) {
// 经纬度计算距离
GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, from, to);
return geoCurve.getEllipsoidalDistance();
}
调用
@Test
public void test(){
GlobalCoordinates source = new GlobalCoordinates(108.42372, 22.82905);
GlobalCoordinates target = new GlobalCoordinates(108.42788, 22.826532);
//WGS84坐标-GPS坐标
double WGS84Meter = getDistanceMeter(source, target, Ellipsoid.WGS84);
System.out.println("》WGS84格式坐标--》两点相距["+WGS84Meter+"]米");
System.out.println("------------------------------------------------------");
double SphereMeter = getDistanceMeter(source, target, Ellipsoid.Sphere);
System.out.println("》Sphere格式坐标--》两点相距["+SphereMeter+"]米");
}
结果:
Ellipsoid.WGS84 与 Ellipsoid.Sphere 区别
类别 | WGS84 | Sphere |
形状 | 代表一个真实的地球形状,其赤道半径不同于极半径。 | 表示一个理论上的球形地球,即所有方向的半径相等。 |
地球参数 | 采用WGS84地理坐标系统标准,该标准有精确的长半轴和扁率参数,用于精确定位。 | 通常使用单位半径1.0进行初始化,不涉及具体的地理坐标系统标准。 |
通用性 | 由于其精确模拟了地球的实际形状,适用于大多数地理信息系统(GIS)和位置服务。 | 主要用于理论计算和简化模型,对于一些不需要高度精度的应用可能更适用。 |
API应用 | 在Cesium中作为常量提供,可以直接使用而无需手动构造。 | 同样作为常量提供给开发者,并允许通过指定x, y, z方向的半径来手动构造。 |
精度 | 5M以内(通常--参考值(百度百科上说的)) | 10M以上(通常--参考值(百度百科上说的)) |