2 个 GPS 坐标之间的角度

发布于 2024-09-25 19:18:45 字数 116 浏览 4 评论 0原文

我正在另一个使用 AR 的 iPhone 应用程序中工作,我正在创建自己的框架,但我在尝试获取第二个坐标相对于当前设备位置的角度时遇到了麻烦,任何人都知道一个可以的好资源帮我解决这个问题吗?

提前致谢!

I'm working in another iPhone App that uses AR, and I'm creating my own framework, but I'm having trouble trying to get the angle of a second coordinate relative to the current device position, anyone know a good resource that could help me with this?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心舞飞扬 2024-10-02 19:18:45

如果这两点距离足够近,并且远离极点,您可以使用一些简单的三角函数:

float dy = lat2 - lat1;
float dx = cosf(M_PI/180*lat1)*(long2 - long1);
float angle = atan2f(dy, dx);

编辑:我忘了提及 latN 和 longN - 因此dxdy — 可以以度或弧度为单位,只要不混合单位即可。然而,angle 总是以弧度形式返回。当然,乘以 180/M_PI 就可以恢复到度数。

If the two points are close enough together, and well away from the poles, you can use some simple trig:

float dy = lat2 - lat1;
float dx = cosf(M_PI/180*lat1)*(long2 - long1);
float angle = atan2f(dy, dx);

EDIT: I forgot to mention that latN and longN — and therefore dx and dy — can be in degrees or radians, so long as you don't mix units. angle, however, will always come back in radians. Of course, you can get it back to degrees if you multiply by 180/M_PI.

彩扇题诗 2024-10-02 19:18:45

这是此代码的 Android 版本

import com.google.android.maps.GeoPoint;
    public double calculateAngle(GeoPoint startPoint, GeoPoint endPoint) {
        double lat1 = startPoint.getLatitudeE6() / 1E6;
        double lat2 = endPoint.getLatitudeE6() / 1E6;
        double long2 = startPoint.getLongitudeE6() / 1E6;
        double long1 = endPoint.getLongitudeE6() / 1E6;
        double dy = lat2 - lat1;
        double dx = Math.cos(Math.PI / 180 * lat1) * (long2 - long1);
        double angle = Math.atan2(dy, dx);
        return angle;
    }

Here is the android version of this code

import com.google.android.maps.GeoPoint;
    public double calculateAngle(GeoPoint startPoint, GeoPoint endPoint) {
        double lat1 = startPoint.getLatitudeE6() / 1E6;
        double lat2 = endPoint.getLatitudeE6() / 1E6;
        double long2 = startPoint.getLongitudeE6() / 1E6;
        double long1 = endPoint.getLongitudeE6() / 1E6;
        double dy = lat2 - lat1;
        double dx = Math.cos(Math.PI / 180 * lat1) * (long2 - long1);
        double angle = Math.atan2(dy, dx);
        return angle;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文