2012-04-25 3 views
1

У меня есть CLLoctionCoordinate2D, и я хочу выяснить, какие точки находятся на данном расстоянии от него. Например, можно использовать 100 миль. Поэтому я хочу вычислить точку в 100 милях к северу, югу, востоку и западу от нее.Вычисление координаты местоположения на некотором расстоянии от другой координаты

Восток и запад довольно просты. Я преобразовал обе координаты в MKMapPoints и использовал distanceInMeters * MKMapPointsPerMeterAtLatitude(latitude). Это отлично работает для востока и запада, потому что широта постоянна.

Однако это не работает на север и юг. На севере он недооценивает, а на юге он недооценивает (потому что MKMapPointsPerMeterAtLatitude меняется при движении). Как я могу вычислить эти точки для севера и юга?

+1

Не можете ли вы провести цикл и проверить реальное расстояние с помощью CLLocation distanceFromLocation: method? Это не должно быть слишком дорогостоящим в компьютерных циклах. –

+0

Я считал это, но я надеялся найти что-то более элегантное. –

ответ

2

Существует 60 морских миль на градус широты. Это относится и к долготе, но только к экватору. Чтобы рассчитать расстояние по долготе в морских милях, умножьте расстояние в градусах долготы * 60 нм * cos (широта в радианах).

Выполняйте расчеты ваших новых точек (в 100 милях к северу, 100 миль на юг и т. Д.) В режиме lat lon, а не в MKMapPoints, а затем преобразуйте точки lat/lon (CLLocationCoordinate2D?) В MKMapPoints.

0

Линии широты всегда являются постоянным углом друг от друга, измеренным от ядра Земли, что является своего рода точкой. Итак, что вам нужно сделать, так это то, как далеко друг от друга в плане миль, а затем использовать это, чтобы получить 100 миль на север/юг, а затем получить точки карты для этого. Формула расстояния на поверхности земли будет находиться где-то в сети, вероятно, в метрах или километрах.

Смежные вопросы