@@ -1391,51 +1391,84 @@ QString QgsMapLayer::saveNamedStyle( const QString &uri, bool &resultFlag, Style
1391
1391
return saveNamedProperty ( uri, QgsMapLayer::Style , resultFlag, categories );
1392
1392
}
1393
1393
1394
- void QgsMapLayer::exportSldStyle ( QDomDocument &doc, QString &errorMsg ) const
1394
+ void QgsMapLayer::exportSldStyle ( QDomDocument &doc, QString &errorMsg )
1395
1395
{
1396
1396
QDomDocument myDocument = QDomDocument ();
1397
1397
1398
1398
QDomNode header = myDocument.createProcessingInstruction ( QStringLiteral ( " xml" ), QStringLiteral ( " version=\" 1.0\" encoding=\" UTF-8\" " ) );
1399
1399
myDocument.appendChild ( header );
1400
1400
1401
- // Create the root element
1402
- QDomElement root = myDocument.createElementNS ( QStringLiteral ( " http://www.opengis.net/sld" ), QStringLiteral ( " StyledLayerDescriptor" ) );
1403
- root.setAttribute ( QStringLiteral ( " version" ), QStringLiteral ( " 1.1.0" ) );
1404
- root.setAttribute ( QStringLiteral ( " xsi:schemaLocation" ), QStringLiteral ( " http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" ) );
1405
- root.setAttribute ( QStringLiteral ( " xmlns:ogc" ), QStringLiteral ( " http://www.opengis.net/ogc" ) );
1406
- root.setAttribute ( QStringLiteral ( " xmlns:se" ), QStringLiteral ( " http://www.opengis.net/se" ) );
1407
- root.setAttribute ( QStringLiteral ( " xmlns:xlink" ), QStringLiteral ( " http://www.w3.org/1999/xlink" ) );
1408
- root.setAttribute ( QStringLiteral ( " xmlns:xsi" ), QStringLiteral ( " http://www.w3.org/2001/XMLSchema-instance" ) );
1409
- myDocument.appendChild ( root );
1410
-
1411
- // Create the NamedLayer element
1412
- QDomElement namedLayerNode = myDocument.createElement ( QStringLiteral ( " NamedLayer" ) );
1413
- root.appendChild ( namedLayerNode );
1414
-
1415
1401
const QgsVectorLayer *vlayer = qobject_cast<const QgsVectorLayer *>( this );
1416
- if ( !vlayer )
1402
+ QgsRasterLayer *rlayer = qobject_cast<QgsRasterLayer *>( this );
1403
+ if (!vlayer && !rlayer)
1417
1404
{
1418
1405
errorMsg = tr ( " Could not save symbology because:\n %1" )
1419
- .arg ( QStringLiteral ( " Non- vector layers not supported yet" ) );
1406
+ .arg ( QStringLiteral ( " Non vector or raster layers are supported yet" ) );
1420
1407
return ;
1421
1408
}
1422
1409
1410
+ // Create the root element
1411
+ QDomElement root = myDocument.createElementNS ( QStringLiteral ( " http://www.opengis.net/sld" ), QStringLiteral ( " StyledLayerDescriptor" ) );
1412
+ QDomElement layerNode;
1413
+ if ( vlayer )
1414
+ {
1415
+ root.setAttribute ( QStringLiteral ( " version" ), QStringLiteral ( " 1.1.0" ) );
1416
+ root.setAttribute ( QStringLiteral ( " xsi:schemaLocation" ), QStringLiteral ( " http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" ) );
1417
+ root.setAttribute ( QStringLiteral ( " xmlns:ogc" ), QStringLiteral ( " http://www.opengis.net/ogc" ) );
1418
+ root.setAttribute ( QStringLiteral ( " xmlns:se" ), QStringLiteral ( " http://www.opengis.net/se" ) );
1419
+ root.setAttribute ( QStringLiteral ( " xmlns:xlink" ), QStringLiteral ( " http://www.w3.org/1999/xlink" ) );
1420
+ root.setAttribute ( QStringLiteral ( " xmlns:xsi" ), QStringLiteral ( " http://www.w3.org/2001/XMLSchema-instance" ) );
1421
+ myDocument.appendChild ( root );
1422
+
1423
+ // Create the NamedLayer element
1424
+ layerNode = myDocument.createElement ( QStringLiteral ( " NamedLayer" ) );
1425
+ root.appendChild ( layerNode );
1426
+ }
1427
+
1428
+ // note rster layer generate only 1.0 SLD version mostly becase seems none is using SE1.1.0 at leasst for rasters
1429
+ if ( rlayer )
1430
+ {
1431
+ // Create the root element
1432
+ root.setAttribute ( QStringLiteral ( " version" ), QStringLiteral ( " 1.0.0" ) );
1433
+ root.setAttribute ( QStringLiteral ( " xmlns:gml" ), QStringLiteral ( " http://www.opengis.net/gml" ) );
1434
+ root.setAttribute ( QStringLiteral ( " xmlns:ogc" ), QStringLiteral ( " http://www.opengis.net/ogc" ) );
1435
+ root.setAttribute ( QStringLiteral ( " xmlns:sld" ), QStringLiteral ( " http://www.opengis.net/sld" ) );
1436
+ myDocument.appendChild ( root );
1437
+
1438
+ // Create the NamedLayer element
1439
+ layerNode = myDocument.createElement ( QStringLiteral ( " UserLayer" ) );
1440
+ root.appendChild ( layerNode );
1441
+ }
1442
+
1423
1443
QgsStringMap props;
1424
1444
if ( hasScaleBasedVisibility () )
1425
1445
{
1426
- props[ QStringLiteral ( " scaleMinDenom" )] = QString::number ( mMinScale );
1427
- props[ QStringLiteral ( " scaleMaxDenom" )] = QString::number ( mMaxScale );
1446
+ props[ QStringLiteral ( " scaleMinDenom" ) ] = QString::number ( mMinScale );
1447
+ props[ QStringLiteral ( " scaleMaxDenom" ) ] = QString::number ( mMaxScale );
1428
1448
}
1429
- if ( !vlayer->writeSld ( namedLayerNode, myDocument, errorMsg, props ) )
1449
+
1450
+ if (vlayer)
1430
1451
{
1431
- errorMsg = tr ( " Could not save symbology because:\n %1" ).arg ( errorMsg );
1432
- return ;
1452
+ if ( !vlayer->writeSld ( layerNode, myDocument, errorMsg, props ) )
1453
+ {
1454
+ errorMsg = tr ( " Could not save symbology because:\n %1" ).arg ( errorMsg );
1455
+ return ;
1456
+ }
1457
+ }
1458
+
1459
+ if (rlayer)
1460
+ {
1461
+ if ( !rlayer->writeSld ( layerNode, myDocument, errorMsg, props ) )
1462
+ {
1463
+ errorMsg = tr ( " Could not save symbology because:\n %1" ).arg ( errorMsg );
1464
+ return ;
1465
+ }
1433
1466
}
1434
1467
1435
1468
doc = myDocument;
1436
1469
}
1437
1470
1438
- QString QgsMapLayer::saveSldStyle ( const QString &uri, bool &resultFlag ) const
1471
+ QString QgsMapLayer::saveSldStyle ( const QString &uri, bool &resultFlag )
1439
1472
{
1440
1473
QString errorMsg;
1441
1474
QDomDocument myDocument;
@@ -1445,22 +1478,20 @@ QString QgsMapLayer::saveSldStyle( const QString &uri, bool &resultFlag ) const
1445
1478
resultFlag = false ;
1446
1479
return errorMsg;
1447
1480
}
1448
- const QgsVectorLayer *vlayer = qobject_cast<const QgsVectorLayer *>( this );
1449
-
1450
1481
// check if the uri is a file or ends with .sld,
1451
1482
// which indicates that it should become one
1452
1483
QString filename;
1453
- if ( vlayer-> providerType () == QLatin1String ( " ogr" ) )
1484
+ if ( providerType () == QLatin1String ( " ogr" ) )
1454
1485
{
1455
1486
QStringList theURIParts = uri.split ( ' |' );
1456
1487
filename = theURIParts[0 ];
1457
1488
}
1458
- else if ( vlayer-> providerType () == QLatin1String ( " gpx" ) )
1489
+ else if ( providerType () == QLatin1String ( " gpx" ) )
1459
1490
{
1460
1491
QStringList theURIParts = uri.split ( ' ?' );
1461
1492
filename = theURIParts[0 ];
1462
1493
}
1463
- else if ( vlayer-> providerType () == QLatin1String ( " delimitedtext" ) )
1494
+ else if ( providerType () == QLatin1String ( " delimitedtext" ) )
1464
1495
{
1465
1496
filename = QUrl::fromEncoded ( uri.toLatin1 () ).toLocalFile ();
1466
1497
// toLocalFile() returns an empty string if theURI is a plain Windows-path, e.g. "C:/style.qml"
0 commit comments