58 #include <QMouseEvent>
67 , mLastMapUnitsPerPixel( -1.0 )
68 , mCoordinatePrecision( 6 )
100 return identify( x, y, mode, QList<QgsMapLayer *>(), layerType, identifyContext );
110 return identify( geometry, mode, QList<QgsMapLayer *>(), layerType, identifyContext );
115 QList<IdentifyResult> results;
117 mLastGeometry = geometry;
132 int x = canvasPt.x(), y = canvasPt.y();
133 QList<IdentifyResult> results =
identify( x, y,
TopDownAll, layerList, layerType, identifyContext );
134 QPoint globalPos =
mCanvas->mapToGlobal( QPoint( x + 5, y + 5 ) );
137 else if ( mode ==
ActiveLayer && layerList.isEmpty() )
143 emit
identifyMessage( tr(
"No active layer. To identify features, you must choose an active layer." ) );
149 QApplication::setOverrideCursor( Qt::WaitCursor );
151 identifyLayer( &results, layer, mLastGeometry, mLastExtent, mLastMapUnitsPerPixel, layerType, identifyContext );
155 QApplication::setOverrideCursor( Qt::WaitCursor );
158 if ( layerList.isEmpty() )
161 layerCount = layerList.count();
164 for (
int i = 0; i < layerCount; i++ )
168 if ( layerList.isEmpty() )
171 layer = layerList.value( i );
179 if (
identifyLayer( &results, layer, mLastGeometry, mLastExtent, mLastMapUnitsPerPixel, layerType, identifyContext ) )
190 QApplication::restoreOverrideCursor();
197 mOverrideCanvasSearchRadius = searchRadiusMapUnits;
202 mOverrideCanvasSearchRadius = -1;
224 return identifyRasterLayer( results, qobject_cast<QgsRasterLayer *>( layer ), geometry, viewExtent, mapUnitsPerPixel, identifyContext );
228 return identifyVectorLayer( results, qobject_cast<QgsVectorLayer *>( layer ), geometry, identifyContext );
232 return identifyMeshLayer( results, qobject_cast<QgsMeshLayer *>( layer ), geometry, identifyContext );
236 return identifyVectorTileLayer( results, qobject_cast<QgsVectorTileLayer *>( layer ), geometry, identifyContext );
240 return identifyPointCloudLayer( results, qobject_cast<QgsPointCloudLayer *>( layer ), geometry, identifyContext );
265 double searchRadius = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
268 QList<QgsMeshDatasetIndex> datasetIndexList;
275 const QgsDateTimeRange &time = identifyContext.
temporalRange();
276 if ( activeScalarGroup >= 0 )
278 if ( activeVectorGroup >= 0 && activeVectorGroup != activeScalarGroup )
281 for (
int groupIndex : allGroup )
283 if ( groupIndex != activeScalarGroup && groupIndex != activeVectorGroup )
290 if ( activeScalarGroup >= 0 )
292 if ( activeVectorGroup >= 0 && activeVectorGroup != activeScalarGroup )
296 for (
int groupIndex : allGroup )
298 if ( groupIndex != activeScalarGroup && groupIndex != activeVectorGroup )
301 datasetIndexList.append( groupIndex );
309 if ( !index.isValid() )
313 QMap< QString, QString > derivedAttributes;
315 QMap<QString, QString> attribute;
319 const double scalar = scalarValue.
scalar();
320 attribute.insert( tr(
"Scalar Value" ), std::isnan( scalar ) ? tr(
"no data" ) : QString::number( scalar ) );
326 const double vectorX = vectorValue.
x();
327 const double vectorY = vectorValue.
y();
328 if ( std::isnan( vectorX ) || std::isnan( vectorY ) )
329 attribute.insert( tr(
"Vector Value" ), tr(
"no data" ) );
332 attribute.insert( tr(
"Vector Magnitude" ), QString::number( vectorValue.
scalar() ) );
333 derivedAttributes.insert( tr(
"Vector x-component" ), QString::number( vectorY ) );
334 derivedAttributes.insert( tr(
"Vector y-component" ), QString::number( vectorX ) );
341 derivedAttributes.insert( tr(
"Time Step" ), layer->
formatTime( meta.
time() ) );
342 derivedAttributes.insert( tr(
"Source" ), groupMeta.
uri() );
344 QString resultName = groupMeta.
name();
345 if ( isTemporal && ( index.group() == activeScalarGroup || index.group() == activeVectorGroup ) )
346 resultName.append( tr(
" (active)" ) );
353 results->append( result );
356 QMap<QString, QString> derivedGeometry;
361 derivedGeometry.insert( tr(
"Snapped Vertex Position X" ), QString::number( vertexPoint.
x() ) );
362 derivedGeometry.insert( tr(
"Snapped Vertex Position Y" ), QString::number( vertexPoint.
y() ) );
368 derivedGeometry.insert( tr(
"Face Centroid X" ), QString::number( faceCentroid.
x() ) );
369 derivedGeometry.insert( tr(
"Face Centroid Y" ), QString::number( faceCentroid.
y() ) );
375 derivedGeometry.insert( tr(
"Point on Edge X" ), QString::number( pointOnEdge.
x() ) );
376 derivedGeometry.insert( tr(
"Point on Edge Y" ), QString::number( pointOnEdge.
y() ) );
384 results->append( result );
391 Q_UNUSED( identifyContext )
403 QMap< QString, QString > commonDerivedAttributes;
406 bool isPointOrRectangle;
411 isPointOrRectangle =
true;
412 point = selectionGeom.
asPoint();
422 int featureCount = 0;
424 std::unique_ptr<QgsGeometryEngine> selectionGeomPrepared;
434 double sr = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
441 if ( !isPointOrRectangle )
456 for (
int row = tileRange.
startRow(); row <= tileRange.
endRow(); ++row )
461 QByteArray data = layer->
getRawTile( tileID );
462 if ( data.isEmpty() )
466 if ( !decoder.
decode( tileID, data ) )
469 QMap<QString, QgsFields> perLayerFields;
470 const QStringList layerNames = decoder.
layers();
471 for (
const QString &layerName : layerNames )
473 QSet<QString> fieldNames = qgis::listToSet( decoder.
layerFieldNames( layerName ) );
478 const QStringList featuresLayerNames = features.keys();
479 for (
const QString &layerName : featuresLayerNames )
481 const QgsFields fFields = perLayerFields[layerName];
482 const QVector<QgsFeature> &layerFeatures = features[layerName];
485 if ( f.geometry().intersects( r ) && ( !selectionGeomPrepared || selectionGeomPrepared->intersects( f.geometry().constGet() ) ) )
487 QMap< QString, QString > derivedAttributes = commonDerivedAttributes;
488 derivedAttributes.insert( tr(
"Feature ID" ),
FID_TO_STRING( f.id() ) );
490 results->
append( IdentifyResult( layer, layerName, fFields, f, derivedAttributes ) );
504 QgsDebugMsg( QStringLiteral(
"Caught CRS exception %1" ).arg( cse.
what() ) );
507 return featureCount > 0;
512 Q_UNUSED( identifyContext )
518 const double searchRadiusMapUnits = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
520 const QVector<QVariantMap> points = renderer->
identify( layer, context, geometry, searchRadiusMapUnits );
529 QMap< QString, QString > derivedAttributes;
530 derivedAttributes.insert( tr(
"(clicked coordinate X)" ), formatXCoordinate( point ) );
531 derivedAttributes.insert( tr(
"(clicked coordinate Y)" ), formatYCoordinate( point ) );
533 derivedAttributes.insert( tr(
"(clicked coordinate Z)" ), QString::number( point.
z(),
'f' ) );
534 return derivedAttributes;
544 QgsDebugMsg( QStringLiteral(
"Out of scale limits" ) );
548 QString temporalFilter;
556 temporalFilter = qobject_cast< const QgsVectorLayerTemporalProperties * >( layer->
temporalProperties() )->createFilterString( temporalContext, identifyContext.
temporalRange() );
559 QApplication::setOverrideCursor( Qt::WaitCursor );
561 QMap< QString, QString > commonDerivedAttributes;
564 bool isPointOrRectangle;
569 isPointOrRectangle =
true;
570 point = selectionGeom.
asPoint();
580 int featureCount = 0;
583 std::unique_ptr<QgsGeometryEngine> selectionGeomPrepared;
593 double sr = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
600 if ( !isPointOrRectangle )
614 if ( !temporalFilter.isEmpty() )
621 if ( !selectionGeomPrepared || selectionGeomPrepared->intersects( f.
geometry().
constGet() ) )
629 QgsDebugMsg( QStringLiteral(
"Caught CRS exception %1" ).arg( cse.
what() ) );
636 std::unique_ptr< QgsFeatureRenderer > renderer( layer->
renderer() ? layer->
renderer()->
clone() :
nullptr );
644 for (
const QgsFeature &feature : qgis::as_const( featureList ) )
646 QMap< QString, QString > derivedAttributes = commonDerivedAttributes;
651 if ( filter && !renderer->willRenderFeature( feature, context ) )
657 derivedAttributes.unite( featureDerivedAttributes( feature, layer,
toLayerCoordinates( layer, point ) ) );
659 derivedAttributes.insert( tr(
"Feature ID" ), fid < 0 ? tr(
"new feature" ) :
FID_TO_STRING( fid ) );
661 results->append( IdentifyResult( qobject_cast<QgsMapLayer *>( layer ), feature, derivedAttributes ) );
669 QgsDebugMsgLevel(
"Feature count on identify: " + QString::number( featureCount ), 2 );
671 QApplication::restoreOverrideCursor();
672 return featureCount > 0;
684 QString str = QLocale().toString( vId.
vertex + 1 );
685 derivedAttributes.insert( tr(
"Closest vertex number" ), str );
690 derivedAttributes.insert( tr(
"Closest vertex X" ), formatXCoordinate( closestPointMapCoords ) );
691 derivedAttributes.insert( tr(
"Closest vertex Y" ), formatYCoordinate( closestPointMapCoords ) );
693 if ( closestPoint.
is3D() )
695 str = QLocale().
toString( closestPoint.
z(),
'g', 10 );
696 derivedAttributes.insert( tr(
"Closest vertex Z" ), str );
700 str = QLocale().toString( closestPoint.
m(),
'g', 10 );
701 derivedAttributes.insert( tr(
"Closest vertex M" ), str );
706 double radius, centerX, centerY;
712 geometry.
vertexAt( vIdAfter ), radius, centerX, centerY );
713 derivedAttributes.insert( QStringLiteral(
"Closest vertex radius" ), QLocale().toString( radius ) );
717 void QgsMapToolIdentify::closestPointAttributes(
const QgsAbstractGeometry &geometry,
const QgsPointXY &layerPoint, QMap<QString, QString> &derivedAttributes )
721 derivedAttributes.insert( tr(
"Closest X" ), formatXCoordinate( closestPoint ) );
722 derivedAttributes.insert( tr(
"Closest Y" ), formatYCoordinate( closestPoint ) );
724 if ( closestPoint.
is3D() )
726 const QString str = QLocale().toString( closestPoint.
z(),
'g', 10 );
727 derivedAttributes.insert( tr(
"Interpolated Z" ), str );
731 const QString str = QLocale().toString( closestPoint.
m(),
'g', 10 );
732 derivedAttributes.insert( tr(
"Interpolated M" ), str );
736 QString QgsMapToolIdentify::formatCoordinate(
const QgsPointXY &canvasPoint )
const
739 mCoordinatePrecision );
742 QString QgsMapToolIdentify::formatXCoordinate(
const QgsPointXY &canvasPoint )
const
744 QString coordinate = formatCoordinate( canvasPoint );
745 return coordinate.split(
',' ).at( 0 );
748 QString QgsMapToolIdentify::formatYCoordinate(
const QgsPointXY &canvasPoint )
const
750 QString coordinate = formatCoordinate( canvasPoint );
751 return coordinate.split(
',' ).at( 1 );
758 QMap< QString, QString > derivedAttributes;
784 derivedAttributes.insert( tr(
"Parts" ), str );
785 str = QLocale().toString( vId.
part + 1 );
786 derivedAttributes.insert( tr(
"Part number" ), str );
790 ? displayDistanceUnits() : layer->
crs().mapUnits();
792 ? displayAreaUnits() :
QgsUnitTypes::distanceToAreaUnit( layer->
crs().mapUnits() );
801 str = formatDistance( dist );
802 derivedAttributes.insert( tr(
"Length (Ellipsoidal — %1)" ).arg( ellipsoid ), str );
807 derivedAttributes.insert( tr(
"Length (Cartesian)" ), str );
809 derivedAttributes.insert( tr(
"Length (Cartesian — 2D)" ), str );
812 str = formatDistance( qgsgeometry_cast< const QgsLineString * >( feature.
geometry().
constGet() )->length3D()
814 derivedAttributes.insert( tr(
"Length (Cartesian — 3D)" ), str );
821 derivedAttributes.insert( tr(
"Vertices" ), str );
823 closestVertexAttributes( *geom, vId, layer, derivedAttributes );
824 closestPointAttributes( *geom, layerPoint, derivedAttributes );
826 if (
const QgsCurve *curve = qgsgeometry_cast< const QgsCurve * >( geom ) )
830 str = formatXCoordinate( pnt );
831 derivedAttributes.insert( tr(
"firstX",
"attributes get sorted; translation for lastX should be lexically larger than this one" ), str );
832 str = formatYCoordinate( pnt );
833 derivedAttributes.insert( tr(
"firstY" ), str );
835 str = formatXCoordinate( pnt );
836 derivedAttributes.insert( tr(
"lastX",
"attributes get sorted; translation for firstX should be lexically smaller than this one" ), str );
837 str = formatYCoordinate( pnt );
838 derivedAttributes.insert( tr(
"lastY" ), str );
849 str = formatArea( area );
850 derivedAttributes.insert( tr(
"Area (Ellipsoidal — %1)" ).arg( ellipsoid ), str );
854 derivedAttributes.insert( tr(
"Area (Cartesian)" ), str );
860 str = formatDistance( perimeter );
861 derivedAttributes.insert( tr(
"Perimeter (Ellipsoidal — %1)" ).arg( ellipsoid ), str );
865 derivedAttributes.insert( tr(
"Perimeter (Cartesian)" ), str );
868 derivedAttributes.insert( tr(
"Vertices" ), str );
871 closestVertexAttributes( *feature.
geometry().
constGet(), vId, layer, derivedAttributes );
872 closestPointAttributes( *feature.
geometry().
constGet(), layerPoint, derivedAttributes );
880 QString str = formatXCoordinate( pnt );
881 derivedAttributes.insert( tr(
"X" ), str );
882 str = formatYCoordinate( pnt );
883 derivedAttributes.insert( tr(
"Y" ), str );
888 derivedAttributes.insert( tr(
"Z" ), str );
893 derivedAttributes.insert( tr(
"M" ), str );
903 closestVertexAttributes( *geom, vId, layer, derivedAttributes );
908 return derivedAttributes;
914 return identifyRasterLayer( results, layer, point, viewExtent, mapUnitsPerPixel, identifyContext );
945 QgsDebugMsg( QStringLiteral(
"coordinate not reprojectable: %1" ).arg( cse.
what() ) );
948 QgsDebugMsg( QStringLiteral(
"point = %1 %2" ).arg( point.
x() ).arg( point.
y() ) );
953 QMap< QString, QString > attributes, derivedAttributes;
978 r.
setXMinimum( pointInCanvasCrs.
x() - mapUnitsPerPixel / 2. );
979 r.
setXMaximum( pointInCanvasCrs.
x() + mapUnitsPerPixel / 2. );
980 r.
setYMinimum( pointInCanvasCrs.
y() - mapUnitsPerPixel / 2. );
981 r.
setYMaximum( pointInCanvasCrs.
y() + mapUnitsPerPixel / 2. );
985 identifyResult = dprovider->
identify( point, format, r, 1, 1 );
1001 int width =
static_cast< int >( std::round( viewExtent.
width() / mapUnitsPerPixel ) );
1002 int height =
static_cast< int >( std::round( viewExtent.
height() / mapUnitsPerPixel ) );
1004 QgsDebugMsg( QStringLiteral(
"viewExtent.width = %1 viewExtent.height = %2" ).arg( viewExtent.
width() ).arg( viewExtent.
height() ) );
1005 QgsDebugMsg( QStringLiteral(
"width = %1 height = %2" ).arg( width ).arg( height ) );
1006 QgsDebugMsg( QStringLiteral(
"xRes = %1 yRes = %2 mapUnitsPerPixel = %3" ).arg( viewExtent.
width() / width ).arg( viewExtent.
height() / height ).arg( mapUnitsPerPixel ) );
1008 identifyResult = dprovider->
identify( point, format, viewExtent, width, height );
1013 if ( identifyResult.
isValid() )
1015 QMap<int, QVariant> values = identifyResult.
results();
1019 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1021 QString valueString;
1022 if ( it.value().isNull() )
1024 valueString = tr(
"no data" );
1028 QVariant value( it.value() );
1032 if (
static_cast<QMetaType::Type
>( value.type() ) == QMetaType::Float )
1043 QString label = layer->
name();
1044 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>( layer ), label, attributes, derivedAttributes ) );
1048 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1050 QVariant value = it.value();
1051 if ( value.type() == QVariant::Bool && !value.toBool() )
1057 if ( value.type() == QVariant::String )
1061 QString label = layer->
subLayers().value( it.key() );
1063 attributes.insert( tr(
"Error" ), value.toString() );
1065 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>( layer ), label, attributes, derivedAttributes ) );
1075 for (
const QgsFeature &feature : storeFeatures )
1081 QString sublayer = featureStore.params().value( QStringLiteral(
"sublayer" ) ).toString();
1082 QString featureType = featureStore.params().value( QStringLiteral(
"featureType" ) ).toString();
1084 featureType.remove( QStringLiteral(
"_feature" ) );
1086 if ( sublayer.compare( layer->
name(), Qt::CaseInsensitive ) != 0 )
1090 if ( featureType.compare( sublayer, Qt::CaseInsensitive ) != 0 || labels.isEmpty() )
1092 labels << featureType;
1095 QMap< QString, QString > derAttributes = derivedAttributes;
1096 derAttributes.unite( featureDerivedAttributes( feature, layer,
toLayerCoordinates( layer, point ) ) );
1098 IdentifyResult identifyResult( qobject_cast<QgsMapLayer *>( layer ), labels.join( QLatin1String(
" / " ) ), featureStore.fields(), feature, derAttributes );
1100 identifyResult.
mParams.insert( QStringLiteral(
"getFeatureInfoUrl" ), featureStore.params().value( QStringLiteral(
"getFeatureInfoUrl" ) ) );
1101 results->append( identifyResult );
1108 QgsDebugMsg( QStringLiteral(
"%1 HTML or text values" ).arg( values.size() ) );
1109 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1111 QString value = it.value().toString();
1113 attributes.insert( QString(), value );
1115 QString label = layer->
subLayers().value( it.key() );
1116 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>( layer ), label, attributes, derivedAttributes ) );
1124 attributes.insert( tr(
"Error" ), value );
1125 QString label = tr(
"Identify error" );
1126 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>( layer ), label, attributes, derivedAttributes ) );
1142 QString QgsMapToolIdentify::formatDistance(
double distance )
const
1144 return formatDistance( distance, displayDistanceUnits() );
1147 QString QgsMapToolIdentify::formatArea(
double area )
const
1149 return formatArea( area, displayAreaUnits() );
1155 bool baseUnit = settings.
value( QStringLiteral(
"qgis/measure/keepbaseunit" ),
true ).toBool();
1163 bool baseUnit = settings.
value( QStringLiteral(
"qgis/measure/keepbaseunit" ),
true ).toBool();
1170 QList<IdentifyResult> results;
1171 if (
identifyRasterLayer( &results, layer, mLastGeometry, mLastExtent, mLastMapUnitsPerPixel ) )
1181 for (
const QVariantMap &pt : identified )
1183 QMap<QString, QString> ptStr;
1184 QString classification;
1185 for (
auto attrIt = pt.constBegin(); attrIt != pt.constEnd(); ++attrIt )
1187 if ( attrIt.key().compare( QLatin1String(
"Z" ), Qt::CaseInsensitive ) == 0
1191 ptStr[ tr(
"Z (original)" ) ] = attrIt.value().toString();
1192 ptStr[ tr(
"Z (adjusted)" ) ] = QString::number( attrIt.value().toDouble() * elevationProps->
zScale() + elevationProps->
zOffset() );
1194 else if ( attrIt.key().compare( QLatin1String(
"Classification" ), Qt::CaseInsensitive ) == 0 )
1197 ptStr[ attrIt.key() ] = QStringLiteral(
"%1 (%2)" ).arg( attrIt.value().toString(), classification );
1201 ptStr[attrIt.key()] = attrIt.value().toString();
1204 QgsMapToolIdentify::IdentifyResult res( layer, classification.isEmpty() ? QString::number(
id ) : QStringLiteral(
"%1 (%2)" ).arg(
id ).arg( classification ), ptStr, QMap<QString, QString>() );
1205 results.append( res );
Abstract base class for all geometries.
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
virtual double perimeter() const
Returns the planar, 2-dimensional perimeter of the geometry.
virtual int nCoordinates() const
Returns the number of nodes contained in the geometry.
virtual QgsPoint vertexAt(QgsVertexId id) const =0
Returns the point corresponding to a specified vertex id.
virtual double length() const
Returns the planar, 2-dimensional length of the geometry.
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
static QCursor getThemeCursor(Cursor cursor)
Helper to get a theme cursor.
Q_GADGET QgsUnitTypes::DistanceUnit mapUnits
Custom exception class for Coordinate Reference System related exceptions.
Abstract base class for curved geometry type.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
static QString formatDistance(double distance, int decimals, QgsUnitTypes::DistanceUnit unit, bool keepBaseUnit=false)
Returns an distance formatted as a friendly string.
double measureArea(const QgsGeometry &geometry) const
Measures the area of a geometry.
double measurePerimeter(const QgsGeometry &geometry) const
Measures the perimeter of a polygon geometry.
double measureLength(const QgsGeometry &geometry) const
Measures the length of a geometry.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
static QString formatArea(double area, int decimals, QgsUnitTypes::AreaUnit unit, bool keepBaseUnit=false)
Returns an area formatted as a friendly string.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
double convertAreaMeasurement(double area, QgsUnitTypes::AreaUnit toUnits) const
Takes an area measurement calculated by this QgsDistanceArea object and converts it to a different ar...
double convertLengthMeasurement(double length, QgsUnitTypes::DistanceUnit toUnits) const
Takes a length measurement calculated by this QgsDistanceArea object and converts it to a different d...
QString message(QgsErrorMessage::Format format=QgsErrorMessage::Html) const
Full error messages description.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
@ Filter
Features may be filtered, i.e. some features may not be rendered (categorized, rule based ....
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
QgsFeatureRequest & setFilterExpression(const QString &expression)
Set the filter expression.
@ ExactIntersect
Use exact geometry intersection (slower) instead of bounding boxes.
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
A container for features with the same fields and crs.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
bool hasGeometry() const
Returns true if the feature has an associated geometry.
Container of fields for a vector layer.
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false)
int numGeometries() const SIP_HOLDGIL
Returns the number of geometries within the collection.
static QgsPoint closestPoint(const QgsAbstractGeometry &geometry, const QgsPoint &point)
Returns the nearest point on a segment of a geometry for the specified point.
static void circleCenterRadius(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double &radius, double ¢erX, double ¢erY) SIP_HOLDGIL
Returns radius and center of the circle through pt1, pt2, pt3.
static QgsPoint closestVertex(const QgsAbstractGeometry &geom, const QgsPoint &pt, QgsVertexId &id)
Returns the closest vertex to a geometry for a specified point.
A geometry is the spatial representation of a feature.
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns type of the geometry as a WKB type (point / linestring / polygon etc.)
static QgsGeometry fromRect(const QgsRectangle &rect) SIP_HOLDGIL
Creates a new geometry from a QgsRectangle.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
static QgsGeometry fromPointXY(const QgsPointXY &point) SIP_HOLDGIL
Creates a new geometry from a QgsPointXY object.
QgsWkbTypes::GeometryType type
double area() const
Returns the planar, 2-dimensional area of the geometry.
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine.
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.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
bool isGeosEqual(const QgsGeometry &) const
Compares the geometry with another geometry using GEOS.
Identify contexts are used to encapsulate the settings to be used to perform an identify action.
bool isTemporal() const
Returns true if the temporal range setting is enabled.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range to be used with the identify action.
Map canvas is a class for displaying all GIS data types on a canvas.
QgsUnitTypes::DistanceUnit mapUnits() const
Convenience function for returning the current canvas map units.
int layerCount() const
Returns number of layers on the map.
double scale() const
Returns the last reported scale of the canvas.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
QgsMapLayer * layer(int index)
Returns the map layer at position index in the layer stack.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
virtual bool isVisibleInTemporalRange(const QgsDateTimeRange &range) const
Returns true if the layer should be visible and rendered for the specified time range.
Base class for all map layer types.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
bool isInScaleRange(double scale) const
Tests whether the layer should be visible at the specified scale.
virtual QgsRectangle extent() const
Returns the extent of the layer.
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
QgsMapLayer::LayerFlags flags() const
Returns the flags for this layer.
QgsCoordinateReferenceSystem crs
@ Identifiable
If the layer is identifiable using the identify map tool and as a WMS layer.
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
QgsPointXY layerToMapCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from layer's CRS to output CRS
double scale() const
Returns the calculated map scale.
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...
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshDatasetValue represents single dataset value.
double y() const
Returns y value.
double scalar() const
Returns magnitude of vector for vector data or scalar value for scalar data.
double x() const
Returns x value.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsMeshRendererSettings rendererSettings() const
Returns renderer settings.
QgsMeshDatasetIndex activeScalarDatasetAtTime(const QgsDateTimeRange &timeRange) const
Returns dataset index from active scalar group depending on the time range.
QgsPointXY snapOnElement(QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius)
Returns the position of the snapped point on the mesh element closest to point intersecting with the ...
QList< int > enabledDatasetGroupsIndexes() const
Returns the list of indexes of enables dataset groups handled by the layer.
QgsMeshDatasetIndex staticVectorDatasetIndex() const
Returns the static vector dataset index that is rendered if the temporal properties is not active.
QgsMeshDatasetIndex activeVectorDatasetAtTime(const QgsDateTimeRange &timeRange) const
Returns dataset index from active vector group depending on the time range If the temporal properties...
QgsMeshDatasetIndex staticScalarDatasetIndex() const
Returns the static scalar dataset index that is rendered if the temporal properties is not active.
QgsMeshDatasetMetadata datasetMetadata(const QgsMeshDatasetIndex &index) const
Returns the dataset metadata.
QgsMeshDatasetIndex datasetIndexAtTime(const QgsDateTimeRange &timeRange, int datasetGroupIndex) const
Returns dataset index from datasets group depending on the time range.
QgsMeshDatasetValue datasetValue(const QgsMeshDatasetIndex &index, int valueIndex) const
Returns vector/scalar value associated with the index from the dataset To read multiple continuous va...
QgsMapLayerTemporalProperties * temporalProperties() override
Returns the layer's temporal properties.
QString formatTime(double hours)
Returns (date) time in hours formatted to human readable form.
QgsMeshDatasetGroupMetadata datasetGroupMetadata(const QgsMeshDatasetIndex &index) const
Returns the dataset groups metadata.
int activeVectorDatasetGroup() const
Returns the active vector dataset group.
int activeScalarDatasetGroup() const
Returns the active scalar dataset group.
static QMap< int, QString > translatedLasClassificationCodes()
Returns the map of LAS classification code to translated string value, corresponding to the ASPRS Sta...
Point cloud layer specific subclass of QgsMapLayerElevationProperties.
double zOffset() const
Returns the z offset, which is a fixed offset amount which should be added to z values from the layer...
double zScale() const
Returns the z scale, which is a scaling factor which should be applied to z values from the layer.
Represents a map layer supporting display of point clouds.
QgsMapLayerElevationProperties * elevationProperties() override
Returns the layer's elevation properties.
QgsPointCloudRenderer * renderer()
Returns the 2D renderer for the point cloud.
Abstract base class for 2d point cloud renderers.
QVector< QVariantMap > identify(QgsPointCloudLayer *layer, const QgsRenderContext &context, const QgsGeometry &geometry, double toleranceForPointIdentification=0)
Returns the list of visible points of the point cloud layer layer and an extent defined by a geometry...
virtual void startRender(QgsPointCloudRenderContext &context)
Must be called when a new render cycle is started.
virtual void stopRender(QgsPointCloudRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
A class to represent a 2D point.
bool isEmpty() const SIP_HOLDGIL
Returns true if the geometry is empty.
QString toString(int precision=-1) const
Returns a string representation of the point (x, y) with a preset precision.
Point geometry type, with support for z-dimension and m-values.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsCoordinateTransformContext transformContext
static QString printValue(double value)
Print double value with all necessary significant digits.
Base class for raster data providers.
static QgsRaster::IdentifyFormat identifyFormatFromName(const QString &formatName)
virtual QgsRasterIdentifyResult identify(const QgsPointXY &point, QgsRaster::IdentifyFormat format, const QgsRectangle &boundingBox=QgsRectangle(), int width=0, int height=0, int dpi=96)
Identify raster value(s) found on the point position.
static Capability identifyFormatToCapability(QgsRaster::IdentifyFormat format)
Raster identify results container.
QgsError error() const
Returns the last error.
bool isValid() const
Returns true if valid.
QMap< int, QVariant > results() const
Returns the identify results.
@ IdentifyValue
Numerical values.
@ Identify
At least one identify format supported.
@ IdentifyFeature
WMS GML -> feature.
virtual QString generateBandName(int bandNumber) const
helper function to create zero padded band names
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
Represents a raster layer.
QgsMapLayerTemporalProperties * temporalProperties() override
Returns the layer's temporal properties.
QStringList subLayers() const override
Returns the sublayers of this layer.
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
A rectangle specified with double values.
bool contains(const QgsRectangle &rect) const
Returns true when rectangle contains other rectangle.
void setYMinimum(double y) SIP_HOLDGIL
Set the minimum y value.
void setXMaximum(double x) SIP_HOLDGIL
Set the maximum x value.
void setXMinimum(double x) SIP_HOLDGIL
Set the minimum x value.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
void setYMaximum(double y) SIP_HOLDGIL
Set the maximum y value.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
Contains information about the context of a rendering operation.
void setCoordinateTransform(const QgsCoordinateTransform &t)
Sets the current coordinate transform for the context.
QgsExpressionContext & expressionContext()
Gets the expression context.
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
T enumValue(const QString &key, const T &defaultValue, const Section section=NoSection)
Returns the setting value for a setting based on an enum.
bool isActive() const
Returns true if the temporal property is active.
Temporarily sets a cursor override for the QApplication for the lifetime of the object.
Defines a matrix of tiles for a single zoom level: it is defined by its size (width *.
QgsTileRange tileRangeFromExtent(const QgsRectangle &mExtent)
Returns tile range that fully covers the given extent.
static QgsTileMatrix fromWebMercator(int mZoomLevel)
Returns a tile matrix for the usual web mercator.
Range of tiles in a tile matrix to be rendered.
int endColumn() const
Returns index of the last column in the range.
int endRow() const
Returns index of the last row in the range.
int startRow() const
Returns index of the first row in the range.
int startColumn() const
Returns index of the first column in the range.
Stores coordinates of a tile in a tile matrix set.
Helper functions for various unit types.
DistanceUnit
Units of distance.
static Q_INVOKABLE QgsUnitTypes::AreaUnit distanceToAreaUnit(QgsUnitTypes::DistanceUnit distanceUnit)
Converts a distance unit to its corresponding area unit, e.g., meters to square meters.
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
static Q_INVOKABLE QgsUnitTypes::DistanceUnitType unitType(QgsUnitTypes::DistanceUnit unit)
Returns the type for a distance unit.
Encapsulates the context in which a QgsVectorLayer's temporal capabilities will be applied.
void setLayer(QgsVectorLayer *layer)
Sets the associated layer.
Represents a vector layer which manages a vector based data sets.
QgsMapLayerTemporalProperties * temporalProperties() override
Returns temporal properties associated with the vector layer.
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
Implements a map layer that is dedicated to rendering of vector tiles.
QByteArray getRawTile(QgsTileXYZ tileID)
Fetches raw tile data for the give tile coordinates.
int sourceMinZoom() const
Returns minimum zoom level at which source has any valid tiles (negative = unconstrained)
int sourceMaxZoom() const
Returns maximum zoom level at which source has any valid tiles (negative = unconstrained)
This class is responsible for decoding raw tile data written with Mapbox Vector Tiles encoding.
QStringList layerFieldNames(const QString &layerName) const
Returns a list of all field names in a tile. It can only be called after a successful decode()
QStringList layers() const
Returns a list of sub-layer names in a tile. It can only be called after a successful decode()
QgsVectorTileFeatures layerFeatures(const QMap< QString, QgsFields > &perLayerFields, const QgsCoordinateTransform &ct, const QSet< QString > *layerSubset=nullptr) const
Returns decoded features grouped by sub-layers.
bool decode(QgsTileXYZ tileID, const QByteArray &rawTileData)
Tries to decode raw tile data, returns true on success.
static int scaleToZoomLevel(double mapScale, int sourceMinZoom, int sourceMaxZoom)
Finds best fitting zoom level (assuming GoogleCRS84Quad tile matrix set) given map scale denominator ...
static QgsFields makeQgisFields(QSet< QString > flds)
Returns QgsFields instance based on the set of field names.
static bool isMultiType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a multi type.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
static bool hasM(Type type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
Type
The WKB type describes the number of dimensions a geometry has.
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
static bool hasZ(Type type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
@ PointCloudLayer
Added in 3.18.
@ VectorTileLayer
Added in 3.14.
CONSTLATIN1STRING geoNone()
Constant that holds the string representation for "No ellips/No CRS".
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QList< QgsFeature > QgsFeatureList
#define FID_TO_STRING(fid)
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
QVector< QgsFeatureStore > QgsFeatureStoreList
#define QgsDebugMsgLevel(str, level)
QMap< QString, QVector< QgsFeature > > QgsVectorTileFeatures
Features of a vector tile, grouped by sub-layer names (key of the map)
const QgsCoordinateReferenceSystem & crs
Utility class for identifying a unique vertex within a geometry.
VertexType type
Vertex type.
bool isValid() const SIP_HOLDGIL
Returns true if the vertex id is valid.
@ CurveVertex
An intermediate point on a segment defining the curvature of the segment.