Я нашел ваш пост, борясь с той же проблемой.Для меня код QGeoServiceProvider внезапно перестал работать с OpenStreetmap.Я быстро опробовал API «здесь», и это, кажется, работает с точно таким же кодом.После некоторого быстрого осмотра Wireshark я легко нашел проблему.
QGeoServiceProvider пытается подключиться к API OpenStreetMap по этому адресу: http://nominatim.openstreetmap.org, где он перенаправляется через HTTP 303 на https://nominatim.openstreetmap.org. По-видимому, QGeoServiceProvider не может обработатьэто перенаправление правильно.Я исправил это, указав новый URL в параметре osm.geocoding.host .Используя ваш код это будет выглядеть так:
#include <QApplication>
#include <QGeoAddress>
#include <QGeoCodingManager>
#include <QGeoCoordinate>
#include <QGeoLocation>
#include <QGeoServiceProvider>
#include <QtDebug>
int main( int argc, char **argv)
{
QCoreApplication app( argc, argv );
//Add this
QMap<QString,QVariant> params;
params["osm.geocoding.host"] = "https://nominatim.openstreetmap.org";
QGeoServiceProvider geoSrv( "osm", params );
QGeoCodingManager *geoCoder = geoSrv.geocodingManager();
QGeoAddress addr;
addr.setCountry( "China" );
QGeoCodeReply *geoCode = geoCoder->geocode( addr );
if ( geoCode->error() )
qDebug() << "error";
qDebug() << geoCode->locations().length();
return app.exec();
}
Надеюсь, это поможет!