mysql中根据经纬度求距离_mysql、java中根据经纬度计算距离

mysql

点1(lon1,lat1)      点2(lon2,lat2)    (经度,纬度)

SELECT

ROUND(

6378.138 * 2 * ASIN(

SQRT(

POW(

SIN(

(

lat1 * PI() / 180 - lat2 * PI() / 180

) / 2

),

2

) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * POW(

SIN(

(

lon1 * PI() / 180 - lon2 * PI() / 180

) / 2

),

2

)

)

) * 1000

) AS distance

java

1、依赖

org.gavaghan

geodesy

1.1.3

2、工具类

package com.dy.utils;

import org.gavaghan.geodesy.Ellipsoid;

import org.gavaghan.geodesy.GeodeticCalculator;

import org.gavaghan.geodesy.GeodeticCurve;

import org.gavaghan.geodesy.GlobalCoordinates;

/**

* @program: xiudo-ota

* @description: 经纬度计算工具类

* @author: zhang yi

* @create: 2020-10-22 14:37

*/

public class LonLatUtil {

/**

* 创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离

* @param gpsFrom 当前位置

* @param gpsTo 目标位置

* @param ellipsoid 坐标系

* @return

*/

public static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo,

Ellipsoid ellipsoid){

GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);

return geoCurve.getEllipsoidalDistance();

}

}

3、使用

public static void main(String[] args) {

GlobalCoordinates source = new GlobalCoordinates(30.299766, 108.03805);

GlobalCoordinates target = new GlobalCoordinates(29.465956, 107.169763);

double meter1 = LonLatUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);

double meter2 = LonLatUtil.getDistanceMeter(source, target, Ellipsoid.WGS84);

System.out.println("Sphere坐标系计算结果:"+meter1 + "米");

System.out.println("WGS84坐标系计算结果:"+meter2 + "米");

}

c5de2f90d1d1451c026fc49a9bcc7c41.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值