QGIS API Documentation  3.23.0-Master (eb871beae0)
qgsabstractgeocoderlocatorfilter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsabstractgeocoderlocatorfilter.cpp
3  ---------------
4  Date : August 2020
5  Copyright : (C) 2020 by Nyall Dawson
6  Email : nyall dot dawson at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
17 #include "qgsgeocoder.h"
18 #include "qgsgeocodercontext.h"
19 
20 QgsAbstractGeocoderLocatorFilter::QgsAbstractGeocoderLocatorFilter( const QString &name, const QString &displayName, const QString &prefix, QgsGeocoderInterface *geocoder, const QgsRectangle &boundingBox )
21  : mName( name )
22  , mDisplayName( displayName )
23  , mPrefix( prefix )
24  , mGeocoder( geocoder )
25  , mBoundingBox( boundingBox )
26 {
27 
28 }
29 
31 {
32  return mName;
33 }
34 
36 {
37  return mDisplayName;
38 }
39 
41 {
42  return mPrefix;
43 }
44 
45 void QgsAbstractGeocoderLocatorFilter::fetchResults( const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback )
46 {
47  QgsGeocoderContext geocodeContext( context.transformContext );
48  geocodeContext.setAreaOfInterest( QgsGeometry::fromRect( context.targetExtent ) );
49  geocodeContext.setAreaOfInterestCrs( context.targetExtentCrs );
50 
51  const QList< QgsGeocoderResult > results = mGeocoder->geocodeString( string, geocodeContext, feedback );
52  for ( const QgsGeocoderResult &result : results )
53  {
54  if ( result.isValid() )
55  {
56  const QgsLocatorResult locatorRes = geocoderResultToLocatorResult( result );
57  emit resultFetched( locatorRes );
58  }
59  }
60 }
61 
63 {
64  const QgsGeocoderResult geocodeResult = locatorResultToGeocoderResult( result );
65  handleGeocodeResult( geocodeResult );
66 }
67 
69 {
70  return mGeocoder;
71 }
72 
74 {
75  const QVariantMap attrs = result.userData.toMap();
76  QgsGeocoderResult geocodeResult( attrs.value( QStringLiteral( "identifier" ) ).toString(),
77  attrs.value( QStringLiteral( "geom" ) ).value< QgsGeometry >(),
78  attrs.value( QStringLiteral( "crs" ) ).value< QgsCoordinateReferenceSystem >() );
79  geocodeResult.setAdditionalAttributes( attrs.value( QStringLiteral( "attributes" ) ).toMap() );
80  geocodeResult.setViewport( attrs.value( QStringLiteral( "viewport" ) ).value< QgsRectangle >() );
81  geocodeResult.setDescription( result.description );
82  geocodeResult.setGroup( result.group );
83  return geocodeResult;
84 }
85 
87 {
88  QVariantMap attrs;
89  attrs.insert( QStringLiteral( "identifier" ), result.identifier() );
90  attrs.insert( QStringLiteral( "geom" ), result.geometry() );
91  attrs.insert( QStringLiteral( "viewport" ), result.viewport() );
92  attrs.insert( QStringLiteral( "crs" ), result.crs() );
93  attrs.insert( QStringLiteral( "attributes" ), result.additionalAttributes() );
94  QgsLocatorResult res( this, result.identifier(), attrs );
95  res.description = result.description();
96  res.group = result.group();
97  return res;
98 }
99 
void fetchResults(const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback) override
QgsAbstractGeocoderLocatorFilter(const QString &name, const QString &displayName, const QString &prefix, QgsGeocoderInterface *geocoder, const QgsRectangle &boundingBox=QgsRectangle())
Constructor for QgsAbstractGeocoderLocatorFilter.
void triggerResult(const QgsLocatorResult &result) override
QgsGeocoderInterface * geocoder() const
Returns the geocoder attached to the filter.
QgsGeocoderResult locatorResultToGeocoderResult(const QgsLocatorResult &result) const
Converts a locator result to a geocoder result.
QgsLocatorResult geocoderResultToLocatorResult(const QgsGeocoderResult &result)
Converts a geocoder result to a locator result.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:45
Encapsulates the context of a geocoding operation.
void setAreaOfInterestCrs(const QgsCoordinateReferenceSystem &crs)
Sets the crs for the area of interest, which can be used to indicate the desired geographic area wher...
void setAreaOfInterest(const QgsGeometry &area)
Sets the optional area of interest, which can be used to indicate the desired geographic area where g...
Interface for geocoders.
Definition: qgsgeocoder.h:37
virtual QList< QgsGeocoderResult > geocodeString(const QString &string, const QgsGeocoderContext &context, QgsFeedback *feedback=nullptr) const
Geocodes a string.
Definition: qgsgeocoder.cpp:29
Represents a matching result from a geocoder search.
QString description() const
Returns the optional description for the result.
void setAdditionalAttributes(const QVariantMap &attributes)
Setss additional attributes generated during the geocode, which may be added to features being geocod...
QString group() const
Returns the optional group value for the result.
QString identifier() const
Returns the identifier string for the result.
QgsRectangle viewport() const
Returns the suggested viewport for the result, which reflects a recommended map extent for displaying...
void setDescription(const QString &description)
Sets an optional description for the result.
QgsCoordinateReferenceSystem crs() const
Returns the coordinate reference system for the calculated geometry().
void setGroup(const QString &group)
Sets the optional group value for the result.
void setViewport(const QgsRectangle &viewport)
Sets the suggested viewport for the result, which reflects a recommended map extent for displaying th...
QgsGeometry geometry() const
Returns the resultant geometry resulting from the geocoding operation.
QVariantMap additionalAttributes() const
Contains additional attributes generated during the geocode, which may be added to features being geo...
static QgsGeometry fromRect(const QgsRectangle &rect) SIP_HOLDGIL
Creates a new geometry from a QgsRectangle.
Encapsulates the properties relating to the context of a locator search.
QgsCoordinateTransformContext transformContext
Coordinate transform context, to use whenever performing coordinate transformations inside a locator.
QgsCoordinateReferenceSystem targetExtentCrs
Coordinate reference system for the map extent variable.
QgsRectangle targetExtent
Map extent to target in results.
Encapsulates properties of an individual matching result found by a QgsLocatorFilter.
QVariant userData
Custom reference or other data set by the filter.
QString description
Descriptive text for result.
QString group
Group the results by categories If left as empty string, this means that results are all shown withou...
A rectangle specified with double values.
Definition: qgsrectangle.h:42