3

У меня есть список gps-координат (long, lat), и у меня есть текущее положение (long, lat). Я узнал, что, вычитая две координаты, я нахожу относительные координаты из своего положения, и эти координаты, которые я использую в своем AR-приложении, чтобы нарисовать pois в мире opengl.преобразование координат gps в слово opengl в AR

проблема заключается в том, что отдаленные координаты по-прежнему будут слишком далеко, чтобы «видеть», поэтому я хочу, чтобы уравнение переводило все, чтобы быть ближе к моему положению, но с их исходным относительным положением.

double kGpsToOpenglCoorRatio = 1000; 
    - (void)convertGlobalCoordinatesToLocalCoordinates:(double)latitude x_p:(double *)x_p longitude:(double)longitude y_p:(double *)y_p { 

     *x_p = ((latitude - _userLocation.coordinate.latitude) * kGpsToOpenglCoorRatio); 
     *y_p = ((longitude - _userLocation.coordinate.longitude) * kGpsToOpenglCoorRatio); 

    } 

я пытался применять Квадратный корень, чтобы дать им «предел расстояния», но их позиции получил перепутались относительно их первоначального положения.

ответ

3

Возможно, это связано с тем, что GPS использует сферическую (иш) систему координат, и вы пытаетесь напрямую сопоставить ее с декартовой системой координат (плоскостью).

Что вы можете сделать, это преобразовать ваши координаты GPS в локальную опорную плоскость, а не отображать их напрямую. Если вы считаете свое местонахождение источником вашей системы координат, вы можете получить полярные координаты точек на плоскости земли относительно начала координат и истинного севера, используя большое расстояние круга (r) и подшипник (тета) между вашим местоположением и удаленная координата, а затем скрытая, что для декартовых координат с использованием (x, y) = (r * cos (theta), r * sin (theta)).

Лучше снова для вашего случая, как только у вас будет большой подшипник круга, вы можете просто ракурс r (расстояние). Это переместит точки ближе к вам как в x, так и в y, но они все равно будут иметь правильный относительный вес, вам просто нужно указать это как-то.

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

Эта страница содержит алгоритмы подшипников/расстояние: http://www.movable-type.co.uk/scripts/latlong.html

+0

спасибо за информацию подшипника, но я не уверен, что я буду использовать его в конце концов, я буду держать вас в курсе – amir

0

Я в конечном итоге решить ее с помощью уравнения GPS-координаты перехвачены с кругом я хочу все прогестогеновых появляться на, она прекрасно работает. Я нигде не использовал подшипники. вот код, если кому интересно:

- (void)convertGlobalCoordinatesToLocalCoordinates:(double)latitude x_p:(double *)x_p longitude:(double)longitude y_p:(double *)y_p { 

    double x = (latitude - _userLocation.coordinate.latitude) * kGpsToOpenglCoorRatio; 
    double y = (longitude - _userLocation.coordinate.longitude) * kGpsToOpenglCoorRatio; 

    y = (y == 0 ? y = 0.0001 : y); 
    x = (x == 0 ? x = 0.0001 : x); 

    double slope = x/ABS(y); 

    double outY = sqrt(kPoiRadius/(1+pow(slope,2))); 
    double outX = slope * outY; 

    if (y < 0) { 
     outY = -1 * outY; 
    } 

    *x_p = outX; 
    *y_p = outY; 
} 
+1

Наклон линии между координатами является относительным подшипник;) Вы можете видеть, как это работает на практике, но в зависимости от вашего физического местоположения отклонение, возникающее в результате приближения GPS к сетке, где единица X = единица Y и реальность может быть незначительной (экватор) или значительной (вблизи полюса). – dabhaid

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