【问题标题】:Get the max latitude and longitude given radius (meters) and position获取给定半径(米)和位置的最大纬度和经度
【发布时间】:2014-05-31 19:55:52
【问题描述】:

我的代码需要帮助。 我想获得最大纬度和最大经度(以度为单位),以米为单位的半径以及纬度和经度的实际位置(以度为单位)。 有人能帮我吗?

谢谢!!

【问题讨论】:

  • 你能发布你的代码并告诉我们你到目前为止做了什么吗?
  • 如果半径很小,你可以在你的点周围画出你的球体的切线来得到它们的经度和纬度,因为你可以认为地球在足够小的距离上是平坦的.
  • 您能否更准确地了解您的问题,以便我们找到更好的解决方案?如果您尝试在点周围的范围内搜索数据库对象,请考虑查看stackoverflow.com/questions/22387682/…
  • 你所说的“最大”纬度和经度是什么意思?以某种方式体现某种最大值概念的单个点,或两个不同的点。在第一种情况下,您没有提供足够的信息来告诉我们“最大”是什么意思。在第二种情况下,“max”只是向北 r 米,向西 r 米,然后你必须决定如果你越过北极或 180 度线,你想要什么。换句话说,“max”没有更多上下文就没有任何意义。
  • 我想得到在一定半径内远离我的位置的所有点。我的想法是让我周围的所有地方都在该半径范围内(在 DB 中,所有地方都有相对坐标)。

标签: java localization geolocation location


【解决方案1】:

首先,每个纬度都包含appx 111.1 km,因此很容易重新计算线性增量到纬度增量。

其次,1经度的线性外观不同,取决于纬度:靠近两极的小,靠近赤道的大。近似方程如下:

kmInLongitudeDegree = 111.320 * Math.cos( latitude / 180.0 * Math.PI)

结合这一点,很容易得到覆盖你圈子的纬度和经度增量:

deltaLat = radiusInKm / 111.1;
deltaLong = radiusInKm / kmInLongitudeDegree;

minLat = lat - deltaLat;  
maxLat = lat + deltaLat;
minLong = long - deltaLong; 
maxLong = long + deltaLong;

如需更精确的计算,请查看:http://en.wikipedia.org/wiki/Longitude经度长度部分)。

在Android上,要获得一个纬度包含多少米,制作2个Location对象:一个具有当前坐标,一个纬度偏移0.1度,然后计算它们之间的距离并乘以10。与经度。

【讨论】:

  • 太棒了!非常感谢@Salauyou!这是我需要的!
  • @Gio 不客气。我刚刚添加了最后一段如何在 Android 上以更智能的方式进行操作。它将给出更精确的结果,因为计算是在 WGS84 椭球上执行的,而不是球体。
  • 谢谢!!我正在为 Android 使用它!
  • 非常感谢!我将它“移植”到 Excel/Google 表格 :-) 干杯
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多