用给定的坐标和以米为单位的距离计算新坐标

Posted

技术标签:

【中文标题】用给定的坐标和以米为单位的距离计算新坐标【英文标题】:Calculate new coordinate with given coordinate and distance in meters 【发布时间】:2015-10-05 11:23:07 【问题描述】:

我有一个坐标和一个 CoreData 数据库,其中包含具有纬度和经度值的条目。我想找到给定正方形区域内的所有对象,因此想知道与我的点有一定距离的左上角和右下角点。

代码:

let coordinate = CLLocationCoordinate2D(latitude: 9.0, longitude: 50.0)
let distance: CLLocationDistance = 5000 // 5km
let topLeftCoordinate = ... // how to calculate this?
let bottomRightCoordinate = ... // and that?

【问题讨论】:

【参考方案1】:

一种方法是定义辅助方法,以便使用 MapKit 和 CoreLoation 根据给定距离(以米为单位)的坐标轻松计算新坐标,如下所示:

// Create new coordinate with equal latitude and longitude distances (distance can be both positive and negative).
func coordinate(from coordinate: CLLocationCoordinate2D, distance: CLLocationDistance) -> CLLocationCoordinate2D 
    return self.coordinate(from: coordinate, latitudeDistance: distance, longitudeDistance: distance)


// Create new coordinate with latitude and longitude distances (distances can be both positive and negative).
func coordinate(from coordinate: CLLocationCoordinate2D, latitudeDistance: CLLocationDistance, longitudeDistance: CLLocationDistance) -> CLLocationCoordinate2D 
    let region = MKCoordinateRegionMakeWithDistance(coordinate, latitudeDistance, longitudeDistance)

    let newLatitude = coordinate.latitude + region.span.latitudeDelta
    let newLongitude = coordinate.longitude + region.span.longitudeDelta

    return CLLocationCoordinate2D(latitude: newLatitude, longitude: newLongitude)

那么上面的代码看起来就像这样:

let coordinate = CLLocationCoordinate2D(latitude: 9.0, longitude: 50.0)
let distance: CLLocationDistance = 5000 // 5km
let topLeftCoordinate = self.coordinate(from: coordinate, distance: -distance)
let bottomRightCoordinate = self.coordinate(from: coordinate, distance: distance)

希望在遇到这个问题时能帮助到那里的人。


预防性信息:以防万一有人认为(正如许多人认为的那样)自我回答的问题不适合 SO,请先阅读this。

【讨论】:

以上是关于用给定的坐标和以米为单位的距离计算新坐标的主要内容,如果未能解决你的问题,请参考以下文章

将距离转换为坐标[重复]

原始线要素类为地理坐标系,如何获取以米为单位的距离?

按两点之间的距离设置区域

MySQL MIN 查询不适用于计算距离

计算两个坐标之间的距离,考虑高度变化的短距离

给定两个区域的经度和纬度,如何找到它们之间的距离(以米为单位)。如何在 SQL 中查询..?