Получить все точки координаты на MKCircle

Я рисую MKCircle на MKMapViewМне нужно получить все точки на границе круга (не внутри него), чтобы отправить координаты точек на сервер и получить информацию, относящуюся к области, которая находится внутри круга.

Кроме того, как у меня есть center coordinate а также radius круга Так что, возможно, точки могут быть рассчитаны по этим переменным.

Как я могу получить координаты точек?

2 ответа

Решение

Я вычислил баллы, но, как вы знаете, мы не можем получить ВСЕ баллы, но этот метод возвращает около 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
}

На окружности круга есть бесконечные точки, поэтому получить их все совершенно невозможно.

Тем не менее, можно определить, находится ли данная точка на границе круга, используя только 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 

Расстояние между этой точкой и центром круга совпадает с радиусом, поэтому точка находится на окружности.

Другие вопросы по тегам