mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
DescribeFeatureType improvement
This commit is contained in:
parent
b89d0e275c
commit
b1e02ee521
@ -250,6 +250,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
|
||||
}
|
||||
|
||||
QStringList wfsLayersId = wfsLayers();
|
||||
QStringList typeNameList;
|
||||
if ( aTypeName != "" )
|
||||
{
|
||||
typeNameList = aTypeName.split( "," );
|
||||
}
|
||||
|
||||
foreach ( const QDomElement &elem, mProjectLayerElements )
|
||||
{
|
||||
@ -258,7 +263,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
|
||||
{
|
||||
QgsMapLayer *mLayer = createLayerFromElement( elem );
|
||||
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
|
||||
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || layer->name() == aTypeName ) )
|
||||
|
||||
QString typeName = layer->name();
|
||||
typeName = typeName.replace( QString( " " ), QString( "_" ) );
|
||||
|
||||
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || typeNameList.contains( typeName ) ) )
|
||||
{
|
||||
//do a select with searchRect and go through all the features
|
||||
QgsVectorDataProvider* provider = layer->dataProvider();
|
||||
@ -270,9 +279,6 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
|
||||
//hidden attributes for this layer
|
||||
const QSet<QString>& layerExcludedAttributes = layer->excludeAttributesWFS();
|
||||
|
||||
QString typeName = layer->name();
|
||||
typeName = typeName.replace( QString( " " ), QString( "_" ) );
|
||||
|
||||
//xsd:element
|
||||
QDomElement elementElem = doc.createElement( "element"/*xsd:element*/ );
|
||||
elementElem.setAttribute( "name", typeName );
|
||||
|
@ -284,18 +284,42 @@ QDomDocument QgsWFSServer::describeFeatureType()
|
||||
importElement.setAttribute( "schemaLocation", "http://schemas.opengis.net/gml/2.1.2/feature.xsd" );
|
||||
schemaElement.appendChild( importElement );
|
||||
|
||||
//read TYPENAME
|
||||
QString typeName;
|
||||
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
|
||||
if ( type_name_it != mParameterMap.end() )
|
||||
//defining typename
|
||||
QString typeName = "";
|
||||
|
||||
QDomDocument queryDoc;
|
||||
QString errorMsg;
|
||||
if ( queryDoc.setContent( mParameterMap.value( "REQUEST_BODY" ), true, &errorMsg ) )
|
||||
{
|
||||
typeName = type_name_it.value();
|
||||
//read doc
|
||||
QDomElement queryDocElem = queryDoc.documentElement();
|
||||
QDomNodeList docChildNodes = queryDocElem.childNodes();
|
||||
if ( docChildNodes.size() )
|
||||
{
|
||||
for ( int i = 0; i < docChildNodes.size(); i++ )
|
||||
{
|
||||
QDomElement docChildElem = docChildNodes.at( i ).toElement();
|
||||
if ( docChildElem.tagName() == "TypeName" )
|
||||
{
|
||||
if ( typeName == "" )
|
||||
typeName = docChildElem.text();
|
||||
else
|
||||
typeName += "," + docChildElem.text();
|
||||
}
|
||||
}
|
||||
}
|
||||
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
|
||||
}
|
||||
else
|
||||
{
|
||||
typeName = "";
|
||||
//read TYPENAME
|
||||
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
|
||||
if ( type_name_it != mParameterMap.end() )
|
||||
{
|
||||
typeName = type_name_it.value();
|
||||
}
|
||||
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
|
||||
}
|
||||
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
|
||||
return doc;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user