Skip to content

Commit 8173484

Browse files
committed
Revert "In addition to indicate the geometry type in the DescribeFeatureType request, this patch adds boundedBy to FeatureCollection and Feature element."
This reverts commit 3417568.
1 parent 3417568 commit 8173484

File tree

3 files changed

+26
-186
lines changed

3 files changed

+26
-186
lines changed

src/core/qgsgeometry.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -4226,10 +4226,10 @@ QString QgsGeometry::exportToGeoJSON()
42264226
{
42274227
mWkt += "{ \"type\": \"Point\", \"coordinates\": [";
42284228
x = ( double * )( mGeometry + 5 );
4229-
mWkt += QString::number( *x, 'f' );
4229+
mWkt += QString::number( *x, 'f', 6 );
42304230
mWkt += ", ";
42314231
y = ( double * )( mGeometry + 5 + sizeof( double ) );
4232-
mWkt += QString::number( *y, 'f' );
4232+
mWkt += QString::number( *y, 'f', 6 );
42334233
mWkt += "] }";
42344234
return mWkt;
42354235
}
@@ -4256,11 +4256,11 @@ QString QgsGeometry::exportToGeoJSON()
42564256
}
42574257
mWkt += "[";
42584258
x = ( double * ) ptr;
4259-
mWkt += QString::number( *x, 'f' );
4259+
mWkt += QString::number( *x, 'f', 6 );
42604260
mWkt += ", ";
42614261
ptr += sizeof( double );
42624262
y = ( double * ) ptr;
4263-
mWkt += QString::number( *y, 'f' );
4263+
mWkt += QString::number( *y, 'f', 6 );
42644264
ptr += sizeof( double );
42654265
if ( hasZValue )
42664266
{
@@ -4313,11 +4313,11 @@ QString QgsGeometry::exportToGeoJSON()
43134313
}
43144314
mWkt += "[";
43154315
x = ( double * ) ptr;
4316-
mWkt += QString::number( *x, 'f' );
4316+
mWkt += QString::number( *x, 'f', 6 );
43174317
mWkt += ", ";
43184318
ptr += sizeof( double );
43194319
y = ( double * ) ptr;
4320-
mWkt += QString::number( *y, 'f' );
4320+
mWkt += QString::number( *y, 'f', 6 );
43214321
ptr += sizeof( double );
43224322
if ( hasZValue )
43234323
{
@@ -4353,11 +4353,11 @@ QString QgsGeometry::exportToGeoJSON()
43534353
}
43544354
mWkt += "[";
43554355
x = ( double * )( ptr );
4356-
mWkt += QString::number( *x, 'f' );
4356+
mWkt += QString::number( *x, 'f', 6 );
43574357
mWkt += ", ";
43584358
ptr += sizeof( double );
43594359
y = ( double * )( ptr );
4360-
mWkt += QString::number( *y, 'f' );
4360+
mWkt += QString::number( *y, 'f', 6 );
43614361
ptr += sizeof( double );
43624362
if ( hasZValue )
43634363
{
@@ -4399,11 +4399,11 @@ QString QgsGeometry::exportToGeoJSON()
43994399
}
44004400
mWkt += "[";
44014401
x = ( double * ) ptr;
4402-
mWkt += QString::number( *x, 'f' );
4402+
mWkt += QString::number( *x, 'f', 6 );
44034403
ptr += sizeof( double );
44044404
mWkt += ", ";
44054405
y = ( double * ) ptr;
4406-
mWkt += QString::number( *y, 'f' );
4406+
mWkt += QString::number( *y, 'f', 6 );
44074407
ptr += sizeof( double );
44084408
if ( hasZValue )
44094409
{
@@ -4457,11 +4457,11 @@ QString QgsGeometry::exportToGeoJSON()
44574457
}
44584458
mWkt += "[";
44594459
x = ( double * ) ptr;
4460-
mWkt += QString::number( *x, 'f' );
4460+
mWkt += QString::number( *x, 'f', 6 );
44614461
ptr += sizeof( double );
44624462
mWkt += ", ";
44634463
y = ( double * ) ptr;
4464-
mWkt += QString::number( *y, 'f' );
4464+
mWkt += QString::number( *y, 'f', 6 );
44654465
ptr += sizeof( double );
44664466
if ( hasZValue )
44674467
{

src/mapserver/qgswfsserver.cpp

+13-171
Original file line numberDiff line numberDiff line change
@@ -331,37 +331,7 @@ QDomDocument QgsWFSServer::describeFeatureType()
331331
//xsd:element
332332
QDomElement geomElem = doc.createElement( "element"/*xsd:element*/ );
333333
geomElem.setAttribute( "name", "geometry" );
334-
QGis::WkbType wkbType = layer->wkbType();
335-
switch ( wkbType )
336-
{
337-
case QGis::WKBPoint25D:
338-
case QGis::WKBPoint:
339-
geomElem.setAttribute( "type", "gml:PointPropertyType" );
340-
break;
341-
case QGis::WKBLineString25D:
342-
case QGis::WKBLineString:
343-
geomElem.setAttribute( "type", "gml:LineStringPropertyType" );
344-
break;
345-
case QGis::WKBPolygon25D:
346-
case QGis::WKBPolygon:
347-
geomElem.setAttribute( "type", "gml:PolygonPropertyType" );
348-
break;
349-
case QGis::WKBMultiPoint25D:
350-
case QGis::WKBMultiPoint:
351-
geomElem.setAttribute( "type", "gml:MultiPointPropertyType" );
352-
break;
353-
case QGis::WKBMultiLineString25D:
354-
case QGis::WKBMultiLineString:
355-
geomElem.setAttribute( "type", "gml:MultiLineStringPropertyType" );
356-
break;
357-
case QGis::WKBMultiPolygon25D:
358-
case QGis::WKBMultiPolygon:
359-
geomElem.setAttribute( "type", "gml:MultiPolygonPropertyType" );
360-
break;
361-
default:
362-
geomElem.setAttribute( "type", "gml:GeometryPropertyType" );
363-
break;
364-
}
334+
geomElem.setAttribute( "type", "gml:GeometryPropertyType" );
365335
geomElem.setAttribute( "minOccurs", "0" );
366336
geomElem.setAttribute( "maxOccurs", "1" );
367337
sequenceElem.appendChild( geomElem );
@@ -573,11 +543,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
573543
}
574544
}
575545

576-
if ( bboxOk )
577-
searchRect.set( minx, miny, maxx, maxy );
578546
QgsCoordinateReferenceSystem layerCrs = layer->crs();
579547

580-
startGetFeature( request, format, layerCrs, &searchRect );
548+
startGetFeature( request, format );
581549

582550
if ( fidOk )
583551
{
@@ -621,6 +589,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
621589
}
622590
else
623591
{
592+
if ( bboxOk )
593+
searchRect.set( minx, miny, maxx, maxy );
624594
provider->select( attrIndexes, searchRect, mWithGeom, true );
625595
while ( provider->nextFeature( feature ) && featureCounter < maxFeat )
626596
{
@@ -638,102 +608,25 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
638608
return 0;
639609
}
640610

641-
void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& format, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect )
611+
void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& format )
642612
{
643613
QByteArray result;
644614
QString fcString;
645615
if ( format == "GeoJSON" )
646616
{
647617
fcString = "{\"type\": \"FeatureCollection\",\n";
648-
fcString += " \"bbox\": [ "+ QString::number( rect->xMinimum(), 'f' ) +", "+ QString::number( rect->yMinimum(), 'f' ) +", "+ QString::number( rect->xMaximum(), 'f' ) +", "+ QString::number( rect->yMaximum(), 'f' ) +"],\n";
649618
fcString += " \"features\": [\n";
650619
result = fcString.toUtf8();
651620
request.startGetFeatureResponse( &result, format );
652621
}
653622
else
654623
{
655-
//Prepare url
656-
//Some client requests already have http://<SERVER_NAME> in the REQUEST_URI variable
657-
QString hrefString;
658-
QString requestUrl = getenv( "REQUEST_URI" );
659-
QUrl mapUrl( requestUrl );
660-
mapUrl.setHost( QString( getenv( "SERVER_NAME" ) ) );
661-
662-
//Add non-default ports to url
663-
QString portString = getenv( "SERVER_PORT" );
664-
if ( !portString.isEmpty() )
665-
{
666-
bool portOk;
667-
int portNumber = portString.toInt( &portOk );
668-
if ( portOk )
669-
{
670-
if ( portNumber != 80 )
671-
{
672-
mapUrl.setPort( portNumber );
673-
}
674-
}
675-
}
676-
677-
if ( QString( getenv( "HTTPS" ) ).compare( "on", Qt::CaseInsensitive ) == 0 )
678-
{
679-
mapUrl.setScheme( "https" );
680-
}
681-
else
682-
{
683-
mapUrl.setScheme( "http" );
684-
}
685-
686-
QList<QPair<QString, QString> > queryItems = mapUrl.queryItems();
687-
QList<QPair<QString, QString> >::const_iterator queryIt = queryItems.constBegin();
688-
for ( ; queryIt != queryItems.constEnd(); ++queryIt )
689-
{
690-
if ( queryIt->first.compare( "REQUEST", Qt::CaseInsensitive ) == 0 )
691-
{
692-
mapUrl.removeQueryItem( queryIt->first );
693-
mapUrl.addQueryItem( queryIt->first, "DescribeFeatureType" );
694-
}
695-
else if ( queryIt->first.compare( "FORMAT", Qt::CaseInsensitive ) == 0 )
696-
{
697-
mapUrl.removeQueryItem( queryIt->first );
698-
}
699-
else if ( queryIt->first.compare( "OUTPUTFORMAT", Qt::CaseInsensitive ) == 0 )
700-
{
701-
mapUrl.removeQueryItem( queryIt->first );
702-
}
703-
else if ( queryIt->first.compare( "BBOX", Qt::CaseInsensitive ) == 0 )
704-
{
705-
mapUrl.removeQueryItem( queryIt->first );
706-
}
707-
else if ( queryIt->first.compare( "FEATUREID", Qt::CaseInsensitive ) == 0 )
708-
{
709-
mapUrl.removeQueryItem( queryIt->first );
710-
}
711-
else if ( queryIt->first.compare( "FILTER", Qt::CaseInsensitive ) == 0 )
712-
{
713-
mapUrl.removeQueryItem( queryIt->first );
714-
}
715-
else if ( queryIt->first.compare( "MAXFEATURES", Qt::CaseInsensitive ) == 0 )
716-
{
717-
mapUrl.removeQueryItem( queryIt->first );
718-
}
719-
else if ( queryIt->first.compare( "PROPERTYNAME", Qt::CaseInsensitive ) == 0 )
720-
{
721-
mapUrl.removeQueryItem( queryIt->first );
722-
}
723-
else if ( queryIt->first.compare( "_DC", Qt::CaseInsensitive ) == 0 )
724-
{
725-
mapUrl.removeQueryItem( queryIt->first );
726-
}
727-
}
728-
mapUrl.addQueryItem( "OUTPUTFORMAT", "XMLSCHEMA" );
729-
hrefString = mapUrl.toString();
730-
731624
//wfs:FeatureCollection
732625
fcString = "<wfs:FeatureCollection";
733626
fcString += " xmlns=\"http://www.opengis.net/wfs\"";
734627
fcString += " xmlns:wfs=\"http://www.opengis.net/wfs\"";
735628
fcString += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
736-
fcString += " xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd http://www.opengis.net/gml "+ hrefString.replace( "&", "&amp;" ) +"\"";
629+
fcString += " xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd\"";
737630
fcString += " xmlns:ogc=\"http://www.opengis.net/ogc\"";
738631
fcString += " xmlns:gml=\"http://www.opengis.net/gml\"";
739632
fcString += " xmlns:ows=\"http://www.opengis.net/ows\"";
@@ -742,21 +635,6 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
742635
fcString += ">";
743636
result = fcString.toUtf8();
744637
request.startGetFeatureResponse( &result, format );
745-
746-
QDomDocument doc;
747-
QDomElement bbElem = doc.createElement( "gml:boundedBy" );
748-
QDomElement boxElem = createBoxElem( rect, doc );
749-
if ( !boxElem.isNull() )
750-
{
751-
if ( crs.isValid() )
752-
{
753-
boxElem.setAttribute( "srsName", crs.authid() );
754-
}
755-
bbElem.appendChild( boxElem );
756-
doc.appendChild( bbElem );
757-
}
758-
result = doc.toByteArray();
759-
request.sendGetFeatureResponse( &result );
760638
}
761639
fcString = "";
762640
}
@@ -823,10 +701,6 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateRefer
823701
QgsGeometry* geom = feat->geometry();
824702
if ( geom && mWithGeom )
825703
{
826-
QgsRectangle box = geom->boundingBox();
827-
828-
fStr += " \"bbox\": [ "+ QString::number( box.xMinimum(), 'f' ) +", "+ QString::number( box.yMinimum(), 'f' ) +", "+ QString::number( box.xMaximum(), 'f' ) +", "+ QString::number( box.yMaximum(), 'f' ) +"],\n";
829-
830704
fStr += " \"geometry\": ";
831705
fStr += geom->exportToGeoJSON();
832706
fStr += ",\n";
@@ -885,25 +759,14 @@ QDomElement QgsWFSServer::createFeatureElem( QgsFeature* feat, QDomDocument& doc
885759
if ( mWithGeom )
886760
{
887761
//add geometry column (as gml)
888-
QgsGeometry* geom = feat->geometry();
889-
890762
QDomElement geomElem = doc.createElement( "qgs:geometry" );
891-
QDomElement gmlElem = createGeometryElem( geom, doc );
763+
QDomElement gmlElem = createGeometryElem( feat->geometry(), doc );
892764
if ( !gmlElem.isNull() )
893765
{
894-
QgsRectangle box = geom->boundingBox();
895-
QDomElement bbElem = doc.createElement( "gml:boundedBy" );
896-
QDomElement boxElem = createBoxElem( &box, doc );
897-
898766
if ( crs.isValid() )
899767
{
900-
boxElem.setAttribute( "srsName", crs.authid() );
901768
gmlElem.setAttribute( "srsName", crs.authid() );
902769
}
903-
904-
bbElem.appendChild( boxElem );
905-
typeNameElement.appendChild( bbElem );
906-
907770
geomElem.appendChild( gmlElem );
908771
typeNameElement.appendChild( geomElem );
909772
}
@@ -930,27 +793,6 @@ QDomElement QgsWFSServer::createFeatureElem( QgsFeature* feat, QDomDocument& doc
930793
return featureElement;
931794
}
932795

933-
QDomElement QgsWFSServer::createBoxElem( QgsRectangle* box, QDomDocument& doc ) /*const*/
934-
{
935-
if ( !box )
936-
{
937-
return QDomElement();
938-
}
939-
940-
QDomElement boxElem = doc.createElement( "gml:Box" );
941-
QVector<QgsPoint> v;
942-
QgsPoint p1;
943-
p1.set( box->xMinimum(), box->yMinimum() );
944-
v.append( p1 );
945-
QgsPoint p2;
946-
p2.set( box->xMaximum(), box->yMaximum() );
947-
v.append( p2 );
948-
QDomElement coordElem = createCoordinateElem( v, doc );
949-
boxElem.appendChild( coordElem );
950-
951-
return boxElem;
952-
}
953-
954796
QDomElement QgsWFSServer::createGeometryElem( QgsGeometry* geom, QDomDocument& doc ) /*const*/
955797
{
956798
if ( !geom )
@@ -1089,13 +931,13 @@ QDomElement QgsWFSServer::createPolygonElem( QgsGeometry* geom, QDomDocument& do
1089931
QString boundaryName;
1090932
if ( i == 0 )
1091933
{
1092-
boundaryName = "gml:outerBoundaryIs";
934+
boundaryName = "outerBoundaryIs";
1093935
}
1094936
else
1095937
{
1096-
boundaryName = "gml:innerBoundaryIs";
938+
boundaryName = "innerBoundaryIs";
1097939
}
1098-
QDomElement boundaryElem = doc.createElement( boundaryName );
940+
QDomElement boundaryElem = doc.createElementNS( "http://www.opengis.net/gml", boundaryName );
1099941
QDomElement ringElem = doc.createElement( "gml:LinearRing" );
1100942
QDomElement coordElem = createCoordinateElem( poly.at( i ), doc );
1101943
ringElem.appendChild( coordElem );
@@ -1137,7 +979,7 @@ QDomElement QgsWFSServer::createCoordinateElem( const QVector<QgsPoint> points,
1137979
coordElem.setAttribute( "ts", " " );
1138980

1139981
//precision 4 for meters / feet, precision 8 for degrees
1140-
int precision = 6;
982+
int precision = 8;
1141983
/*
1142984
if ( mSourceCRS.mapUnits() == QGis::Meters
1143985
|| mSourceCRS.mapUnits() == QGis::Feet )
@@ -1154,9 +996,9 @@ QDomElement QgsWFSServer::createCoordinateElem( const QVector<QgsPoint> points,
1154996
{
1155997
coordString += " ";
1156998
}
1157-
coordString += QString::number( pointIt->x(), 'f');
999+
coordString += QString::number( pointIt->x(), 'f', precision );
11581000
coordString += ",";
1159-
coordString += QString::number( pointIt->y(), 'f' );
1001+
coordString += QString::number( pointIt->y(), 'f', precision );
11601002
}
11611003

11621004
QDomText coordText = doc.createTextNode( coordString );

src/mapserver/qgswfsserver.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class QgsVectorLayer;
3636
class QgsCoordinateReferenceSystem;
3737
class QgsField;
3838
class QgsFeature;
39-
class QgsRectangle;
4039
class QgsGeometry;
4140
class QgsSymbol;
4241
class QgsRequestHandler;
@@ -81,7 +80,7 @@ class QgsWFSServer
8180

8281
protected:
8382

84-
void startGetFeature( QgsRequestHandler& request, const QString& format, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect );
83+
void startGetFeature( QgsRequestHandler& request, const QString& format );
8584
void sendGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, QgsCoordinateReferenceSystem& crs, QMap< int, QgsField > fields, QSet<QString> hiddenAttributes );
8685
void endGetFeature( QgsRequestHandler& request, const QString& format );
8786

@@ -91,7 +90,6 @@ class QgsWFSServer
9190
//methods to write GML2
9291
QDomElement createFeatureElem( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QMap< int, QgsField > fields, QSet<QString> hiddenAttributes ) /*const*/;
9392

94-
QDomElement createBoxElem( QgsRectangle* box, QDomDocument& doc ) /* const */;
9593
QDomElement createGeometryElem( QgsGeometry* g, QDomDocument& doc ) /*const*/;
9694
QDomElement createLineStringElem( QgsGeometry* geom, QDomDocument& doc ) const;
9795
QDomElement createMultiLineStringElem( QgsGeometry* geom, QDomDocument& doc ) const;

0 commit comments

Comments
 (0)