Skip to content

Commit 44754ed

Browse files
committed
[Server][WFS] Update QgsWfsParameters for GetFeature
1 parent 5d2c035 commit 44754ed

File tree

2 files changed

+359
-4
lines changed

2 files changed

+359
-4
lines changed

src/server/services/wfs/qgswfsparameters.cpp

Lines changed: 261 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,92 @@ namespace QgsWfs
3434
};
3535
save( pOutputFormat );
3636

37+
const Parameter pResultType = { ParameterName::RESULTTYPE,
38+
QVariant::String,
39+
QVariant( "" ),
40+
QVariant()
41+
};
42+
save( pResultType );
43+
44+
const Parameter pPropertyName = { ParameterName::PROPERTYNAME,
45+
QVariant::String,
46+
QVariant( "" ),
47+
QVariant()
48+
};
49+
save( pPropertyName );
50+
51+
const Parameter pMaxFeatures = { ParameterName::MAXFEATURES,
52+
QVariant::Int,
53+
QVariant( -1 ),
54+
QVariant()
55+
};
56+
save( pMaxFeatures );
57+
58+
const Parameter pStartIndex = { ParameterName::STARTINDEX,
59+
QVariant::Int,
60+
QVariant( 0 ),
61+
QVariant()
62+
};
63+
save( pStartIndex );
64+
3765
const Parameter pSrsName = { ParameterName::SRSNAME,
3866
QVariant::String,
3967
QVariant( "" ),
4068
QVariant()
4169
};
4270
save( pSrsName );
71+
72+
const Parameter pTypeName = { ParameterName::TYPENAME,
73+
QVariant::String,
74+
QVariant( "" ),
75+
QVariant()
76+
};
77+
save( pTypeName );
78+
79+
const Parameter pFeatureId = { ParameterName::FEATUREID,
80+
QVariant::String,
81+
QVariant( "" ),
82+
QVariant()
83+
};
84+
save( pFeatureId );
85+
86+
const Parameter pFilter = { ParameterName::FILTER,
87+
QVariant::String,
88+
QVariant( "" ),
89+
QVariant()
90+
};
91+
save( pFilter );
92+
93+
const Parameter pBbox = { ParameterName::BBOX,
94+
QVariant::String,
95+
QVariant( "" ),
96+
QVariant()
97+
};
98+
save( pBbox );
99+
100+
const Parameter pSortBy = { ParameterName::SORTBY,
101+
QVariant::String,
102+
QVariant( "" ),
103+
QVariant()
104+
};
105+
save( pSortBy );
106+
107+
const Parameter pExpFilter = { ParameterName::EXP_FILTER,
108+
QVariant::String,
109+
QVariant( "" ),
110+
QVariant()
111+
};
112+
save( pExpFilter );
113+
114+
const Parameter pGeometryName = { ParameterName::GEOMETRYNAME,
115+
QVariant::String,
116+
QVariant( "" ),
117+
QVariant()
118+
};
119+
save( pGeometryName );
43120
}
44121

45-
QgsWfsParameters::QgsWfsParameters( const QgsServerRequest::Parameters &parameters )
122+
QgsWfsParameters::QgsWfsParameters( const QgsServerRequest::Parameters &parameters ) : QgsWfsParameters()
46123
{
47124
load( parameters );
48125
}
@@ -144,11 +221,81 @@ namespace QgsWfs
144221
return f;
145222
}
146223

224+
QString QgsWfsParameters::resultTypeAsString() const
225+
{
226+
return value( ParameterName::RESULTTYPE ).toString();
227+
}
228+
229+
QStringList QgsWfsParameters::propertyNames() const
230+
{
231+
return toStringListWithExp( ParameterName::PROPERTYNAME );
232+
}
233+
234+
QString QgsWfsParameters::maxFeatures() const
235+
{
236+
return value( ParameterName::MAXFEATURES ).toString();
237+
}
238+
239+
int QgsWfsParameters::maxFeaturesAsInt() const
240+
{
241+
return toInt( ParameterName::MAXFEATURES );
242+
}
243+
244+
QString QgsWfsParameters::startIndex() const
245+
{
246+
return value( ParameterName::STARTINDEX ).toString();
247+
}
248+
249+
int QgsWfsParameters::startIndexAsInt() const
250+
{
251+
return toInt( ParameterName::STARTINDEX );
252+
}
253+
147254
QString QgsWfsParameters::srsName() const
148255
{
149256
return value( ParameterName::SRSNAME ).toString();
150257
}
151258

259+
QStringList QgsWfsParameters::typeNames() const
260+
{
261+
return toStringList( ParameterName::TYPENAME );
262+
}
263+
264+
QStringList QgsWfsParameters::featureIds() const
265+
{
266+
return toStringList( ParameterName::FEATUREID );
267+
}
268+
269+
QStringList QgsWfsParameters::filters() const
270+
{
271+
return toStringListWithExp( ParameterName::FILTER );
272+
}
273+
274+
QString QgsWfsParameters::bbox() const
275+
{
276+
return value( ParameterName::BBOX ).toString();
277+
}
278+
279+
QgsRectangle QgsWfsParameters::bboxAsRectangle() const
280+
{
281+
return toRectangle( ParameterName::BBOX );
282+
}
283+
284+
QStringList QgsWfsParameters::sortBy() const
285+
{
286+
return toStringListWithExp( ParameterName::SORTBY );
287+
}
288+
289+
QStringList QgsWfsParameters::expFilters() const
290+
{
291+
return toStringListWithExp( ParameterName::EXP_FILTER );
292+
}
293+
294+
QString QgsWfsParameters::geometryNameAsString() const
295+
{
296+
return value( ParameterName::GEOMETRYNAME ).toString();
297+
}
298+
152299
QString QgsWfsParameters::request() const
153300
{
154301
if ( mRequestParameters.contains( "REQUEST" ) )
@@ -186,6 +333,119 @@ namespace QgsWfs
186333
return metaEnum.valueToKey( name );
187334
}
188335

336+
int QgsWfsParameters::toInt( const QVariant &value, const QVariant &defaultValue, bool *error ) const
337+
{
338+
int val = defaultValue.toInt();
339+
QString valStr = value.toString();
340+
bool ok = true;
341+
342+
if ( !valStr.isEmpty() )
343+
{
344+
val = value.toInt( &ok );
345+
}
346+
*error = !ok;
347+
348+
return val;
349+
}
350+
351+
int QgsWfsParameters::toInt( ParameterName p ) const
352+
{
353+
bool error;
354+
int val = toInt( value( p ), defaultValue( p ), &error );
355+
if ( error )
356+
{
357+
QString n = name( p );
358+
QString valStr = value( p ).toString();
359+
QString msg = n + " ('" + valStr + "') cannot be converted into int";
360+
raiseError( msg );
361+
}
362+
363+
return val;
364+
}
365+
366+
QgsRectangle QgsWfsParameters::toRectangle( const QVariant &value, bool *error ) const
367+
{
368+
*error = false;
369+
QString bbox = value.toString();
370+
QgsRectangle extent;
371+
372+
if ( !bbox.isEmpty() )
373+
{
374+
QStringList corners = bbox.split( "," );
375+
376+
if ( corners.size() == 4 )
377+
{
378+
double d[4];
379+
bool ok;
380+
381+
for ( int i = 0; i < 4; i++ )
382+
{
383+
corners[i].replace( QLatin1String( " " ), QLatin1String( "+" ) );
384+
d[i] = corners[i].toDouble( &ok );
385+
if ( !ok )
386+
{
387+
*error = !ok;
388+
return extent;
389+
}
390+
}
391+
392+
extent = QgsRectangle( d[0], d[1], d[2], d[3] );
393+
}
394+
else
395+
{
396+
*error = true;
397+
return extent;
398+
}
399+
}
400+
401+
return extent;
402+
}
403+
404+
QgsRectangle QgsWfsParameters::toRectangle( ParameterName p ) const
405+
{
406+
bool error;
407+
QgsRectangle extent = toRectangle( value( p ), &error );
408+
if ( error )
409+
{
410+
QString n = name( p );
411+
QString valStr = value( p ).toString();
412+
QString msg = n + " ('" + valStr + "') cannot be converted into a rectangle";
413+
raiseError( msg );
414+
}
415+
416+
return extent;
417+
}
418+
419+
QStringList QgsWfsParameters::toStringList( ParameterName p, char delimiter ) const
420+
{
421+
return value( p ).toString().split( delimiter, QString::SkipEmptyParts );
422+
}
423+
424+
QStringList QgsWfsParameters::toStringListWithExp( ParameterName p, const QString &exp ) const
425+
{
426+
QStringList theList;
427+
428+
QString val = value( p ).toString();
429+
if ( val.isEmpty() )
430+
return theList;
431+
432+
QRegExp rx( exp );
433+
if ( rx.indexIn( val, 0 ) == -1 )
434+
{
435+
theList << val;
436+
}
437+
else
438+
{
439+
int pos = 0;
440+
while ( ( pos = rx.indexIn( val, pos ) ) != -1 )
441+
{
442+
theList << rx.cap( 1 );
443+
pos += rx.matchedLength();
444+
}
445+
}
446+
return theList;
447+
}
448+
189449
void QgsWfsParameters::log( const QString &msg ) const
190450
{
191451
QgsMessageLog::logMessage( msg, "Server", QgsMessageLog::INFO );

0 commit comments

Comments
 (0)