40 if ( mapSettings == mMapSettings )
53 QgsDebugMsg( QStringLiteral(
"Unable to use IdentifyKit without mapSettings property set." ) );
60 QgsFeatureList featureList = identifyVectorLayer( layer, mapPoint );
61 for (
const QgsFeature &feature : featureList )
65 QgsDebugMsg( QStringLiteral(
"IdentifyKit identified %1 results for layer %2" ).arg( results.count() ).arg( layer->
name() ) );
79 for (
const QgsFeature &feature : featureList )
84 if ( mIdentifyMode == IdentifyMode::TopDownStopAtFirst && !results.isEmpty() )
86 QgsDebugMsg( QStringLiteral(
"IdentifyKit identified %1 results with TopDownStopAtFirst mode." ).arg( results.count() ) );
91 QgsDebugMsg( QStringLiteral(
"IdentifyKit identified %1 results" ).arg( results.count() ) );
102 double distMinPoint = 1e10, distMinLine = 1e10, distMinPolygon = 1e10;
103 int iMinPoint = -1, iMinLine = -1, iMinPolygon = -1;
104 for (
int i = 0; i < results.count(); ++i )
119 double dist = geom.distance( mapPointGeom );
123 if ( dist < distMinPoint )
131 if ( dist < distMinLine )
139 if ( dist < distMinPolygon )
142 distMinPolygon = dist;
151 if ( iMinPoint != -1 && distMinPoint <= searchRadius )
152 return results.at( iMinPoint );
153 else if ( iMinLine != -1 && distMinLine <= searchRadius )
154 return results.at( iMinLine );
155 else if ( iMinPolygon != -1 )
156 return results.at( iMinPolygon );
164 return _closestFeature( results, mMapSettings->
mapSettings(), point, searchRadiusMU() );
185 double searchRadius = searchRadiusMU();
193 r = toLayerCoordinates( layer, r );
207 QgsDebugMsg( QStringLiteral(
"Invalid point, proceed without a found features." ) );
223 for (
const QgsFeature &feature : featureList )
227 if ( filter && !renderer->
willRenderFeature( const_cast<QgsFeature &>( feature ), context ) )
230 results.append( feature );
241 double QgsQuickIdentifyKit::searchRadiusMU(
const QgsRenderContext &context )
const 246 double QgsQuickIdentifyKit::searchRadiusMU()
const 249 return searchRadiusMU( context );
259 return mSearchRadiusMm;
273 return mFeaturesLimit;
278 if ( mFeaturesLimit == limit )
281 mFeaturesLimit = limit;
void featuresLimitChanged()
Maximum number of features returned from the QgsQuickIdentifyKit::identify()
void setSearchRadiusMm(double searchRadiusMm)
Search radius for the identify functions.
Wrapper for iterator of features from vector data provider or vector layer.
QgsProject project
A project property should be used as a primary source of project all other components in the applicat...
A rectangle specified with double values.
Base class for all map layer types.
int featuresLimit() const
Maximum number of features returned from the QgsQuickIdentifyKit::identify()
Depends on scale if feature will be rendered (rule based )
OperationResult transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection direction=QgsCoordinateTransform::ForwardTransform, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
void setFeaturesLimit(int limit)
Maximum number of features returned from the QgsQuickIdentifyKit::identify()
void setXMaximum(double x)
Set the maximum x value.
Use exact geometry intersection (slower) instead of bounding boxes.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
Features may be filtered, i.e. some features may not be rendered (categorized, rule based ...
QList< QgsFeature > QgsFeatureList
A class to represent a 2D point.
QgsMapSettings mapSettings() const
Clone map settings.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
double searchRadiusMm() const
Search radius for the identify functions.
bool isInScaleRange(double scale) const
Tests whether the layer should be visible at the specified scale.
QgsMapLayer::LayerFlags flags() const
Returns the flags for this layer.
A geometry is the spatial representation of a feature.
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
The QgsQuickMapSettings class encapsulates QgsMapSettings class to offer settings of configuration of...
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
void setMapSettings(QgsQuickMapSettings *mapSettings)
Map settings.
The QgsMapSettings class contains configuration for rendering of the map.
QgsCoordinateTransform layerTransform(const QgsMapLayer *layer) const
Returns the coordinate transform from layer's CRS to destination CRS.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
void searchRadiusMmChanged()
Search radius for the identify functions.
double scale() const
Returns the calculated map scale.
void setYMinimum(double y)
Set the minimum y value.
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
QgsFeatureRenderer * renderer()
Returns renderer.
double mapUnitsPerPixel() const
Returns current map units per pixel.
const QgsMapToPixel & mapToPixel() const
QgsQuickMapSettings * mapSettings() const
Map settings.
QgsExpressionContext & expressionContext()
Gets the expression context.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Contains information about the context of a rendering operation.
const QgsMapToPixel & mapToPixel() const
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
QgsFeature feature
Feature that belongs to layer.
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
void setYMaximum(double y)
Set the maximum y value.
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
Q_INVOKABLE QgsQuickFeatureLayerPair identifyOne(const QPointF &point, QgsVectorLayer *layer=nullptr)
Gets the closest feature to the point within the search radius.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsVectorLayer layer
Vector layer to which the feature belongs.
QgsFeatureRequest & setLimit(long limit)
Set the maximum number of features to request.
void mapSettingsChanged()
Map settings.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
Q_INVOKABLE QgsQuickFeatureLayerPairs identify(const QPointF &point, QgsVectorLayer *layer=nullptr)
Gets all features in the search radius.
QList< QgsQuickFeatureLayerPair > QgsQuickFeatureLayerPairs
virtual bool willRenderFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns whether the renderer will render a feature or not.
Custom exception class for Coordinate Reference System related exceptions.
Pair of QgsFeature and QgsVectorLayer.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
bool nextFeature(QgsFeature &f)
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
Represents a vector layer which manages a vector based data sets.
QgsQuickIdentifyKit(QObject *parent=nullptr)
Constructor of new identify kit.
If the layer is identifiable using the identify map tool and as a WMS layer.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
virtual QgsFeatureRenderer::Capabilities capabilities()
Returns details about internals of this renderer.
static QgsGeometry fromPointXY(const QgsPointXY &point)
Creates a new geometry from a QgsPointXY object.
void setXMinimum(double x)
Set the minimum x value.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.