【问题标题】:How can I calculate distance between multiple latitude and longitude?如何计算多个纬度和经度之间的距离?
【发布时间】:2023-03-08 02:33:01
【问题描述】:

我想计算每个点之间的总距离,包括纬度和经度,这些点存储在本地数据库中,所以场景是我想计算从点 a 到 b & b 到 c & c 到 d 的距离,这些使用 google place api 将点(经纬度)存储到数据库中

所有的点都是从数据库中获取的。

【问题讨论】:

标签: java android google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

您可以在不使用位置 api 的情况下计算 2 个位置点之间的距离

    private double distance(double lat1, double lon1, double lat2, double lon2) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) 
                        * Math.sin(deg2rad(lat2))
                        + Math.cos(deg2rad(lat1))
                        * Math.cos(deg2rad(lat2))
                        * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        return (dist);
    }

    private double deg2rad(double deg) {
        return (deg * Math.PI / 180.0);
    }

    private double rad2deg(double rad) {


return (rad * 180.0 / Math.PI);
}

【讨论】:

  • 但我使用应用程序所需的位置 api 存储纬度和经度。
  • 计算距离你不需要的地方 api 这就是我的意思
  • 是的,你是对的,但是根据图表,多个点存储在数据库中,这些点是使用 places api 存储的,现在我想创建每个点之间的距离
  • 您有点列表(位置),首先计算位置 1 和位置 2 之间的距离,然后计算位置 2 和位置 3 之间的距离并加起来
  • 我有动态点而不是静态点 点数最多可达 20 可能是 30
【解决方案2】:

我不确定我是否理解这个问题的范围。你需要考虑地球的曲率吗?还是只是2个随机点?

如果是第一个:我可以给你看这个链接,因为我帮不了你:

https://www.movable-type.co.uk/scripts/latlong.html

如果是后者:

假设1是纬度,2是经度,那么a1就是A点的纬度。

在平面上计算 2 个点就像这样:

距离 = sqrt((a1−b1)+(a2−b2))

所以,例如计算从 D 到 E 的距离是:sqrt((e1-d1) + (e2-d2))

【讨论】:

  • 我想您已经将坐标存储在程序中的某个位置。
【解决方案3】:
class DistanceCalculator
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, "M") + " Miles\n");
        System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, "K") + " Kilometers\n");
        System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, "N") + " Nautical Miles\n");
    }

    private static double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
        if ((lat1 == lat2) && (lon1 == lon2)) {
            return 0;
        }
        else {
            double theta = lon1 - lon2;
            double dist = Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2)) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(theta));
            dist = Math.acos(dist);
            dist = Math.toDegrees(dist);
            dist = dist * 60 * 1.1515;
            if (unit == "K") {
                dist = dist * 1.609344;
            } else if (unit == "N") {
                dist = dist * 0.8684;
            }
            return (dist);
        }
    }
}

【讨论】:

    【解决方案4】:
    float[] distanceWidth = new float[2];
    Location.distanceBetween(
                    startLatitude,
                    startLongitude,
                    endLatitude,
                    endLongitude,
                    distanceWidth);
    
    //You will get float[] of results after Location.distanceBetween().
    
    float distance = distanceHeight[0];
    float distanceInKm = distance/1000;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 2018-06-11
      • 2011-09-16
      • 1970-01-01
      • 2012-10-13
      • 2012-01-26
      • 2012-11-22
      • 2014-04-10
      相关资源
      最近更新 更多