QGeoCodingManager не выдает ошибок, но не дает результатов - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь получить QGeoLocation.Моя версия Qt - 5.7.1, кстати, и я запускаю ее на Debian.

Я видел этот пост , как получить широту / долготу с одного географического адреса, используя Qt c ++ на окнах?

Я скопировал и вставил рабочее решение из ответа Шеффа, но все равно получил не ошибку и 0 местоположений.Имеет ли это отношение к моей настройке / среде?

Этот более короткий код имеет тот же эффект:

#include <QApplication>
#include <QGeoAddress>
#include <QGeoCodingManager>
#include <QGeoCoordinate>
#include <QGeoLocation>
#include <QGeoServiceProvider>
#include <QtDebug>

int main( int argc, char **argv)
{
    QCoreApplication app( argc, argv );

    QGeoServiceProvider geoSrv( "osm" );
    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();
}

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вместо использования

QGeoServiceProvider geoSrv( "osm", params );
QGeoCodingManager *geoCoder = geoSrv.geocodingManager();

Если вы используете указатель вместо:

QGeoServiceProvider* geoSrv = new QGeoServiceProvider( "osm", params );
QGeoCodingManager *geoCoder = geoSrv->geocodingManager();

Это должно работать (по крайней мере, для меня)

0 голосов
/ 20 июня 2018

Я нашел ваш пост, борясь с той же проблемой.Для меня код 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();
}

Надеюсь, это поможет!

...