Получить все точки координаты на 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
Расстояние между этой точкой и центром круга совпадает с радиусом, поэтому точка находится на окружности.