40 QGeoServiceProvider::Error *error,
42: QGeoCodingManagerEngine(parameters), m_networkManager(
new QNetworkAccessManager(
this))
44 if (parameters.contains(QStringLiteral(
"osm.useragent")))
45 m_userAgent = parameters.value(QStringLiteral(
"osm.useragent")).toString().toLatin1();
47 m_userAgent =
"Qt Location based application";
49 if (parameters.contains(QStringLiteral(
"osm.geocoding.host")))
50 m_urlPrefix = parameters.value(QStringLiteral(
"osm.geocoding.host")).toString().toLatin1();
52 m_urlPrefix = QStringLiteral(
"https://nominatim.openstreetmap.org");
54 if (parameters.contains(QStringLiteral(
"osm.geocoding.debug_query")))
55 m_debugQuery = parameters.value(QStringLiteral(
"osm.geocoding.debug_query")).toBool();
56 if (parameters.contains(QStringLiteral(
"osm.geocoding.include_extended_data")))
57 m_includeExtraData = parameters.value(QStringLiteral(
"osm.geocoding.include_extended_data")).toBool();
59 *error = QGeoServiceProvider::NoError;
76 QNetworkRequest request;
77 request.setRawHeader(
"User-Agent", m_userAgent);
79 QUrl url(QString(
"%1/search").arg(m_urlPrefix));
81 query.addQueryItem(QStringLiteral(
"q"), address);
82 query.addQueryItem(QStringLiteral(
"format"), QStringLiteral(
"json"));
83 query.addQueryItem(QStringLiteral(
"accept-language"), locale().name().left(2));
85 if (bounds.type() != QGeoShape::UnknownType) {
86 query.addQueryItem(QStringLiteral(
"viewbox"), boundingBoxToLtrb(bounds.boundingGeoRectangle()));
87 query.addQueryItem(QStringLiteral(
"bounded"), QStringLiteral(
"1"));
89 query.addQueryItem(QStringLiteral(
"polygon_geojson"), QStringLiteral(
"1"));
90 query.addQueryItem(QStringLiteral(
"addressdetails"), QStringLiteral(
"1"));
92 query.addQueryItem(QStringLiteral(
"limit"), QString::number(limit));
97 QNetworkReply *reply = m_networkManager->get(request);
99 QGeoCodeReplyOsm *geocodeReply =
new QGeoCodeReplyOsm(reply, m_includeExtraData,
this);
101 connect(geocodeReply, &QGeoCodeReplyOsm::finished,
102 this, &QGeoCodingManagerEngineOsm::replyFinished);
103 connect(geocodeReply, &QGeoCodeReplyOsm::errorOccurred,
104 this, &QGeoCodingManagerEngineOsm::replyError);
110 const QGeoShape &bounds)
114 QNetworkRequest request;
115 request.setRawHeader(
"User-Agent", m_userAgent);
117 QUrl url(QString(
"%1/reverse").arg(m_urlPrefix));
119 query.addQueryItem(QStringLiteral(
"format"), QStringLiteral(
"json"));
120 query.addQueryItem(QStringLiteral(
"accept-language"), locale().name().left(2));
121 query.addQueryItem(QStringLiteral(
"lat"), QString::number(coordinate.latitude()));
122 query.addQueryItem(QStringLiteral(
"lon"), QString::number(coordinate.longitude()));
123 query.addQueryItem(QStringLiteral(
"zoom"), QStringLiteral(
"18"));
124 query.addQueryItem(QStringLiteral(
"addressdetails"), QStringLiteral(
"1"));
129 QNetworkReply *reply = m_networkManager->get(request);
131 QGeoCodeReplyOsm *geocodeReply =
new QGeoCodeReplyOsm(reply, m_includeExtraData,
this);
133 connect(geocodeReply, &QGeoCodeReplyOsm::finished,
134 this, &QGeoCodingManagerEngineOsm::replyFinished);
135 connect(geocodeReply, &QGeoCodeReplyOsm::errorOccurred,
136 this, &QGeoCodingManagerEngineOsm::replyError);