获取MKCircle上的所有点坐标

问题描述 投票:2回答:2

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

也有圆的center coordinateradius,所以也许可以通过该变量计算点。

如何获取点坐标?

ios swift mkmapview mkcircle
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
}

0
投票

圆的圆周上有无限个点,因此很难获得它们的[[all。

但是,仅使用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

此点到圆心的距离与半径相同,因此该点在圆周上。
© www.soinside.com 2019 - 2024. All rights reserved.