我正在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
}
圆的圆周上有无限个点,因此很难获得它们的[[all。
但是,仅使用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
此点到圆心的距离与半径相同,因此该点在圆周上。