首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >经纬度和公里距离的简单计算?

经纬度和公里距离的简单计算?
EN

Stack Overflow用户
提问于 2009-08-10 07:14:24
回答 6查看 162.5K关注 0票数 138

有没有一个简单的计算方法可以将km转换成一个值,我可以将这个值添加到lat或lon float中,以计算搜索的边界框?它不需要完全准确。

例如:如果我得到英国伦敦的纬度/经度(51.5001524,-0.1262362),我想计算从该点向东/向西25公里处的纬度,以及该点以北/向南25公里处的纬度,我需要做什么才能将25公里转换为小数,以添加上述值?

我正在寻找一个通用的经验法则,即:1 1km == +/- 0.XXX

编辑:

我最初搜索"lat lon“时没有返回这个结果:

How to calculate the bounding box for a given lat/lng location?

公认的答案似乎足以满足我的要求。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-08-10 07:32:49

近似转换为:

  • 纬度:1度= 110.574 km
  • 经度:1度=111.320*cos(纬度) km

这对于地球的极地扁平化并不完全正确--因此,你可能需要一个使用WGS84参考椭球(用于全球定位系统的模型)的更复杂的公式。但对于您的目的来说,这个错误可能可以忽略不计。

来源:http://en.wikipedia.org/wiki/Latitude

Caution:请注意,latlong坐标是以度为单位表示的,而cos函数在大多数情况下(全部?)语言通常接受弧度,因此需要一个degree to radians conversion

票数 253
EN

Stack Overflow用户

发布于 2009-08-10 07:41:13

如果你使用的是Java、Javascript或PHP,那么有一个库可以精确地执行这些计算,使用一些非常复杂(但仍然很快)的三角函数:

http://www.jstott.me.uk/jcoord/

票数 5
EN

Stack Overflow用户

发布于 2019-07-23 15:55:46

感谢Jim Lewis的精彩回答,我想通过我在Swift中的功能来说明这个解决方案:

代码语言:javascript
运行
复制
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)
    }

在此函数中,我使用以下公式来转换距离:

代码语言:javascript
运行
复制
latDistance / 110.574
longDistance / (111.320 * cos(lat / .pi / 180))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1253499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档