61 #include <QMouseEvent>
70 , mLastMapUnitsPerPixel( -1.0 )
71 , mCoordinatePrecision( 6 )
103 return identify( x, y, mode, QList<QgsMapLayer *>(), layerType, identifyContext );
113 return identify( geometry, mode, QList<QgsMapLayer *>(), layerType, identifyContext );
118 QList<IdentifyResult> results;
120 mLastGeometry = geometry;
135 int x = canvasPt.x(), y = canvasPt.y();
136 QList<IdentifyResult> results =
identify( x, y,
TopDownAll, layerList, layerType, identifyContext );
137 QPoint globalPos =
mCanvas->mapToGlobal( QPoint( x + 5, y + 5 ) );
140 else if ( mode ==
ActiveLayer && layerList.isEmpty() )
146 emit
identifyMessage( tr(
"No active layer. To identify features, you must choose an active layer." ) );
152 QApplication::setOverrideCursor( Qt::WaitCursor );
154 identifyLayer( &results,
layer, mLastGeometry, mLastExtent, mLastMapUnitsPerPixel, layerType, identifyContext );
158 QApplication::setOverrideCursor( Qt::WaitCursor );
160 QList< QgsMapLayer * > targetLayers;
161 if ( layerList.isEmpty() )
164 targetLayers = layerList;
166 const int layerCount = targetLayers.size();
167 for (
int i = 0; i < layerCount; i++ )
177 if (
identifyLayer( &results,
layer, mLastGeometry, mLastExtent, mLastMapUnitsPerPixel, layerType, identifyContext ) )
188 QApplication::restoreOverrideCursor();
195 mOverrideCanvasSearchRadius = searchRadiusMapUnits;
200 mOverrideCanvasSearchRadius = -1;
222 return identifyRasterLayer( results, qobject_cast<QgsRasterLayer *>(
layer ), geometry, viewExtent, mapUnitsPerPixel, identifyContext );
234 return identifyVectorTileLayer( results, qobject_cast<QgsVectorTileLayer *>(
layer ), geometry, identifyContext );
238 return identifyPointCloudLayer( results, qobject_cast<QgsPointCloudLayer *>(
layer ), geometry, identifyContext );
263 double searchRadius = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
266 QList<QgsMeshDatasetIndex> datasetIndexList;
267 int activeScalarGroup =
layer->rendererSettings().activeScalarDatasetGroup();
268 int activeVectorGroup =
layer->rendererSettings().activeVectorDatasetGroup();
270 const QList<int> allGroup =
layer->enabledDatasetGroupsIndexes();
273 const QgsDateTimeRange &time = identifyContext.
temporalRange();
274 if ( activeScalarGroup >= 0 )
275 datasetIndexList.append(
layer->activeScalarDatasetAtTime( time ) );
276 if ( activeVectorGroup >= 0 && activeVectorGroup != activeScalarGroup )
277 datasetIndexList.append(
layer->activeVectorDatasetAtTime( time ) );
279 for (
int groupIndex : allGroup )
281 if ( groupIndex != activeScalarGroup && groupIndex != activeVectorGroup )
282 datasetIndexList.append(
layer->datasetIndexAtTime( time, groupIndex ) );
288 if ( activeScalarGroup >= 0 )
289 datasetIndexList.append(
layer->staticScalarDatasetIndex() );
290 if ( activeVectorGroup >= 0 && activeVectorGroup != activeScalarGroup )
291 datasetIndexList.append(
layer->staticVectorDatasetIndex() );
294 for (
int groupIndex : allGroup )
296 if ( groupIndex != activeScalarGroup && groupIndex != activeVectorGroup )
298 if ( !
layer->datasetGroupMetadata( groupIndex ).isTemporal() )
299 datasetIndexList.append( groupIndex );
307 if ( !index.isValid() )
311 QMap< QString, QString > derivedAttributes;
313 QMap<QString, QString> attribute;
317 const double scalar = scalarValue.
scalar();
318 attribute.insert( tr(
"Scalar Value" ), std::isnan( scalar ) ? tr(
"no data" ) : QLocale().toString( scalar ) );
324 const double vectorX = vectorValue.
x();
325 const double vectorY = vectorValue.
y();
326 if ( std::isnan( vectorX ) || std::isnan( vectorY ) )
327 attribute.insert( tr(
"Vector Value" ), tr(
"no data" ) );
330 attribute.insert( tr(
"Vector Magnitude" ), QLocale().toString( vectorValue.
scalar() ) );
331 derivedAttributes.insert( tr(
"Vector x-component" ), QLocale().toString( vectorY ) );
332 derivedAttributes.insert( tr(
"Vector y-component" ), QLocale().toString( vectorX ) );
339 derivedAttributes.insert( tr(
"Time Step" ),
layer->formatTime( meta.
time() ) );
340 derivedAttributes.insert( tr(
"Source" ), groupMeta.
uri() );
342 QString resultName = groupMeta.
name();
343 if ( isTemporal && ( index.group() == activeScalarGroup || index.group() == activeVectorGroup ) )
344 resultName.append( tr(
" (active)" ) );
351 results->append( result );
354 QMap<QString, QString> derivedGeometry;
359 derivedGeometry.insert( tr(
"Snapped Vertex Position X" ), QLocale().toString( vertexPoint.
x() ) );
360 derivedGeometry.insert( tr(
"Snapped Vertex Position Y" ), QLocale().toString( vertexPoint.
y() ) );
366 derivedGeometry.insert( tr(
"Face Centroid X" ), QLocale().toString( faceCentroid.
x() ) );
367 derivedGeometry.insert( tr(
"Face Centroid Y" ), QLocale().toString( faceCentroid.
y() ) );
373 derivedGeometry.insert( tr(
"Point on Edge X" ), QLocale().toString( pointOnEdge.
x() ) );
374 derivedGeometry.insert( tr(
"Point on Edge Y" ), QLocale().toString( pointOnEdge.
y() ) );
382 results->append( result );
389 Q_UNUSED( identifyContext )
401 QMap< QString, QString > commonDerivedAttributes;
404 bool isPointOrRectangle;
409 isPointOrRectangle =
true;
410 point = selectionGeom.
asPoint();
420 int featureCount = 0;
422 std::unique_ptr<QgsGeometryEngine> selectionGeomPrepared;
432 double sr = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
439 if ( !isPointOrRectangle )
450 const int tileZoom =
layer->tileMatrixSet().scaleToZoomLevel(
mCanvas->
scale() );
454 for (
int row = tileRange.
startRow(); row <= tileRange.
endRow(); ++row )
459 QByteArray data =
layer->getRawTile( tileID );
460 if ( data.isEmpty() )
464 if ( !decoder.decode( tileID, data ) )
467 QMap<QString, QgsFields> perLayerFields;
468 const QStringList layerNames = decoder.layers();
469 for (
const QString &layerName : layerNames )
471 QSet<QString> fieldNames = qgis::listToSet( decoder.layerFieldNames( layerName ) );
476 const QStringList featuresLayerNames = features.keys();
477 for (
const QString &layerName : featuresLayerNames )
479 const QgsFields fFields = perLayerFields[layerName];
480 const QVector<QgsFeature> &layerFeatures = features[layerName];
483 if ( f.geometry().intersects( r ) && ( !selectionGeomPrepared || selectionGeomPrepared->intersects( f.geometry().constGet() ) ) )
485 QMap< QString, QString > derivedAttributes = commonDerivedAttributes;
486 derivedAttributes.insert( tr(
"Feature ID" ),
FID_TO_STRING( f.id() ) );
488 results->
append( IdentifyResult(
layer, layerName, fFields, f, derivedAttributes ) );
502 QgsDebugMsg( QStringLiteral(
"Caught CRS exception %1" ).arg( cse.
what() ) );
505 return featureCount > 0;
510 Q_UNUSED( identifyContext )
516 const double searchRadiusMapUnits = mOverrideCanvasSearchRadius < 0 ?
searchRadiusMU(
mCanvas ) : mOverrideCanvasSearchRadius;
518 const QVector<QVariantMap> points = renderer->
identify(
layer, context, geometry, searchRadiusMapUnits );
527 QMap< QString, QString > derivedAttributes;
528 derivedAttributes.insert( tr(
"(clicked coordinate X)" ), formatXCoordinate( point ) );
529 derivedAttributes.insert( tr(
"(clicked coordinate Y)" ), formatYCoordinate( point ) );
531 derivedAttributes.insert( tr(
"(clicked coordinate Z)" ), QLocale().toString( point.
z(),
'f' ) );
532 return derivedAttributes;
542 QgsDebugMsg( QStringLiteral(
"Out of scale limits" ) );
546 QString temporalFilter;
554 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() ) );
637 std::unique_ptr< QgsFeatureRenderer > renderer(
layer->renderer() ?
layer->renderer()->
clone() :
nullptr );
645 for (
const QgsFeature &feature : std::as_const( featureList ) )
647 QMap< QString, QString > derivedAttributes = commonDerivedAttributes;
652 if ( filter && !renderer->willRenderFeature( feature, context ) )
658 if ( !isSingleClick )
662 derivedAttributes.insert( tr(
"Feature ID" ), fid < 0 ? tr(
"new feature" ) :
FID_TO_STRING( fid ) );
664 results->append( IdentifyResult( qobject_cast<QgsMapLayer *>(
layer ), feature, derivedAttributes ) );
672 QgsDebugMsgLevel(
"Feature count on identify: " + QString::number( featureCount ), 2 );
674 QApplication::restoreOverrideCursor();
675 return featureCount > 0;
687 QString
str = QLocale().toString( vId.
vertex + 1 );
688 derivedAttributes.insert( tr(
"Closest vertex number" ),
str );
693 derivedAttributes.insert( tr(
"Closest vertex X" ), formatXCoordinate( closestPointMapCoords ) );
694 derivedAttributes.insert( tr(
"Closest vertex Y" ), formatYCoordinate( closestPointMapCoords ) );
696 if ( closestPoint.
is3D() )
698 str = QLocale().toString( closestPoint.
z(),
'g', 10 );
699 derivedAttributes.insert( tr(
"Closest vertex Z" ),
str );
703 str = QLocale().toString( closestPoint.
m(),
'g', 10 );
704 derivedAttributes.insert( tr(
"Closest vertex M" ),
str );
707 if ( vId.
type == Qgis::VertexType::Curve )
709 double radius, centerX, centerY;
715 geometry.
vertexAt( vIdAfter ), radius, centerX, centerY );
716 derivedAttributes.insert( QStringLiteral(
"Closest vertex radius" ), QLocale().toString( radius ) );
720 void QgsMapToolIdentify::closestPointAttributes(
const QgsAbstractGeometry &geometry,
const QgsPointXY &layerPoint, QMap<QString, QString> &derivedAttributes )
724 derivedAttributes.insert( tr(
"Closest X" ), formatXCoordinate( closestPoint ) );
725 derivedAttributes.insert( tr(
"Closest Y" ), formatYCoordinate( closestPoint ) );
727 if ( closestPoint.
is3D() )
729 const QString
str = QLocale().toString( closestPoint.
z(),
'g', 10 );
730 derivedAttributes.insert( tr(
"Interpolated Z" ),
str );
734 const QString
str = QLocale().toString( closestPoint.
m(),
'g', 10 );
735 derivedAttributes.insert( tr(
"Interpolated M" ),
str );
739 QString QgsMapToolIdentify::formatCoordinate(
const QgsPointXY &canvasPoint )
const
742 mCoordinatePrecision );
745 QString QgsMapToolIdentify::formatXCoordinate(
const QgsPointXY &canvasPoint )
const
747 QString coordinate = formatCoordinate( canvasPoint );
751 QString QgsMapToolIdentify::formatYCoordinate(
const QgsPointXY &canvasPoint )
const
753 QString coordinate = formatCoordinate( canvasPoint );
761 QMap< QString, QString > derivedAttributes;
790 derivedAttributes.insert( tr(
"Parts" ),
str );
793 str = QLocale().toString( vId.
part + 1 );
794 derivedAttributes.insert( tr(
"Part number" ),
str );
799 ? displayDistanceUnits() :
layer->
crs().mapUnits();
812 str = formatDistance( dist );
813 derivedAttributes.insert( tr(
"Length (Ellipsoidal — %1)" ).arg( ellipsoid ),
str );
822 derivedAttributes.insert( tr(
"Length (Cartesian — 2D)" ),
str );
826 return total + qgsgeometry_cast< const QgsLineString * >( part )->length3D();
829 str = formatDistance( totalLength3d, cartesianDistanceUnits );
830 derivedAttributes.insert( tr(
"Length (Cartesian — 3D)" ),
str );
834 derivedAttributes.insert( tr(
"Length (Cartesian)" ),
str );
838 derivedAttributes.insert( tr(
"Vertices" ),
str );
842 closestVertexAttributes( *geom, vId,
layer, derivedAttributes );
843 closestPointAttributes( *geom, layerPoint, derivedAttributes );
846 if (
const QgsCurve *curve = qgsgeometry_cast< const QgsCurve * >( geom ) )
850 str = formatXCoordinate( pnt );
851 derivedAttributes.insert( tr(
"firstX",
"attributes get sorted; translation for lastX should be lexically larger than this one" ),
str );
852 str = formatYCoordinate( pnt );
853 derivedAttributes.insert( tr(
"firstY" ),
str );
855 str = formatXCoordinate( pnt );
856 derivedAttributes.insert( tr(
"lastX",
"attributes get sorted; translation for firstX should be lexically smaller than this one" ),
str );
857 str = formatYCoordinate( pnt );
858 derivedAttributes.insert( tr(
"lastY" ),
str );
868 str = formatArea( area );
869 derivedAttributes.insert( tr(
"Area (Ellipsoidal — %1)" ).arg( ellipsoid ),
str );
873 derivedAttributes.insert( tr(
"Area (Cartesian)" ),
str );
879 str = formatDistance( perimeter );
880 derivedAttributes.insert( tr(
"Perimeter (Ellipsoidal — %1)" ).arg( ellipsoid ),
str );
884 derivedAttributes.insert( tr(
"Perimeter (Cartesian)" ),
str );
887 derivedAttributes.insert( tr(
"Vertices" ),
str );
893 closestPointAttributes( *feature.
geometry().
constGet(), layerPoint, derivedAttributes );
902 QString
str = formatXCoordinate( pnt );
903 derivedAttributes.insert( tr(
"X" ),
str );
904 str = formatYCoordinate( pnt );
905 derivedAttributes.insert( tr(
"Y" ),
str );
910 derivedAttributes.insert( tr(
"Z" ),
str );
915 derivedAttributes.insert( tr(
"M" ),
str );
926 closestVertexAttributes( *geom, vId,
layer, derivedAttributes );
936 return derivedAttributes;
951 std::unique_ptr< QgsRasterDataProvider > dprovider(
layer->
dataProvider()->clone() );
955 int capabilities = dprovider->capabilities();
964 dprovider->temporalCapabilities()->setRequestedTemporalRange( identifyContext.
temporalRange() );
975 QgsDebugMsg( QStringLiteral(
"coordinate not reprojectable: %1" ).arg( cse.
what() ) );
978 QgsDebugMsg( QStringLiteral(
"point = %1 %2" ).arg( point.
x() ).arg( point.
y() ) );
983 QMap< QString, QString > attributes, derivedAttributes;
1008 r.
setXMinimum( pointInCanvasCrs.
x() - mapUnitsPerPixel / 2. );
1009 r.
setXMaximum( pointInCanvasCrs.
x() + mapUnitsPerPixel / 2. );
1010 r.
setYMinimum( pointInCanvasCrs.
y() - mapUnitsPerPixel / 2. );
1011 r.
setYMaximum( pointInCanvasCrs.
y() + mapUnitsPerPixel / 2. );
1015 identifyResult = dprovider->identify( point, format, r, 1, 1 );
1031 int width =
static_cast< int >( std::round( viewExtent.
width() / mapUnitsPerPixel ) );
1032 int height =
static_cast< int >( std::round( viewExtent.
height() / mapUnitsPerPixel ) );
1034 QgsDebugMsg( QStringLiteral(
"viewExtent.width = %1 viewExtent.height = %2" ).arg( viewExtent.
width() ).arg( viewExtent.
height() ) );
1035 QgsDebugMsg( QStringLiteral(
"width = %1 height = %2" ).arg( width ).arg( height ) );
1036 QgsDebugMsg( QStringLiteral(
"xRes = %1 yRes = %2 mapUnitsPerPixel = %3" ).arg( viewExtent.
width() / width ).arg( viewExtent.
height() / height ).arg( mapUnitsPerPixel ) );
1038 identifyResult = dprovider->identify( point, format, viewExtent, width, height );
1043 if ( identifyResult.
isValid() )
1045 QMap<int, QVariant> values = identifyResult.
results();
1049 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1051 QString valueString;
1052 if ( it.value().isNull() )
1054 valueString = tr(
"no data" );
1058 QVariant value( it.value() );
1062 if (
static_cast<QMetaType::Type
>( value.type() ) == QMetaType::Float )
1071 attributes.insert( dprovider->generateBandName( it.key() ), valueString );
1074 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>(
layer ), label, attributes, derivedAttributes ) );
1078 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1080 QVariant value = it.value();
1081 if ( value.type() == QVariant::Bool && !value.toBool() )
1087 if ( value.type() == QVariant::String )
1093 attributes.insert( tr(
"Error" ), value.toString() );
1095 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>(
layer ), label, attributes, derivedAttributes ) );
1105 for (
const QgsFeature &feature : storeFeatures )
1111 QString sublayer = featureStore.params().value( QStringLiteral(
"sublayer" ) ).toString();
1112 QString featureType = featureStore.params().value( QStringLiteral(
"featureType" ) ).toString();
1114 featureType.remove( QStringLiteral(
"_feature" ) );
1116 if ( sublayer.compare(
layer->
name(), Qt::CaseInsensitive ) != 0 )
1120 if ( featureType.compare( sublayer, Qt::CaseInsensitive ) != 0 || labels.isEmpty() )
1122 labels << featureType;
1125 QMap< QString, QString > derAttributes = derivedAttributes;
1128 IdentifyResult identifyResult( qobject_cast<QgsMapLayer *>(
layer ), labels.join( QLatin1String(
" / " ) ), featureStore.fields(), feature, derAttributes );
1130 identifyResult.
mParams.insert( QStringLiteral(
"getFeatureInfoUrl" ), featureStore.params().value( QStringLiteral(
"getFeatureInfoUrl" ) ) );
1131 results->append( identifyResult );
1138 QgsDebugMsg( QStringLiteral(
"%1 HTML or text values" ).arg( values.size() ) );
1139 for (
auto it = values.constBegin(); it != values.constEnd(); ++it )
1141 QString value = it.value().toString();
1143 attributes.insert( QString(), value );
1146 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>(
layer ), label, attributes, derivedAttributes ) );
1154 attributes.insert( tr(
"Error" ), value );
1155 QString label = tr(
"Identify error" );
1156 results->append(
IdentifyResult( qobject_cast<QgsMapLayer *>(
layer ), label, attributes, derivedAttributes ) );
1172 QString QgsMapToolIdentify::formatDistance(
double distance )
const
1174 return formatDistance( distance, displayDistanceUnits() );
1177 QString QgsMapToolIdentify::formatArea(
double area )
const
1179 return formatArea( area, displayAreaUnits() );
1185 bool baseUnit = settings.
value( QStringLiteral(
"qgis/measure/keepbaseunit" ),
true ).toBool();
1193 bool baseUnit = settings.
value( QStringLiteral(
"qgis/measure/keepbaseunit" ),
true ).toBool();
1200 QList<IdentifyResult> results;
1211 for (
const QVariantMap &pt : identified )
1213 QMap<QString, QString> ptStr;
1214 QString classification;
1215 for (
auto attrIt = pt.constBegin(); attrIt != pt.constEnd(); ++attrIt )
1217 if ( attrIt.key().compare( QLatin1String(
"Z" ), Qt::CaseInsensitive ) == 0
1221 ptStr[ tr(
"Z (original)" ) ] = attrIt.value().toString();
1222 ptStr[ tr(
"Z (adjusted)" ) ] = QString::number( attrIt.value().toDouble() * elevationProps->
zScale() + elevationProps->
zOffset() );
1224 else if ( attrIt.key().compare( QLatin1String(
"Classification" ), Qt::CaseInsensitive ) == 0 )
1227 ptStr[ attrIt.key() ] = QStringLiteral(
"%1 (%2)" ).arg( attrIt.value().toString(), classification );
1231 ptStr[attrIt.key()] = attrIt.value().toString();
1234 QgsMapToolIdentify::IdentifyResult res(
layer, classification.isEmpty() ? QString::number(
id ) : QStringLiteral(
"%1 (%2)" ).arg(
id ).arg( classification ), ptStr, QMap<QString, QString>() );
1235 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.
const_part_iterator const_parts_end() const
Returns STL-style iterator pointing to the imaginary const part after the last part of the geometry.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
const_part_iterator const_parts_begin() const
Returns STL-style iterator pointing to the const first part 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.
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)
@ 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.
@ EmbeddedSymbols
Retrieve any embedded feature symbology (since QGIS 3.20)
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 unique ID, geometry and a list of field...
const QgsSymbol * embeddedSymbol() const
Returns the feature's embedded symbology, or nullptr if the feature has no embedded symbol.
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.)
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.
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 representing the specified geometry.
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.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QList< QgsMapLayer * > layers(bool expandGroupLayers=false) const
Returns the list of layers shown within the map canvas.
double scale() const
Returns the last reported scale of the canvas.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
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
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
virtual QStringList subLayers() const
Returns the sublayers of this layer.
@ Identifiable
If the layer is identifiable using the identify map tool and as a WMS layer.
virtual QgsMapLayerElevationProperties * elevationProperties()
Returns the layer's elevation properties.
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
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.
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.
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.
static QgsRaster::IdentifyFormat identifyFormatFromName(const QString &formatName)
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.
Represents a raster layer.
A rectangle specified with double values.
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.
bool contains(const QgsRectangle &rect) const SIP_HOLDGIL
Returns true when rectangle contains other 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
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
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.
static QString symbolTypeToString(Qgis::SymbolType type)
Returns a translated string version of the specified symbol type.
QColor color() const
Returns the symbol's color.
Qgis::SymbolType type() const
Returns the symbol's type.
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) const
Returns tile range that fully covers the given extent.
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.
@ FeatureSymbology
Provider is able retrieve embedded symbology associated with individual features. Since QGIS 3....
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.
Implements a map layer that is dedicated to rendering of vector tiles.
This class is responsible for decoding raw tile data written with Mapbox Vector Tiles encoding.
static QgsFields makeQgisFields(const 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 singleType(Type type) SIP_HOLDGIL
Returns the single type for a WKB type.
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
Point cloud layer. Added in QGIS 3.18.
@ MeshLayer
Mesh layer. Added in QGIS 3.2.
@ VectorLayer
Vector layer.
@ RasterLayer
Raster layer.
@ VectorTileLayer
Vector tile layer. Added in QGIS 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.
Qgis::VertexType type
Vertex type.
bool isValid() const SIP_HOLDGIL
Returns true if the vertex id is valid.