获取MKCircle上的所有点坐标

时间:2015-08-27 06:50:46

标签: ios swift mkmapview mkcircle

我正在MKCircle上绘制MKMapView,我需要获取Circle边框中的所有点(不在其中)以将点坐标发送到服务器并获取与该区域相关的信息这是在圈内。

同样,由于我有center coordinateradius的圆圈所以也许可以通过此变量计算点数。

如何获得点坐标?

2 个答案:

答案 0 :(得分:3)

我计算了分数,但是你知道我们不能得到所有的分数,但是这个方法返回的圆就足够了40个点。

internal func radiusSearchPoints(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> [CLLocationCoordinate2D]
{
    var points: [CLLocationCoordinate2D] = []
    let earthRadius = 6378100.0
    let π = M_PI

    let lat = coordinate.latitude * π / 180.0
    let lng = coordinate.longitude * π / 180.0

    for var t: Double = 0; t <= 2 * π; t += 0.3
    {
        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)
    }

    return points
}

答案 1 :(得分:0)

圆周上有无限点,所以所有都是不可能的。

但是,可以仅使用centre coordinateradius

来确定给定点是否在圆圈的边框上

原点圆的方程由参数方程给出:

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 

此点与圆心之间的距离与半径相同,因此该点位于圆周上。