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