mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
[FEATURE]: possibility to segmentize feature info geometry in server
This commit is contained in:
parent
e30ff62419
commit
24cc0e2feb
@ -53,6 +53,9 @@ class QgsWmsConfigParser
|
||||
/** True if the feature info response should contain the wkt geometry for vector features*/
|
||||
virtual bool featureInfoWithWktGeometry() const = 0;
|
||||
|
||||
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
|
||||
virtual bool segmentizeFeatureInfoWktGeometry() const = 0;
|
||||
|
||||
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
|
||||
virtual QHash<QString, QString> featureInfoLayerAliasMap() const = 0;
|
||||
|
||||
|
@ -83,6 +83,10 @@ class QgsWmsProjectParser : public QgsWmsConfigParser
|
||||
/** True if the feature info response should contain the wkt geometry for vector features*/
|
||||
bool featureInfoWithWktGeometry() const /*override*/ ;
|
||||
|
||||
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
|
||||
bool segmentizeFeatureInfoWktGeometry() const /*override*/ ;
|
||||
|
||||
|
||||
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
|
||||
QHash<QString, QString> featureInfoLayerAliasMap() const /*override*/ ;
|
||||
|
||||
|
@ -528,6 +528,9 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
|
||||
bool addWktGeometry = QgsProject::instance()->readBoolEntry( "WMSAddWktGeometry", "/" );
|
||||
mAddWktGeometryCheckBox->setChecked( addWktGeometry );
|
||||
|
||||
bool segmentizeFeatureInfoGeometry = QgsProject::instance()->readBoolEntry( "WMSSegmentizeFeatureInfoGeometry", "/" );
|
||||
mSegmentizeFeatureInfoGeometryCheckBox->setChecked( segmentizeFeatureInfoGeometry );
|
||||
|
||||
bool useLayerIDs = QgsProject::instance()->readBoolEntry( "WMSUseLayerIDs", "/" );
|
||||
mWmsUseLayerIDs->setChecked( useLayerIDs );
|
||||
|
||||
@ -1075,6 +1078,7 @@ void QgsProjectProperties::apply()
|
||||
}
|
||||
|
||||
QgsProject::instance()->writeEntry( "WMSAddWktGeometry", "/", mAddWktGeometryCheckBox->isChecked() );
|
||||
QgsProject::instance()->writeEntry( "WMSSegmentizeFeatureInfoGeometry", "/", mSegmentizeFeatureInfoGeometryCheckBox->isChecked() );
|
||||
QgsProject::instance()->writeEntry( "WMSUseLayerIDs", "/", mWmsUseLayerIDs->isChecked() );
|
||||
|
||||
QString maxWidthText = mMaxWidthLineEdit->text();
|
||||
|
@ -512,6 +512,15 @@ bool QgsSLDConfigParser::featureInfoWithWktGeometry() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QgsSLDConfigParser::segmentizeFeatureInfoWktGeometry() const
|
||||
{
|
||||
if ( mFallbackParser )
|
||||
{
|
||||
return mFallbackParser->segmentizeFeatureInfoWktGeometry();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
QHash<QString, QString> QgsSLDConfigParser::featureInfoLayerAliasMap() const
|
||||
{
|
||||
|
@ -64,6 +64,9 @@ class QgsSLDConfigParser : public QgsWmsConfigParser
|
||||
/** True if the feature info response should contain the wkt geometry for vector features*/
|
||||
bool featureInfoWithWktGeometry() const override;
|
||||
|
||||
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
|
||||
bool segmentizeFeatureInfoWktGeometry() const override;
|
||||
|
||||
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
|
||||
QHash<QString, QString> featureInfoLayerAliasMap() const override;
|
||||
|
||||
|
@ -64,6 +64,9 @@ class SERVER_EXPORT QgsWmsConfigParser
|
||||
/** True if the feature info response should contain the wkt geometry for vector features*/
|
||||
virtual bool featureInfoWithWktGeometry() const = 0;
|
||||
|
||||
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
|
||||
virtual bool segmentizeFeatureInfoWktGeometry() const = 0;
|
||||
|
||||
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
|
||||
virtual QHash<QString, QString> featureInfoLayerAliasMap() const = 0;
|
||||
|
||||
|
@ -2012,6 +2012,28 @@ bool QgsWmsProjectParser::featureInfoWithWktGeometry() const
|
||||
return ( wktElem.text().compare( "true", Qt::CaseInsensitive ) == 0 );
|
||||
}
|
||||
|
||||
bool QgsWmsProjectParser::segmentizeFeatureInfoWktGeometry() const
|
||||
{
|
||||
if ( !mProjectParser->xmlDocument() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
QDomElement propertiesElem = mProjectParser->propertiesElem();
|
||||
if ( propertiesElem.isNull() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
QDomElement segmentizeElem = propertiesElem.firstChildElement( "WMSSegmentizeFeatureInfoGeometry" );
|
||||
if ( segmentizeElem.isNull() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return( segmentizeElem.text().compare( "true", Qt::CaseInsensitive ) == 0 );
|
||||
}
|
||||
|
||||
QHash<QString, QString> QgsWmsProjectParser::featureInfoLayerAliasMap() const
|
||||
{
|
||||
QHash<QString, QString> aliasMap;
|
||||
|
@ -100,6 +100,9 @@ class SERVER_EXPORT QgsWmsProjectParser : public QgsWmsConfigParser
|
||||
/** True if the feature info response should contain the wkt geometry for vector features*/
|
||||
bool featureInfoWithWktGeometry() const override;
|
||||
|
||||
/** True if the feature info wkt geometry is delivered with segmentized curve types*/
|
||||
bool segmentizeFeatureInfoWktGeometry() const override;
|
||||
|
||||
/** Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
|
||||
QHash<QString, QString> featureInfoLayerAliasMap() const override;
|
||||
|
||||
|
@ -2194,6 +2194,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
|
||||
layer->updateFields();
|
||||
const QgsFields& fields = layer->pendingFields();
|
||||
bool addWktGeometry = mConfigParser && mConfigParser->featureInfoWithWktGeometry();
|
||||
bool segmentizeWktGeometry = mConfigParser && mConfigParser->segmentizeFeatureInfoWktGeometry();
|
||||
const QSet<QString>& excludedAttributes = layer->excludeAttributesWms();
|
||||
|
||||
QgsFeatureRequest fReq;
|
||||
@ -2365,6 +2366,19 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
|
||||
if ( transform.isValid() )
|
||||
geom.transform( transform );
|
||||
}
|
||||
|
||||
if ( segmentizeWktGeometry )
|
||||
{
|
||||
QgsAbstractGeometry* abstractGeom = geom.geometry();
|
||||
if ( abstractGeom )
|
||||
{
|
||||
if ( QgsWkbTypes::isCurvedType( abstractGeom->wkbType() ) )
|
||||
{
|
||||
QgsAbstractGeometry* segmentizedGeom = abstractGeom-> segmentize();
|
||||
geom.setGeometry( segmentizedGeom );
|
||||
}
|
||||
}
|
||||
}
|
||||
QDomElement geometryElement = infoDocument.createElement( "Attribute" );
|
||||
geometryElement.setAttribute( "name", "geometry" );
|
||||
geometryElement.setAttribute( "value", geom.exportToWkt( getWMSPrecision( 8 ) ) );
|
||||
|
@ -42,16 +42,7 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -206,16 +197,7 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -231,16 +213,7 @@
|
||||
</property>
|
||||
<widget class="QWidget" name="mProjOpts_01">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -256,7 +229,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>683</width>
|
||||
<width>694</width>
|
||||
<height>779</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -721,16 +694,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mProjOpts_02">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -746,8 +710,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>368</width>
|
||||
<height>46</height>
|
||||
<width>694</width>
|
||||
<height>779</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
@ -780,16 +744,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mProjOpts_03">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -805,8 +760,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>133</width>
|
||||
<height>100</height>
|
||||
<width>694</width>
|
||||
<height>779</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
@ -866,16 +821,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mProjOpts_04">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -891,8 +837,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>379</width>
|
||||
<height>564</height>
|
||||
<width>694</width>
|
||||
<height>779</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
@ -1333,16 +1279,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mProjOpts_05">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_14">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1357,9 +1294,9 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>663</width>
|
||||
<height>2249</height>
|
||||
<y>-961</y>
|
||||
<width>674</width>
|
||||
<height>2470</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
@ -1908,7 +1845,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="2">
|
||||
<item row="11" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<item>
|
||||
<widget class="QLabel" name="mWMSImageQualityLabel">
|
||||
@ -1942,7 +1879,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="2">
|
||||
<item row="10" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="mMaxWidthLabel">
|
||||
@ -1989,7 +1926,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<item row="8" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="grpWMSPrecision">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
@ -2013,7 +1950,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<item row="9" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="mWMSUrlLabel">
|
||||
@ -2159,6 +2096,13 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="mSegmentizeFeatureInfoGeometryCheckBox">
|
||||
<property name="text">
|
||||
<string>Segmentize feature info geometry</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -2399,16 +2343,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mProjOpts_06">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_15">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -2424,8 +2359,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>168</width>
|
||||
<height>46</height>
|
||||
<width>694</width>
|
||||
<height>779</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_17">
|
||||
@ -2461,16 +2396,7 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mTabRelations">
|
||||
<layout class="QGridLayout" name="gridLayout_16">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
@ -2540,16 +2466,7 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
|
Loading…
x
Reference in New Issue
Block a user