Используя широту и долготу текущего местоположения и местоположения пункта назначения, как мы можем получить направление в iphone - PullRequest
1 голос
/ 08 января 2011

Я работаю в 1 приложении для iphone, где нам нужно показать направление от 1 места к другому, то есть от текущего местоположения, в каком направлении (N или E или W или S или NE или NW или SE или SW) пункт назначенияявляется .Я знаю, как добраться из одного места в другое, но я ищу, чтобы показать направление.Моя проблема ясна?Если кто-нибудь знает, как это сделать, пожалуйста, помогите мне. Спасибо всем!

Ответы [ 2 ]

3 голосов
/ 08 января 2011

Знаете ли вы координаты двух мест?

Посмотрите на CLLocationCoordinate2D :

широта Широта в градусах.Положительные значения указывают широты к северу от экватора.Отрицательные значения указывают широты к югу от экватора.

долгота Долгота в градусах.Измерения относятся к нулевому меридиану, положительные значения простираются к востоку от меридиана, а отрицательные значения простираются к западу от меридиана.

Поэтому широта довольно проста, если широта пункта назначения меньше текущей позицииширота, то она лежит на севере, если она больше, чем широта текущего местоположения, то она лежит на юге.

latitudinal_distance = destination.latitude - origin.latitude

Долгота немного сложнее, так как следует учитывать, чтопункт назначения в трех четвертях пути вокруг Земли на восток, вероятно, лучше выражен на западе.Снова сравните значения долготы, рассмотрите расстояние как восток, так и запад, обработайте пересечение меридиана и выберите более короткое расстояние.

distance_east = (origin.longitude > 0 && destination.longitude < 0) ? 180 - origin.longitude + destination.longitude - -180 : destination.longitude - origin.longitude; if (distance_east < 0) distance_east += 360

distance_west = (origin.longitude < 0 && destination.longitude > 0) ? -180 - origin.longitude - 180 - destination.longitude : origin.longitude - destination.longitude; if (distance_west < 0) distance_west += 360

longitudinal_distance = min(distance_east, distance_west)

Как только вы узнаете, сколько градусов широты и долготы разделяют две ваши точки, вы можете рассчитать курс до пункта назначения и решить, какой из них должен отображаться, а какие точки компаса.На компасе только с четырьмя точками (N, E, S, W) каждая точка будет покрывать 90 градусов.На компасе с 8 точками каждая точка будет покрывать 45 градусов.Надеюсь, вы поняли.

heading = arctan(longitudinal_distance / latitudinal_distance) if (heading >= -45 || heading < 45) return 'N'; else if (heading >= 45 && heading < 135) return 'E'; else if ...

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

0 голосов
/ 08 января 2011

Взгляните на образец магнитометра / расположения сердечника от Apple: Тесламетр

...