3

私はGPS座標(経度、緯度)のリストを持っており、現在の位置(経度、緯度)を持っています。2 つの座標を減算することで、自分の位置からの相対座標を見つけ、その座標を AR アプリで使用して、opengl の世界で pois を描画することがわかりました。

問題は、遠く離れた座標がまだ「見る」には遠すぎるということです。そのため、すべてを自分の位置に近づけるための方程式が必要ですが、元の相対位置が必要です。

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);

    } 

「距離制限」を与えるために平方根を適用しようとしましたが、元の位置に比べて位置がめちゃくちゃになりました。

4

2 に答える 2

3

これは、GPS が球状の (っぽい) 座標系を使用しており、それをデカルト座標系 (平面) に直接マップしようとしていることが原因である可能性があります。

あなたができることは、GPS座標を直接マッピングするのではなく、ローカル基準面に変換することです. 自分の位置を座標系の原点と見なす場合、原点と真北を基準とした地平面上の点の極座標を取得するには、位置と位置の間の大円距離 (r) と方位 (シータ) を使用します。 (x,y) = (r*cos(theta), r*sin(theta)) を使用してデカルト座標に変換します。

あなたの場合は、大円方位を取得したら、r (距離) を縮めることができます。これにより、ポイントが x と y の両方であなたの近くにドラッグされますが、それらは依然として正しい相対方位にあり、何らかの方法でこれを示す必要があります。

もう 1 つの方法は、視覚化するオブジェクトのサイズをスケーリングして、遠近感を補正するために距離が大きくなるようにすることです。このようにして、正しい位置と向きを直接使用できます。

このページには方位/距離アルゴリズムがあります: http://www.movable-type.co.uk/scripts/latlong.html

于 2012-01-10T14:32:04.680 に答える
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;
}
于 2012-01-11T07:14:51.090 に答える