@@ -52,7 +52,7 @@ int QgsWFSData::getWFSData()
52
52
53
53
// separate host from query string
54
54
QUrl requestUrl (mUri );
55
- mHttp .setHost (requestUrl.host ());
55
+ mHttp .setHost (requestUrl.host (), requestUrl. port () );
56
56
mHttp .get (mUri );
57
57
58
58
// just for a test
@@ -105,6 +105,8 @@ void QgsWFSData::startElement(const XML_Char* el, const XML_Char** attr)
105
105
{
106
106
mParseModeStack .push (QgsWFSData::coordinate);
107
107
mStringCash .clear ();
108
+ mCoordinateSeparator = readCsFromAttribute (attr);
109
+ mTupleSeparator = readTsFromAttribute (attr);
108
110
}
109
111
else if (localName == mGeometryAttribute )
110
112
{
@@ -222,7 +224,7 @@ void QgsWFSData::endElement(const XML_Char* el)
222
224
else if (elementName == GML_NAMESPACE + NS_SEPARATOR + " Point" )
223
225
{
224
226
std::list<QgsPoint> pointList;
225
- if (pointsFromCoordinateString (pointList, mStringCash ) != 0 )
227
+ if (pointsFromCoordinateString (pointList, mStringCash , mCoordinateSeparator , mTupleSeparator ) != 0 )
226
228
{
227
229
// error
228
230
}
@@ -259,7 +261,7 @@ void QgsWFSData::endElement(const XML_Char* el)
259
261
// add WKB point to the feature
260
262
261
263
std::list<QgsPoint> pointList;
262
- if (pointsFromCoordinateString (pointList, mStringCash ) != 0 )
264
+ if (pointsFromCoordinateString (pointList, mStringCash , mCoordinateSeparator , mTupleSeparator ) != 0 )
263
265
{
264
266
// error
265
267
}
@@ -292,7 +294,7 @@ void QgsWFSData::endElement(const XML_Char* el)
292
294
else if (elementName == GML_NAMESPACE + NS_SEPARATOR + " LinearRing" )
293
295
{
294
296
std::list<QgsPoint> pointList;
295
- if (pointsFromCoordinateString (pointList, mStringCash ) != 0 )
297
+ if (pointsFromCoordinateString (pointList, mStringCash , mCoordinateSeparator , mTupleSeparator ) != 0 )
296
298
{
297
299
// error
298
300
}
@@ -377,6 +379,34 @@ int QgsWFSData::readEpsgFromAttribute(int& epsgNr, const XML_Char** attr) const
377
379
return 2 ;
378
380
}
379
381
382
+ QString QgsWFSData::readCsFromAttribute (const XML_Char** attr) const
383
+ {
384
+ int i = 0 ;
385
+ while (attr[i] != NULL )
386
+ {
387
+ if (strcmp (attr[i], " cs" ) == 0 )
388
+ {
389
+ return QString (attr[i+1 ]);
390
+ }
391
+ ++i;
392
+ }
393
+ return " ," ;
394
+ }
395
+
396
+ QString QgsWFSData::readTsFromAttribute (const XML_Char** attr) const
397
+ {
398
+ int i = 0 ;
399
+ while (attr[i] != NULL )
400
+ {
401
+ if (strcmp (attr[i], " ts" ) == 0 )
402
+ {
403
+ return QString (attr[i+1 ]);
404
+ }
405
+ ++i;
406
+ }
407
+ return " " ;
408
+ }
409
+
380
410
int QgsWFSData::createBBoxFromCoordinateString (QgsRect* bb, const QString& coordString) const
381
411
{
382
412
if (!bb)
@@ -387,7 +417,7 @@ int QgsWFSData::createBBoxFromCoordinateString(QgsRect* bb, const QString& coord
387
417
std::list<QgsPoint> points;
388
418
// qWarning("string is: ");
389
419
// qWarning(coordString.toLocal8Bit().data());
390
- if (pointsFromCoordinateString (points, coordString) != 0 )
420
+ if (pointsFromCoordinateString (points, coordString, mCoordinateSeparator , mTupleSeparator ) != 0 )
391
421
{
392
422
return 2 ;
393
423
}
@@ -403,18 +433,18 @@ int QgsWFSData::createBBoxFromCoordinateString(QgsRect* bb, const QString& coord
403
433
return 0 ;
404
434
}
405
435
406
- int QgsWFSData::pointsFromCoordinateString (std::list<QgsPoint>& points, const QString& coordString) const
436
+ int QgsWFSData::pointsFromCoordinateString (std::list<QgsPoint>& points, const QString& coordString, const QString& cs, const QString& ts ) const
407
437
{
408
438
// tuples are separated by space, x/y by ','
409
- QStringList tuples = coordString.split (" " , QString::SkipEmptyParts);
439
+ QStringList tuples = coordString.split (ts , QString::SkipEmptyParts);
410
440
QStringList tuples_coordinates;
411
441
double x, y;
412
442
bool conversionSuccess;
413
443
414
444
QStringList::const_iterator tupleIterator;
415
445
for (tupleIterator = tuples.constBegin (); tupleIterator != tuples.constEnd (); ++tupleIterator)
416
446
{
417
- tuples_coordinates = tupleIterator->split (" , " , QString::SkipEmptyParts);
447
+ tuples_coordinates = tupleIterator->split (cs , QString::SkipEmptyParts);
418
448
if (tuples_coordinates.size () < 2 )
419
449
{
420
450
continue ;
@@ -429,9 +459,6 @@ int QgsWFSData::pointsFromCoordinateString(std::list<QgsPoint>& points, const QS
429
459
{
430
460
continue ;
431
461
}
432
- // qWarning("adding point");
433
- // qWarning(QString::number(x).toLocal8Bit().data());
434
- // qWarning(QString::number(y).toLocal8Bit().data());
435
462
points.push_back (QgsPoint (x, y));
436
463
}
437
464
return 0 ;
0 commit comments