You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QGeoCoordinate的azimuthTo与distanceTo返回值始终为0的问题求助

问题分析与解决方案

你遇到的问题根源很明确:你创建的geo2对象没有设置任何经纬度值,处于无效状态,调用无效坐标的azimuthTo方法自然会返回0。

先看你代码里的核心问题:

QGeoCoordinate geo2;

默认构造的QGeoCoordinate对象,纬度和经度都是未定义的,调用geo2.isValid()会直接返回false。当用无效坐标执行方位角或距离计算时,Qt的QGeoCoordinate会默认返回0作为无效计算的结果。

修正后的代码示例

你需要给geo2设置有效的经纬度值,比如:

#include <QGeoCoordinate>
#include <iostream>
#include <QString>

using namespace std;

int main() {
    QGeoCoordinate geo;
    geo.setLatitude(90);
    geo.setLongitude(90);
    // 给geo2设置有效的经纬度,示例设为(0, 0)
    QGeoCoordinate geo2(0, 0);

    if (!geo.isValid()) {
        cout << "invalid coordinate" << endl;
    }
    // 建议加上对geo2的有效性检查
    if (!geo2.isValid()) {
        cout << "geo2 is invalid coordinate" << endl;
    }

    QString str = QString::number(static_cast<float>(geo2.azimuthTo(geo)));
    cout << "Azimuth: " << str.toStdString() << endl;
    return 0;
}

关键注意事项

  • 调用azimuthTo和distanceTo之前,必须确保两个QGeoCoordinate对象都是有效的(可以用isValid()方法快速检查)。
  • 默认构造的QGeoCoordinate是无效的,必须通过带参数的构造函数(QGeoCoordinate(lat, lon)),或者setLatitude()+setLongitude()组合来设置有效值。
  • 纬度的有效范围是[-90, 90],经度是[-180, 180],超出这个范围的话,isValid()也会返回false。

这样修改后,你就能得到正确的方位角计算结果了。

内容的提问来源于stack exchange,提问作者Massimiliano Di Cavio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:28:15