为了账号安全,请及时绑定邮箱和手机立即绑定

当您知道Java中的经度和纬度时,以米为单位计算距离

当您知道Java中的经度和纬度时,以米为单位计算距离

jeck猫 2019-10-16 10:42:28
我需要计算两个坐标给定的两个点之间的距离。我正在处理的项目是一个Java项目,因此Java代码会很棒,但是也可以提供伪代码,然后我可以自己实现它:)您可能知道,有三种表示坐标的方法:度:分:秒(49°30'00“ N,123°30'00” W)度:小数分钟(49°30.0',-123°30.0'),(49d30.0m,-123d30.0')小数度(49.5000°,-123.5000°),通常使用4-6个十进制数。这是输入坐标的第三种方式,因此首选使用此值的代码:)
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

基于关于stackoverflow的另一个问题,我得到了此代码。这将以米为单位计算结果,而不是以英里为单位:)


 public static float distFrom(float lat1, float lng1, float lat2, float lng2) {

    double earthRadius = 6371000; //meters

    double dLat = Math.toRadians(lat2-lat1);

    double dLng = Math.toRadians(lng2-lng1);

    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +

               Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *

               Math.sin(dLng/2) * Math.sin(dLng/2);

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    float dist = (float) (earthRadius * c);


    return dist;

    }


查看完整回答
反对 回复 2019-10-16
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您可以将Java Geodesy Library用于GPS,它使用Vincenty的公式,该公式考虑了地球表面的曲率。


实现是这样的:


import org.gavaghan.geodesy.*;


...


GeodeticCalculator geoCalc = new GeodeticCalculator();


Ellipsoid reference = Ellipsoid.WGS84;  


GlobalPosition pointA = new GlobalPosition(latitude, longitude, 0.0); // Point A


GlobalPosition userPos = new GlobalPosition(userLat, userLon, 0.0); // Point B


double distance = geoCalc.calculateGeodeticCurve(reference, userPos, pointA).getEllipsoidalDistance(); // Distance between Point A and Point B

结果距离以米为单位。


查看完整回答
反对 回复 2019-10-16
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

在C ++中,是这样完成的:


#define LOCAL_PI 3.1415926535897932385 


double ToRadians(double degrees) 

{

  double radians = degrees * LOCAL_PI / 180;

  return radians;

}


double DirectDistance(double lat1, double lng1, double lat2, double lng2) 

{

  double earthRadius = 3958.75;

  double dLat = ToRadians(lat2-lat1);

  double dLng = ToRadians(lng2-lng1);

  double a = sin(dLat/2) * sin(dLat/2) + 

             cos(ToRadians(lat1)) * cos(ToRadians(lat2)) * 

             sin(dLng/2) * sin(dLng/2);

  double c = 2 * atan2(sqrt(a), sqrt(1-a));

  double dist = earthRadius * c;

  double meterConversion = 1609.00;

  return dist * meterConversion;

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 1066 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信