Mapkit координаты точки на прямой - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть CLLocationCoordinate2D (c1) и CLLocation (l1), поэтому у меня есть значения lat / long для каждой точки, и я могу рассчитать расстояние в метрах между ними, используя:

[c1 distanceFromLocation:l1]

Как найти координаты точки (c2) на 100 метров ближе к l1, чем c1 (вдоль того же направления)?

enter image description here

Я рассчитал, используя базовый триг, используя следующее:

  1. использовал разницу широты и долготы для вычисления гипотенузы и угла
  2. использовал соотношение между расстоянием до cl и расстоянием до c2, чтобы получить гипотенузу треугольника, заканчивающегося в c2
  3. использовал cos и sin для вычисления долготы и широты c2

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

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Хотя ответ Рикай был полезен, я в конечном итоге использовал следующую превосходную библиотеку, которая имеет много полезных функций для вычислений основного местоположения: https://github.com/100grams/CoreLocationUtils

1 голос
/ 18 ноября 2011

После небольшого исследования я нашел базовую формулу для расчета искривленного расстояния между двумя точками на поверхности земли:

dlon = lon2 - lon1 
dlat = lat2 - lat1 
a = { sin(dlat/2) }^2 + [ cos(lat1) * cos(lat2) * { sin(dlon/2) }^2 ] 
c = 2 * arcsin(min(1,sqrt(a))) 
d = R * c
...