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

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

2 ответа

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

Посмотрите на 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 ...

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

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

Другие вопросы по тегам