12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package com.ruoyi.common.utils;
- import org.gavaghan.geodesy.Ellipsoid;
- import org.gavaghan.geodesy.GeodeticCalculator;
- import org.gavaghan.geodesy.GeodeticCurve;
- import org.gavaghan.geodesy.GlobalCoordinates;
- /**
- * 地图工具类
- */
- public class MapTools {
- private static final double EARTH_RADIUS = 6371000; // 地球半径,单位:米
- /**
- * 计算经纬度
- */
- public static double calculate(String lon1, String lat1, String lon2, String lat2) {
- double meter1 = 0D;
- try {
- // //121.717594,31.12055 121.817629,31.090867
- GlobalCoordinates source = new GlobalCoordinates(Double.parseDouble(lat1), Double.parseDouble(lon1));
- GlobalCoordinates target = new GlobalCoordinates(Double.parseDouble(lat2), Double.parseDouble(lon2));
- meter1 = getDistanceMeter(source, target, Ellipsoid.Sphere);
- return meter1;
- } catch (Exception e) {
- return meter1;
- }
- }
- // public static double calculate(String lon1, String lat1, String lon2, String lat2) {
- //
- // double distance = getDistance(Double.parseDouble(lat1), Double.parseDouble(lon1), Double.parseDouble(lat2), Double.parseDouble(lon2));
- // return distance;
- //
- // }
- private static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo,
- Ellipsoid ellipsoid) {
- //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离
- GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
- return geoCurve.getEllipsoidalDistance();
- }
- public static double getDistance(double lat1, double lon1, double lat2, double lon2) {
- double lat1Rad = toRadians(lat1);
- double lon1Rad = toRadians(lon1);
- double lat2Rad = toRadians(lat2);
- double lon2Rad = toRadians(lon2);
- double a = Math.sin((lat2Rad - lat1Rad) / 2) *
- Math.sin((lat2Rad - lat1Rad) / 2) +
- Math.cos(lat1Rad) *
- Math.cos(lat2Rad) *
- Math.sin((lon2Rad - lon1Rad) / 2) *
- Math.sin((lon2Rad - lon1Rad) / 2);
- double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
- return EARTH_RADIUS * c;
- }
- private static double toRadians(double degree) {
- return degree * Math.PI / 180;
- }
- }
|