根据半径(米)和位置获取最大纬度和经度

7

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

谢谢!


2
你能发布你的代码并告诉我们你已经尝试了什么吗? - Brian Driscoll
如果半径很小,您可以绘制围绕点的切线以从中获取经度和纬度,因为在足够小的距离上,您可以将地球视为平面。 - user2137101
你能更精确地描述你的问题吗?这样我们才能找到更好的解决方案。如果你正在尝试在点周围的范围内搜索数据库对象,请考虑查看http://stackoverflow.com/questions/22387682/coordinates-comparison-in-database。 - user2137101
“maximum” 纬度和经度 是什么意思?是某个最大概念的单一点,还是两个不同的点?在第一种情况下,你没有提供足够的信息告诉我们什么是 “max”。在第二种情况下,“max” 只是向北 r 米,向西 r 米, 然后你必须决定如果你穿过北极或 180 度线时想要什么。换句话说,"max" 没有更多上下文信息就没有意义。 - Jim Garrison
我想获取在一定半径范围内远离我的位置的所有点。我的想法是获取在该半径范围内的所有地点(在数据库中,我有所有地点的相关坐标)。 - Gio
1个回答

19

首先,每一纬度包含约 111.1公里,因此很容易将线性差值重新计算为纬度差值。

第二点是,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上,要获取一纬度包含多少米,请创建两个Location对象:一个带有当前坐标,另一个带有纬度偏移0.1度,然后计算它们之间的距离并乘以10。对于经度也是同样的方法。


太棒了!非常感谢@Salauyou!这正是我所需要的!! - Gio
1
@Gio 不用谢。我刚刚添加了最后一段关于如何在 Android 上更加智能地完成它的内容。这将提供更精确的结果,因为计算是在 WGS84 椭球体上执行的,而不是球体上。 - Alex Salauyou
谢谢!我正在用它来开发Android应用! - Gio
非常感谢!我已经将它“移植”到Excel/Google Sheets中 :-) 干杯 - Greg Sadetsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接