@@ -284,7 +284,7 @@ bool QgsWFSProvider::addFeatures( QgsFeatureList &flist )
284
284
transactionDoc.appendChild ( transactionElem );
285
285
286
286
// find out typename from uri and strip namespace prefix
287
- QString tname = typeNameFromUrl ( );
287
+ QString tname = parameterFromUrl ( " typename " );
288
288
if ( tname.isNull () )
289
289
{
290
290
return false ;
@@ -375,7 +375,7 @@ bool QgsWFSProvider::deleteFeatures( const QgsFeatureIds &id )
375
375
}
376
376
377
377
// find out typename from uri and strip namespace prefix
378
- QString tname = typeNameFromUrl ( );
378
+ QString tname = parameterFromUrl ( " typename " );
379
379
if ( tname.isNull () )
380
380
{
381
381
return false ;
@@ -443,7 +443,7 @@ bool QgsWFSProvider::deleteFeatures( const QgsFeatureIds &id )
443
443
bool QgsWFSProvider::changeGeometryValues ( QgsGeometryMap & geometry_map )
444
444
{
445
445
// find out typename from uri and strip namespace prefix
446
- QString tname = typeNameFromUrl ( );
446
+ QString tname = parameterFromUrl ( " typename " );
447
447
if ( tname.isNull () )
448
448
{
449
449
return false ;
@@ -530,7 +530,7 @@ bool QgsWFSProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
530
530
bool QgsWFSProvider::changeAttributeValues ( const QgsChangedAttributesMap &attr_map )
531
531
{
532
532
// find out typename from uri and strip namespace prefix
533
- QString tname = typeNameFromUrl ( );
533
+ QString tname = parameterFromUrl ( " typename " );
534
534
if ( tname.isNull () )
535
535
{
536
536
return false ;
@@ -656,7 +656,18 @@ int QgsWFSProvider::getFeatureGET( const QString& uri, const QString& geometryAt
656
656
thematicAttributes.insert ( it.value ().name (), qMakePair ( it.key (), it.value () ) );
657
657
}
658
658
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 );
660
671
QObject::connect ( &dataReader, SIGNAL ( dataProgressAndSteps ( int , int ) ), this , SLOT ( handleWFSProgressMessage ( int , int ) ) );
661
672
662
673
// also connect to statusChanged signal of qgisapp (if it exists)
@@ -1989,7 +2000,7 @@ int QgsWFSProvider::capabilities() const
1989
2000
return mCapabilities ;
1990
2001
}
1991
2002
1992
- QString QgsWFSProvider::typeNameFromUrl ( ) const
2003
+ QString QgsWFSProvider::parameterFromUrl ( const QString& name ) const
1993
2004
{
1994
2005
QStringList urlSplit = dataSourceUri ().split ( " ?" );
1995
2006
if ( urlSplit.size () > 1 )
@@ -1998,7 +2009,7 @@ QString QgsWFSProvider::typeNameFromUrl() const
1998
2009
QStringList::const_iterator kvIt = keyValueSplit.constBegin ();
1999
2010
for ( ; kvIt != keyValueSplit.constEnd (); ++kvIt )
2000
2011
{
2001
- if ( kvIt->startsWith ( " typename " , Qt::CaseInsensitive ) )
2012
+ if ( kvIt->startsWith ( name , Qt::CaseInsensitive ) )
2002
2013
{
2003
2014
QStringList equalSplit = kvIt->split ( " =" );
2004
2015
if ( equalSplit.size () > 1 )
@@ -2069,7 +2080,7 @@ QDomElement QgsWFSProvider::createTransactionElement( QDomDocument& doc ) const
2069
2080
transactionElem.setAttribute ( " xsi:schemaLocation" , mWfsNamespace + " " \
2070
2081
+ dataSourceUri ().replace ( QString ( " GetFeature" ), QString ( " DescribeFeatureType" ) ) );
2071
2082
2072
- QString namespacePrefix = nameSpacePrefix ( typeNameFromUrl ( ) );
2083
+ QString namespacePrefix = nameSpacePrefix ( parameterFromUrl ( " typename " ) );
2073
2084
if ( !namespacePrefix.isEmpty () )
2074
2085
{
2075
2086
transactionElem.setAttribute ( " xmlns:" + namespacePrefix, mWfsNamespace );
@@ -2204,7 +2215,7 @@ void QgsWFSProvider::getLayerCapabilities()
2204
2215
}
2205
2216
2206
2217
// find the <FeatureType> for this layer
2207
- QString thisLayerName = typeNameFromUrl ( );
2218
+ QString thisLayerName = parameterFromUrl ( " typename " );
2208
2219
QDomNodeList featureTypeList = featureTypeListElem.elementsByTagName ( " FeatureType" );
2209
2220
for ( int i = 0 ; i < featureTypeList.size (); ++i )
2210
2221
{
0 commit comments