2

我正在绘制一个MKCircleMKMapView我需要获取圆形边界中的所有点(而不是它内部),以将点坐标发送到服务器并获取与圆圈内的区域相关的信息。

也因为我有center coordinate圆圈radius所以也许点可以通过这个变量来计算。

我怎样才能得到点坐标?

4

2 回答 2

3

我计算了点数,但如您所知,我们无法获得所有点数,但此方法返回大约 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
}
于 2015-08-27T10:49:40.837 回答
0

圆的圆周上有无数个点,所以不可能全部得到。

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 

该点到圆心的距离等于半径,因此该点在圆周上。

于 2015-08-27T08:50:10.013 回答