39 QGeoServiceProvider::Error *error,
41: QGeoCodingManagerEngine(parameters), m_networkManager(
new QNetworkAccessManager(
this))
43 if (parameters.contains(QStringLiteral(
"osm.useragent")))
44 m_userAgent = parameters.value(QStringLiteral(
"osm.useragent")).toString().toLatin1();
46 m_userAgent =
"Qt Location based application";
48 if (parameters.contains(QStringLiteral(
"osm.geocoding.host")))
49 m_urlPrefix = parameters.value(QStringLiteral(
"osm.geocoding.host")).toString().toLatin1();
51 m_urlPrefix = QStringLiteral(
"https://nominatim.openstreetmap.org");
53 if (parameters.contains(QStringLiteral(
"osm.geocoding.debug_query")))
54 m_debugQuery = parameters.value(QStringLiteral(
"osm.geocoding.debug_query")).toBool();
55 if (parameters.contains(QStringLiteral(
"osm.geocoding.include_extended_data")))
56 m_includeExtraData = parameters.value(QStringLiteral(
"osm.geocoding.include_extended_data")).toBool();
58 *error = QGeoServiceProvider::NoError;
75 QNetworkRequest request;
76 request.setRawHeader(
"User-Agent", m_userAgent);
78 QUrl url(QString(
"%1/search").arg(m_urlPrefix));
80 query.addQueryItem(QStringLiteral(
"q"), address);
81 query.addQueryItem(QStringLiteral(
"format"), QStringLiteral(
"json"));
82 query.addQueryItem(QStringLiteral(
"accept-language"), locale().name().left(2));
84 if (bounds.type() != QGeoShape::UnknownType) {
85 query.addQueryItem(QStringLiteral(
"viewbox"), boundingBoxToLtrb(bounds.boundingGeoRectangle()));
86 query.addQueryItem(QStringLiteral(
"bounded"), QStringLiteral(
"1"));
88 query.addQueryItem(QStringLiteral(
"polygon_geojson"), QStringLiteral(
"1"));
89 query.addQueryItem(QStringLiteral(
"addressdetails"), QStringLiteral(
"1"));
91 query.addQueryItem(QStringLiteral(
"limit"), QString::number(limit));
96 QNetworkReply *reply = m_networkManager->get(request);
98 QGeoCodeReplyOsm *geocodeReply =
new QGeoCodeReplyOsm(reply, m_includeExtraData,
this);
100 connect(geocodeReply, &QGeoCodeReplyOsm::finished,
101 this, &QGeoCodingManagerEngineOsm::replyFinished);
102 connect(geocodeReply, &QGeoCodeReplyOsm::errorOccurred,
103 this, &QGeoCodingManagerEngineOsm::replyError);
109 const QGeoShape &bounds)
113 QNetworkRequest request;
114 request.setRawHeader(
"User-Agent", m_userAgent);
116 QUrl url(QString(
"%1/reverse").arg(m_urlPrefix));
118 query.addQueryItem(QStringLiteral(
"format"), QStringLiteral(
"json"));
119 query.addQueryItem(QStringLiteral(
"accept-language"), locale().name().left(2));
120 query.addQueryItem(QStringLiteral(
"lat"), QString::number(coordinate.latitude()));
121 query.addQueryItem(QStringLiteral(
"lon"), QString::number(coordinate.longitude()));
122 query.addQueryItem(QStringLiteral(
"zoom"), QStringLiteral(
"18"));
123 query.addQueryItem(QStringLiteral(
"addressdetails"), QStringLiteral(
"1"));
128 QNetworkReply *reply = m_networkManager->get(request);
130 QGeoCodeReplyOsm *geocodeReply =
new QGeoCodeReplyOsm(reply, m_includeExtraData,
this);
132 connect(geocodeReply, &QGeoCodeReplyOsm::finished,
133 this, &QGeoCodingManagerEngineOsm::replyFinished);
134 connect(geocodeReply, &QGeoCodeReplyOsm::errorOccurred,
135 this, &QGeoCodingManagerEngineOsm::replyError);