3

中的opengl字我有一个gps坐标列表(long,lat),我有我的当前位置(long,lat)。 我发现通过减去两个坐标,我找到了我的位置的相对坐标,以及我在AR应用程序中用于绘制opengl世界中的pois的坐标。将gps坐标转换为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使用球形(ish)坐标系,并且您试图将其直接映射到笛卡尔坐标系(一个平面)。

你可以做的是将你的GPS坐标转换为本地参考平面,而不是直接映射它们。如果将自己的位置视为坐标系的原点,则可以通过使用位置与坐标系之间的大圆距(r)和方位(θ)来获取地平面上的点相对于原点和真北的极坐标使用(x,y)=(r * cos(theta),r * sin(theta))将该坐标转换成笛卡尔坐标。

对您的情况再次更好,一旦您拥有大圆圈轴承,就可以缩短r(距离)。这会在x和y两个点上更接近你,但它们仍然处于正确的相对方位,你只需要以某种方式指出这一点。

另一种方法是缩放可视化对象的大小,以便它们随距离变大以补偿视角。这样你就可以直接使用正确的位置和方向。

这个页面有轴承/距离算法:http://www.movable-type.co.uk/scripts/latlong.html

+0

感谢轴承的信息,但我不知道我最终会使用它,我会及时向大家发布 – amir 2012-01-10 15:10:52

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 2012-01-12 12:09:41