获取 MKCircle 上的所有点坐标
Get all points coordinate on a MKCircle
我在 MKMapView
上画了一个 MKCircle
,我需要获取圆圈边界内的所有点(不是在圆圈内),以便将点坐标发送到服务器并获取与以下内容相关的信息圆圈内的区域。
另外,因为我有圆的 center coordinate
和 radius
所以也许点可以通过这个变量来计算。
如何获取点坐标?
一个圆的圆周上有无限多个点,所以要所有个点是不可能的。
但是,仅使用 centre coordinate
和 radius
就可以确定给定点是否在圆的边界上
原点圆的方程由参数方程给出:
x = cos(angle) * radius
y = sin(angle) * radius
对于示例圆:centre = (1, 1) radius = 2
和示例 point (3, 1)
dx = point.x - centre.x
dy = point.y - centre.y
dx = 3 - 1 = 2
dy = 1 - 1 - 0
angle = atan2(dy/dx) = 0
dx = cos(angle) * radius
rearranging gives:
radius = dx/cos(angle)
radius = 2/cos(0)
radius = 2/1
radius = 2
该点到圆心的距离等于半径,因此该点在圆周上。
我计算了点数,但是你知道我们不能得到所有的点数,但是这个方法returns大约40个圆点就足够了。
internal func radiusSearchPoints(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> [CLLocationCoordinate2D] {
var points: [CLLocationCoordinate2D] = []
let earthRadius = 6_378_100.0
let π = Double.pi
let lat = coordinate.latitude * π / 180.0
let lng = coordinate.longitude * π / 180.0
var t: Double = 0
while t <= 2 * π {
let pointLat = lat + (radius / earthRadius) * sin(t)
let pointLng = lng + (radius / earthRadius) * cos(t)
let point = CLLocationCoordinate2D(latitude: pointLat * 180 / π, longitude: pointLng * 180 / π)
points.append(point)
t += 0.3
}
return points
}
我在 MKMapView
上画了一个 MKCircle
,我需要获取圆圈边界内的所有点(不是在圆圈内),以便将点坐标发送到服务器并获取与以下内容相关的信息圆圈内的区域。
另外,因为我有圆的 center coordinate
和 radius
所以也许点可以通过这个变量来计算。
如何获取点坐标?
一个圆的圆周上有无限多个点,所以要所有个点是不可能的。
但是,仅使用 centre coordinate
和 radius
原点圆的方程由参数方程给出:
x = cos(angle) * radius
y = sin(angle) * radius
对于示例圆:centre = (1, 1) radius = 2
和示例 point (3, 1)
dx = point.x - centre.x
dy = point.y - centre.y
dx = 3 - 1 = 2
dy = 1 - 1 - 0
angle = atan2(dy/dx) = 0
dx = cos(angle) * radius
rearranging gives:
radius = dx/cos(angle)
radius = 2/cos(0)
radius = 2/1
radius = 2
该点到圆心的距离等于半径,因此该点在圆周上。
我计算了点数,但是你知道我们不能得到所有的点数,但是这个方法returns大约40个圆点就足够了。
internal func radiusSearchPoints(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> [CLLocationCoordinate2D] {
var points: [CLLocationCoordinate2D] = []
let earthRadius = 6_378_100.0
let π = Double.pi
let lat = coordinate.latitude * π / 180.0
let lng = coordinate.longitude * π / 180.0
var t: Double = 0
while t <= 2 * π {
let pointLat = lat + (radius / earthRadius) * sin(t)
let pointLng = lng + (radius / earthRadius) * cos(t)
let point = CLLocationCoordinate2D(latitude: pointLat * 180 / π, longitude: pointLng * 180 / π)
points.append(point)
t += 0.3
}
return points
}