Skip to content

Commit b1e02ee

Browse files
committed
DescribeFeatureType improvement
1 parent b89d0e2 commit b1e02ee

File tree

2 files changed

+41
-11
lines changed

2 files changed

+41
-11
lines changed

src/mapserver/qgsprojectparser.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
250250
}
251251

252252
QStringList wfsLayersId = wfsLayers();
253+
QStringList typeNameList;
254+
if ( aTypeName != "" )
255+
{
256+
typeNameList = aTypeName.split( "," );
257+
}
253258

254259
foreach ( const QDomElement &elem, mProjectLayerElements )
255260
{
@@ -258,7 +263,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
258263
{
259264
QgsMapLayer *mLayer = createLayerFromElement( elem );
260265
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
261-
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || layer->name() == aTypeName ) )
266+
267+
QString typeName = layer->name();
268+
typeName = typeName.replace( QString( " " ), QString( "_" ) );
269+
270+
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || typeNameList.contains( typeName ) ) )
262271
{
263272
//do a select with searchRect and go through all the features
264273
QgsVectorDataProvider* provider = layer->dataProvider();
@@ -270,9 +279,6 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
270279
//hidden attributes for this layer
271280
const QSet<QString>& layerExcludedAttributes = layer->excludeAttributesWFS();
272281

273-
QString typeName = layer->name();
274-
typeName = typeName.replace( QString( " " ), QString( "_" ) );
275-
276282
//xsd:element
277283
QDomElement elementElem = doc.createElement( "element"/*xsd:element*/ );
278284
elementElem.setAttribute( "name", typeName );

src/mapserver/qgswfsserver.cpp

+31-7
Original file line numberDiff line numberDiff line change
@@ -284,18 +284,42 @@ QDomDocument QgsWFSServer::describeFeatureType()
284284
importElement.setAttribute( "schemaLocation", "http://schemas.opengis.net/gml/2.1.2/feature.xsd" );
285285
schemaElement.appendChild( importElement );
286286

287-
//read TYPENAME
288-
QString typeName;
289-
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
290-
if ( type_name_it != mParameterMap.end() )
287+
//defining typename
288+
QString typeName = "";
289+
290+
QDomDocument queryDoc;
291+
QString errorMsg;
292+
if ( queryDoc.setContent( mParameterMap.value( "REQUEST_BODY" ), true, &errorMsg ) )
291293
{
292-
typeName = type_name_it.value();
294+
//read doc
295+
QDomElement queryDocElem = queryDoc.documentElement();
296+
QDomNodeList docChildNodes = queryDocElem.childNodes();
297+
if ( docChildNodes.size() )
298+
{
299+
for ( int i = 0; i < docChildNodes.size(); i++ )
300+
{
301+
QDomElement docChildElem = docChildNodes.at( i ).toElement();
302+
if ( docChildElem.tagName() == "TypeName" )
303+
{
304+
if ( typeName == "" )
305+
typeName = docChildElem.text();
306+
else
307+
typeName += "," + docChildElem.text();
308+
}
309+
}
310+
}
311+
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
293312
}
294313
else
295314
{
296-
typeName = "";
315+
//read TYPENAME
316+
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
317+
if ( type_name_it != mParameterMap.end() )
318+
{
319+
typeName = type_name_it.value();
320+
}
321+
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
297322
}
298-
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
299323
return doc;
300324
}
301325

0 commit comments

Comments
 (0)