@@ -1674,6 +1674,108 @@ QDomDocument QgsWMSProjectParser::getStyles( QStringList& layerList ) const
16741674 return myDocument;
16751675}
16761676
1677+ QDomDocument QgsWMSProjectParser::describeLayer ( QStringList& layerList, const QString& hrefString ) const
1678+ {
1679+ QDomDocument myDocument = QDomDocument ();
1680+
1681+ QDomNode header = myDocument.createProcessingInstruction ( " xml" , " version=\" 1.0\" encoding=\" UTF-8\" " );
1682+ myDocument.appendChild ( header );
1683+
1684+ // Create the root element
1685+ QDomElement root = myDocument.createElementNS ( " http://www.opengis.net/sld" , " DescribeLayerResponse" );
1686+ root.setAttribute ( " xsi:schemaLocation" , " http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/DescribeLayer.xsd" );
1687+ root.setAttribute ( " xmlns:ows" , " http://www.opengis.net/ows" );
1688+ root.setAttribute ( " xmlns:se" , " http://www.opengis.net/se" );
1689+ root.setAttribute ( " xmlns:xlink" , " http://www.w3.org/1999/xlink" );
1690+ root.setAttribute ( " xmlns:xsi" , " http://www.w3.org/2001/XMLSchema-instance" );
1691+ myDocument.appendChild ( root );
1692+
1693+ // store the Version element
1694+ QDomElement versionNode = myDocument.createElement ( " Version" );
1695+ versionNode.appendChild ( myDocument.createTextNode ( " 1.1.0" ) );
1696+ root.appendChild ( versionNode );
1697+
1698+ // Prepare url
1699+ QString wfsHrefString = mProjectParser ->wfsServiceUrl ();
1700+ if ( wfsHrefString.isEmpty () )
1701+ {
1702+ wfsHrefString = hrefString;
1703+ }
1704+ QString wcsHrefString = mProjectParser ->wcsServiceUrl ();
1705+ if ( wcsHrefString.isEmpty () )
1706+ {
1707+ wcsHrefString = hrefString;
1708+ }
1709+
1710+ // WFS layers
1711+ QStringList wfsLayers = wfsLayerNames ();
1712+ // WCS layers
1713+ QStringList wcsLayers = mProjectParser ->wcsLayerNames ();
1714+
1715+ for ( int i = 0 ; i < layerList.size (); i++ )
1716+ {
1717+ QString layerName;
1718+ layerName = layerList.at ( i );
1719+ // don't use a cache - we may be changing styles
1720+ QList<QgsMapLayer*> currentLayerList = mapLayerFromStyle ( layerName, " " , false );
1721+ if ( currentLayerList.size () < 1 )
1722+ {
1723+ throw QgsMapServiceException ( " InvalidParameterValue" , QString ( " The layer '%1' is not found" ).arg ( layerName ) );
1724+ }
1725+ for ( int j = 0 ; j < currentLayerList.size (); j++ )
1726+ {
1727+ QgsMapLayer* currentLayer = currentLayerList.at ( j );
1728+ QString layerTypeName = mProjectParser ->useLayerIDs () ? currentLayer->id () : currentLayer->name ();
1729+
1730+ // Create the NamedLayer element
1731+ QDomElement layerNode = myDocument.createElement ( " LayerDescription" );
1732+ root.appendChild ( layerNode );
1733+
1734+ // store the owsType element
1735+ QDomElement typeNode = myDocument.createElement ( " owsType" );
1736+ // store the se:OnlineResource element
1737+ QDomElement oResNode = myDocument.createElement ( " se:OnlineResource" );
1738+ oResNode.setAttribute ( " xlink:type" , " simple" );
1739+ // store the TypeName element
1740+ QDomElement nameNode = myDocument.createElement ( " TypeName" );
1741+ if ( currentLayer->type () == QgsMapLayer::VectorLayer )
1742+ {
1743+ typeNode.appendChild ( myDocument.createTextNode ( " wfs" ) );
1744+
1745+ if ( wfsLayers.indexOf ( layerTypeName ) != -1 )
1746+ {
1747+ oResNode.setAttribute ( " xlink:href" , wfsHrefString );
1748+ }
1749+
1750+ // store the se:FeatureTypeName element
1751+ QDomElement typeNameNode = myDocument.createElement ( " se:FeatureTypeName" );
1752+ typeNameNode.appendChild ( myDocument.createTextNode ( layerTypeName ) );
1753+ nameNode.appendChild ( typeNameNode );
1754+ }
1755+ else if ( currentLayer->type () == QgsMapLayer::RasterLayer )
1756+ {
1757+ typeNode.appendChild ( myDocument.createTextNode ( " wcs" ) );
1758+
1759+ if ( wcsLayers.indexOf ( layerTypeName ) != -1 )
1760+ {
1761+ oResNode.setAttribute ( " xlink:href" , wcsHrefString );
1762+ }
1763+
1764+ // store the se:CoverageTypeName element
1765+ QDomElement typeNameNode = myDocument.createElement ( " se:CoverageTypeName" );
1766+ typeNameNode.appendChild ( myDocument.createTextNode ( layerTypeName ) );
1767+ nameNode.appendChild ( typeNameNode );
1768+ }
1769+ layerNode.appendChild ( typeNode );
1770+ layerNode.appendChild ( oResNode );
1771+ layerNode.appendChild ( nameNode );
1772+
1773+ }
1774+ }
1775+
1776+ return myDocument;
1777+ }
1778+
16771779QgsMapRenderer::OutputUnits QgsWMSProjectParser::outputUnits () const
16781780{
16791781 return QgsMapRenderer::Millimeters;
0 commit comments