@@ -284,7 +284,7 @@ bool QgsWFSProvider::addFeatures( QgsFeatureList &flist )
284284 transactionDoc.appendChild ( transactionElem );
285285
286286 // find out typename from uri and strip namespace prefix
287- QString tname = typeNameFromUrl ( );
287+ QString tname = parameterFromUrl ( " typename " );
288288 if ( tname.isNull () )
289289 {
290290 return false ;
@@ -375,7 +375,7 @@ bool QgsWFSProvider::deleteFeatures( const QgsFeatureIds &id )
375375 }
376376
377377 // find out typename from uri and strip namespace prefix
378- QString tname = typeNameFromUrl ( );
378+ QString tname = parameterFromUrl ( " typename " );
379379 if ( tname.isNull () )
380380 {
381381 return false ;
@@ -443,7 +443,7 @@ bool QgsWFSProvider::deleteFeatures( const QgsFeatureIds &id )
443443bool QgsWFSProvider::changeGeometryValues ( QgsGeometryMap & geometry_map )
444444{
445445 // find out typename from uri and strip namespace prefix
446- QString tname = typeNameFromUrl ( );
446+ QString tname = parameterFromUrl ( " typename " );
447447 if ( tname.isNull () )
448448 {
449449 return false ;
@@ -530,7 +530,7 @@ bool QgsWFSProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
530530bool QgsWFSProvider::changeAttributeValues ( const QgsChangedAttributesMap &attr_map )
531531{
532532 // find out typename from uri and strip namespace prefix
533- QString tname = typeNameFromUrl ( );
533+ QString tname = parameterFromUrl ( " typename " );
534534 if ( tname.isNull () )
535535 {
536536 return false ;
@@ -656,7 +656,18 @@ int QgsWFSProvider::getFeatureGET( const QString& uri, const QString& geometryAt
656656 thematicAttributes.insert ( it.value ().name (), qMakePair ( it.key (), it.value () ) );
657657 }
658658
659- QgsWFSData dataReader ( uri, &mExtent , &mSourceCRS , mFeatures , mIdMap , geometryAttribute, thematicAttributes, &mWKBType );
659+ // create mSourceCRS from url if possible
660+ QString srsname = parameterFromUrl ( " SRSNAME" );
661+ if ( !srsname.isEmpty () )
662+ {
663+ QStringList epsgSplit = srsname.split ( " :" );
664+ if ( epsgSplit.size () > 1 )
665+ {
666+ mSourceCRS .createFromEpsg ( epsgSplit.at ( 1 ).toInt () );
667+ }
668+ }
669+
670+ QgsWFSData dataReader ( uri, &mExtent , mFeatures , mIdMap , geometryAttribute, thematicAttributes, &mWKBType );
660671 QObject::connect ( &dataReader, SIGNAL ( dataProgressAndSteps ( int , int ) ), this , SLOT ( handleWFSProgressMessage ( int , int ) ) );
661672
662673 // also connect to statusChanged signal of qgisapp (if it exists)
@@ -1989,7 +2000,7 @@ int QgsWFSProvider::capabilities() const
19892000 return mCapabilities ;
19902001}
19912002
1992- QString QgsWFSProvider::typeNameFromUrl ( ) const
2003+ QString QgsWFSProvider::parameterFromUrl ( const QString& name ) const
19932004{
19942005 QStringList urlSplit = dataSourceUri ().split ( " ?" );
19952006 if ( urlSplit.size () > 1 )
@@ -1998,7 +2009,7 @@ QString QgsWFSProvider::typeNameFromUrl() const
19982009 QStringList::const_iterator kvIt = keyValueSplit.constBegin ();
19992010 for ( ; kvIt != keyValueSplit.constEnd (); ++kvIt )
20002011 {
2001- if ( kvIt->startsWith ( " typename " , Qt::CaseInsensitive ) )
2012+ if ( kvIt->startsWith ( name , Qt::CaseInsensitive ) )
20022013 {
20032014 QStringList equalSplit = kvIt->split ( " =" );
20042015 if ( equalSplit.size () > 1 )
@@ -2069,7 +2080,7 @@ QDomElement QgsWFSProvider::createTransactionElement( QDomDocument& doc ) const
20692080 transactionElem.setAttribute ( " xsi:schemaLocation" , mWfsNamespace + " " \
20702081 + dataSourceUri ().replace ( QString ( " GetFeature" ), QString ( " DescribeFeatureType" ) ) );
20712082
2072- QString namespacePrefix = nameSpacePrefix ( typeNameFromUrl ( ) );
2083+ QString namespacePrefix = nameSpacePrefix ( parameterFromUrl ( " typename " ) );
20732084 if ( !namespacePrefix.isEmpty () )
20742085 {
20752086 transactionElem.setAttribute ( " xmlns:" + namespacePrefix, mWfsNamespace );
@@ -2204,7 +2215,7 @@ void QgsWFSProvider::getLayerCapabilities()
22042215 }
22052216
22062217 // find the <FeatureType> for this layer
2207- QString thisLayerName = typeNameFromUrl ( );
2218+ QString thisLayerName = parameterFromUrl ( " typename " );
22082219 QDomNodeList featureTypeList = featureTypeListElem.elementsByTagName ( " FeatureType" );
22092220 for ( int i = 0 ; i < featureTypeList.size (); ++i )
22102221 {
0 commit comments