3

我有一个 gps 坐标列表 (long,lat),并且我有我当前的位置 (long,lat)。我发现通过减去两个坐标,我找到了我的位置的相对坐标,并且我在我的 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 使用球面(ish)坐标系,而您正试图将其直接映射到笛卡尔坐标系(平面)。

您可以做的是将您的 GPS 坐标转换为本地参考平面,而不是直接映射它们。如果您将自己的位置视为坐标系的原点,则可以通过使用您所在位置和远程坐标,然后使用 (x,y) = (r*cos(theta), r*sin(theta)) 将其转换为笛卡尔坐标。

对你的情况来说再好不过了,一旦你有了大圆方位,你就可以缩短 r (距离)。这将在 x 和 y 中将点拖到更靠近您的位置,但它们仍将处于正确的相对方位,您只需要以某种方式指出这一点。

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

此页面具有方位/距离算法:http ://www.movable-type.co.uk/scripts/latlong.html

于 2012-01-10T14:32:04.680 回答
0

我最终使用与我希望所有 pois 出现的圆圈截取的 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 回答