Skip to content

Commit e616bff

Browse files
author
mhugent
committedNov 14, 2010
Read wfs layer crs from url, not from the GetFeature output
git-svn-id: http://svn.osgeo.org/qgis/trunk@14632 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 2f2c1d1 commit e616bff

File tree

5 files changed

+26
-32
lines changed

5 files changed

+26
-32
lines changed
 

‎src/plugins/wfs/qgswfssourceselect.cpp

+4-7
Original file line numberDiff line numberDiff line change
@@ -379,15 +379,12 @@ void QgsWFSSourceSelect::addLayer()
379379
QgsDebugMsg( QString( "%1SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=%2" ).arg( uri ).arg( typeName ) );
380380

381381
//get CRS
382-
QString crsString;
383-
if ( mProjectionSelector )
382+
QString crsString = labelCoordRefSys->text();
383+
if ( !crsString.isEmpty() )
384384
{
385-
QString authid = mProjectionSelector->selectedAuthId();
386-
if ( !authid.isEmpty() )
387-
{
388-
crsString = "&SRSNAME=" + authid;
389-
}
385+
crsString.prepend( "&SRSNAME=" );
390386
}
387+
391388
//add a wfs layer to the map
392389
if ( mIface )
393390
{

‎src/providers/wfs/qgswfsdata.cpp

-10
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const QString GML_NAMESPACE = "http://www.opengis.net/gml";
3333
QgsWFSData::QgsWFSData(
3434
const QString& uri,
3535
QgsRectangle* extent,
36-
QgsCoordinateReferenceSystem* srs,
3736
QMap<int, QgsFeature*> &features,
3837
QMap<int, QString > &idMap,
3938
const QString& geometryAttribute,
@@ -42,7 +41,6 @@ QgsWFSData::QgsWFSData(
4241
: QObject(),
4342
mUri( uri ),
4443
mExtent( extent ),
45-
mSrs( srs ),
4644
mFeatures( features ),
4745
mIdMap( idMap ),
4846
mGeometryAttribute( geometryAttribute ),
@@ -202,14 +200,6 @@ void QgsWFSData::startElement( const XML_Char* el, const XML_Char** attr )
202200
{
203201
QgsDebugMsg( "error, could not get epsg id" );
204202
}
205-
206-
if ( mSrs )
207-
{
208-
if ( !mSrs->createFromOgcWmsCrs( QString( "EPSG:%1" ).arg( epsgNr ) ) )
209-
{
210-
QgsDebugMsg( "Creation of srs from epsg failed" );
211-
}
212-
}
213203
}
214204
else if ( elementName == GML_NAMESPACE + NS_SEPARATOR + "Polygon" )
215205
{

‎src/providers/wfs/qgswfsdata.h

-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class QgsWFSData: public QObject
3838
QgsWFSData(
3939
const QString& uri,
4040
QgsRectangle* extent,
41-
QgsCoordinateReferenceSystem* srs,
4241
QMap<int, QgsFeature* > &features,
4342
QMap<int, QString > &idMap,
4443
const QString& geometryAttribute,
@@ -144,8 +143,6 @@ class QgsWFSData: public QObject
144143
//results are members such that handler routines are able to manipulate them
145144
/**Bounding box of the layer*/
146145
QgsRectangle* mExtent;
147-
/**Source srs of the layer*/
148-
QgsCoordinateReferenceSystem* mSrs;
149146
/**The features of the layer*/
150147
QMap<int, QgsFeature* > &mFeatures;
151148
/**Stores the relation between provider ids and WFS server ids*/

‎src/providers/wfs/qgswfsprovider.cpp

+20-9
Original file line numberDiff line numberDiff line change
@@ -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 )
443443
bool 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 )
530530
bool 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
{

‎src/providers/wfs/qgswfsprovider.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,8 @@ class QgsWFSProvider: public QgsVectorDataProvider
257257

258258
//helper methods for WFS-T
259259

260-
/**Extracts the typename from the providers url
261-
@return typename or a null string in case of error*/
262-
QString typeNameFromUrl() const;
260+
/**Returns HTTP parameter value from url (or empty string if it does not exist)*/
261+
QString parameterFromUrl( const QString& name ) const;
263262

264263
/**Removes a possible namespace prefix from a typename*/
265264
void removeNamespacePrefix( QString& tname ) const;

0 commit comments

Comments
 (0)
Please sign in to comment.