2012-05-18 10 views
1

Я хочу сделать функцию, которая вычисляет угол между пользователем и одной точкой интереса (POI) со ссылкой на настоящий север.Расчет угла между пользователем и POI (Достопримечательности) в android

У меня уже есть долгота и широта моего положения и позиции POI, и теперь мне нужен угол между ними.

Вот что у меня есть:

private float calcAzimuth1(float lat0, float long0, float lat1, float long1) 
{ 
    //user's latitude and longitude 
    float userLat = (float) ((lat0 * ((float)Math.PI))/180); 
    float userLong = (float) ((long0 * ((float)Math.PI))/180); 

    //POI's latitude and longitude 
    float latT1 = (float) ((lat1 * ((float)Math.PI))/180); 
    float longT1 = (float) ((long1 * ((float)Math.PI))/180); 

    //angle between them 
    float angle=??} 
+1

Угол между ними со ссылкой на что? – slybloty

+0

Извините, я забыл! Что касается истинного севера! – Ricardo

+1

Это на самом деле довольно сложно. Степень долготы колеблется от 60 морских миль на экваторе до нуля на полюсах, поэтому преобразование в местное прямоугольное отношение расстояний требует учета этого, прежде чем принимать арктангенс. Но на более длинных расстояниях создание локального прямоугольного проектора уже недействительно. Это было продумано в некоторых местах в древности и общеизвестно о штурманах с парусным спортом, поэтому хороший навигационный праймер должен дать то, что вам нужно. Paging Nathaniel Bowditch ... http://en.wikisource.org/wiki/The_American_Practical_Navigator –

ответ

0

Проверить работу bearingTo из класса Location http://developer.android.com/reference/android/location/Location.html#bearingTo(android.location.Location) Вы можете создать два объекта Место с вашего Lat/Longs, а затем получить отношение между ними.

Другое, что вам может понадобиться, это рассчитать ориентацию устройства и затем объединить их. Это требует прослушивания Датчиков и расчета Севера от полученной информации. ответьте здесь: Compass readings on SGS III