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
相关产品推荐
相关产品推荐

