Skip to content

Commit

Permalink
[needs-docs] Expose choice of whether to include vector features in G…
Browse files Browse the repository at this point in the history
…eoPDF canvas output
  • Loading branch information
nyalldawson committed Aug 19, 2019
1 parent b9e160b commit 5f3f443
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 25 deletions.
2 changes: 2 additions & 0 deletions src/app/qgsmapsavedialog.cpp
Expand Up @@ -517,6 +517,8 @@ void QgsMapSaveDialog::onAccepted()
geoPdfExportDetails.useIso32000ExtensionFormatGeoreferencing = false;
geoPdfExportDetails.useOgcBestPracticeFormatGeoreferencing = true;
}

geoPdfExportDetails.includeFeatures = mExportGeoPdfFeaturesCheckBox->isChecked();
}
QgsMapRendererTask *mapRendererTask = new QgsMapRendererTask( ms, fileName, QStringLiteral( "PDF" ), saveAsRaster(), mGeoPDFGroupBox->isChecked(), geoPdfExportDetails );

Expand Down
50 changes: 28 additions & 22 deletions src/core/qgsabstractgeopdfexporter.cpp
Expand Up @@ -89,7 +89,7 @@ bool QgsAbstractGeoPdfExporter::finalize( const QList<ComponentLayerDetail> &com
Q_UNUSED( details )
return false;
#else
if ( !saveTemporaryLayers() )
if ( details.includeFeatures && !saveTemporaryLayers() )
return false;

const QString composition = createCompositionXml( components, details );
Expand Down Expand Up @@ -254,14 +254,17 @@ QString QgsAbstractGeoPdfExporter::createCompositionXml( const QList<ComponentLa
QDomElement layerTree = doc.createElement( QStringLiteral( "LayerTree" ) );
//layerTree.setAttribute( QStringLiteral("displayOnlyOnVisiblePages"), QStringLiteral("true"));
QSet< QString > createdLayerIds;
for ( const VectorComponentDetail &component : qgis::as_const( mVectorComponents ) )
if ( details.includeFeatures )
{
QDomElement layer = doc.createElement( QStringLiteral( "Layer" ) );
layer.setAttribute( QStringLiteral( "id" ), component.mapLayerId );
layer.setAttribute( QStringLiteral( "name" ), component.name );
layer.setAttribute( QStringLiteral( "initiallyVisible" ), QStringLiteral( "true" ) );
layerTree.appendChild( layer );
createdLayerIds.insert( component.mapLayerId );
for ( const VectorComponentDetail &component : qgis::as_const( mVectorComponents ) )
{
QDomElement layer = doc.createElement( QStringLiteral( "Layer" ) );
layer.setAttribute( QStringLiteral( "id" ), component.mapLayerId );
layer.setAttribute( QStringLiteral( "name" ), component.name );
layer.setAttribute( QStringLiteral( "initiallyVisible" ), QStringLiteral( "true" ) );
layerTree.appendChild( layer );
createdLayerIds.insert( component.mapLayerId );
}
}
// some PDF components may not be linked to vector components - e.g. layers with labels but no features
for ( const ComponentLayerDetail &component : components )
Expand Down Expand Up @@ -375,21 +378,24 @@ QString QgsAbstractGeoPdfExporter::createCompositionXml( const QList<ComponentLa
}

// vector datasets (we "draw" these on top, just for debugging... but they are invisible, so are never really drawn!)
for ( const VectorComponentDetail &component : qgis::as_const( mVectorComponents ) )
if ( details.includeFeatures )
{
QDomElement ifLayerOn = doc.createElement( QStringLiteral( "IfLayerOn" ) );
ifLayerOn.setAttribute( QStringLiteral( "layerId" ), component.mapLayerId );
QDomElement vectorDataset = doc.createElement( QStringLiteral( "Vector" ) );
vectorDataset.setAttribute( QStringLiteral( "dataset" ), component.sourceVectorPath );
vectorDataset.setAttribute( QStringLiteral( "layer" ), component.sourceVectorLayer );
vectorDataset.setAttribute( QStringLiteral( "visible" ), QStringLiteral( "false" ) );
QDomElement logicalStructure = doc.createElement( QStringLiteral( "LogicalStructure" ) );
logicalStructure.setAttribute( QStringLiteral( "displayLayerName" ), component.name );
if ( !component.displayAttribute.isEmpty() )
logicalStructure.setAttribute( QStringLiteral( "fieldToDisplay" ), component.displayAttribute );
vectorDataset.appendChild( logicalStructure );
ifLayerOn.appendChild( vectorDataset );
content.appendChild( ifLayerOn );
for ( const VectorComponentDetail &component : qgis::as_const( mVectorComponents ) )
{
QDomElement ifLayerOn = doc.createElement( QStringLiteral( "IfLayerOn" ) );
ifLayerOn.setAttribute( QStringLiteral( "layerId" ), component.mapLayerId );
QDomElement vectorDataset = doc.createElement( QStringLiteral( "Vector" ) );
vectorDataset.setAttribute( QStringLiteral( "dataset" ), component.sourceVectorPath );
vectorDataset.setAttribute( QStringLiteral( "layer" ), component.sourceVectorLayer );
vectorDataset.setAttribute( QStringLiteral( "visible" ), QStringLiteral( "false" ) );
QDomElement logicalStructure = doc.createElement( QStringLiteral( "LogicalStructure" ) );
logicalStructure.setAttribute( QStringLiteral( "displayLayerName" ), component.name );
if ( !component.displayAttribute.isEmpty() )
logicalStructure.setAttribute( QStringLiteral( "fieldToDisplay" ), component.displayAttribute );
vectorDataset.appendChild( logicalStructure );
ifLayerOn.appendChild( vectorDataset );
content.appendChild( ifLayerOn );
}
}

page.appendChild( content );
Expand Down
5 changes: 5 additions & 0 deletions src/core/qgsabstractgeopdfexporter.h
Expand Up @@ -176,6 +176,11 @@ class CORE_EXPORT QgsAbstractGeoPdfExporter
*/
bool useOgcBestPracticeFormatGeoreferencing = false;

/**
* TRUE if feature vector information (such as attributes) should be exported.
*/
bool includeFeatures = true;

};

/**
Expand Down
8 changes: 5 additions & 3 deletions src/core/qgsmaprenderertask.cpp
Expand Up @@ -166,7 +166,6 @@ bool QgsMapRendererTask::run()

if ( mGeoPDF )
{

QList< QgsAbstractGeoPdfExporter::ComponentLayerDetail > pdfComponents;

QgsMapRendererStagedRenderJob *job = static_cast< QgsMapRendererStagedRenderJob * >( mJob.get() );
Expand Down Expand Up @@ -369,8 +368,11 @@ void QgsMapRendererTask::prepare()
if ( mGeoPDF )
{
mGeoPdfExporter = qgis::make_unique< QgsMapRendererTaskGeoPdfExporter >( mMapSettings );
mRenderedFeatureHandler = qgis::make_unique< QgsMapRendererTaskRenderedFeatureHandler >( static_cast< QgsMapRendererTaskGeoPdfExporter * >( mGeoPdfExporter.get() ) );
mMapSettings.addRenderedFeatureHandler( mRenderedFeatureHandler.get() );
if ( mGeoPdfExportDetails.includeFeatures )
{
mRenderedFeatureHandler = qgis::make_unique< QgsMapRendererTaskRenderedFeatureHandler >( static_cast< QgsMapRendererTaskGeoPdfExporter * >( mGeoPdfExporter.get() ) );
mMapSettings.addRenderedFeatureHandler( mRenderedFeatureHandler.get() );
}
mJob.reset( new QgsMapRendererStagedRenderJob( mMapSettings, QgsMapRendererStagedRenderJob::RenderLabelsByMapLayer ) );
mJob->start();
return;
Expand Down
13 changes: 13 additions & 0 deletions src/ui/qgsmapsavedialog.ui
Expand Up @@ -119,6 +119,19 @@
<property name="text">
<string>Export RDF metadata (title, author, etc.)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="mExportGeoPdfFeaturesCheckBox">
<property name="text">
<string>Include vector feature information</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
Expand Down

0 comments on commit 5f3f443

Please sign in to comment.