探测你是否离目标一公里远

  • 本文关键字:目标 是否 探测 android math
  • 更新时间 :
  • 英文 :


我有一个有趣的问题。我的纬度值为51.445376,经度值为-0.190624(例如,假设这是由android位置侦听器接收的)。这个特定的位置(和它的值)是一个兴趣点,它存储在我的数据库中。我在我的android上使用了一个位置监听器,我会把用户的当前位置发送到服务器,以检测用户是否在那个特定兴趣点的一公里半径内。有人知道用什么算法来检查用户当前的经度和纬度是否在兴趣点经度和纬度的一公里半径内吗?或者我能看到的东西?

也许有人能帮帮我,因为我的数学不是世界上最好的。

对于地理坐标,使用这个函数(公共领域):

public static double distanceInKM(
           double latStart,double lonStart,
           double latEnd,double lonEnd
){
      latStart=Math.toRadians(latStart);
      latEnd=Math.toRadians(latEnd);
      return 6370.997*Math.acos(
              Math.cos(Math.toRadians(lonEnd - lonStart))*Math.cos(latStart)*
              Math.cos(latEnd)+Math.sin(latStart)*Math.sin(latEnd));
}

计算最短的地理路径被称为"逆测地线问题",这在C.F.F. Karney的文章"geodesics算法",2012中进行了讨论。上面的方法显示了一个基于球面余弦定律的距离函数,这是一种不太精确的计算路径的方法,特别是因为它假设地球是一个完美的球体。

这篇2008年的文章可能会有帮助。

链接到一个关于如何使用Haversine公式来计算球体上两点之间距离的MovableType描述。重要的是要注意,它不是100%准确,因为地球不是一个完美的球体(它的赤道半径与极地半径相差约20公里),但应该足以满足你的需求。

MovableType链接还描述了如何使用等矩形投影(将纬度/长坐标转换为直角坐标)和毕达哥拉斯定理来确定距离的粗略(但更快)近似(适用于~1-2km的小距离)

一个简单的解决方法:通过先求出dx和dy来求出距离。

假设有点1 (p1)和点2 (p2)

dx = p2。X - p1.x;Dy = p2。

现在按如下方式找到距离d

d =√(dx^2 + dy^2)

在像java这样的编程语言中,可以使用以下行:

double d = Math.sqrt(dx*dx + dy*dy);

希望这有助于你的起点!

注:x &Y必须根据您的后期信息进行相应的计算。我打算写一个简短的代码片段,但我看到别人有一个很好的解决方案(我为他的回应点赞)。

最新更新