Получить координату точки на радиусе MKCircle - PullRequest
0 голосов
/ 12 марта 2020

Я нашел ответ на свой вопрос в другом топи c и изменил функцию для своих нужд. Но я не добился желаемого результата. Я использую эту функцию и хочу получить точку на радиусе.

   func radiusSearchPoint(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> CLLocationCoordinate2D {

    let earthRadius = 6_378_100.0
    let π = Double.pi
    let lat = coordinate.latitude * π / 180.0
    let lng = coordinate.longitude * π / 180.0

    let t: Double = 0

    let pointLat = lat + (radius / Double(earthRadius)) * sin(t)
    let pointLng = lng + (radius / Double(earthRadius)) * cos(t)
    let point = CLLocationCoordinate2D(latitude: pointLat * 180 / π, longitude: pointLng * 180 / π)

    return point
}

Красная линия состоит из двух точек: центра окружности и точки, полученной после выполнения функции, но второй точки должен быть на окружности

Как правильно получить эту точку на радиусе круга?

1 Ответ

0 голосов
/ 12 марта 2020

Добро пожаловать в stackoverflow. Проверьте значения вашей функции, мне кажется, красная линия должна хорошо заканчиваться в круге (а не в круге).

Ваша проблема в том, что радиус, который вы используете для расчета угла долготы, изменяется в зависимости от широты. Увеличивая угол широты, вы определяете все меньшие и меньшие круги постоянной широты. Радиус круга широты R * cos (широта). Где R - радиус Земли. Измените pointLng на следующее:

let pointLng = lng + (radius / Double(earthRadius * cos(lat))) * cos(t)

Стоит также упомянуть, что Земля не является сферой, поэтому вы получите ошибку с этим расчетом, которая ухудшится вблизи полюсов. Чтобы сделать это точно, вам нужно преобразовать в ECEF координаты, чтобы получить точные значения радиуса, и снова вернуться к WGS84 (lat, lng).

...