void QgsMapRendererJob::drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext ) { // render all labels for vector layers in the stack, starting at the base QListIterator<QString> li( settings.layers() ); li.toBack(); while ( li.hasPrevious() ) { if ( renderContext.renderingStopped() ) { break; } QString layerId = li.previous(); QgsMapLayer *ml = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( !ml || ( ml->type() != QgsMapLayer::VectorLayer ) ) continue; // only make labels if the layer is visible // after scale dep viewing settings are checked if ( ml->hasScaleBasedVisibility() && ( settings.scale() < ml->minimumScale() || settings.scale() > ml->maximumScale() ) ) continue; const QgsCoordinateTransform* ct = 0; QgsRectangle r1 = settings.visibleExtent(), r2; if ( settings.hasCrsTransformEnabled() ) { ct = settings.layerTransform( ml ); if ( ct ) reprojectToLayerExtent( ct, ml->crs().geographicFlag(), r1, r2 ); } renderContext.setCoordinateTransform( ct ); renderContext.setExtent( r1 ); ml->drawLabels( renderContext ); } }
static QgsQuickFeatureLayerPair _closestFeature( const QgsQuickFeatureLayerPairs &results, const QgsMapSettings &mapSettings, const QPointF &point ) { QgsPointXY mapPoint = mapSettings.mapToPixel().toMapCoordinates( point.toPoint() ); QgsGeometry mapPointGeom( QgsGeometry::fromPointXY( mapPoint ) ); double distMin = 1e10; int iMin = -1; for ( int i = 0; i < results.count(); ++i ) { const QgsQuickFeatureLayerPair &res = results.at( i ); QgsGeometry geom( res.feature().geometry() ); try { geom.transform( mapSettings.layerTransform( res.layer() ) ); } catch ( QgsCsException &e ) { Q_UNUSED( e ); // Caught an error in transform continue; } double dist = geom.distance( mapPointGeom ); if ( dist < distMin ) { iMin = i; distMin = dist; } } if ( results.empty() ) { return QgsQuickFeatureLayerPair(); } else { return results.at( iMin ); } }