mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-06 00:03:16 -05:00
Merge pull request #30071 from lbartoletti/wms_tile_buffer
[server]New parameter for WMS service: tile_buffer
This commit is contained in:
commit
ee6642477e
@ -74,6 +74,25 @@ Set coordinates of the rectangle which should be rendered.
|
|||||||
The actual visible extent used for rendering could be slightly different
|
The actual visible extent used for rendering could be slightly different
|
||||||
since the given extent may be expanded in order to fit the aspect ratio
|
since the given extent may be expanded in order to fit the aspect ratio
|
||||||
of output size. Use visibleExtent() to get the resulting extent.
|
of output size. Use visibleExtent() to get the resulting extent.
|
||||||
|
%End
|
||||||
|
|
||||||
|
double extentBuffer() const;
|
||||||
|
%Docstring
|
||||||
|
Returns the buffer in map units to use around the visible extent for rendering
|
||||||
|
symbols whose corresponding geometries are outside the visible extent.
|
||||||
|
|
||||||
|
.. seealso:: :py:func:`setExtentBuffer`
|
||||||
|
|
||||||
|
.. versionadded:: 3.10
|
||||||
|
%End
|
||||||
|
|
||||||
|
void setExtentBuffer( double buffer );
|
||||||
|
%Docstring
|
||||||
|
Sets the buffer in map units to use around the visible extent for rendering
|
||||||
|
symbols whose corresponding geometries are outside the visible extent. This
|
||||||
|
is useful when using tiles to avoid cut symbols at tile boundaries.
|
||||||
|
|
||||||
|
.. versionadded:: 3.10
|
||||||
%End
|
%End
|
||||||
|
|
||||||
QSize outputSize() const;
|
QSize outputSize() const;
|
||||||
|
|||||||
@ -152,6 +152,17 @@ Returns the quality for WMS images defined in a QGIS project.
|
|||||||
:param project: the QGIS project
|
:param project: the QGIS project
|
||||||
|
|
||||||
:return: quality if defined in project, -1 otherwise.
|
:return: quality if defined in project, -1 otherwise.
|
||||||
|
%End
|
||||||
|
|
||||||
|
int wmsTileBuffer( const QgsProject &project );
|
||||||
|
%Docstring
|
||||||
|
Returns the tile buffer in pixels for WMS images defined in a QGIS project.
|
||||||
|
|
||||||
|
:param project: the QGIS project
|
||||||
|
|
||||||
|
:return: tile buffer if defined in project, 0 otherwise.
|
||||||
|
|
||||||
|
.. versionadded:: 3.10
|
||||||
%End
|
%End
|
||||||
|
|
||||||
int wmsMaxAtlasFeatures( const QgsProject &project );
|
int wmsMaxAtlasFeatures( const QgsProject &project );
|
||||||
|
|||||||
@ -644,6 +644,9 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
|
|||||||
mWMSImageQualitySpinBox->setValue( imageQuality );
|
mWMSImageQualitySpinBox->setValue( imageQuality );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WMS tileBuffer
|
||||||
|
mWMSTileBufferSpinBox->setValue( QgsProject::instance()->readNumEntry( QStringLiteral( "WMSTileBuffer" ), QStringLiteral( "/" ), 0 ) );
|
||||||
|
|
||||||
mWMSMaxAtlasFeaturesSpinBox->setValue( QgsProject::instance()->readNumEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), 1 ) );
|
mWMSMaxAtlasFeaturesSpinBox->setValue( QgsProject::instance()->readNumEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), 1 ) );
|
||||||
|
|
||||||
QString defaultValueToolTip = tr( "In case of no other information to evaluate the map unit sized symbols, it uses default scale (on projected CRS) or default map units per mm (on geographic CRS)." );
|
QString defaultValueToolTip = tr( "In case of no other information to evaluate the map unit sized symbols, it uses default scale (on projected CRS) or default map units per mm (on geographic CRS)." );
|
||||||
@ -1323,6 +1326,9 @@ void QgsProjectProperties::apply()
|
|||||||
QgsProject::instance()->writeEntry( QStringLiteral( "WMSImageQuality" ), QStringLiteral( "/" ), imageQualityValue );
|
QgsProject::instance()->writeEntry( QStringLiteral( "WMSImageQuality" ), QStringLiteral( "/" ), imageQualityValue );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WMS TileBuffer
|
||||||
|
QgsProject::instance()->writeEntry( QStringLiteral( "WMSTileBuffer" ), QStringLiteral( "/" ), mWMSTileBufferSpinBox->value() );
|
||||||
|
|
||||||
int maxAtlasFeatures = mWMSMaxAtlasFeaturesSpinBox->value();
|
int maxAtlasFeatures = mWMSMaxAtlasFeaturesSpinBox->value();
|
||||||
QgsProject::instance()->writeEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), maxAtlasFeatures );
|
QgsProject::instance()->writeEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), maxAtlasFeatures );
|
||||||
|
|
||||||
|
|||||||
@ -254,6 +254,7 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn
|
|||||||
}
|
}
|
||||||
|
|
||||||
QgsRectangle r1 = mSettings.visibleExtent(), r2;
|
QgsRectangle r1 = mSettings.visibleExtent(), r2;
|
||||||
|
r1.grow( mSettings.extentBuffer() );
|
||||||
QgsCoordinateTransform ct;
|
QgsCoordinateTransform ct;
|
||||||
|
|
||||||
ct = mSettings.layerTransform( ml );
|
ct = mSettings.layerTransform( ml );
|
||||||
|
|||||||
@ -87,6 +87,16 @@ void QgsMapSettings::setExtent( const QgsRectangle &extent, bool magnified )
|
|||||||
updateDerived();
|
updateDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double QgsMapSettings::extentBuffer() const
|
||||||
|
{
|
||||||
|
return mExtentBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsMapSettings::setExtentBuffer( const double buffer )
|
||||||
|
{
|
||||||
|
mExtentBuffer = buffer;
|
||||||
|
}
|
||||||
|
|
||||||
double QgsMapSettings::rotation() const
|
double QgsMapSettings::rotation() const
|
||||||
{
|
{
|
||||||
return mRotation;
|
return mRotation;
|
||||||
|
|||||||
@ -102,6 +102,22 @@ class CORE_EXPORT QgsMapSettings
|
|||||||
*/
|
*/
|
||||||
void setExtent( const QgsRectangle &rect, bool magnified = true );
|
void setExtent( const QgsRectangle &rect, bool magnified = true );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the buffer in map units to use around the visible extent for rendering
|
||||||
|
* symbols whose corresponding geometries are outside the visible extent.
|
||||||
|
* \see setExtentBuffer()
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
double extentBuffer() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the buffer in map units to use around the visible extent for rendering
|
||||||
|
* symbols whose corresponding geometries are outside the visible extent. This
|
||||||
|
* is useful when using tiles to avoid cut symbols at tile boundaries.
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
void setExtentBuffer( double buffer );
|
||||||
|
|
||||||
//! Returns the size of the resulting map image
|
//! Returns the size of the resulting map image
|
||||||
QSize outputSize() const;
|
QSize outputSize() const;
|
||||||
//! Sets the size of the resulting map image
|
//! Sets the size of the resulting map image
|
||||||
@ -539,6 +555,7 @@ class CORE_EXPORT QgsMapSettings
|
|||||||
float mDevicePixelRatio = 1.0;
|
float mDevicePixelRatio = 1.0;
|
||||||
|
|
||||||
QgsRectangle mExtent;
|
QgsRectangle mExtent;
|
||||||
|
double mExtentBuffer = 0.0;
|
||||||
|
|
||||||
double mRotation = 0.0;
|
double mRotation = 0.0;
|
||||||
double mMagnificationFactor = 1.0;
|
double mMagnificationFactor = 1.0;
|
||||||
|
|||||||
@ -157,8 +157,10 @@ bool QgsRenderContext::testFlag( QgsRenderContext::Flag flag ) const
|
|||||||
QgsRenderContext QgsRenderContext::fromMapSettings( const QgsMapSettings &mapSettings )
|
QgsRenderContext QgsRenderContext::fromMapSettings( const QgsMapSettings &mapSettings )
|
||||||
{
|
{
|
||||||
QgsRenderContext ctx;
|
QgsRenderContext ctx;
|
||||||
|
QgsRectangle extent = mapSettings.visibleExtent();
|
||||||
|
extent.grow( mapSettings.extentBuffer() );
|
||||||
ctx.setMapToPixel( mapSettings.mapToPixel() );
|
ctx.setMapToPixel( mapSettings.mapToPixel() );
|
||||||
ctx.setExtent( mapSettings.visibleExtent() );
|
ctx.setExtent( extent );
|
||||||
ctx.setMapExtent( mapSettings.visibleExtent() );
|
ctx.setMapExtent( mapSettings.visibleExtent() );
|
||||||
ctx.setFlag( DrawEditingInfo, mapSettings.testFlag( QgsMapSettings::DrawEditingInfo ) );
|
ctx.setFlag( DrawEditingInfo, mapSettings.testFlag( QgsMapSettings::DrawEditingInfo ) );
|
||||||
ctx.setFlag( ForceVectorOutput, mapSettings.testFlag( QgsMapSettings::ForceVectorOutput ) );
|
ctx.setFlag( ForceVectorOutput, mapSettings.testFlag( QgsMapSettings::ForceVectorOutput ) );
|
||||||
|
|||||||
@ -111,6 +111,11 @@ int QgsServerProjectUtils::wmsImageQuality( const QgsProject &project )
|
|||||||
return project.readNumEntry( QStringLiteral( "WMSImageQuality" ), QStringLiteral( "/" ), -1 );
|
return project.readNumEntry( QStringLiteral( "WMSImageQuality" ), QStringLiteral( "/" ), -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QgsServerProjectUtils::wmsTileBuffer( const QgsProject &project )
|
||||||
|
{
|
||||||
|
return project.readNumEntry( QStringLiteral( "WMSTileBuffer" ), QStringLiteral( "/" ), 0 );
|
||||||
|
}
|
||||||
|
|
||||||
int QgsServerProjectUtils::wmsMaxAtlasFeatures( const QgsProject &project )
|
int QgsServerProjectUtils::wmsMaxAtlasFeatures( const QgsProject &project )
|
||||||
{
|
{
|
||||||
return project.readNumEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), 1 );
|
return project.readNumEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), 1 );
|
||||||
|
|||||||
@ -147,6 +147,14 @@ namespace QgsServerProjectUtils
|
|||||||
*/
|
*/
|
||||||
SERVER_EXPORT int wmsImageQuality( const QgsProject &project );
|
SERVER_EXPORT int wmsImageQuality( const QgsProject &project );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the tile buffer in pixels for WMS images defined in a QGIS project.
|
||||||
|
* \param project the QGIS project
|
||||||
|
* \returns tile buffer if defined in project, 0 otherwise.
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
SERVER_EXPORT int wmsTileBuffer( const QgsProject &project );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum number of atlas features which can be printed in a request
|
* Returns the maximum number of atlas features which can be printed in a request
|
||||||
* \param project the QGIS project
|
* \param project the QGIS project
|
||||||
|
|||||||
@ -44,6 +44,7 @@ namespace QgsWms
|
|||||||
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
|
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
|
||||||
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
|
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
|
||||||
context.setFlag( QgsWmsRenderContext::SetAccessControl );
|
context.setFlag( QgsWmsRenderContext::SetAccessControl );
|
||||||
|
context.setFlag( QgsWmsRenderContext::UseTileBuffer );
|
||||||
context.setParameters( parameters );
|
context.setParameters( parameters );
|
||||||
|
|
||||||
// rendering
|
// rendering
|
||||||
|
|||||||
@ -223,6 +223,11 @@ namespace QgsWms
|
|||||||
QVariant( 0 ) );
|
QVariant( 0 ) );
|
||||||
save( pQuality );
|
save( pQuality );
|
||||||
|
|
||||||
|
const QgsWmsParameter pTiled( QgsWmsParameter::TILED,
|
||||||
|
QVariant::Bool,
|
||||||
|
QVariant( false ) );
|
||||||
|
save( pTiled );
|
||||||
|
|
||||||
const QgsWmsParameter pBoxSpace( QgsWmsParameter::BOXSPACE,
|
const QgsWmsParameter pBoxSpace( QgsWmsParameter::BOXSPACE,
|
||||||
QVariant::Double,
|
QVariant::Double,
|
||||||
QVariant( 2.0 ) );
|
QVariant( 2.0 ) );
|
||||||
@ -944,6 +949,16 @@ namespace QgsWms
|
|||||||
return mWmsParameters[ QgsWmsParameter::IMAGE_QUALITY ].toInt();
|
return mWmsParameters[ QgsWmsParameter::IMAGE_QUALITY ].toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QgsWmsParameters::tiled() const
|
||||||
|
{
|
||||||
|
return mWmsParameters[ QgsWmsParameter::TILED ].toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QgsWmsParameters::tiledAsBool() const
|
||||||
|
{
|
||||||
|
return mWmsParameters[ QgsWmsParameter::TILED ].toBool();
|
||||||
|
}
|
||||||
|
|
||||||
QString QgsWmsParameters::showFeatureCount() const
|
QString QgsWmsParameters::showFeatureCount() const
|
||||||
{
|
{
|
||||||
return mWmsParameters[ QgsWmsParameter::SHOWFEATURECOUNT ].toString();
|
return mWmsParameters[ QgsWmsParameter::SHOWFEATURECOUNT ].toString();
|
||||||
|
|||||||
@ -177,7 +177,8 @@ namespace QgsWms
|
|||||||
ATLAS_PK,
|
ATLAS_PK,
|
||||||
FORMAT_OPTIONS,
|
FORMAT_OPTIONS,
|
||||||
SRCWIDTH,
|
SRCWIDTH,
|
||||||
SRCHEIGHT
|
SRCHEIGHT,
|
||||||
|
TILED
|
||||||
};
|
};
|
||||||
Q_ENUM( Name )
|
Q_ENUM( Name )
|
||||||
|
|
||||||
@ -628,6 +629,20 @@ namespace QgsWms
|
|||||||
*/
|
*/
|
||||||
int imageQualityAsInt() const;
|
int imageQualityAsInt() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns TILED parameter or an empty string if not
|
||||||
|
* defined.
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
QString tiled() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns TILED parameter as a boolean.
|
||||||
|
* \throws QgsBadRequestException
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
bool tiledAsBool() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns infoFormat. If the INFO_FORMAT parameter is not used, then the
|
* Returns infoFormat. If the INFO_FORMAT parameter is not used, then the
|
||||||
* default value is text/plain.
|
* default value is text/plain.
|
||||||
|
|||||||
@ -24,7 +24,6 @@
|
|||||||
using namespace QgsWms;
|
using namespace QgsWms;
|
||||||
|
|
||||||
const double OGC_PX_M = 0.00028; // OGC reference pixel size in meter
|
const double OGC_PX_M = 0.00028; // OGC reference pixel size in meter
|
||||||
|
|
||||||
QgsWmsRenderContext::QgsWmsRenderContext( const QgsProject *project, QgsServerInterface *interface )
|
QgsWmsRenderContext::QgsWmsRenderContext( const QgsProject *project, QgsServerInterface *interface )
|
||||||
: mProject( project )
|
: mProject( project )
|
||||||
, mInterface( interface )
|
, mInterface( interface )
|
||||||
@ -132,6 +131,18 @@ int QgsWmsRenderContext::imageQuality() const
|
|||||||
return imageQuality;
|
return imageQuality;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QgsWmsRenderContext::tileBuffer() const
|
||||||
|
{
|
||||||
|
int tileBuffer = 0;
|
||||||
|
|
||||||
|
if ( mParameters.tiledAsBool() )
|
||||||
|
{
|
||||||
|
tileBuffer = QgsServerProjectUtils::wmsTileBuffer( *mProject );
|
||||||
|
}
|
||||||
|
|
||||||
|
return tileBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
int QgsWmsRenderContext::precision() const
|
int QgsWmsRenderContext::precision() const
|
||||||
{
|
{
|
||||||
int precision = QgsServerProjectUtils::wmsFeatureInfoPrecision( *mProject );
|
int precision = QgsServerProjectUtils::wmsFeatureInfoPrecision( *mProject );
|
||||||
@ -638,6 +649,26 @@ bool QgsWmsRenderContext::isValidWidthHeight() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double QgsWmsRenderContext::mapTileBuffer( const int mapWidth ) const
|
||||||
|
{
|
||||||
|
double buffer;
|
||||||
|
if ( mFlags & UseTileBuffer )
|
||||||
|
{
|
||||||
|
const QgsRectangle extent = mParameters.bboxAsRectangle();
|
||||||
|
if ( !mParameters.bbox().isEmpty() && extent.isEmpty() )
|
||||||
|
{
|
||||||
|
throw QgsBadRequestException( QgsServiceException::QGIS_InvalidParameterValue,
|
||||||
|
mParameters[QgsWmsParameter::BBOX] );
|
||||||
|
}
|
||||||
|
buffer = tileBuffer() * ( extent.width() / mapWidth );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer = 0;
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
QSize QgsWmsRenderContext::mapSize( const bool aspectRatio ) const
|
QSize QgsWmsRenderContext::mapSize( const bool aspectRatio ) const
|
||||||
{
|
{
|
||||||
int width = mapWidth();
|
int width = mapWidth();
|
||||||
|
|||||||
@ -47,7 +47,8 @@ namespace QgsWms
|
|||||||
AddQueryLayers = 0x80,
|
AddQueryLayers = 0x80,
|
||||||
UseWfsLayersOnly = 0x100,
|
UseWfsLayersOnly = 0x100,
|
||||||
AddExternalLayers = 0x200,
|
AddExternalLayers = 0x200,
|
||||||
UseSrcWidthHeight = 0x400
|
UseSrcWidthHeight = 0x400,
|
||||||
|
UseTileBuffer = 0x800
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS( Flags, Flag )
|
Q_DECLARE_FLAGS( Flags, Flag )
|
||||||
|
|
||||||
@ -148,6 +149,13 @@ namespace QgsWms
|
|||||||
*/
|
*/
|
||||||
int imageQuality() const;
|
int imageQuality() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the tile buffer value to use for rendering according to the
|
||||||
|
* current configuration.
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
int tileBuffer() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the precision to use according to the current configuration.
|
* Returns the precision to use according to the current configuration.
|
||||||
*/
|
*/
|
||||||
@ -200,6 +208,12 @@ namespace QgsWms
|
|||||||
*/
|
*/
|
||||||
QMap<QString, QList<QgsMapLayer *> > layerGroups() const;
|
QMap<QString, QList<QgsMapLayer *> > layerGroups() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the tile buffer in geographical units for the given map width in pixels.
|
||||||
|
* \since QGIS 3.10
|
||||||
|
*/
|
||||||
|
double mapTileBuffer( int mapWidth ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the size (in pixels) of the map to render, according to width
|
* Returns the size (in pixels) of the map to render, according to width
|
||||||
* and height WMS parameters as well as the \a aspectRatio option.
|
* and height WMS parameters as well as the \a aspectRatio option.
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "qgswmsutils.h"
|
#include "qgswmsutils.h"
|
||||||
#include "qgsjsonutils.h"
|
#include "qgsjsonutils.h"
|
||||||
#include "qgswmsrenderer.h"
|
#include "qgswmsrenderer.h"
|
||||||
@ -1028,6 +1027,9 @@ namespace QgsWms
|
|||||||
|
|
||||||
mapSettings.setExtent( mapExtent );
|
mapSettings.setExtent( mapExtent );
|
||||||
|
|
||||||
|
// set the extent buffer
|
||||||
|
mapSettings.setExtentBuffer( mContext.mapTileBuffer( paintDevice->width() ) );
|
||||||
|
|
||||||
/* Define the background color
|
/* Define the background color
|
||||||
* Transparent or colored
|
* Transparent or colored
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -236,7 +236,7 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>4</number>
|
<number>8</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="mProjOptsGeneral">
|
<widget class="QWidget" name="mProjOptsGeneral">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
@ -265,8 +265,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>537</width>
|
<width>535</width>
|
||||||
<height>795</height>
|
<height>740</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||||
@ -863,8 +863,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>546</width>
|
<width>544</width>
|
||||||
<height>164</height>
|
<height>155</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||||
@ -938,8 +938,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>269</width>
|
<width>266</width>
|
||||||
<height>553</height>
|
<height>524</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||||
@ -1514,8 +1514,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>167</width>
|
<width>165</width>
|
||||||
<height>55</height>
|
<height>52</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_17">
|
<layout class="QVBoxLayout" name="verticalLayout_17">
|
||||||
@ -1575,9 +1575,9 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>-793</y>
|
||||||
<width>598</width>
|
<width>671</width>
|
||||||
<height>2732</height>
|
<height>2614</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||||
@ -2437,6 +2437,23 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="11" column="0" colspan="3">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_18">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_33">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>When using tiles set this to the size of the larger symbols to avoid cut symbols at tile boundaries. This works by drawing features that are outside the tile extent.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tile buffer in pixels</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="mWMSTileBufferSpinBox"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@ -40,6 +40,7 @@ class TestQgsMapSettings: public QObject
|
|||||||
void testGettersSetters();
|
void testGettersSetters();
|
||||||
void testLabelingEngineSettings();
|
void testLabelingEngineSettings();
|
||||||
void visibleExtent();
|
void visibleExtent();
|
||||||
|
void extentBuffer();
|
||||||
void mapUnitsPerPixel();
|
void mapUnitsPerPixel();
|
||||||
void testDevicePixelRatio();
|
void testDevicePixelRatio();
|
||||||
void visiblePolygon();
|
void visiblePolygon();
|
||||||
@ -160,6 +161,17 @@ void TestQgsMapSettings::visibleExtent()
|
|||||||
QCOMPARE( ms.visibleExtent().toString( 0 ), QString( "-56,-81 : 156,131" ) );
|
QCOMPARE( ms.visibleExtent().toString( 0 ), QString( "-56,-81 : 156,131" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsMapSettings::extentBuffer()
|
||||||
|
{
|
||||||
|
QgsMapSettings ms;
|
||||||
|
ms.setExtent( QgsRectangle( 50, 50, 100, 100 ) );
|
||||||
|
ms.setOutputSize( QSize( 50, 50 ) );
|
||||||
|
ms.setExtentBuffer( 10 );
|
||||||
|
QgsRectangle visibleExtent = ms.visibleExtent();
|
||||||
|
visibleExtent.grow( ms.extentBuffer() );
|
||||||
|
QCOMPARE( visibleExtent.toString( 0 ), QString( "40,40 : 110,110" ) );
|
||||||
|
}
|
||||||
|
|
||||||
void TestQgsMapSettings::mapUnitsPerPixel()
|
void TestQgsMapSettings::mapUnitsPerPixel()
|
||||||
{
|
{
|
||||||
QgsMapSettings ms;
|
QgsMapSettings ms;
|
||||||
|
|||||||
@ -1578,6 +1578,62 @@ class TestQgsServerWMSGetMap(QgsServerTestBase):
|
|||||||
r, h = self._result(self._execute_request(qs))
|
r, h = self._result(self._execute_request(qs))
|
||||||
self._img_diff_error(r, h, "WMS_GetMap_Group_Layer_Order")
|
self._img_diff_error(r, h, "WMS_GetMap_Group_Layer_Order")
|
||||||
|
|
||||||
|
def test_wms_getmap_tile_buffer(self):
|
||||||
|
"""Test the implementation of tile_map_edge_buffer from mapserver."""
|
||||||
|
|
||||||
|
# Check without tiled parameters (default is false)
|
||||||
|
qs = "?" + "&".join(["%s=%s" % i for i in list({
|
||||||
|
"MAP": urllib.parse.quote(os.path.join(self.testdata_path, 'wms_tile_buffer.qgs')),
|
||||||
|
"SERVICE": "WMS",
|
||||||
|
"VERSION": "1.3.0",
|
||||||
|
"REQUEST": "GetMap",
|
||||||
|
"BBOX": "310187,6163153,324347,6177313",
|
||||||
|
"CRS": "EPSG:3857",
|
||||||
|
"WIDTH": "512",
|
||||||
|
"HEIGHT": "512",
|
||||||
|
"LAYERS": "wms_tile_buffer_data",
|
||||||
|
"FORMAT": "image/png"
|
||||||
|
}.items())])
|
||||||
|
|
||||||
|
r, h = self._result(self._execute_request(qs))
|
||||||
|
self._img_diff_error(r, h, "WMS_GetMap_Tiled_False")
|
||||||
|
|
||||||
|
# Check with tiled=false
|
||||||
|
qs = "?" + "&".join(["%s=%s" % i for i in list({
|
||||||
|
"MAP": urllib.parse.quote(os.path.join(self.testdata_path, 'wms_tile_buffer.qgs')),
|
||||||
|
"SERVICE": "WMS",
|
||||||
|
"VERSION": "1.3.0",
|
||||||
|
"REQUEST": "GetMap",
|
||||||
|
"BBOX": "310187,6163153,324347,6177313",
|
||||||
|
"CRS": "EPSG:3857",
|
||||||
|
"WIDTH": "512",
|
||||||
|
"HEIGHT": "512",
|
||||||
|
"LAYERS": "wms_tile_buffer_data",
|
||||||
|
"FORMAT": "image/png",
|
||||||
|
"TILED": "false"
|
||||||
|
}.items())])
|
||||||
|
|
||||||
|
r, h = self._result(self._execute_request(qs))
|
||||||
|
self._img_diff_error(r, h, "WMS_GetMap_Tiled_False")
|
||||||
|
|
||||||
|
# Check with tiled=true
|
||||||
|
qs = "?" + "&".join(["%s=%s" % i for i in list({
|
||||||
|
"MAP": urllib.parse.quote(os.path.join(self.testdata_path, 'wms_tile_buffer.qgs')),
|
||||||
|
"SERVICE": "WMS",
|
||||||
|
"VERSION": "1.3.0",
|
||||||
|
"REQUEST": "GetMap",
|
||||||
|
"BBOX": "310187,6163153,324347,6177313",
|
||||||
|
"CRS": "EPSG:3857",
|
||||||
|
"WIDTH": "512",
|
||||||
|
"HEIGHT": "512",
|
||||||
|
"LAYERS": "wms_tile_buffer_data",
|
||||||
|
"FORMAT": "image/png",
|
||||||
|
"TILED": "true"
|
||||||
|
}.items())])
|
||||||
|
|
||||||
|
r, h = self._result(self._execute_request(qs))
|
||||||
|
self._img_diff_error(r, h, "WMS_GetMap_Tiled_True")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
BIN
tests/testdata/control_images/qgis_server/WMS_GetMap_Tiled_False/WMS_GetMap_Tiled_False.png
vendored
Normal file
BIN
tests/testdata/control_images/qgis_server/WMS_GetMap_Tiled_False/WMS_GetMap_Tiled_False.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
tests/testdata/control_images/qgis_server/WMS_GetMap_Tiled_True/WMS_GetMap_Tiled_True.png
vendored
Normal file
BIN
tests/testdata/control_images/qgis_server/WMS_GetMap_Tiled_True/WMS_GetMap_Tiled_True.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
598
tests/testdata/qgis_server/wms_tile_buffer.qgs
vendored
Normal file
598
tests/testdata/qgis_server/wms_tile_buffer.qgs
vendored
Normal file
@ -0,0 +1,598 @@
|
|||||||
|
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
|
||||||
|
<qgis projectname="" version="3.7.0-Master">
|
||||||
|
<homePath path=""/>
|
||||||
|
<title></title>
|
||||||
|
<autotransaction active="0"/>
|
||||||
|
<evaluateDefaultValues active="0"/>
|
||||||
|
<trust active="1"/>
|
||||||
|
<projectCrs>
|
||||||
|
<spatialrefsys>
|
||||||
|
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs</proj4>
|
||||||
|
<srsid>3857</srsid>
|
||||||
|
<srid>3857</srid>
|
||||||
|
<authid>EPSG:3857</authid>
|
||||||
|
<description>WGS 84 / Pseudo-Mercator</description>
|
||||||
|
<projectionacronym>merc</projectionacronym>
|
||||||
|
<ellipsoidacronym>WGS84</ellipsoidacronym>
|
||||||
|
<geographicflag>false</geographicflag>
|
||||||
|
</spatialrefsys>
|
||||||
|
</projectCrs>
|
||||||
|
<layer-tree-group>
|
||||||
|
<customproperties/>
|
||||||
|
<layer-tree-layer name="wms_tile_buffer_data" id="wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98" providerKey="ogr" checked="Qt::Checked" source="/home/lbartoletti/eleonore-test/wms_tile_buffer_data.gpkg|layername=wms_tile_buffer_data" expanded="1">
|
||||||
|
<customproperties/>
|
||||||
|
</layer-tree-layer>
|
||||||
|
<custom-order enabled="0">
|
||||||
|
<item>wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98</item>
|
||||||
|
</custom-order>
|
||||||
|
</layer-tree-group>
|
||||||
|
<snapping-settings unit="1" type="1" enabled="0" tolerance="12" intersection-snapping="0" mode="2">
|
||||||
|
<individual-layer-settings>
|
||||||
|
<layer-setting type="1" enabled="0" tolerance="12" id="wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98" units="1"/>
|
||||||
|
</individual-layer-settings>
|
||||||
|
</snapping-settings>
|
||||||
|
<relations/>
|
||||||
|
<mapcanvas annotationsVisible="1" name="theMapCanvas">
|
||||||
|
<units>meters</units>
|
||||||
|
<extent>
|
||||||
|
<xmin>304918.47943539364496246</xmin>
|
||||||
|
<ymin>6160178.90903625823557377</ymin>
|
||||||
|
<xmax>329687.225462922884617</xmax>
|
||||||
|
<ymax>6174497.13128242827951908</ymax>
|
||||||
|
</extent>
|
||||||
|
<rotation>0</rotation>
|
||||||
|
<destinationsrs>
|
||||||
|
<spatialrefsys>
|
||||||
|
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs</proj4>
|
||||||
|
<srsid>3857</srsid>
|
||||||
|
<srid>3857</srid>
|
||||||
|
<authid>EPSG:3857</authid>
|
||||||
|
<description>WGS 84 / Pseudo-Mercator</description>
|
||||||
|
<projectionacronym>merc</projectionacronym>
|
||||||
|
<ellipsoidacronym>WGS84</ellipsoidacronym>
|
||||||
|
<geographicflag>false</geographicflag>
|
||||||
|
</spatialrefsys>
|
||||||
|
</destinationsrs>
|
||||||
|
<rendermaptile>0</rendermaptile>
|
||||||
|
<expressionContextScope/>
|
||||||
|
</mapcanvas>
|
||||||
|
<legend updateDrawingOrder="true">
|
||||||
|
<legendlayer name="wms_tile_buffer_data" drawingOrder="-1" showFeatureCount="0" checked="Qt::Checked" open="true">
|
||||||
|
<filegroup open="true" hidden="false">
|
||||||
|
<legendlayerfile isInOverview="0" layerid="wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98" visible="1"/>
|
||||||
|
</filegroup>
|
||||||
|
</legendlayer>
|
||||||
|
</legend>
|
||||||
|
<mapViewDocks/>
|
||||||
|
<mapViewDocks3D/>
|
||||||
|
<projectlayers>
|
||||||
|
<maplayer hasScaleBasedVisibilityFlag="0" simplifyMaxScale="1" refreshOnNotifyMessage="" simplifyLocal="1" autoRefreshTime="0" simplifyDrawingHints="0" wkbType="Point" minScale="150001" simplifyDrawingTol="1" simplifyAlgorithm="0" geometry="Point" autoRefreshEnabled="0" maxScale="1" refreshOnNotifyEnabled="0" readOnly="0" type="vector" labelsEnabled="0" styleCategories="AllStyleCategories">
|
||||||
|
<extent>
|
||||||
|
<xmin>289998</xmin>
|
||||||
|
<ymin>6156740</ymin>
|
||||||
|
<xmax>344497</xmax>
|
||||||
|
<ymax>6188080</ymax>
|
||||||
|
</extent>
|
||||||
|
<id>wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98</id>
|
||||||
|
<datasource>./wms_tile_buffer_data.gpkg|layername=wms_tile_buffer_data</datasource>
|
||||||
|
<keywordList>
|
||||||
|
<value></value>
|
||||||
|
</keywordList>
|
||||||
|
<layername>wms_tile_buffer_data</layername>
|
||||||
|
<srs>
|
||||||
|
<spatialrefsys>
|
||||||
|
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs</proj4>
|
||||||
|
<srsid>3857</srsid>
|
||||||
|
<srid>3857</srid>
|
||||||
|
<authid>EPSG:3857</authid>
|
||||||
|
<description>WGS 84 / Pseudo-Mercator</description>
|
||||||
|
<projectionacronym>merc</projectionacronym>
|
||||||
|
<ellipsoidacronym>WGS84</ellipsoidacronym>
|
||||||
|
<geographicflag>false</geographicflag>
|
||||||
|
</spatialrefsys>
|
||||||
|
</srs>
|
||||||
|
<resourceMetadata>
|
||||||
|
<identifier></identifier>
|
||||||
|
<parentidentifier></parentidentifier>
|
||||||
|
<language></language>
|
||||||
|
<type></type>
|
||||||
|
<title></title>
|
||||||
|
<abstract></abstract>
|
||||||
|
<links/>
|
||||||
|
<fees></fees>
|
||||||
|
<encoding></encoding>
|
||||||
|
<crs>
|
||||||
|
<spatialrefsys>
|
||||||
|
<proj4></proj4>
|
||||||
|
<srsid>0</srsid>
|
||||||
|
<srid>0</srid>
|
||||||
|
<authid></authid>
|
||||||
|
<description></description>
|
||||||
|
<projectionacronym></projectionacronym>
|
||||||
|
<ellipsoidacronym></ellipsoidacronym>
|
||||||
|
<geographicflag>true</geographicflag>
|
||||||
|
</spatialrefsys>
|
||||||
|
</crs>
|
||||||
|
<extent/>
|
||||||
|
</resourceMetadata>
|
||||||
|
<provider encoding="UTF-8">ogr</provider>
|
||||||
|
<vectorjoins/>
|
||||||
|
<layerDependencies/>
|
||||||
|
<dataDependencies/>
|
||||||
|
<legend type="default-vector"/>
|
||||||
|
<expressionfields/>
|
||||||
|
<map-layer-style-manager current="défaut">
|
||||||
|
<map-layer-style name="défaut"/>
|
||||||
|
</map-layer-style-manager>
|
||||||
|
<auxiliaryLayer/>
|
||||||
|
<flags>
|
||||||
|
<Identifiable>1</Identifiable>
|
||||||
|
<Removable>1</Removable>
|
||||||
|
<Searchable>1</Searchable>
|
||||||
|
</flags>
|
||||||
|
<renderer-v2 enableorderby="0" type="singleSymbol" forceraster="0" symbollevels="0">
|
||||||
|
<symbols>
|
||||||
|
<symbol name="0" type="marker" clip_to_extent="1" alpha="1" force_rhr="0">
|
||||||
|
<layer locked="0" enabled="1" class="SvgMarker" pass="0">
|
||||||
|
<prop v="0" k="angle"/>
|
||||||
|
<prop v="190,178,151,255" k="color"/>
|
||||||
|
<prop v="0" k="fixedAspectRatio"/>
|
||||||
|
<prop v="1" k="horizontal_anchor_point"/>
|
||||||
|
<prop v="accommodation/accommodation_bed_and_breakfast.svg" k="name"/>
|
||||||
|
<prop v="0,-30" k="offset"/>
|
||||||
|
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
|
||||||
|
<prop v="Pixel" k="offset_unit"/>
|
||||||
|
<prop v="35,35,35,255" k="outline_color"/>
|
||||||
|
<prop v="0" k="outline_width"/>
|
||||||
|
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
|
||||||
|
<prop v="Pixel" k="outline_width_unit"/>
|
||||||
|
<prop v="diameter" k="scale_method"/>
|
||||||
|
<prop v="60" k="size"/>
|
||||||
|
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
|
||||||
|
<prop v="Pixel" k="size_unit"/>
|
||||||
|
<prop v="1" k="vertical_anchor_point"/>
|
||||||
|
<data_defined_properties>
|
||||||
|
<Option type="Map">
|
||||||
|
<Option name="name" type="QString" value=""/>
|
||||||
|
<Option name="properties"/>
|
||||||
|
<Option name="type" type="QString" value="collection"/>
|
||||||
|
</Option>
|
||||||
|
</data_defined_properties>
|
||||||
|
</layer>
|
||||||
|
</symbol>
|
||||||
|
</symbols>
|
||||||
|
<rotation/>
|
||||||
|
<sizescale/>
|
||||||
|
</renderer-v2>
|
||||||
|
<customproperties>
|
||||||
|
<property value="id" key="dualview/previewExpressions"/>
|
||||||
|
<property value="0" key="embeddedWidgets/count"/>
|
||||||
|
<property key="variableNames"/>
|
||||||
|
<property key="variableValues"/>
|
||||||
|
</customproperties>
|
||||||
|
<blendMode>0</blendMode>
|
||||||
|
<featureBlendMode>0</featureBlendMode>
|
||||||
|
<layerOpacity>1</layerOpacity>
|
||||||
|
<SingleCategoryDiagramRenderer attributeLegend="1" diagramType="Histogram">
|
||||||
|
<DiagramCategory rotationOffset="270" penAlpha="255" backgroundColor="#ffffff" labelPlacementMethod="XHeight" scaleDependency="Area" height="15" width="15" enabled="0" sizeType="MM" lineSizeType="MM" diagramOrientation="Up" penWidth="0" penColor="#000000" sizeScale="3x:0,0,0,0,0,0" backgroundAlpha="255" opacity="1" scaleBasedVisibility="0" barWidth="5" lineSizeScale="3x:0,0,0,0,0,0" maxScaleDenominator="1e+08" minimumSize="0" minScaleDenominator="1">
|
||||||
|
<fontProperties style="" description=".SF NS Text,13,-1,5,50,0,0,0,0,0"/>
|
||||||
|
<attribute color="#000000" label="" field=""/>
|
||||||
|
</DiagramCategory>
|
||||||
|
</SingleCategoryDiagramRenderer>
|
||||||
|
<DiagramLayerSettings placement="0" dist="0" showAll="1" obstacle="0" priority="0" linePlacementFlags="18" zIndex="0">
|
||||||
|
<properties>
|
||||||
|
<Option type="Map">
|
||||||
|
<Option name="name" type="QString" value=""/>
|
||||||
|
<Option name="properties"/>
|
||||||
|
<Option name="type" type="QString" value="collection"/>
|
||||||
|
</Option>
|
||||||
|
</properties>
|
||||||
|
</DiagramLayerSettings>
|
||||||
|
<geometryOptions geometryPrecision="0" removeDuplicateNodes="0">
|
||||||
|
<activeChecks/>
|
||||||
|
<checkConfiguration/>
|
||||||
|
</geometryOptions>
|
||||||
|
<fieldConfiguration>
|
||||||
|
<field name="fid">
|
||||||
|
<editWidget type="">
|
||||||
|
<config>
|
||||||
|
<Option/>
|
||||||
|
</config>
|
||||||
|
</editWidget>
|
||||||
|
</field>
|
||||||
|
<field name="id">
|
||||||
|
<editWidget type="TextEdit">
|
||||||
|
<config>
|
||||||
|
<Option/>
|
||||||
|
</config>
|
||||||
|
</editWidget>
|
||||||
|
</field>
|
||||||
|
</fieldConfiguration>
|
||||||
|
<aliases>
|
||||||
|
<alias name="" field="fid" index="0"/>
|
||||||
|
<alias name="" field="id" index="1"/>
|
||||||
|
</aliases>
|
||||||
|
<excludeAttributesWMS/>
|
||||||
|
<excludeAttributesWFS/>
|
||||||
|
<defaults>
|
||||||
|
<default field="fid" applyOnUpdate="0" expression=""/>
|
||||||
|
<default field="id" applyOnUpdate="0" expression=""/>
|
||||||
|
</defaults>
|
||||||
|
<constraints>
|
||||||
|
<constraint unique_strength="1" field="fid" constraints="3" exp_strength="0" notnull_strength="1"/>
|
||||||
|
<constraint unique_strength="1" field="id" constraints="3" exp_strength="0" notnull_strength="1"/>
|
||||||
|
</constraints>
|
||||||
|
<constraintExpressions>
|
||||||
|
<constraint exp="" field="fid" desc=""/>
|
||||||
|
<constraint exp="" field="id" desc=""/>
|
||||||
|
</constraintExpressions>
|
||||||
|
<expressionfields/>
|
||||||
|
<attributeactions>
|
||||||
|
<defaultAction value="{00000000-0000-0000-0000-000000000000}" key="Canvas"/>
|
||||||
|
</attributeactions>
|
||||||
|
<attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="0">
|
||||||
|
<columns>
|
||||||
|
<column name="id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="contract_code" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="contract_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column type="actions" width="-1" hidden="1"/>
|
||||||
|
<column name="asset_uid" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="bu_id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="bu_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="country_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="community_id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="community_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="time_zone" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="insertion_time" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="reception_time" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="gis_asset_id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="gis_asset_uuid" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="local_activity_level1" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_post_code_local" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_town" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_street_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_data_source" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_domain" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_operator" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_owner" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_precision_class" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_status" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_type_text" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_subtype" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_function" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="cmms_asset_id" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_name" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_street_name_added_information" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_commissioning_date" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_closure_date" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="tank_vessels_number" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="tank_vessels_volume_capacity" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="installation_invert_altitude" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="installation_overflow_altitude" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="installation_land_altitude" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_longitude" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="asset_latitude" type="field" width="-1" hidden="0"/>
|
||||||
|
<column name="angle" type="field" width="-1" hidden="0"/>
|
||||||
|
</columns>
|
||||||
|
</attributetableconfig>
|
||||||
|
<conditionalstyles>
|
||||||
|
<rowstyles/>
|
||||||
|
<fieldstyles/>
|
||||||
|
</conditionalstyles>
|
||||||
|
<editform tolerant="1">.</editform>
|
||||||
|
<editforminit/>
|
||||||
|
<editforminitcodesource>0</editforminitcodesource>
|
||||||
|
<editforminitfilepath></editforminitfilepath>
|
||||||
|
<editforminitcode></editforminitcode>
|
||||||
|
<featformsuppress>0</featformsuppress>
|
||||||
|
<editorlayout>generatedlayout</editorlayout>
|
||||||
|
<editable>
|
||||||
|
<field name="activity_code" editable="1"/>
|
||||||
|
<field name="activity_name" editable="1"/>
|
||||||
|
<field name="activity_type" editable="1"/>
|
||||||
|
<field name="address" editable="1"/>
|
||||||
|
<field name="angle" editable="1"/>
|
||||||
|
<field name="asset_closure_date" editable="1"/>
|
||||||
|
<field name="asset_commissioning_date" editable="1"/>
|
||||||
|
<field name="asset_data_source" editable="1"/>
|
||||||
|
<field name="asset_domain" editable="1"/>
|
||||||
|
<field name="asset_function" editable="1"/>
|
||||||
|
<field name="asset_id" editable="1"/>
|
||||||
|
<field name="asset_latitude" editable="1"/>
|
||||||
|
<field name="asset_longitude" editable="1"/>
|
||||||
|
<field name="asset_name" editable="1"/>
|
||||||
|
<field name="asset_operator" editable="1"/>
|
||||||
|
<field name="asset_owner" editable="1"/>
|
||||||
|
<field name="asset_post_code_local" editable="1"/>
|
||||||
|
<field name="asset_precision_class" editable="1"/>
|
||||||
|
<field name="asset_status" editable="1"/>
|
||||||
|
<field name="asset_street_name" editable="1"/>
|
||||||
|
<field name="asset_street_name_added_information" editable="1"/>
|
||||||
|
<field name="asset_subtype" editable="1"/>
|
||||||
|
<field name="asset_town" editable="1"/>
|
||||||
|
<field name="asset_type_text" editable="1"/>
|
||||||
|
<field name="asset_uid" editable="1"/>
|
||||||
|
<field name="bottom_slab_level" editable="1"/>
|
||||||
|
<field name="bu_id" editable="1"/>
|
||||||
|
<field name="bu_name" editable="1"/>
|
||||||
|
<field name="capacity" editable="1"/>
|
||||||
|
<field name="city_code" editable="1"/>
|
||||||
|
<field name="city_name" editable="1"/>
|
||||||
|
<field name="cmms_asset_id" editable="1"/>
|
||||||
|
<field name="code" editable="1"/>
|
||||||
|
<field name="community_id" editable="1"/>
|
||||||
|
<field name="community_name" editable="1"/>
|
||||||
|
<field name="contract_code" editable="1"/>
|
||||||
|
<field name="contract_name" editable="1"/>
|
||||||
|
<field name="country_name" editable="1"/>
|
||||||
|
<field name="data_source" editable="1"/>
|
||||||
|
<field name="date_insert" editable="1"/>
|
||||||
|
<field name="date_maj_ddesk" editable="1"/>
|
||||||
|
<field name="date_update" editable="1"/>
|
||||||
|
<field name="default" editable="1"/>
|
||||||
|
<field name="district_name" editable="1"/>
|
||||||
|
<field name="ditrict_code" editable="1"/>
|
||||||
|
<field name="ditrict_name" editable="1"/>
|
||||||
|
<field name="end_of_operation_date" editable="1"/>
|
||||||
|
<field name="flow_daily" editable="1"/>
|
||||||
|
<field name="flow_peak" editable="1"/>
|
||||||
|
<field name="gis_asset_id" editable="1"/>
|
||||||
|
<field name="gis_asset_uuid" editable="1"/>
|
||||||
|
<field name="ground_level" editable="1"/>
|
||||||
|
<field name="id" editable="1"/>
|
||||||
|
<field name="insertion_time" editable="1"/>
|
||||||
|
<field name="installation_invert_altitude" editable="1"/>
|
||||||
|
<field name="installation_land_altitude" editable="1"/>
|
||||||
|
<field name="installation_overflow_altitude" editable="1"/>
|
||||||
|
<field name="local_activity_level1" editable="1"/>
|
||||||
|
<field name="name" editable="1"/>
|
||||||
|
<field name="num_tanks" editable="1"/>
|
||||||
|
<field name="operator" editable="1"/>
|
||||||
|
<field name="overflow_level" editable="1"/>
|
||||||
|
<field name="owner" editable="1"/>
|
||||||
|
<field name="power" editable="1"/>
|
||||||
|
<field name="precision_class" editable="1"/>
|
||||||
|
<field name="pressure_zone_name" editable="1"/>
|
||||||
|
<field name="pressure_zone_type" editable="1"/>
|
||||||
|
<field name="pump_nb" editable="1"/>
|
||||||
|
<field name="reception_time" editable="1"/>
|
||||||
|
<field name="service_date" editable="1"/>
|
||||||
|
<field name="service_year" editable="1"/>
|
||||||
|
<field name="source_id" editable="1"/>
|
||||||
|
<field name="status" editable="1"/>
|
||||||
|
<field name="street_name" editable="1"/>
|
||||||
|
<field name="tank_vessels_number" editable="1"/>
|
||||||
|
<field name="tank_vessels_volume_capacity" editable="1"/>
|
||||||
|
<field name="time_zone" editable="1"/>
|
||||||
|
<field name="type" editable="1"/>
|
||||||
|
</editable>
|
||||||
|
<labelOnTop>
|
||||||
|
<field name="activity_code" labelOnTop="0"/>
|
||||||
|
<field name="activity_name" labelOnTop="0"/>
|
||||||
|
<field name="activity_type" labelOnTop="0"/>
|
||||||
|
<field name="address" labelOnTop="0"/>
|
||||||
|
<field name="angle" labelOnTop="0"/>
|
||||||
|
<field name="asset_closure_date" labelOnTop="0"/>
|
||||||
|
<field name="asset_commissioning_date" labelOnTop="0"/>
|
||||||
|
<field name="asset_data_source" labelOnTop="0"/>
|
||||||
|
<field name="asset_domain" labelOnTop="0"/>
|
||||||
|
<field name="asset_function" labelOnTop="0"/>
|
||||||
|
<field name="asset_id" labelOnTop="0"/>
|
||||||
|
<field name="asset_latitude" labelOnTop="0"/>
|
||||||
|
<field name="asset_longitude" labelOnTop="0"/>
|
||||||
|
<field name="asset_name" labelOnTop="0"/>
|
||||||
|
<field name="asset_operator" labelOnTop="0"/>
|
||||||
|
<field name="asset_owner" labelOnTop="0"/>
|
||||||
|
<field name="asset_post_code_local" labelOnTop="0"/>
|
||||||
|
<field name="asset_precision_class" labelOnTop="0"/>
|
||||||
|
<field name="asset_status" labelOnTop="0"/>
|
||||||
|
<field name="asset_street_name" labelOnTop="0"/>
|
||||||
|
<field name="asset_street_name_added_information" labelOnTop="0"/>
|
||||||
|
<field name="asset_subtype" labelOnTop="0"/>
|
||||||
|
<field name="asset_town" labelOnTop="0"/>
|
||||||
|
<field name="asset_type_text" labelOnTop="0"/>
|
||||||
|
<field name="asset_uid" labelOnTop="0"/>
|
||||||
|
<field name="bottom_slab_level" labelOnTop="0"/>
|
||||||
|
<field name="bu_id" labelOnTop="0"/>
|
||||||
|
<field name="bu_name" labelOnTop="0"/>
|
||||||
|
<field name="capacity" labelOnTop="0"/>
|
||||||
|
<field name="city_code" labelOnTop="0"/>
|
||||||
|
<field name="city_name" labelOnTop="0"/>
|
||||||
|
<field name="cmms_asset_id" labelOnTop="0"/>
|
||||||
|
<field name="code" labelOnTop="0"/>
|
||||||
|
<field name="community_id" labelOnTop="0"/>
|
||||||
|
<field name="community_name" labelOnTop="0"/>
|
||||||
|
<field name="contract_code" labelOnTop="0"/>
|
||||||
|
<field name="contract_name" labelOnTop="0"/>
|
||||||
|
<field name="country_name" labelOnTop="0"/>
|
||||||
|
<field name="data_source" labelOnTop="0"/>
|
||||||
|
<field name="date_insert" labelOnTop="0"/>
|
||||||
|
<field name="date_maj_ddesk" labelOnTop="0"/>
|
||||||
|
<field name="date_update" labelOnTop="0"/>
|
||||||
|
<field name="default" labelOnTop="0"/>
|
||||||
|
<field name="district_name" labelOnTop="0"/>
|
||||||
|
<field name="ditrict_code" labelOnTop="0"/>
|
||||||
|
<field name="ditrict_name" labelOnTop="0"/>
|
||||||
|
<field name="end_of_operation_date" labelOnTop="0"/>
|
||||||
|
<field name="flow_daily" labelOnTop="0"/>
|
||||||
|
<field name="flow_peak" labelOnTop="0"/>
|
||||||
|
<field name="gis_asset_id" labelOnTop="0"/>
|
||||||
|
<field name="gis_asset_uuid" labelOnTop="0"/>
|
||||||
|
<field name="ground_level" labelOnTop="0"/>
|
||||||
|
<field name="id" labelOnTop="0"/>
|
||||||
|
<field name="insertion_time" labelOnTop="0"/>
|
||||||
|
<field name="installation_invert_altitude" labelOnTop="0"/>
|
||||||
|
<field name="installation_land_altitude" labelOnTop="0"/>
|
||||||
|
<field name="installation_overflow_altitude" labelOnTop="0"/>
|
||||||
|
<field name="local_activity_level1" labelOnTop="0"/>
|
||||||
|
<field name="name" labelOnTop="0"/>
|
||||||
|
<field name="num_tanks" labelOnTop="0"/>
|
||||||
|
<field name="operator" labelOnTop="0"/>
|
||||||
|
<field name="overflow_level" labelOnTop="0"/>
|
||||||
|
<field name="owner" labelOnTop="0"/>
|
||||||
|
<field name="power" labelOnTop="0"/>
|
||||||
|
<field name="precision_class" labelOnTop="0"/>
|
||||||
|
<field name="pressure_zone_name" labelOnTop="0"/>
|
||||||
|
<field name="pressure_zone_type" labelOnTop="0"/>
|
||||||
|
<field name="pump_nb" labelOnTop="0"/>
|
||||||
|
<field name="reception_time" labelOnTop="0"/>
|
||||||
|
<field name="service_date" labelOnTop="0"/>
|
||||||
|
<field name="service_year" labelOnTop="0"/>
|
||||||
|
<field name="source_id" labelOnTop="0"/>
|
||||||
|
<field name="status" labelOnTop="0"/>
|
||||||
|
<field name="street_name" labelOnTop="0"/>
|
||||||
|
<field name="tank_vessels_number" labelOnTop="0"/>
|
||||||
|
<field name="tank_vessels_volume_capacity" labelOnTop="0"/>
|
||||||
|
<field name="time_zone" labelOnTop="0"/>
|
||||||
|
<field name="type" labelOnTop="0"/>
|
||||||
|
</labelOnTop>
|
||||||
|
<widgets/>
|
||||||
|
<previewExpression>id</previewExpression>
|
||||||
|
<mapTip></mapTip>
|
||||||
|
</maplayer>
|
||||||
|
</projectlayers>
|
||||||
|
<layerorder>
|
||||||
|
<layer id="wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98"/>
|
||||||
|
</layerorder>
|
||||||
|
<properties>
|
||||||
|
<DefaultStyles>
|
||||||
|
<ColorRamp type="QString"></ColorRamp>
|
||||||
|
<Fill type="QString"></Fill>
|
||||||
|
<Line type="QString"></Line>
|
||||||
|
<Marker type="QString"></Marker>
|
||||||
|
<Opacity type="double">1</Opacity>
|
||||||
|
<RandomColors type="bool">true</RandomColors>
|
||||||
|
</DefaultStyles>
|
||||||
|
<Gui>
|
||||||
|
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
|
||||||
|
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
|
||||||
|
<CanvasColorRedPart type="int">255</CanvasColorRedPart>
|
||||||
|
<SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
|
||||||
|
<SelectionColorBluePart type="int">0</SelectionColorBluePart>
|
||||||
|
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
|
||||||
|
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
|
||||||
|
</Gui>
|
||||||
|
<Legend>
|
||||||
|
<filterByMap type="bool">false</filterByMap>
|
||||||
|
</Legend>
|
||||||
|
<Macros>
|
||||||
|
<pythonCode type="QString"></pythonCode>
|
||||||
|
</Macros>
|
||||||
|
<Measure>
|
||||||
|
<Ellipsoid type="QString">WGS84</Ellipsoid>
|
||||||
|
</Measure>
|
||||||
|
<Measurement>
|
||||||
|
<AreaUnits type="QString"><unknown></AreaUnits>
|
||||||
|
<DistanceUnits type="QString">meters</DistanceUnits>
|
||||||
|
</Measurement>
|
||||||
|
<PAL>
|
||||||
|
<CandidatesLine type="int">50</CandidatesLine>
|
||||||
|
<CandidatesPoint type="int">16</CandidatesPoint>
|
||||||
|
<CandidatesPolygon type="int">30</CandidatesPolygon>
|
||||||
|
<DrawOutlineLabels type="bool">true</DrawOutlineLabels>
|
||||||
|
<DrawRectOnly type="bool">false</DrawRectOnly>
|
||||||
|
<SearchMethod type="int">0</SearchMethod>
|
||||||
|
<ShowingAllLabels type="bool">false</ShowingAllLabels>
|
||||||
|
<ShowingCandidates type="bool">false</ShowingCandidates>
|
||||||
|
<ShowingPartialsLabels type="bool">true</ShowingPartialsLabels>
|
||||||
|
<TextFormat type="int">0</TextFormat>
|
||||||
|
</PAL>
|
||||||
|
<Paths>
|
||||||
|
<Absolute type="bool">false</Absolute>
|
||||||
|
</Paths>
|
||||||
|
<PositionPrecision>
|
||||||
|
<Automatic type="bool">true</Automatic>
|
||||||
|
<DecimalPlaces type="int">2</DecimalPlaces>
|
||||||
|
<DegreeFormat type="QString">MU</DegreeFormat>
|
||||||
|
</PositionPrecision>
|
||||||
|
<SpatialRefSys>
|
||||||
|
<ProjectionsEnabled type="int">1</ProjectionsEnabled>
|
||||||
|
</SpatialRefSys>
|
||||||
|
<WCSLayers type="QStringList"/>
|
||||||
|
<WCSUrl type="QString"></WCSUrl>
|
||||||
|
<WFSLayers type="QStringList"/>
|
||||||
|
<WFSTLayers>
|
||||||
|
<Delete type="QStringList"/>
|
||||||
|
<Insert type="QStringList"/>
|
||||||
|
<Update type="QStringList"/>
|
||||||
|
</WFSTLayers>
|
||||||
|
<WFSUrl type="QString"></WFSUrl>
|
||||||
|
<WMSAccessConstraints type="QString">None</WMSAccessConstraints>
|
||||||
|
<WMSAddWktGeometry type="bool">true</WMSAddWktGeometry>
|
||||||
|
<WMSContactMail type="QString"></WMSContactMail>
|
||||||
|
<WMSContactOrganization type="QString"></WMSContactOrganization>
|
||||||
|
<WMSContactPerson type="QString"></WMSContactPerson>
|
||||||
|
<WMSContactPhone type="QString"></WMSContactPhone>
|
||||||
|
<WMSContactPosition type="QString"></WMSContactPosition>
|
||||||
|
<WMSDefaultMapUnitsPerMm type="double">1</WMSDefaultMapUnitsPerMm>
|
||||||
|
<WMSFees type="QString">conditions unknown</WMSFees>
|
||||||
|
<WMSImageQuality type="int">90</WMSImageQuality>
|
||||||
|
<WMSKeywordList type="QStringList">
|
||||||
|
<value></value>
|
||||||
|
</WMSKeywordList>
|
||||||
|
<WMSMaxAtlasFeatures type="int">1</WMSMaxAtlasFeatures>
|
||||||
|
<WMSOnlineResource type="QString"></WMSOnlineResource>
|
||||||
|
<WMSPrecision type="QString">8</WMSPrecision>
|
||||||
|
<WMSRequestDefinedDataSources type="bool">false</WMSRequestDefinedDataSources>
|
||||||
|
<WMSRootName type="QString"></WMSRootName>
|
||||||
|
<WMSSegmentizeFeatureInfoGeometry type="bool">false</WMSSegmentizeFeatureInfoGeometry>
|
||||||
|
<WMSServiceAbstract type="QString"></WMSServiceAbstract>
|
||||||
|
<WMSServiceCapabilities type="bool">false</WMSServiceCapabilities>
|
||||||
|
<WMSServiceTitle type="QString"></WMSServiceTitle>
|
||||||
|
<WMSTileBuffer type="int">60</WMSTileBuffer>
|
||||||
|
<WMSUrl type="QString"></WMSUrl>
|
||||||
|
<WMSUseLayerIDs type="bool">false</WMSUseLayerIDs>
|
||||||
|
<WMTSGrids>
|
||||||
|
<CRS type="QStringList"/>
|
||||||
|
<Config type="QStringList"/>
|
||||||
|
</WMTSGrids>
|
||||||
|
<WMTSJpegLayers>
|
||||||
|
<Group type="QStringList"/>
|
||||||
|
<Layer type="QStringList">
|
||||||
|
<value>wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98</value>
|
||||||
|
</Layer>
|
||||||
|
<Project type="bool">true</Project>
|
||||||
|
</WMTSJpegLayers>
|
||||||
|
<WMTSLayers>
|
||||||
|
<Group type="QStringList"/>
|
||||||
|
<Layer type="QStringList">
|
||||||
|
<value>wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98</value>
|
||||||
|
</Layer>
|
||||||
|
<Project type="bool">true</Project>
|
||||||
|
</WMTSLayers>
|
||||||
|
<WMTSMinScale type="int">5000</WMTSMinScale>
|
||||||
|
<WMTSPngLayers>
|
||||||
|
<Group type="QStringList"/>
|
||||||
|
<Layer type="QStringList">
|
||||||
|
<value>wms_tile_buffer_data_fcfdbf36_dd5a_45d6_b770_bdbb3794cf98</value>
|
||||||
|
</Layer>
|
||||||
|
<Project type="bool">true</Project>
|
||||||
|
</WMTSPngLayers>
|
||||||
|
<WMTSUrl type="QString"></WMTSUrl>
|
||||||
|
</properties>
|
||||||
|
<visibility-presets/>
|
||||||
|
<transformContext/>
|
||||||
|
<projectMetadata>
|
||||||
|
<identifier></identifier>
|
||||||
|
<parentidentifier></parentidentifier>
|
||||||
|
<language></language>
|
||||||
|
<type></type>
|
||||||
|
<title></title>
|
||||||
|
<abstract></abstract>
|
||||||
|
<contact>
|
||||||
|
<name></name>
|
||||||
|
<organization></organization>
|
||||||
|
<position></position>
|
||||||
|
<voice></voice>
|
||||||
|
<fax></fax>
|
||||||
|
<email></email>
|
||||||
|
<role></role>
|
||||||
|
</contact>
|
||||||
|
<links/>
|
||||||
|
<author>SALSE Alice</author>
|
||||||
|
<creation>2019-02-13T15:29:32</creation>
|
||||||
|
</projectMetadata>
|
||||||
|
<Annotations/>
|
||||||
|
<Layouts/>
|
||||||
|
</qgis>
|
||||||
BIN
tests/testdata/qgis_server/wms_tile_buffer_data.gpkg
vendored
Normal file
BIN
tests/testdata/qgis_server/wms_tile_buffer_data.gpkg
vendored
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user