@@ -32,8 +32,6 @@ namespace QgsWmts
32
32
{
33
33
namespace
34
34
{
35
- QList< layerDef > getWmtsLayerList ( QgsServerInterface *serverIface, const QgsProject *project );
36
-
37
35
void appendLayerElements ( QDomDocument &doc, QDomElement &contentsElement,
38
36
QList< layerDef > wmtsLayers, QList< tileMatrixSetDef > tmsList,
39
37
const QgsProject *project );
@@ -322,182 +320,6 @@ namespace QgsWmts
322
320
}
323
321
namespace
324
322
{
325
- QList< layerDef > getWmtsLayerList ( QgsServerInterface *serverIface, const QgsProject *project )
326
- {
327
- QList< layerDef > wmtsLayers;
328
- #ifdef HAVE_SERVER_PYTHON_PLUGINS
329
- QgsAccessControl *accessControl = serverIface->accessControls ();
330
- #endif
331
- QgsCoordinateReferenceSystem wgs84 = QgsCoordinateReferenceSystem::fromOgcWmsCrs ( GEO_EPSG_CRS_AUTHID );
332
-
333
- QStringList nonIdentifiableLayers = project->nonIdentifiableLayers ();
334
-
335
- // WMTS Project configuration
336
- bool wmtsProject = project->readBoolEntry ( QStringLiteral ( " WMTSLayers" ), QStringLiteral ( " Project" ) );
337
-
338
- // Root Layer name
339
- QString rootLayerName = QgsServerProjectUtils::wmsRootName ( *project );
340
- if ( rootLayerName.isEmpty () && !project->title ().isEmpty () )
341
- {
342
- rootLayerName = project->title ();
343
- }
344
-
345
- if ( wmtsProject && !rootLayerName.isEmpty () )
346
- {
347
- layerDef pLayer;
348
- pLayer.id = rootLayerName;
349
-
350
- if ( !project->title ().isEmpty () )
351
- {
352
- pLayer.title = project->title ();
353
- pLayer.abstract = project->title ();
354
- }
355
-
356
- // transform the project native CRS into WGS84
357
- QgsRectangle projRect = QgsServerProjectUtils::wmsExtent ( *project );
358
- QgsCoordinateReferenceSystem projCrs = project->crs ();
359
- QgsCoordinateTransform exGeoTransform ( projCrs, wgs84, project );
360
- try
361
- {
362
- pLayer.wgs84BoundingRect = exGeoTransform.transformBoundingBox ( projRect );
363
- }
364
- catch ( const QgsCsException & )
365
- {
366
- pLayer.wgs84BoundingRect = QgsRectangle ( -180 , -90 , 180 , 90 );
367
- }
368
-
369
- // Formats
370
- bool wmtsPngProject = project->readBoolEntry ( QStringLiteral ( " WMTSPngLayers" ), QStringLiteral ( " Project" ) );
371
- if ( wmtsPngProject )
372
- pLayer.formats << QStringLiteral ( " image/png" );
373
- bool wmtsJpegProject = project->readBoolEntry ( QStringLiteral ( " WMTSJpegLayers" ), QStringLiteral ( " Project" ) );
374
- if ( wmtsJpegProject )
375
- pLayer.formats << QStringLiteral ( " image/jpeg" );
376
-
377
- // Project is not queryable in WMS
378
- // pLayer.queryable = ( nonIdentifiableLayers.count() != project->count() );
379
- pLayer.queryable = false ;
380
-
381
- wmtsLayers.append ( pLayer );
382
- }
383
-
384
- QStringList wmtsGroupNameList = project->readListEntry ( QStringLiteral ( " WMTSLayers" ), QStringLiteral ( " Group" ) );
385
- if ( !wmtsGroupNameList.isEmpty () )
386
- {
387
- QgsLayerTreeGroup *treeRoot = project->layerTreeRoot ();
388
-
389
- QStringList wmtsPngGroupNameList = project->readListEntry ( QStringLiteral ( " WMTSPngLayers" ), QStringLiteral ( " Group" ) );
390
- QStringList wmtsJpegGroupNameList = project->readListEntry ( QStringLiteral ( " WMTSJpegLayers" ), QStringLiteral ( " Group" ) );
391
-
392
- for ( const QString gName : wmtsGroupNameList )
393
- {
394
- QgsLayerTreeGroup *treeGroup = treeRoot->findGroup ( gName );
395
- if ( !treeGroup )
396
- {
397
- continue ;
398
- }
399
-
400
- layerDef pLayer;
401
- pLayer.id = treeGroup->customProperty ( QStringLiteral ( " wmsShortName" ) ).toString ();
402
- if ( pLayer.id .isEmpty () )
403
- pLayer.id = gName ;
404
-
405
- pLayer.title = treeGroup->customProperty ( QStringLiteral ( " wmsTitle" ) ).toString ();
406
- if ( pLayer.title .isEmpty () )
407
- pLayer.title = gName ;
408
-
409
- pLayer.abstract = treeGroup->customProperty ( QStringLiteral ( " wmsAbstract" ) ).toString ();
410
-
411
- QgsRectangle wgs84BoundingRect;
412
- bool queryable = false ;
413
- for ( QgsLayerTreeLayer *layer : treeGroup->findLayers () )
414
- {
415
- QgsMapLayer *l = layer->layer ();
416
- if ( !l )
417
- {
418
- continue ;
419
- }
420
- // transform the layer native CRS into WGS84
421
- QgsCoordinateReferenceSystem layerCrs = l->crs ();
422
- QgsCoordinateTransform exGeoTransform ( layerCrs, wgs84, project );
423
- try
424
- {
425
- wgs84BoundingRect.combineExtentWith ( exGeoTransform.transformBoundingBox ( l->extent () ) );
426
- }
427
- catch ( const QgsCsException & )
428
- {
429
- wgs84BoundingRect.combineExtentWith ( QgsRectangle ( -180 , -90 , 180 , 90 ) );
430
- }
431
- if ( !queryable && !nonIdentifiableLayers.contains ( l->id () ) )
432
- {
433
- queryable = true ;
434
- }
435
- }
436
- pLayer.wgs84BoundingRect = wgs84BoundingRect;
437
- pLayer.queryable = queryable;
438
-
439
- // Formats
440
- if ( wmtsPngGroupNameList.contains ( gName ) )
441
- pLayer.formats << QStringLiteral ( " image/png" );
442
- if ( wmtsJpegGroupNameList.contains ( gName ) )
443
- pLayer.formats << QStringLiteral ( " image/jpeg" );
444
-
445
- wmtsLayers.append ( pLayer );
446
- }
447
- }
448
-
449
- QStringList wmtsLayerIdList = project->readListEntry ( QStringLiteral ( " WMTSLayers" ), QStringLiteral ( " Layer" ) );
450
- QStringList wmtsPngLayerIdList = project->readListEntry ( QStringLiteral ( " WMTSPngLayers" ), QStringLiteral ( " Layer" ) );
451
- QStringList wmtsJpegLayerIdList = project->readListEntry ( QStringLiteral ( " WMTSJpegLayers" ), QStringLiteral ( " Layer" ) );
452
-
453
- for ( const QString lId : wmtsLayerIdList )
454
- {
455
- QgsMapLayer *l = project->mapLayer ( lId );
456
- if ( !l )
457
- {
458
- continue ;
459
- }
460
- #ifdef HAVE_SERVER_PYTHON_PLUGINS
461
- if ( !accessControl->layerReadPermission ( l ) )
462
- {
463
- continue ;
464
- }
465
- #endif
466
-
467
- layerDef pLayer;
468
- pLayer.id = l->name ();
469
- if ( !l->shortName ().isEmpty () )
470
- pLayer.id = l->shortName ();
471
- pLayer.id = pLayer.id .replace ( ' ' , ' _' );
472
-
473
- pLayer.title = l->title ();
474
- pLayer.abstract = l->abstract ();
475
-
476
- // transform the layer native CRS into WGS84
477
- QgsCoordinateReferenceSystem layerCrs = l->crs ();
478
- QgsCoordinateTransform exGeoTransform ( layerCrs, wgs84, project );
479
- try
480
- {
481
- pLayer.wgs84BoundingRect = exGeoTransform.transformBoundingBox ( l->extent () );
482
- }
483
- catch ( const QgsCsException & )
484
- {
485
- pLayer.wgs84BoundingRect = QgsRectangle ( -180 , -90 , 180 , 90 );
486
- }
487
-
488
- // Formats
489
- if ( wmtsPngLayerIdList.contains ( lId ) )
490
- pLayer.formats << QStringLiteral ( " image/png" );
491
- if ( wmtsJpegLayerIdList.contains ( lId ) )
492
- pLayer.formats << QStringLiteral ( " image/jpeg" );
493
-
494
- pLayer.queryable = ( !nonIdentifiableLayers.contains ( l->id () ) );
495
-
496
- wmtsLayers.append ( pLayer );
497
- }
498
- return wmtsLayers;
499
- }
500
-
501
323
void appendLayerElements ( QDomDocument &doc, QDomElement &contentsElement,
502
324
QList< layerDef > wmtsLayers, QList< tileMatrixSetDef > tmsList,
503
325
const QgsProject *project )
@@ -616,19 +438,10 @@ namespace QgsWmts
616
438
617
439
for ( const tileMatrixSetDef tms : tmsList )
618
440
{
619
- if ( tms.ref != QLatin1String ( " EPSG:4326" ) )
441
+ tileMatrixSetLinkDef tmsl = getLayerTileMatrixSetLink ( wmtsLayer, tms, project );
442
+ if ( tmsl.ref .isEmpty () || tmsl.ref != tms.ref )
620
443
{
621
- QgsRectangle rect;
622
- QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem::fromOgcWmsCrs ( tms.ref );
623
- QgsCoordinateTransform exGeoTransform ( wgs84, crs, project );
624
- try
625
- {
626
- rect = exGeoTransform.transformBoundingBox ( wmtsLayer.wgs84BoundingRect );
627
- }
628
- catch ( const QgsCsException & )
629
- {
630
- continue ;
631
- }
444
+ continue ;
632
445
}
633
446
634
447
// wmts:TileMatrixSetLink
@@ -641,8 +454,7 @@ namespace QgsWmts
641
454
642
455
// wmts:TileMatrixSetLimits
643
456
QDomElement tmsLimitsElement = doc.createElement ( QStringLiteral ( " TileMatrixSetLimits" )/* wmts:TileMatrixSetLimits*/ );
644
- int tmIdx = 0 ;
645
- for ( const tileMatrixDef tm : tms.tileMatrixList )
457
+ for ( int tmIdx : tmsl.tileMatrixLimits .keys () )
646
458
{
647
459
QDomElement tmLimitsElement = doc.createElement ( QStringLiteral ( " TileMatrixLimits" )/* wmts:TileMatrixLimits*/ );
648
460
@@ -651,29 +463,29 @@ namespace QgsWmts
651
463
tmIdentifierElem.appendChild ( tmIdentifierText );
652
464
tmLimitsElement.appendChild ( tmIdentifierElem );
653
465
466
+ tileMatrixLimitDef tml = tmsl.tileMatrixLimits [tmIdx];
467
+
654
468
QDomElement minTileColElem = doc.createElement ( QStringLiteral ( " MinTileCol" ) );
655
- QDomText minTileColText = doc.createTextNode ( QString::number ( 0 ) );
469
+ QDomText minTileColText = doc.createTextNode ( QString::number ( tml. minCol ) );
656
470
minTileColElem.appendChild ( minTileColText );
657
471
tmLimitsElement.appendChild ( minTileColElem );
658
472
659
473
QDomElement maxTileColElem = doc.createElement ( QStringLiteral ( " MaxTileCol" ) );
660
- QDomText maxTileColText = doc.createTextNode ( QString::number ( tm. col ) );
474
+ QDomText maxTileColText = doc.createTextNode ( QString::number ( tml. maxCol ) );
661
475
maxTileColElem.appendChild ( maxTileColText );
662
476
tmLimitsElement.appendChild ( maxTileColElem );
663
477
664
478
QDomElement minTileRowElem = doc.createElement ( QStringLiteral ( " MinTileRow" ) );
665
- QDomText minTileRowText = doc.createTextNode ( QString::number ( 0 ) );
479
+ QDomText minTileRowText = doc.createTextNode ( QString::number ( tml. minRow ) );
666
480
minTileRowElem.appendChild ( minTileRowText );
667
481
tmLimitsElement.appendChild ( minTileRowElem );
668
482
669
483
QDomElement maxTileRowElem = doc.createElement ( QStringLiteral ( " MaxTileRow" ) );
670
- QDomText maxTileRowText = doc.createTextNode ( QString::number ( tm. row ) );
484
+ QDomText maxTileRowText = doc.createTextNode ( QString::number ( tml. maxRow ) );
671
485
maxTileRowElem.appendChild ( maxTileRowText );
672
486
tmLimitsElement.appendChild ( maxTileRowElem );
673
487
674
488
tmsLimitsElement.appendChild ( tmLimitsElement );
675
-
676
- ++tmIdx;
677
489
}
678
490
tmslElement.appendChild ( tmsLimitsElement );
679
491
0 commit comments