Skip to content

Commit 24cc0e2

Browse files
committedAug 19, 2016
[FEATURE]: possibility to segmentize feature info geometry in server
1 parent e30ff62 commit 24cc0e2

10 files changed

+98
-116
lines changed
 

‎python/server/qgswmsconfigparser.sip

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ class QgsWmsConfigParser
5353
/** True if the feature info response should contain the wkt geometry for vector features*/
5454
virtual bool featureInfoWithWktGeometry() const = 0;
5555

56+
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
57+
virtual bool segmentizeFeatureInfoWktGeometry() const = 0;
58+
5659
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
5760
virtual QHash<QString, QString> featureInfoLayerAliasMap() const = 0;
5861

‎python/server/qgswmsprojectparser.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ class QgsWmsProjectParser : public QgsWmsConfigParser
8383
/** True if the feature info response should contain the wkt geometry for vector features*/
8484
bool featureInfoWithWktGeometry() const /*override*/ ;
8585

86+
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
87+
bool segmentizeFeatureInfoWktGeometry() const /*override*/ ;
88+
89+
8690
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
8791
QHash<QString, QString> featureInfoLayerAliasMap() const /*override*/ ;
8892

‎src/app/qgsprojectproperties.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,9 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
528528
bool addWktGeometry = QgsProject::instance()->readBoolEntry( "WMSAddWktGeometry", "/" );
529529
mAddWktGeometryCheckBox->setChecked( addWktGeometry );
530530

531+
bool segmentizeFeatureInfoGeometry = QgsProject::instance()->readBoolEntry( "WMSSegmentizeFeatureInfoGeometry", "/" );
532+
mSegmentizeFeatureInfoGeometryCheckBox->setChecked( segmentizeFeatureInfoGeometry );
533+
531534
bool useLayerIDs = QgsProject::instance()->readBoolEntry( "WMSUseLayerIDs", "/" );
532535
mWmsUseLayerIDs->setChecked( useLayerIDs );
533536

@@ -1075,6 +1078,7 @@ void QgsProjectProperties::apply()
10751078
}
10761079

10771080
QgsProject::instance()->writeEntry( "WMSAddWktGeometry", "/", mAddWktGeometryCheckBox->isChecked() );
1081+
QgsProject::instance()->writeEntry( "WMSSegmentizeFeatureInfoGeometry", "/", mSegmentizeFeatureInfoGeometryCheckBox->isChecked() );
10781082
QgsProject::instance()->writeEntry( "WMSUseLayerIDs", "/", mWmsUseLayerIDs->isChecked() );
10791083

10801084
QString maxWidthText = mMaxWidthLineEdit->text();

‎src/server/qgssldconfigparser.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,15 @@ bool QgsSLDConfigParser::featureInfoWithWktGeometry() const
512512
return false;
513513
}
514514

515+
bool QgsSLDConfigParser::segmentizeFeatureInfoWktGeometry() const
516+
{
517+
if ( mFallbackParser )
518+
{
519+
return mFallbackParser->segmentizeFeatureInfoWktGeometry();
520+
}
521+
return false;
522+
}
523+
515524

516525
QHash<QString, QString> QgsSLDConfigParser::featureInfoLayerAliasMap() const
517526
{

‎src/server/qgssldconfigparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class QgsSLDConfigParser : public QgsWmsConfigParser
6464
/** True if the feature info response should contain the wkt geometry for vector features*/
6565
bool featureInfoWithWktGeometry() const override;
6666

67+
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
68+
bool segmentizeFeatureInfoWktGeometry() const override;
69+
6770
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
6871
QHash<QString, QString> featureInfoLayerAliasMap() const override;
6972

‎src/server/qgswmsconfigparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class SERVER_EXPORT QgsWmsConfigParser
6464
/** True if the feature info response should contain the wkt geometry for vector features*/
6565
virtual bool featureInfoWithWktGeometry() const = 0;
6666

67+
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
68+
virtual bool segmentizeFeatureInfoWktGeometry() const = 0;
69+
6770
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
6871
virtual QHash<QString, QString> featureInfoLayerAliasMap() const = 0;
6972

‎src/server/qgswmsprojectparser.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,6 +2012,28 @@ bool QgsWmsProjectParser::featureInfoWithWktGeometry() const
20122012
return ( wktElem.text().compare( "true", Qt::CaseInsensitive ) == 0 );
20132013
}
20142014

2015+
bool QgsWmsProjectParser::segmentizeFeatureInfoWktGeometry() const
2016+
{
2017+
if ( !mProjectParser->xmlDocument() )
2018+
{
2019+
return false;
2020+
}
2021+
2022+
QDomElement propertiesElem = mProjectParser->propertiesElem();
2023+
if ( propertiesElem.isNull() )
2024+
{
2025+
return false;
2026+
}
2027+
2028+
QDomElement segmentizeElem = propertiesElem.firstChildElement( "WMSSegmentizeFeatureInfoGeometry" );
2029+
if ( segmentizeElem.isNull() )
2030+
{
2031+
return false;
2032+
}
2033+
2034+
return( segmentizeElem.text().compare( "true", Qt::CaseInsensitive ) == 0 );
2035+
}
2036+
20152037
QHash<QString, QString> QgsWmsProjectParser::featureInfoLayerAliasMap() const
20162038
{
20172039
QHash<QString, QString> aliasMap;

‎src/server/qgswmsprojectparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ class SERVER_EXPORT QgsWmsProjectParser : public QgsWmsConfigParser
100100
/** True if the feature info response should contain the wkt geometry for vector features*/
101101
bool featureInfoWithWktGeometry() const override;
102102

103+
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
104+
bool segmentizeFeatureInfoWktGeometry() const override;
105+
103106
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
104107
QHash<QString, QString> featureInfoLayerAliasMap() const override;
105108

‎src/server/qgswmsserver.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2194,6 +2194,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
21942194
layer->updateFields();
21952195
const QgsFields& fields = layer->pendingFields();
21962196
bool addWktGeometry = mConfigParser && mConfigParser->featureInfoWithWktGeometry();
2197+
bool segmentizeWktGeometry = mConfigParser && mConfigParser->segmentizeFeatureInfoWktGeometry();
21972198
const QSet<QString>& excludedAttributes = layer->excludeAttributesWms();
21982199

21992200
QgsFeatureRequest fReq;
@@ -2365,6 +2366,19 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23652366
if ( transform.isValid() )
23662367
geom.transform( transform );
23672368
}
2369+
2370+
if ( segmentizeWktGeometry )
2371+
{
2372+
QgsAbstractGeometry* abstractGeom = geom.geometry();
2373+
if ( abstractGeom )
2374+
{
2375+
if ( QgsWkbTypes::isCurvedType( abstractGeom->wkbType() ) )
2376+
{
2377+
QgsAbstractGeometry* segmentizedGeom = abstractGeom-> segmentize();
2378+
geom.setGeometry( segmentizedGeom );
2379+
}
2380+
}
2381+
}
23682382
QDomElement geometryElement = infoDocument.createElement( "Attribute" );
23692383
geometryElement.setAttribute( "name", "geometry" );
23702384
geometryElement.setAttribute( "value", geom.exportToWkt( getWMSPrecision( 8 ) ) );

‎src/ui/qgsprojectpropertiesbase.ui

Lines changed: 33 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,7 @@
4242
<enum>QFrame::Raised</enum>
4343
</property>
4444
<layout class="QVBoxLayout" name="verticalLayout_2">
45-
<property name="leftMargin">
46-
<number>0</number>
47-
</property>
48-
<property name="topMargin">
49-
<number>0</number>
50-
</property>
51-
<property name="rightMargin">
52-
<number>0</number>
53-
</property>
54-
<property name="bottomMargin">
45+
<property name="margin">
5546
<number>0</number>
5647
</property>
5748
<item>
@@ -206,16 +197,7 @@
206197
<enum>QFrame::Raised</enum>
207198
</property>
208199
<layout class="QVBoxLayout" name="verticalLayout_3">
209-
<property name="leftMargin">
210-
<number>0</number>
211-
</property>
212-
<property name="topMargin">
213-
<number>0</number>
214-
</property>
215-
<property name="rightMargin">
216-
<number>0</number>
217-
</property>
218-
<property name="bottomMargin">
200+
<property name="margin">
219201
<number>0</number>
220202
</property>
221203
<item>
@@ -231,16 +213,7 @@
231213
</property>
232214
<widget class="QWidget" name="mProjOpts_01">
233215
<layout class="QVBoxLayout" name="verticalLayout_6">
234-
<property name="leftMargin">
235-
<number>0</number>
236-
</property>
237-
<property name="topMargin">
238-
<number>0</number>
239-
</property>
240-
<property name="rightMargin">
241-
<number>0</number>
242-
</property>
243-
<property name="bottomMargin">
216+
<property name="margin">
244217
<number>0</number>
245218
</property>
246219
<item>
@@ -256,7 +229,7 @@
256229
<rect>
257230
<x>0</x>
258231
<y>0</y>
259-
<width>683</width>
232+
<width>694</width>
260233
<height>779</height>
261234
</rect>
262235
</property>
@@ -721,16 +694,7 @@
721694
</widget>
722695
<widget class="QWidget" name="mProjOpts_02">
723696
<layout class="QVBoxLayout" name="verticalLayout_5">
724-
<property name="leftMargin">
725-
<number>0</number>
726-
</property>
727-
<property name="topMargin">
728-
<number>0</number>
729-
</property>
730-
<property name="rightMargin">
731-
<number>0</number>
732-
</property>
733-
<property name="bottomMargin">
697+
<property name="margin">
734698
<number>0</number>
735699
</property>
736700
<item>
@@ -746,8 +710,8 @@
746710
<rect>
747711
<x>0</x>
748712
<y>0</y>
749-
<width>368</width>
750-
<height>46</height>
713+
<width>694</width>
714+
<height>779</height>
751715
</rect>
752716
</property>
753717
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -780,16 +744,7 @@
780744
</widget>
781745
<widget class="QWidget" name="mProjOpts_03">
782746
<layout class="QVBoxLayout" name="verticalLayout_9">
783-
<property name="leftMargin">
784-
<number>0</number>
785-
</property>
786-
<property name="topMargin">
787-
<number>0</number>
788-
</property>
789-
<property name="rightMargin">
790-
<number>0</number>
791-
</property>
792-
<property name="bottomMargin">
747+
<property name="margin">
793748
<number>0</number>
794749
</property>
795750
<item>
@@ -805,8 +760,8 @@
805760
<rect>
806761
<x>0</x>
807762
<y>0</y>
808-
<width>133</width>
809-
<height>100</height>
763+
<width>694</width>
764+
<height>779</height>
810765
</rect>
811766
</property>
812767
<layout class="QVBoxLayout" name="verticalLayout_10">
@@ -866,16 +821,7 @@
866821
</widget>
867822
<widget class="QWidget" name="mProjOpts_04">
868823
<layout class="QVBoxLayout" name="verticalLayout_11">
869-
<property name="leftMargin">
870-
<number>0</number>
871-
</property>
872-
<property name="topMargin">
873-
<number>0</number>
874-
</property>
875-
<property name="rightMargin">
876-
<number>0</number>
877-
</property>
878-
<property name="bottomMargin">
824+
<property name="margin">
879825
<number>0</number>
880826
</property>
881827
<item>
@@ -891,8 +837,8 @@
891837
<rect>
892838
<x>0</x>
893839
<y>0</y>
894-
<width>379</width>
895-
<height>564</height>
840+
<width>694</width>
841+
<height>779</height>
896842
</rect>
897843
</property>
898844
<layout class="QVBoxLayout" name="verticalLayout_12">
@@ -1333,16 +1279,7 @@
13331279
</widget>
13341280
<widget class="QWidget" name="mProjOpts_05">
13351281
<layout class="QVBoxLayout" name="verticalLayout_14">
1336-
<property name="leftMargin">
1337-
<number>0</number>
1338-
</property>
1339-
<property name="topMargin">
1340-
<number>0</number>
1341-
</property>
1342-
<property name="rightMargin">
1343-
<number>0</number>
1344-
</property>
1345-
<property name="bottomMargin">
1282+
<property name="margin">
13461283
<number>0</number>
13471284
</property>
13481285
<item>
@@ -1357,9 +1294,9 @@
13571294
<property name="geometry">
13581295
<rect>
13591296
<x>0</x>
1360-
<y>0</y>
1361-
<width>663</width>
1362-
<height>2249</height>
1297+
<y>-961</y>
1298+
<width>674</width>
1299+
<height>2470</height>
13631300
</rect>
13641301
</property>
13651302
<layout class="QVBoxLayout" name="verticalLayout_13">
@@ -1908,7 +1845,7 @@
19081845
</property>
19091846
</widget>
19101847
</item>
1911-
<item row="10" column="0" colspan="2">
1848+
<item row="11" column="0" colspan="2">
19121849
<layout class="QHBoxLayout" name="horizontalLayout_10">
19131850
<item>
19141851
<widget class="QLabel" name="mWMSImageQualityLabel">
@@ -1942,7 +1879,7 @@
19421879
</property>
19431880
</widget>
19441881
</item>
1945-
<item row="9" column="0" colspan="2">
1882+
<item row="10" column="0" colspan="2">
19461883
<layout class="QGridLayout" name="gridLayout_3">
19471884
<item row="1" column="1">
19481885
<widget class="QLabel" name="mMaxWidthLabel">
@@ -1989,7 +1926,7 @@
19891926
</item>
19901927
</layout>
19911928
</item>
1992-
<item row="7" column="0" colspan="2">
1929+
<item row="8" column="0" colspan="2">
19931930
<layout class="QHBoxLayout" name="grpWMSPrecision">
19941931
<item>
19951932
<widget class="QLabel" name="label_5">
@@ -2013,7 +1950,7 @@
20131950
</item>
20141951
</layout>
20151952
</item>
2016-
<item row="8" column="0" colspan="2">
1953+
<item row="9" column="0" colspan="2">
20171954
<layout class="QHBoxLayout" name="horizontalLayout_2">
20181955
<item>
20191956
<widget class="QLabel" name="mWMSUrlLabel">
@@ -2159,6 +2096,13 @@
21592096
</layout>
21602097
</widget>
21612098
</item>
2099+
<item row="7" column="0">
2100+
<widget class="QCheckBox" name="mSegmentizeFeatureInfoGeometryCheckBox">
2101+
<property name="text">
2102+
<string>Segmentize feature info geometry</string>
2103+
</property>
2104+
</widget>
2105+
</item>
21622106
</layout>
21632107
</widget>
21642108
</item>
@@ -2399,16 +2343,7 @@
23992343
</widget>
24002344
<widget class="QWidget" name="mProjOpts_06">
24012345
<layout class="QVBoxLayout" name="verticalLayout_15">
2402-
<property name="leftMargin">
2403-
<number>0</number>
2404-
</property>
2405-
<property name="topMargin">
2406-
<number>0</number>
2407-
</property>
2408-
<property name="rightMargin">
2409-
<number>0</number>
2410-
</property>
2411-
<property name="bottomMargin">
2346+
<property name="margin">
24122347
<number>0</number>
24132348
</property>
24142349
<item>
@@ -2424,8 +2359,8 @@
24242359
<rect>
24252360
<x>0</x>
24262361
<y>0</y>
2427-
<width>168</width>
2428-
<height>46</height>
2362+
<width>694</width>
2363+
<height>779</height>
24292364
</rect>
24302365
</property>
24312366
<layout class="QVBoxLayout" name="verticalLayout_17">
@@ -2461,16 +2396,7 @@
24612396
</widget>
24622397
<widget class="QWidget" name="mTabRelations">
24632398
<layout class="QGridLayout" name="gridLayout_16">
2464-
<property name="leftMargin">
2465-
<number>0</number>
2466-
</property>
2467-
<property name="topMargin">
2468-
<number>0</number>
2469-
</property>
2470-
<property name="rightMargin">
2471-
<number>0</number>
2472-
</property>
2473-
<property name="bottomMargin">
2399+
<property name="margin">
24742400
<number>0</number>
24752401
</property>
24762402
</layout>
@@ -2540,16 +2466,7 @@
25402466
<enum>QFrame::Raised</enum>
25412467
</property>
25422468
<layout class="QHBoxLayout" name="horizontalLayout">
2543-
<property name="leftMargin">
2544-
<number>0</number>
2545-
</property>
2546-
<property name="topMargin">
2547-
<number>0</number>
2548-
</property>
2549-
<property name="rightMargin">
2550-
<number>0</number>
2551-
</property>
2552-
<property name="bottomMargin">
2469+
<property name="margin">
25532470
<number>0</number>
25542471
</property>
25552472
<item>

0 commit comments

Comments
 (0)
Please sign in to comment.