@@ -400,40 +400,50 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
400
400
extensionElem.appendChild ( sequenceElem );
401
401
402
402
// xsd:element
403
- QDomElement geomElem = doc.createElement ( " element" /* xsd:element*/ );
404
- geomElem.setAttribute ( " name" , " geometry" );
405
- QGis::WkbType wkbType = layer->wkbType ();
406
- if ( wkbType != QGis::WKBNoGeometry )
403
+ if ( layer->hasGeometryType () )
407
404
{
408
- switch ( wkbType )
405
+ QDomElement geomElem = doc.createElement ( " element" /* xsd:element*/ );
406
+ geomElem.setAttribute ( " name" , " geometry" );
407
+ if ( provider->name () == " ogr" )
408
+ {
409
+ // because some ogr drivers (e.g. ESRI ShapeFile, GML)
410
+ // are not able to determine the geometry type of a layer.
411
+ // we set to GeometryType
412
+ geomElem.setAttribute ( " type" , " gml:GeometryPropertyType" );
413
+ }
414
+ else
409
415
{
410
- case QGis::WKBPoint25D:
411
- case QGis::WKBPoint:
412
- geomElem.setAttribute ( " type" , " gml:PointPropertyType" );
413
- break ;
414
- case QGis::WKBLineString25D:
415
- case QGis::WKBLineString:
416
- geomElem.setAttribute ( " type" , " gml:LineStringPropertyType" );
417
- break ;
418
- case QGis::WKBPolygon25D:
419
- case QGis::WKBPolygon:
420
- geomElem.setAttribute ( " type" , " gml:PolygonPropertyType" );
421
- break ;
422
- case QGis::WKBMultiPoint25D:
423
- case QGis::WKBMultiPoint:
424
- geomElem.setAttribute ( " type" , " gml:MultiPointPropertyType" );
425
- break ;
426
- case QGis::WKBMultiLineString25D:
427
- case QGis::WKBMultiLineString:
428
- geomElem.setAttribute ( " type" , " gml:MultiLineStringPropertyType" );
429
- break ;
430
- case QGis::WKBMultiPolygon25D:
431
- case QGis::WKBMultiPolygon:
432
- geomElem.setAttribute ( " type" , " gml:MultiPolygonPropertyType" );
433
- break ;
434
- default :
435
- geomElem.setAttribute ( " type" , " gml:GeometryPropertyType" );
436
- break ;
416
+ QGis::WkbType wkbType = layer->wkbType ();
417
+ switch ( wkbType )
418
+ {
419
+ case QGis::WKBPoint25D:
420
+ case QGis::WKBPoint:
421
+ geomElem.setAttribute ( " type" , " gml:PointPropertyType" );
422
+ break ;
423
+ case QGis::WKBLineString25D:
424
+ case QGis::WKBLineString:
425
+ geomElem.setAttribute ( " type" , " gml:LineStringPropertyType" );
426
+ break ;
427
+ case QGis::WKBPolygon25D:
428
+ case QGis::WKBPolygon:
429
+ geomElem.setAttribute ( " type" , " gml:PolygonPropertyType" );
430
+ break ;
431
+ case QGis::WKBMultiPoint25D:
432
+ case QGis::WKBMultiPoint:
433
+ geomElem.setAttribute ( " type" , " gml:MultiPointPropertyType" );
434
+ break ;
435
+ case QGis::WKBMultiLineString25D:
436
+ case QGis::WKBMultiLineString:
437
+ geomElem.setAttribute ( " type" , " gml:MultiLineStringPropertyType" );
438
+ break ;
439
+ case QGis::WKBMultiPolygon25D:
440
+ case QGis::WKBMultiPolygon:
441
+ geomElem.setAttribute ( " type" , " gml:MultiPolygonPropertyType" );
442
+ break ;
443
+ default :
444
+ geomElem.setAttribute ( " type" , " gml:GeometryPropertyType" );
445
+ break ;
446
+ }
437
447
}
438
448
geomElem.setAttribute ( " minOccurs" , " 0" );
439
449
geomElem.setAttribute ( " maxOccurs" , " 1" );
@@ -453,30 +463,30 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
453
463
}
454
464
455
465
// xsd:element
456
- QDomElement geomElem = doc.createElement ( " element" /* xsd:element*/ );
457
- geomElem .setAttribute ( " name" , attributeName );
466
+ QDomElement attElem = doc.createElement ( " element" /* xsd:element*/ );
467
+ attElem .setAttribute ( " name" , attributeName );
458
468
QVariant::Type attributeType = fields[idx].type ();
459
469
if ( attributeType == QVariant::Int )
460
- geomElem .setAttribute ( " type" , " integer" );
470
+ attElem .setAttribute ( " type" , " integer" );
461
471
else if ( attributeType == QVariant::Double )
462
- geomElem .setAttribute ( " type" , " double" );
472
+ attElem .setAttribute ( " type" , " double" );
463
473
else if ( attributeType == QVariant::Bool )
464
- geomElem .setAttribute ( " type" , " boolean" );
474
+ attElem .setAttribute ( " type" , " boolean" );
465
475
else if ( attributeType == QVariant::Date )
466
- geomElem .setAttribute ( " type" , " date" );
476
+ attElem .setAttribute ( " type" , " date" );
467
477
else if ( attributeType == QVariant::Time )
468
- geomElem .setAttribute ( " type" , " time" );
478
+ attElem .setAttribute ( " type" , " time" );
469
479
else if ( attributeType == QVariant::DateTime )
470
- geomElem .setAttribute ( " type" , " dateTime" );
480
+ attElem .setAttribute ( " type" , " dateTime" );
471
481
else
472
- geomElem .setAttribute ( " type" , " string" );
482
+ attElem .setAttribute ( " type" , " string" );
473
483
474
- sequenceElem.appendChild ( geomElem );
484
+ sequenceElem.appendChild ( attElem );
475
485
476
486
QString alias = layer->attributeAlias ( idx );
477
487
if ( !alias.isEmpty () )
478
488
{
479
- geomElem .setAttribute ( " alias" , alias );
489
+ attElem .setAttribute ( " alias" , alias );
480
490
}
481
491
}
482
492
}
0 commit comments