我正在绘制一个MKCircle
,MKMapView
我需要获取圆形边界中的所有点(而不是它内部),以将点坐标发送到服务器并获取与圆圈内的区域相关的信息。
也因为我有center coordinate
圆圈radius
所以也许点可以通过这个变量来计算。
我怎样才能得到点坐标?
我计算了点数,但如您所知,我们无法获得所有点数,但此方法返回大约 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
}
圆的圆周上有无数个点,所以不可能全部得到。
centre coordinate
但是,可以仅使用 your和 your来确定给定点是否在圆的边界上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
该点到圆心的距离等于半径,因此该点在圆周上。