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