Phi*_*ham 114 algorithm geometry geolocation
我可以做一个简单的计算,它会将km转换为一个值,我可以将其添加到lat或lon浮点数来计算搜索的边界框吗?它不需要完全准确.
例如:如果给我伦敦,英格兰的纬度/经度(51.5001524,-0.1262362),我想计算那个纬度从那个点开始向西/向西25公里的东西,以及从那个南北25公里的lon点,我需要做什么才能将25km转换成小数加上上面的值?
我正在寻找一般的经验法则,即:1km == +/- 0.XXX
编辑:
我对"lat lon"的原始搜索未返回此结果:
接受的答案似乎足以满足我的要求.
Jim*_*wis 206
大致的转化次数为:
这并不能完全纠正地球的极地平坦化 - 因为你可能想要使用WGS84参考椭球(用于GPS的模型)的更复杂的公式.但是对于您的目的,错误可能是微不足道的.
资料来源:http://en.wikipedia.org/wiki/Latitude
注意:请注意,latlong坐标以度表示,而cos
大多数(所有?)语言中的函数通常接受弧度,因此需要一定程度的弧度转换.
如果您使用的是Java,Javascript或PHP,则可以使用一些有趣的复杂(但仍很快)的三角函数来精确地进行这些计算:
http://www.jstott.me.uk/jcoord/
小智 5
感谢Jim Lewis的精彩回答,我想通过我在 Swift 中的函数来说明这个解决方案:
func getRandomLocation(forLocation location: CLLocation, withOffsetKM offset: Double) -> CLLocation {
let latDistance = (Double(arc4random()) / Double(UInt32.max)) * offset * 2.0 - offset
let longDistanceMax = sqrt(offset * offset - latDistance * latDistance)
let longDistance = (Double(arc4random()) / Double(UInt32.max)) * longDistanceMax * 2.0 - longDistanceMax
let lat: CLLocationDegrees = location.coordinate.latitude + latDistance / 110.574
let lng: CLLocationDegrees = location.coordinate.longitude + longDistance / (111.320 * cos(lat * .pi / 180))
return CLLocation(latitude: lat, longitude: lng)
}
Run Code Online (Sandbox Code Playgroud)
在这个转换距离的函数中,我使用以下公式:
latDistance / 110.574
longDistance / (111.320 * cos(lat * .pi / 180))
Run Code Online (Sandbox Code Playgroud)