QGIS API Documentation  3.25.0-Master (10b47c2603)
qgsgeocoderlocatorfilter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgeocoderlocatorfilter.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 "qgsmapcanvas.h"
18 #include "qgsmessagelog.h"
19 #include "qgsgeocoderresult.h"
20 
21 QgsGeocoderLocatorFilter::QgsGeocoderLocatorFilter( const QString &name, const QString &displayName, const QString &prefix, QgsGeocoderInterface *geocoder, QgsMapCanvas *canvas, const QgsRectangle &boundingBox )
22  : QgsAbstractGeocoderLocatorFilter( name, displayName, prefix, geocoder, boundingBox )
23  , mCanvas( canvas )
24 {
25 
26 }
27 
29 {
30  QgsLocatorFilter *filter = new QgsGeocoderLocatorFilter( name(), displayName(), prefix(), geocoder(), mCanvas );
31  filter->setFetchResultsDelay( fetchResultsDelay() );
32  return filter;
33 }
34 
35 void QgsGeocoderLocatorFilter::handleGeocodeResult( const QgsGeocoderResult &result )
36 {
37  const QgsCoordinateTransform ct( result.crs(), mCanvas->mapSettings().destinationCrs(), mCanvas->mapSettings().transformContext() );
38  QgsGeometry g = result.geometry();
39  const QgsRectangle viewport = result.viewport();
40  try
41  {
42  QgsRectangle bounds;
43  g.transform( ct );
44  if ( viewport.isNull() )
45  {
46  bounds = g.boundingBox();
47  }
48  else
49  {
50  QgsCoordinateTransform extentTransform = ct;
51  extentTransform.setBallparkTransformsAreAppropriate( true );
52  bounds = extentTransform.transformBoundingBox( viewport );
53  }
54  mCanvas->zoomToFeatureExtent( bounds );
55 
56  mCanvas->flashGeometries( QList< QgsGeometry >() << g );
57  }
58  catch ( QgsCsException & )
59  {
60  QgsMessageLog::logMessage( tr( "Could not transform result to canvas CRS" ) );
61  }
62 }
63 
An abstract base class which implements a locator filter populated from a QgsGeocoderInterface.
QgsGeocoderInterface * geocoder() const
Returns the geocoder attached to the filter.
Class for doing transforms between two map coordinate systems.
void setBallparkTransformsAreAppropriate(bool appropriate)
Sets whether approximate "ballpark" results are appropriate for this coordinate transform.
QgsRectangle transformBoundingBox(const QgsRectangle &rectangle, Qgis::TransformDirection direction=Qgis::TransformDirection::Forward, bool handle180Crossover=false) const SIP_THROW(QgsCsException)
Transforms a rectangle from the source CRS to the destination CRS.
Custom exception class for Coordinate Reference System related exceptions.
Definition: qgsexception.h:66
Interface for geocoders.
Definition: qgsgeocoder.h:37
QgsLocatorFilter * clone() const override SIP_FACTORY
QgsGeocoderLocatorFilter(const QString &name, const QString &displayName, const QString &prefix, QgsGeocoderInterface *geocoder, QgsMapCanvas *canvas, const QgsRectangle &boundingBox=QgsRectangle())
Constructor for QgsGeocoderLocatorFilter.
Represents a matching result from a geocoder search.
QgsRectangle viewport() const
Returns the suggested viewport for the result, which reflects a recommended map extent for displaying...
QgsCoordinateReferenceSystem crs() const
Returns the coordinate reference system for the calculated geometry().
QgsGeometry geometry() const
Returns the resultant geometry resulting from the geocoding operation.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
Qgis::GeometryOperationResult transform(const QgsCoordinateTransform &ct, Qgis::TransformDirection direction=Qgis::TransformDirection::Forward, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
Abstract base class for filters which collect locator results.
void setFetchResultsDelay(int delay)
Sets a delay (in milliseconds) for the filter to wait prior to fetching results.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:90
void flashGeometries(const QList< QgsGeometry > &geometries, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem(), const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of geometries to flash within the canvas.
void zoomToFeatureExtent(QgsRectangle &rect)
Zooms to feature extent.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
A rectangle specified with double values.
Definition: qgsrectangle.h:42
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
Definition: qgsrectangle.h:479