2014-04-16 47 views
2

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

谢谢!

+2

你可以发布你的代码,并告诉我们你到目前为止尝试过吗? –

+0

如果半径非常小,则可以将点的切线绘制到您的球体的点附近以获取它们的经度和纬度,因为您可以认为地球在足够小的距离上是平坦的。 –

+0

您能更准确地了解您的问题吗,所以我们可以找到更好的解决方案?如果您尝试搜索围绕点的范围内的数据库对象,请考虑查看http://stackoverflow.com/questions/22387682/coordinates-comparison-in-database –

回答

9

首先,每个纬度包含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.与经度相同。

+0

很棒!非常感谢你@Salauyou! 这是我需要的! – Gio

+1

@Gio欢迎您。我刚刚添加了最后一段如何在Android上以更智能的方式进行操作。它会给出更精确的结果,因为计算是在WGS84椭球体上执行的,而不是球体。 –

+0

谢谢!我正在使用它的Android! – Gio

相关问题