Skip to content

Commit

Permalink
Fix data defined expressions cannot use fields in vector tile renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Sep 14, 2020
1 parent 229c240 commit c192b04
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/core/symbology/qgssymbollayer.cpp
Expand Up @@ -246,7 +246,10 @@ int QgsSymbolLayer::renderingPass() const

QSet<QString> QgsSymbolLayer::usedAttributes( const QgsRenderContext &context ) const
{
QSet<QString> columns = mDataDefinedProperties.referencedFields( context.expressionContext() );
// calling referencedFields() with ignoreContext=true because in our expression context
// we do not have valid QgsFields yet - because of that the field names from expressions
// wouldn't get reported
QSet<QString> columns = mDataDefinedProperties.referencedFields( context.expressionContext(), true );
return columns;
}

Expand Down
13 changes: 10 additions & 3 deletions src/core/vectortile/qgsvectortilebasicrenderer.cpp
Expand Up @@ -122,10 +122,17 @@ void QgsVectorTileBasicRenderer::startRender( QgsRenderContext &context, int til
// figure out required fields for different layers
for ( const QgsVectorTileBasicRendererStyle &layerStyle : qgis::as_const( mStyles ) )
{
if ( layerStyle.isActive( tileZoom ) && !layerStyle.filterExpression().isEmpty() )
if ( layerStyle.isActive( tileZoom ) )
{
QgsExpression expr( layerStyle.filterExpression() );
mRequiredFields[layerStyle.layerName()].unite( expr.referencedColumns() );
if ( !layerStyle.filterExpression().isEmpty() )
{
QgsExpression expr( layerStyle.filterExpression() );
mRequiredFields[layerStyle.layerName()].unite( expr.referencedColumns() );
}
if ( layerStyle.symbol() )
{
mRequiredFields[layerStyle.layerName()].unite( layerStyle.symbol()->usedAttributes( context ) );
}
}
}
}
Expand Down

0 comments on commit c192b04

Please sign in to comment.