【问题标题】:Android calculate distance between two locations [duplicate]Android计算两个位置之间的距离[重复]
【发布时间】:2011-12-18 08:46:53
【问题描述】:

可能重复:
How to calculate distance between two locations using their longitude and latitude value

在你们都给我一些关于地球不是一个完美的球体的教育之前,当你靠近两极时它会发生变化,这似乎是我在网上能找到的全部内容。在问我的父亲是一位有成就的地理学家,我的叔叔是一位为 NASA 工作的量子物理学家,而我是一名卑微的计算机程序员之前,我想先问问你们!

我只需要一个球场公里的距离,因为乌鸦从手机飞到 720 平方公里区域的预填充位置列表,因此变化并不重要。

这是我现在,请不要在我身上丢任何东西。

mLatitude=-38.3533177
mLongitude=144.9127674

这是十分钟前的我,大约 3 公里外的乌鸦飞过,

mLatitude=-38.3444385
mLongitude=144.9374762

我如何计算得到 3 公里?

我对 Java 还很陌生,所以我不确定有哪些内置的数学函数可用,也不知道计算是什么?

干杯,

迈克。

【问题讨论】:

标签: java android location


【解决方案1】:

您可以使用Location 类的distanceTo() 方法来获取两个位置之间的距离。

【讨论】:

  • DistanceTo() 和 DistanceBetween () 有点难以捉摸,如果我将它们输入到搜索中,我会得到数学方程的结果,这些结果可以做你认为它们作为内置函数应该做的事情。正如诺斯特拉斯所说,它们的地球半径略有不同,但对我来说,我只需要一个球场。
  • 好的,你是说你不知道这个方法怎么用?
【解决方案2】:
public class Calculator {
    private static final int earthRadius = 6371;
    public static float calculateDistance(float lat1, float lon1, float lat2, float lon2)
    {
        float dLat = (float) Math.toRadians(lat2 - lat1);
        float dLon = (float) Math.toRadians(lon2 - lon1);
        float a =
                (float) (Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1))
                        * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2));
        float c = (float) (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));
        float d = earthRadius * c;
        return d;
    }
}

【讨论】:

  • 你能告诉我这个函数的结果单位是什么吗?它似乎没有返回公里吧?
  • 函数返回的距离似乎是公里。
猜你喜欢
  • 2016-02-27
  • 2015-10-26
  • 2011-12-24
  • 2018-09-21
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多