mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[FEATURE] New unit type for rendering in map unit meters sizes
Allows setting symbols other map item sizes to Map Units in Meters. This allows setting the size always in meters, regardless of what the underlying map units are (e.g. they can be it geographic degrees). The size in meters is calculated based on the current project ellipsoid setting and a projection of the distances in meters at the center of the current map extent.
This commit is contained in:
parent
69dab42785
commit
172e809181
@ -290,6 +290,9 @@ Constructor
|
||||
code (and documentation) taken from rttopo project
|
||||
https://git.osgeo.org/gogs/rttopo/librttopo
|
||||
- spheroid_project.spheroid_project(...)
|
||||
- Valid bounds checking for degrees (latitude=+- 85.05115) is based values used for
|
||||
-> 'WGS84 Web Mercator (Auxiliary Sphere)' calculations
|
||||
--> latitudes outside these bounds cause the calculations to become unstable and can return invalid results
|
||||
.. versionadded:: 3.0
|
||||
\param p1 - location of first geographic (latitude/longitude) point as degrees.
|
||||
\param distance - distance in meters.
|
||||
|
@ -152,6 +152,26 @@ Get units of map's geographical coordinates - used for scale calculation
|
||||
:rtype: QgsUnitTypes.DistanceUnit
|
||||
%End
|
||||
|
||||
bool setEllipsoid( const QString &ellipsoid );
|
||||
%Docstring
|
||||
Sets the ``ellipsoid`` by its acronym. Known ellipsoid acronyms can be
|
||||
retrieved using QgsEllipsoidUtils.acronyms().
|
||||
Calculations will only use the ellipsoid if a valid ellipsoid has been set.
|
||||
:return: true if ellipsoid was successfully set
|
||||
.. versionadded:: 3.0
|
||||
.. seealso:: ellipsoid()
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
QString ellipsoid() const;
|
||||
%Docstring
|
||||
Returns ellipsoid's acronym. Calculations will only use the
|
||||
ellipsoid if a valid ellipsoid has been set.
|
||||
.. versionadded:: 3.0
|
||||
.. seealso:: setEllipsoid()
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
void setBackgroundColor( const QColor &color );
|
||||
%Docstring
|
||||
Set the background color of the map
|
||||
|
@ -101,6 +101,13 @@ class QgsRenderContext
|
||||
:rtype: QgsCoordinateTransform
|
||||
%End
|
||||
|
||||
const QgsDistanceArea &distanceArea() const;
|
||||
%Docstring
|
||||
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
|
||||
.. versionadded:: 3.0
|
||||
:rtype: QgsDistanceArea
|
||||
%End
|
||||
|
||||
const QgsRectangle &extent() const;
|
||||
%Docstring
|
||||
:rtype: QgsRectangle
|
||||
@ -182,6 +189,13 @@ Sets coordinate transformation.
|
||||
|
||||
void setRenderingStopped( bool stopped );
|
||||
|
||||
void setDistanceArea( const QgsDistanceArea distanceArea );
|
||||
%Docstring
|
||||
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
|
||||
Will be used to convert meter distances to active MapUnit values for QgsUnitTypes.RenderMetersInMapUnits
|
||||
.. versionadded:: 3.0
|
||||
%End
|
||||
|
||||
void setScaleFactor( double factor );
|
||||
%Docstring
|
||||
Sets the scaling factor for the render to convert painter units
|
||||
@ -327,6 +341,15 @@ Gets segmentation tolerance type (maximum angle or maximum difference between cu
|
||||
:rtype: float
|
||||
%End
|
||||
|
||||
double convertMetersToMapUnits( double meters ) const;
|
||||
%Docstring
|
||||
Convert meter distances to active MapUnit values for QgsUnitTypes.RenderMetersInMapUnits
|
||||
\note
|
||||
When the sourceCrs() is geographic, the center of the Extent will be used
|
||||
.. versionadded:: 3.0
|
||||
:rtype: float
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
QFlags<QgsRenderContext::Flag> operator|(QgsRenderContext::Flag f1, QFlags<QgsRenderContext::Flag> f2);
|
||||
|
@ -79,6 +79,7 @@ class QgsUnitTypes
|
||||
RenderPoints,
|
||||
RenderInches,
|
||||
RenderUnknownUnit,
|
||||
RenderMetersInMapUnits,
|
||||
};
|
||||
|
||||
enum LayoutUnit
|
||||
|
@ -2999,6 +2999,7 @@ void QgisApp::setupConnections()
|
||||
connect( QgsProject::instance(), &QgsProject::crsChanged,
|
||||
this, [ = ]
|
||||
{
|
||||
QgsDebugMsgLevel( QString( "QgisApp::setupConnections -1- : QgsProject::instance()->crs().description[%1]ellipsoid[%2]" ).arg( QgsProject::instance()->crs().description() ).arg( QgsProject::instance()->crs().ellipsoidAcronym() ), 3 );
|
||||
mMapCanvas->setDestinationCrs( QgsProject::instance()->crs() );
|
||||
} );
|
||||
|
||||
@ -3259,6 +3260,7 @@ QgsMapCanvas *QgisApp::createNewMapCanvas( const QString &name )
|
||||
|
||||
dock->mapCanvas()->setLayers( mMapCanvas->layers() );
|
||||
dock->mapCanvas()->setExtent( mMapCanvas->extent() );
|
||||
QgsDebugMsgLevel( QString( "QgisApp::createNewMapCanvas -2- : QgsProject::instance()->crs().description[%1]ellipsoid[%2]" ).arg( QgsProject::instance()->crs().description() ).arg( QgsProject::instance()->crs().ellipsoidAcronym() ), 3 );
|
||||
dock->mapCanvas()->setDestinationCrs( QgsProject::instance()->crs() );
|
||||
dock->mapCanvas()->freeze( false );
|
||||
return dock->mapCanvas();
|
||||
@ -9960,6 +9962,7 @@ void QgisApp::newMapCanvas()
|
||||
{
|
||||
dock->mapCanvas()->setLayers( mMapCanvas->layers() );
|
||||
dock->mapCanvas()->setExtent( mMapCanvas->extent() );
|
||||
QgsDebugMsgLevel( QString( "QgisApp::newMapCanvas() -4- : QgsProject::instance()->crs().description[%1] ellipsoid[%2]" ).arg( QgsProject::instance()->crs().description() ).arg( QgsProject::instance()->crs().ellipsoidAcronym() ), 3 );
|
||||
dock->mapCanvas()->setDestinationCrs( QgsProject::instance()->crs() );
|
||||
dock->mapCanvas()->freeze( false );
|
||||
}
|
||||
|
@ -248,6 +248,15 @@ QPointF QgsMapToolOffsetPointSymbol::calculateOffset( const QgsPointXY &startPoi
|
||||
factor = 1.0;
|
||||
break;
|
||||
|
||||
case QgsUnitTypes::RenderMetersInMapUnits:
|
||||
{
|
||||
QgsDistanceArea distanceArea;
|
||||
distanceArea.setSourceCrs( mCanvas->mapSettings().destinationCrs() );
|
||||
distanceArea.setEllipsoid( mCanvas->mapSettings().ellipsoid() );
|
||||
// factor=1.0 / 1 meter in MapUnits
|
||||
factor = 1.0 / distanceArea.measureLineProjected( startPoint );
|
||||
}
|
||||
break;
|
||||
case QgsUnitTypes::RenderUnknownUnit:
|
||||
case QgsUnitTypes::RenderPercentage:
|
||||
//no sensible value
|
||||
|
@ -164,6 +164,7 @@ QgsMapSettings QgsComposerMap::mapSettings( const QgsRectangle &extent, QSizeF s
|
||||
jobMapSettings.setOutputDpi( dpi );
|
||||
jobMapSettings.setBackgroundColor( Qt::transparent );
|
||||
jobMapSettings.setRotation( mEvaluatedMapRotation );
|
||||
jobMapSettings.setEllipsoid( mComposition->project()->ellipsoid() );
|
||||
|
||||
//set layers to render
|
||||
QList<QgsMapLayer *> layers = layersToRender( &expressionContext );
|
||||
|
@ -46,6 +46,9 @@
|
||||
QgsDistanceArea::QgsDistanceArea()
|
||||
{
|
||||
// init with default settings
|
||||
mSemiMajor = -1.0;
|
||||
mSemiMinor = -1.0;
|
||||
mInvFlattening = -1.0;
|
||||
setSourceCrs( QgsCoordinateReferenceSystem::fromSrsId( GEOCRS_ID ) ); // WGS 84
|
||||
setEllipsoid( GEO_NONE );
|
||||
}
|
||||
@ -363,6 +366,19 @@ double QgsDistanceArea::measureLineProjected( const QgsPointXY &p1, double dista
|
||||
}
|
||||
p2 = p1.project( distance, azimuth );
|
||||
}
|
||||
QgsDebugMsgLevel( QString( "Converted distance of %1 %2 to %3 distance %4 %5, using azimuth[%6] from point[%7] to point[%8] sourceCrs[%9] mEllipsoid[%10] isGeographic[%11] [%12]" )
|
||||
.arg( QString::number( distance, 'f', 7 ) )
|
||||
.arg( QgsUnitTypes::toString( QgsUnitTypes::DistanceMeters ) )
|
||||
.arg( QString::number( result, 'f', 7 ) )
|
||||
.arg( ( ( mCoordTransform.sourceCrs().isGeographic() ) == 1 ? QString( "Geographic" ) : QString( "Cartesian" ) ) )
|
||||
.arg( QgsUnitTypes::toString( sourceCrs().mapUnits() ) )
|
||||
.arg( azimuth )
|
||||
.arg( p1.wellKnownText() )
|
||||
.arg( p2.wellKnownText() )
|
||||
.arg( sourceCrs().description() )
|
||||
.arg( mEllipsoid )
|
||||
.arg( sourceCrs().isGeographic() )
|
||||
.arg( QString( "SemiMajor[%1] SemiMinor[%2] InvFlattening[%3] " ).arg( QString::number( mSemiMajor, 'f', 7 ) ).arg( QString::number( mSemiMinor, 'f', 7 ) ).arg( QString::number( mInvFlattening, 'f', 7 ) ) ), 4 );
|
||||
if ( projectedPoint )
|
||||
{
|
||||
*projectedPoint = QgsPointXY( p2 );
|
||||
@ -384,6 +400,13 @@ QgsPointXY QgsDistanceArea::computeSpheroidProject(
|
||||
double a = mSemiMajor;
|
||||
double b = mSemiMinor;
|
||||
double f = 1 / mInvFlattening;
|
||||
if ( ( ( a < 0 ) && ( b < 0 ) ) ||
|
||||
( ( p1.x() < -180.0 ) || ( p1.x() > 180.0 ) || ( p1.y() < -85.05115 ) || ( p1.y() > 85.05115 ) ) )
|
||||
{
|
||||
// latitudes outside these bounds cause the calculations to become unstable and can return invalid results
|
||||
return QgsPoint( 0, 0 );
|
||||
|
||||
}
|
||||
double radians_lat = DEG2RAD( p1.y() );
|
||||
double radians_long = DEG2RAD( p1.x() );
|
||||
double b2 = POW2( b ); // spheroid_mu2
|
||||
|
@ -277,6 +277,9 @@ class CORE_EXPORT QgsDistanceArea
|
||||
* \note code (and documentation) taken from rttopo project
|
||||
* https://git.osgeo.org/gogs/rttopo/librttopo
|
||||
* - spheroid_project.spheroid_project(...)
|
||||
* - Valid bounds checking for degrees (latitude=+- 85.05115) is based values used for
|
||||
* -> 'WGS84 Web Mercator (Auxiliary Sphere)' calculations
|
||||
* --> latitudes outside these bounds cause the calculations to become unstable and can return invalid results
|
||||
* \since QGIS 3.0
|
||||
* \param p1 - location of first geographic (latitude/longitude) point as degrees.
|
||||
* \param distance - distance in meters.
|
||||
|
@ -251,7 +251,6 @@ void QgsMapRendererParallelJob::renderLayerStatic( LayerRenderJob &job )
|
||||
QTime t;
|
||||
t.start();
|
||||
QgsDebugMsgLevel( QString( "job %1 start (layer %2)" ).arg( reinterpret_cast< quint64 >( &job ), 0, 16 ).arg( job.layer ? job.layer->id() : QString() ), 2 );
|
||||
|
||||
try
|
||||
{
|
||||
job.renderer->render();
|
||||
@ -270,7 +269,6 @@ void QgsMapRendererParallelJob::renderLayerStatic( LayerRenderJob &job )
|
||||
{
|
||||
QgsDebugMsg( "Caught unhandled unknown exception" );
|
||||
}
|
||||
|
||||
job.renderingTime = t.elapsed();
|
||||
QgsDebugMsgLevel( QString( "job %1 end [%2 ms] (layer %3)" ).arg( reinterpret_cast< quint64 >( &job ), 0, 16 ).arg( job.renderingTime ).arg( job.layer ? job.layer->id() : QString() ), 2 );
|
||||
}
|
||||
|
@ -284,7 +284,6 @@ void QgsMapSettings::setDestinationCrs( const QgsCoordinateReferenceSystem &crs
|
||||
{
|
||||
mDestCRS = crs;
|
||||
mDatumTransformStore.setDestinationCrs( crs );
|
||||
|
||||
mScaleCalculator.setMapUnits( crs.mapUnits() );
|
||||
// Since the map units have changed, force a recalculation of the scale.
|
||||
updateDerived();
|
||||
@ -295,6 +294,20 @@ QgsCoordinateReferenceSystem QgsMapSettings::destinationCrs() const
|
||||
return mDestCRS;
|
||||
}
|
||||
|
||||
bool QgsMapSettings::setEllipsoid( const QString &ellipsoid )
|
||||
{
|
||||
QgsEllipsoidUtils::EllipsoidParameters params = QgsEllipsoidUtils::ellipsoidParameters( ellipsoid );
|
||||
if ( !params.valid )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
mEllipsoid = ellipsoid;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMapSettings::setFlags( QgsMapSettings::Flags flags )
|
||||
{
|
||||
mFlags = flags;
|
||||
|
@ -148,6 +148,23 @@ class CORE_EXPORT QgsMapSettings
|
||||
//! Get units of map's geographical coordinates - used for scale calculation
|
||||
QgsUnitTypes::DistanceUnit mapUnits() const;
|
||||
|
||||
/**
|
||||
* Sets the \a ellipsoid by its acronym. Known ellipsoid acronyms can be
|
||||
* retrieved using QgsEllipsoidUtils::acronyms().
|
||||
* Calculations will only use the ellipsoid if a valid ellipsoid has been set.
|
||||
* \returns true if ellipsoid was successfully set
|
||||
* \since QGIS 3.0
|
||||
* \see ellipsoid()
|
||||
*/
|
||||
bool setEllipsoid( const QString &ellipsoid );
|
||||
|
||||
/** Returns ellipsoid's acronym. Calculations will only use the
|
||||
* ellipsoid if a valid ellipsoid has been set.
|
||||
* \since QGIS 3.0
|
||||
* \see setEllipsoid()
|
||||
*/
|
||||
QString ellipsoid() const { return mEllipsoid; }
|
||||
|
||||
//! Set the background color of the map
|
||||
void setBackgroundColor( const QColor &color ) { mBackgroundColor = color; }
|
||||
//! Get the background color of the map
|
||||
@ -332,6 +349,8 @@ class CORE_EXPORT QgsMapSettings
|
||||
QgsExpressionContext mExpressionContext;
|
||||
|
||||
QgsCoordinateReferenceSystem mDestCRS;
|
||||
//! ellipsoid acronym (from table tbl_ellipsoids)
|
||||
QString mEllipsoid;
|
||||
QgsDatumTransformStore mDatumTransformStore;
|
||||
|
||||
QColor mBackgroundColor;
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "qgsexpression.h"
|
||||
#include "qgsvectorlayer.h"
|
||||
#include "qgsfeaturefilterprovider.h"
|
||||
#include "qgslogger.h"
|
||||
#include "qgspoint.h"
|
||||
|
||||
#define POINTS_TO_MM 2.83464567
|
||||
#define INCH_TO_MM 25.4
|
||||
@ -30,12 +32,16 @@ QgsRenderContext::QgsRenderContext()
|
||||
: mFlags( DrawEditingInfo | UseAdvancedEffects | DrawSelection | UseRenderingOptimization )
|
||||
{
|
||||
mVectorSimplifyMethod.setSimplifyHints( QgsVectorSimplifyMethod::NoSimplification );
|
||||
// For RenderMetersInMapUnits support, when rendering in Degrees, the Ellipsoid must be set
|
||||
// - for Previews/Icons the default Extent can be used
|
||||
mDistanceArea.setEllipsoid( mDistanceArea.sourceCrs().ellipsoidAcronym() );
|
||||
}
|
||||
|
||||
QgsRenderContext::QgsRenderContext( const QgsRenderContext &rh )
|
||||
: mFlags( rh.mFlags )
|
||||
, mPainter( rh.mPainter )
|
||||
, mCoordTransform( rh.mCoordTransform )
|
||||
, mDistanceArea( rh.mDistanceArea )
|
||||
, mExtent( rh.mExtent )
|
||||
, mMapToPixel( rh.mMapToPixel )
|
||||
, mRenderingStopped( rh.mRenderingStopped )
|
||||
@ -70,6 +76,7 @@ QgsRenderContext &QgsRenderContext::operator=( const QgsRenderContext &rh )
|
||||
mFeatureFilterProvider.reset( rh.mFeatureFilterProvider ? rh.mFeatureFilterProvider->clone() : nullptr );
|
||||
mSegmentationTolerance = rh.mSegmentationTolerance;
|
||||
mSegmentationToleranceType = rh.mSegmentationToleranceType;
|
||||
mDistanceArea = rh.mDistanceArea;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -132,7 +139,8 @@ QgsRenderContext QgsRenderContext::fromMapSettings( const QgsMapSettings &mapSet
|
||||
ctx.setExpressionContext( mapSettings.expressionContext() );
|
||||
ctx.setSegmentationTolerance( mapSettings.segmentationTolerance() );
|
||||
ctx.setSegmentationToleranceType( mapSettings.segmentationToleranceType() );
|
||||
|
||||
ctx.mDistanceArea.setSourceCrs( mapSettings.destinationCrs() );
|
||||
ctx.mDistanceArea.setEllipsoid( mapSettings.ellipsoid() );
|
||||
//this flag is only for stopping during the current rendering progress,
|
||||
//so must be false at every new render operation
|
||||
ctx.setRenderingStopped( false );
|
||||
@ -229,6 +237,13 @@ double QgsRenderContext::convertToPainterUnits( double size, QgsUnitTypes::Rende
|
||||
conversionFactor = mScaleFactor * INCH_TO_MM;
|
||||
break;
|
||||
|
||||
case QgsUnitTypes::RenderMetersInMapUnits:
|
||||
{
|
||||
size = convertMetersToMapUnits( size );
|
||||
unit = QgsUnitTypes::RenderMapUnits;
|
||||
// Fall through to RenderMapUnits with size in meters converted to size in MapUnits
|
||||
FALLTHROUGH;
|
||||
}
|
||||
case QgsUnitTypes::RenderMapUnits:
|
||||
{
|
||||
double mup = scale.computeMapUnitsPerPixel( *this );
|
||||
@ -273,6 +288,12 @@ double QgsRenderContext::convertToMapUnits( double size, QgsUnitTypes::RenderUni
|
||||
|
||||
switch ( unit )
|
||||
{
|
||||
case QgsUnitTypes::RenderMetersInMapUnits:
|
||||
{
|
||||
size = convertMetersToMapUnits( size );
|
||||
// Fall through to RenderMapUnits with values of meters converted to MapUnits
|
||||
FALLTHROUGH;
|
||||
}
|
||||
case QgsUnitTypes::RenderMapUnits:
|
||||
{
|
||||
// check scale
|
||||
@ -331,6 +352,10 @@ double QgsRenderContext::convertFromMapUnits( double sizeInMapUnits, QgsUnitType
|
||||
|
||||
switch ( outputUnit )
|
||||
{
|
||||
case QgsUnitTypes::RenderMetersInMapUnits:
|
||||
{
|
||||
return sizeInMapUnits / convertMetersToMapUnits( 1.0 );
|
||||
}
|
||||
case QgsUnitTypes::RenderMapUnits:
|
||||
{
|
||||
return sizeInMapUnits;
|
||||
@ -359,3 +384,34 @@ double QgsRenderContext::convertFromMapUnits( double sizeInMapUnits, QgsUnitType
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
double QgsRenderContext::convertMetersToMapUnits( double meters ) const
|
||||
{
|
||||
switch ( mDistanceArea.sourceCrs().mapUnits() )
|
||||
{
|
||||
case QgsUnitTypes::DistanceMeters:
|
||||
return meters;
|
||||
case QgsUnitTypes::DistanceDegrees:
|
||||
{
|
||||
QgsPointXY pointCenter = mExtent.center();
|
||||
// The Extent is in the sourceCrs(), when different from destinationCrs()
|
||||
// - the point must be transformed, since DistanceArea uses the destinationCrs()
|
||||
// Note: the default QgsCoordinateTransform() : authid() will return an empty String
|
||||
if ( !mCoordTransform.isShortCircuited() )
|
||||
{
|
||||
pointCenter = mCoordTransform.transform( pointCenter );
|
||||
}
|
||||
return mDistanceArea.measureLineProjected( pointCenter, meters );
|
||||
}
|
||||
case QgsUnitTypes::DistanceKilometers:
|
||||
case QgsUnitTypes::DistanceFeet:
|
||||
case QgsUnitTypes::DistanceNauticalMiles:
|
||||
case QgsUnitTypes::DistanceYards:
|
||||
case QgsUnitTypes::DistanceMiles:
|
||||
case QgsUnitTypes::DistanceCentimeters:
|
||||
case QgsUnitTypes::DistanceMillimeters:
|
||||
case QgsUnitTypes::DistanceUnknownUnit:
|
||||
return ( meters * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::DistanceMeters, mDistanceArea.sourceCrs().mapUnits() ) );
|
||||
}
|
||||
return meters;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "qgsmapunitscale.h"
|
||||
#include "qgsrectangle.h"
|
||||
#include "qgsvectorsimplifymethod.h"
|
||||
#include "qgsdistancearea.h"
|
||||
|
||||
class QPainter;
|
||||
class QgsAbstractGeometry;
|
||||
@ -114,6 +115,12 @@ class CORE_EXPORT QgsRenderContext
|
||||
*/
|
||||
QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
|
||||
|
||||
/**
|
||||
* A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
|
||||
|
||||
const QgsRectangle &extent() const {return mExtent;}
|
||||
|
||||
const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
|
||||
@ -172,6 +179,13 @@ class CORE_EXPORT QgsRenderContext
|
||||
|
||||
void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
|
||||
|
||||
/**
|
||||
* A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
|
||||
* Will be used to convert meter distances to active MapUnit values for QgsUnitTypes::RenderMetersInMapUnits
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
void setDistanceArea( const QgsDistanceArea distanceArea ) {mDistanceArea = distanceArea ;}
|
||||
|
||||
/**
|
||||
* Sets the scaling factor for the render to convert painter units
|
||||
* to physical sizes. This should usually be equal to the number of pixels
|
||||
@ -298,6 +312,14 @@ class CORE_EXPORT QgsRenderContext
|
||||
*/
|
||||
double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
|
||||
|
||||
/**
|
||||
* Convert meter distances to active MapUnit values for QgsUnitTypes::RenderMetersInMapUnits
|
||||
* \note
|
||||
* When the sourceCrs() is geographic, the center of the Extent will be used
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
double convertMetersToMapUnits( double meters ) const;
|
||||
|
||||
private:
|
||||
|
||||
Flags mFlags;
|
||||
@ -308,6 +330,13 @@ class CORE_EXPORT QgsRenderContext
|
||||
//! For transformation between coordinate systems. Can be invalid if on-the-fly reprojection is not used
|
||||
QgsCoordinateTransform mCoordTransform;
|
||||
|
||||
/**
|
||||
* A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
|
||||
* Will be used to convert meter distances to active MapUnit values for QgsUnitTypes::RenderMetersInMapUnits
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
QgsDistanceArea mDistanceArea;
|
||||
|
||||
QgsRectangle mExtent;
|
||||
|
||||
QgsMapToPixel mMapToPixel;
|
||||
|
@ -1696,6 +1696,8 @@ QString QgsUnitTypes::encodeUnit( RenderUnit unit )
|
||||
{
|
||||
case RenderMillimeters:
|
||||
return QStringLiteral( "MM" );
|
||||
case RenderMetersInMapUnits:
|
||||
return QStringLiteral( "RenderMetersInMapUnits" );
|
||||
case RenderMapUnits:
|
||||
return QStringLiteral( "MapUnit" );
|
||||
case RenderPixels:
|
||||
@ -1721,6 +1723,10 @@ QgsUnitTypes::RenderUnit QgsUnitTypes::decodeRenderUnit( const QString &string,
|
||||
|
||||
if ( normalized == encodeUnit( RenderMillimeters ).toLower() )
|
||||
return RenderMillimeters;
|
||||
if ( normalized == encodeUnit( RenderMetersInMapUnits ).toLower() )
|
||||
return RenderMetersInMapUnits;
|
||||
if ( normalized == QLatin1String( "meters" ) )
|
||||
return RenderMetersInMapUnits;
|
||||
if ( normalized == encodeUnit( RenderMapUnits ).toLower() )
|
||||
return RenderMapUnits;
|
||||
if ( normalized == QLatin1String( "mapunits" ) )
|
||||
@ -1752,6 +1758,9 @@ QString QgsUnitTypes::toString( QgsUnitTypes::RenderUnit unit )
|
||||
case RenderMillimeters:
|
||||
return QObject::tr( "millimeters", "render" );
|
||||
|
||||
case RenderMetersInMapUnits:
|
||||
return QObject::tr( "meters (in map units)", "render" );
|
||||
|
||||
case RenderMapUnits:
|
||||
return QObject::tr( "map units", "render" );
|
||||
|
||||
|
@ -101,6 +101,7 @@ class CORE_EXPORT QgsUnitTypes
|
||||
RenderPoints, //! points (e.g., for font sizes)
|
||||
RenderInches, //! Inches
|
||||
RenderUnknownUnit, //!< Mixed or unknown units
|
||||
RenderMetersInMapUnits, //!< Meters value as Map units
|
||||
};
|
||||
|
||||
//! Layout measurement units
|
||||
|
@ -61,7 +61,6 @@ QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRender
|
||||
mGeometryType = layer->geometryType();
|
||||
|
||||
mFeatureBlendMode = layer->featureBlendMode();
|
||||
|
||||
mSimplifyMethod = layer->simplifyMethod();
|
||||
mSimplifyGeometry = layer->simplifyDrawingCanbeApplied( mContext, QgsVectorSimplifyMethod::GeometrySimplification );
|
||||
|
||||
@ -94,7 +93,6 @@ QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRender
|
||||
// set editing vertex markers style
|
||||
mRenderer->setVertexMarkerAppearance( mVertexMarkerStyle, mVertexMarkerSize );
|
||||
}
|
||||
|
||||
mContext.expressionContext() << QgsExpressionContextUtils::layerScope( layer );
|
||||
|
||||
mAttrNames = mRenderer->usedAttributes( context );
|
||||
@ -102,7 +100,6 @@ QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRender
|
||||
//register label and diagram layer to the labeling engine
|
||||
prepareLabeling( layer, mAttrNames );
|
||||
prepareDiagrams( layer, mAttrNames );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "qgsrasterlayer.h"
|
||||
#include "qgsrasterprojector.h"
|
||||
#include "qgsrendercontext.h"
|
||||
#include "qgsproject.h"
|
||||
#include "qgsexception.h"
|
||||
|
||||
QgsRasterLayerRenderer::QgsRasterLayerRenderer( QgsRasterLayer *layer, QgsRenderContext &rendererContext )
|
||||
|
@ -148,6 +148,12 @@ QgsMapCanvas::QgsMapCanvas( QWidget *parent )
|
||||
mSettings.setFlag( QgsMapSettings::DrawEditingInfo );
|
||||
mSettings.setFlag( QgsMapSettings::UseRenderingOptimization );
|
||||
mSettings.setFlag( QgsMapSettings::RenderPartialOutput );
|
||||
mSettings.setEllipsoid( QgsProject::instance()->ellipsoid() );
|
||||
connect( QgsProject::instance(), &QgsProject::ellipsoidChanged,
|
||||
this, [ = ]
|
||||
{
|
||||
mSettings.setEllipsoid( QgsProject::instance()->ellipsoid() );
|
||||
} );
|
||||
|
||||
//segmentation parameters
|
||||
QgsSettings settings;
|
||||
|
@ -78,28 +78,28 @@ void QgsTextFormatWidget::initWidget()
|
||||
{
|
||||
unitWidget->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
mFontSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderMapUnits
|
||||
mFontSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits
|
||||
<< QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderInches );
|
||||
mBufferUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mBufferUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShapeSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mShapeSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShapeOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mShapeOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShapeRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits
|
||||
mShapeRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits
|
||||
<< QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderPercentage
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShapeStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mShapeStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShadowOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mShadowOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mShadowRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mShadowRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mPointOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mPointOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mLineDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mLineDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mRepeatDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mRepeatDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
mFontLineHeightSpinBox->setClearValue( 1.0 );
|
||||
|
@ -170,6 +170,10 @@ void QgsUnitSelectionWidget::setUnits( const QgsUnitTypes::RenderUnitList &units
|
||||
{
|
||||
mUnitCombo->addItem( tr( "Pixels" ), QgsUnitTypes::RenderPixels );
|
||||
}
|
||||
if ( units.contains( QgsUnitTypes::RenderMetersInMapUnits ) )
|
||||
{
|
||||
mUnitCombo->addItem( tr( "Meters in Map unit" ), QgsUnitTypes::RenderMetersInMapUnits );
|
||||
}
|
||||
if ( units.contains( QgsUnitTypes::RenderMapUnits ) )
|
||||
{
|
||||
mUnitCombo->addItem( tr( "Map unit" ), QgsUnitTypes::RenderMapUnits );
|
||||
|
@ -51,7 +51,7 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
|
||||
this->layout()->setContentsMargins( 0, 0, 0, 0 );
|
||||
|
||||
mLabelFontButton->setMode( QgsFontButton::ModeQFont );
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
if ( renderer )
|
||||
|
@ -129,11 +129,11 @@ QgsSimpleLineSymbolLayerWidget::QgsSimpleLineSymbolLayerWidget( const QgsVectorL
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mPenWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mPenWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mDashPatternUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mDashPatternUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
btnChangeColor->setAllowOpacity( true );
|
||||
@ -371,11 +371,11 @@ QgsSimpleMarkerSymbolLayerWidget::QgsSimpleMarkerSymbolLayerWidget( const QgsVec
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
btnChangeColorFill->setAllowOpacity( true );
|
||||
@ -646,9 +646,9 @@ QgsSimpleFillSymbolLayerWidget::QgsSimpleFillSymbolLayerWidget( const QgsVectorL
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
btnChangeColor->setAllowOpacity( true );
|
||||
@ -797,9 +797,9 @@ QgsFilledMarkerSymbolLayerWidget::QgsFilledMarkerSymbolLayerWidget( const QgsVec
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
spinOffsetX->setClearValue( 0.0 );
|
||||
@ -971,7 +971,7 @@ QgsGradientFillSymbolLayerWidget::QgsGradientFillSymbolLayerWidget( const QgsVec
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
btnColorRamp->setShowGradientOnly( true );
|
||||
@ -1300,9 +1300,9 @@ QgsShapeburstFillSymbolLayerWidget::QgsShapeburstFillSymbolLayerWidget( const Qg
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
QButtonGroup *group1 = new QButtonGroup( this );
|
||||
@ -1555,11 +1555,11 @@ QgsMarkerLineSymbolLayerWidget::QgsMarkerLineSymbolLayerWidget( const QgsVectorL
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mIntervalUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mIntervalUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetAlongLineUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetAlongLineUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
spinOffset->setClearValue( 0.0 );
|
||||
@ -1722,11 +1722,11 @@ QgsSvgMarkerSymbolLayerWidget::QgsSvgMarkerSymbolLayerWidget( const QgsVectorLay
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
viewGroups->setHeaderHidden( true );
|
||||
mChangeColorButton->setAllowOpacity( true );
|
||||
@ -2111,9 +2111,9 @@ QgsSVGFillSymbolLayerWidget::QgsSVGFillSymbolLayerWidget( const QgsVectorLayer *
|
||||
{
|
||||
mLayer = nullptr;
|
||||
setupUi( this );
|
||||
mTextureWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mTextureWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mSvgStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSvgStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mSvgTreeView->setHeaderHidden( true );
|
||||
insertIcons();
|
||||
@ -2400,9 +2400,9 @@ QgsLinePatternFillSymbolLayerWidget::QgsLinePatternFillSymbolLayerWidget( const
|
||||
QgsSymbolLayerWidget( parent, vl ), mLayer( nullptr )
|
||||
{
|
||||
setupUi( this );
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetSpinBox->setClearValue( 0 );
|
||||
mAngleSpinBox->setClearValue( 0 );
|
||||
@ -2502,13 +2502,13 @@ QgsPointPatternFillSymbolLayerWidget::QgsPointPatternFillSymbolLayerWidget( cons
|
||||
QgsSymbolLayerWidget( parent, vl ), mLayer( nullptr )
|
||||
{
|
||||
setupUi( this );
|
||||
mHorizontalDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mHorizontalDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mVerticalDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mVerticalDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mHorizontalDisplacementUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mHorizontalDisplacementUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mVerticalDisplacementUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mVerticalDisplacementUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
}
|
||||
|
||||
@ -2646,11 +2646,11 @@ QgsFontMarkerSymbolLayerWidget::QgsFontMarkerSymbolLayerWidget( const QgsVectorL
|
||||
mLayer = nullptr;
|
||||
|
||||
setupUi( this );
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
widgetChar = new CharacterWidget;
|
||||
scrollArea->setWidget( widgetChar );
|
||||
@ -2919,9 +2919,9 @@ QgsRasterFillSymbolLayerWidget::QgsRasterFillSymbolLayerWidget( const QgsVectorL
|
||||
mLayer = nullptr;
|
||||
setupUi( this );
|
||||
|
||||
mWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits
|
||||
mWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
mSpinOffsetX->setClearValue( 0.0 );
|
||||
|
@ -53,7 +53,7 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style,
|
||||
setupUi( this );
|
||||
spinAngle->setClearValue( 0 );
|
||||
|
||||
mSymbolUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
mSymbolUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
|
||||
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
|
||||
|
||||
btnAdvanced->hide(); // advanced button is hidden by default
|
||||
|
@ -32,7 +32,6 @@ class QgsGeorefMapToolEmitPoint : public QgsMapTool
|
||||
public:
|
||||
explicit QgsGeorefMapToolEmitPoint( QgsMapCanvas *canvas )
|
||||
: QgsMapTool( canvas )
|
||||
, mSnappingMarker( nullptr )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -155,12 +155,13 @@ class TestQgsDistanceArea(unittest.TestCase):
|
||||
da_4805.setEllipsoid(da_4805.sourceCrs().ellipsoidAcronym())
|
||||
self.assertEqual(da_4805.sourceCrs().authid(), 'EPSG:4805')
|
||||
print(("setting [{}] srid [{}] description [{}] isGeographic[{}] lengthUnits[{}] projectionAcronym[{}] ellipsoidAcronym[{}]".format(u'EPSG:4805', da_4805.sourceCrs().authid(), da_4805.sourceCrs().description(), da_4805.sourceCrs().isGeographic(), QgsUnitTypes.toString(da_4805.lengthUnits()), da_4805.sourceCrs().projectionAcronym(), da_4805.sourceCrs().ellipsoidAcronym())))
|
||||
# EPSG:5665 unknown, why?
|
||||
da_5665 = QgsDistanceArea()
|
||||
da_5665.setSourceCrs(QgsCoordinateReferenceSystem.fromOgcWmsCrs('EPSG:5665'))
|
||||
if (da_5665.sourceCrs().isGeographic()):
|
||||
da_5665.setEllipsoid(da_5665.sourceCrs().ellipsoidAcronym())
|
||||
print(("setting [{}] srid [{}] description [{}] isGeographic[{}] lengthUnits[{}] projectionAcronym[{}] ellipsoidAcronym[{}]".format(u'EPSG:5665', da_5665.sourceCrs().authid(), da_5665.sourceCrs().description(), da_5665.sourceCrs().isGeographic(), QgsUnitTypes.toString(da_5665.lengthUnits()), da_5665.sourceCrs().projectionAcronym(), da_5665.sourceCrs().ellipsoidAcronym())))
|
||||
self.assertEqual(da_5665.sourceCrs().authid(), 'EPSG:5665')
|
||||
#self.assertEqual(da_5665.sourceCrs().authid(), 'EPSG:5665')
|
||||
da_25833 = QgsDistanceArea()
|
||||
da_25833.setSourceCrs(QgsCoordinateReferenceSystem.fromOgcWmsCrs('EPSG:25833'))
|
||||
if (da_25833.sourceCrs().isGeographic()):
|
||||
@ -180,7 +181,7 @@ class TestQgsDistanceArea(unittest.TestCase):
|
||||
point_berlin_wsg84 = QgsPointXY(13.37770458660236, 52.51627178856762)
|
||||
point_berlin_wsg84_project = QgsPointXY(13.37771931736259, 52.51627178856669)
|
||||
length_meter_mapunits, point_meter_result = da_wsg84.measureLineProjected(point_berlin_wsg84, 1.0, (math.pi / 2))
|
||||
print('-I-> Berlin Wsg84 length_meter_mapunits[{}] point_meter_result[{}] ellipsoid[{}]'.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_wsg84.lengthUnits(), True), point_meter_result.wellKnownText(), da_wsg84.ellipsoid()))
|
||||
print('-I-> Berlin Wsg84 length_meter_mapunits[{}] point_meter_result[{}] ellipsoid[{}]'.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 20, da_wsg84.lengthUnits(), True), point_meter_result.wellKnownText(), da_wsg84.ellipsoid()))
|
||||
# for unknown reasons, this is returning '0.00001473026 m' instead of '0.00001473026 deg' when using da_wsg84.lengthUnits()
|
||||
# self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits,11,da_wsg84.lengthUnits(),True), '0.00001473026 deg')
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 11, QgsUnitTypes.DistanceDegrees, True), '0.00001473026 deg')
|
||||
@ -203,13 +204,13 @@ class TestQgsDistanceArea(unittest.TestCase):
|
||||
print('-I-> Berlin 25833 length_meter_mapunits[{}] point_meter_result[{}]'.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_25833.lengthUnits(), True), point_meter_result.wellKnownText()))
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_25833.lengthUnits(), True), '1.0000000 m')
|
||||
self.assertEqual(point_meter_result.toString(7), point_berlin_25833_project.toString(7))
|
||||
|
||||
point_berlin_5665 = QgsPointXY(3389996.871728864, 5822169.719727578)
|
||||
point_berlin_5665_project = point_berlin_5665.project(1, (math.pi / 2))
|
||||
length_meter_mapunits, point_meter_result = da_5665.measureLineProjected(point_berlin_5665, 1.0, (math.pi / 2))
|
||||
print('-I-> Berlin 5665 length_meter_mapunits[{}] point_meter_result[{}]'.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_5665.lengthUnits(), True), point_meter_result.wellKnownText()))
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 1, da_5665.lengthUnits(), True), '1.0 m')
|
||||
self.assertEqual(point_meter_result.toString(7), point_berlin_5665_project.toString(7))
|
||||
if da_5665.sourceCrs().authid() != "":
|
||||
point_berlin_5665 = QgsPointXY(3389996.871728864, 5822169.719727578)
|
||||
point_berlin_5665_project = point_berlin_5665.project(1, (math.pi / 2))
|
||||
length_meter_mapunits, point_meter_result = da_5665.measureLineProjected(point_berlin_5665, 1.0, (math.pi / 2))
|
||||
print('-I-> Berlin 5665 length_meter_mapunits[{}] point_meter_result[{}]'.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_5665.lengthUnits(), True), point_meter_result.wellKnownText()))
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 1.0, da_5665.lengthUnits(), True), '1.0 m')
|
||||
self.assertEqual(point_meter_result.toString(7), point_berlin_5665_project.toString(7))
|
||||
print('\n12 points ''above over'' and on the Equator')
|
||||
point_wsg84 = QgsPointXY(25.7844, 71.1725)
|
||||
point_wsg84_project = QgsPointXY(25.78442775215388, 71.17249999999795)
|
||||
@ -327,6 +328,12 @@ class TestQgsDistanceArea(unittest.TestCase):
|
||||
print('-I-> Santiago, Chile - Wsg84 - length_meter_mapunits[{}] point_meter_result[{}] '.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 7, da_wsg84.lengthUnits(), True), point_meter_result.wellKnownText()))
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 8, QgsUnitTypes.DistanceDegrees, True), '0.00001076 deg')
|
||||
self.assertEqual(point_meter_result.toString(7), point_wsg84_project.toString(7))
|
||||
point_wsg84 = QgsPointXY(144.9604, -37.8191)
|
||||
point_wsg84_project = QgsPointXY(144.96041135746983741, -37.81909999999945171)
|
||||
length_meter_mapunits, point_meter_result = da_wsg84.measureLineProjected(point_wsg84, 1.0, (math.pi / 2))
|
||||
print('-I-> Melbourne, Australia - Wsg84 - length_meter_mapunits[{}] point_meter_result[{}] '.format(QgsDistanceArea.formatDistance(length_meter_mapunits, 8, da_wsg84.lengthUnits(), True), point_meter_result.wellKnownText()))
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(length_meter_mapunits, 8, QgsUnitTypes.DistanceDegrees, True), '0.00001136 deg')
|
||||
self.assertEqual(point_meter_result.toString(7), point_wsg84_project.toString(7))
|
||||
point_wsg84 = QgsPointXY(147.29, -42.88)
|
||||
point_wsg84_project = QgsPointXY(147.2900122399815, -42.87999999999934)
|
||||
length_meter_mapunits, point_meter_result = da_wsg84.measureLineProjected(point_wsg84, 1.0, (math.pi / 2))
|
||||
|
@ -16,12 +16,19 @@ import qgis # NOQA
|
||||
|
||||
from qgis.core import (QgsRenderContext,
|
||||
QgsMapSettings,
|
||||
QgsRectangle,
|
||||
QgsDistanceArea,
|
||||
QgsRectangle, QgsPointXY,
|
||||
QgsCoordinateReferenceSystem,
|
||||
QgsMapUnitScale,
|
||||
QgsUnitTypes)
|
||||
from qgis.PyQt.QtCore import QSize
|
||||
from qgis.PyQt.QtGui import QPainter, QImage
|
||||
from qgis.testing import unittest
|
||||
from qgis.testing import start_app, unittest
|
||||
import math
|
||||
|
||||
# Convenience instances in case you may need them
|
||||
# to find the srs.db
|
||||
start_app()
|
||||
|
||||
|
||||
class TestQgsRenderContext(unittest.TestCase):
|
||||
@ -50,6 +57,35 @@ class TestQgsRenderContext(unittest.TestCase):
|
||||
self.assertEqual(c.painter(), p)
|
||||
self.assertAlmostEqual(c.scaleFactor(), dots_per_m / 1000, 3) # scaleFactor should be pixels/mm
|
||||
|
||||
def testRenderMetersInMapUnits(self):
|
||||
|
||||
crs_wsg84 = QgsCoordinateReferenceSystem.fromOgcWmsCrs('EPSG:4326')
|
||||
rt_extent = QgsRectangle(13.37768985634235, 52.51625705830762, 13.37771931686235, 52.51628651882762)
|
||||
point_berlin_wsg84 = QgsPointXY(13.37770458660236, 52.51627178856762)
|
||||
length_wsg84_mapunits = 0.00001473026350140572
|
||||
meters_test = 2.40
|
||||
da_wsg84 = QgsDistanceArea()
|
||||
da_wsg84.setSourceCrs(crs_wsg84)
|
||||
if (da_wsg84.sourceCrs().isGeographic()):
|
||||
da_wsg84.setEllipsoid(da_wsg84.sourceCrs().ellipsoidAcronym())
|
||||
length_meter_mapunits = da_wsg84.measureLineProjected(point_berlin_wsg84, 1.0, (math.pi / 2))
|
||||
meters_test_mapunits = meters_test * length_wsg84_mapunits
|
||||
meters_test_pixel = meters_test * length_wsg84_mapunits
|
||||
ms = QgsMapSettings()
|
||||
ms.setDestinationCrs(crs_wsg84)
|
||||
ms.setExtent(rt_extent)
|
||||
r = QgsRenderContext.fromMapSettings(ms)
|
||||
r.setExtent(rt_extent)
|
||||
self.assertEqual(r.extent().center().toString(7), point_berlin_wsg84.toString(7))
|
||||
c = QgsMapUnitScale()
|
||||
r.setDistanceArea(da_wsg84)
|
||||
result_test_painterunits = r.convertToPainterUnits(meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(result_test_painterunits, 7, QgsUnitTypes.DistanceUnknownUnit, True), QgsDistanceArea.formatDistance(meters_test_mapunits, 7, QgsUnitTypes.DistanceUnknownUnit, True))
|
||||
result_test_mapunits = r.convertToMapUnits(meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(result_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True), QgsDistanceArea.formatDistance(meters_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True))
|
||||
result_test_meters = r.convertFromMapUnits(meters_test_mapunits, QgsUnitTypes.RenderMetersInMapUnits)
|
||||
self.assertEqual(QgsDistanceArea.formatDistance(result_test_meters, 1, QgsUnitTypes.DistanceMeters, True), QgsDistanceArea.formatDistance(meters_test, 1, QgsUnitTypes.DistanceMeters, True))
|
||||
|
||||
def testConvertSingleUnit(self):
|
||||
|
||||
ms = QgsMapSettings()
|
||||
|
@ -181,6 +181,7 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
def testEncodeDecodeRenderUnits(self):
|
||||
"""Test encoding and decoding render units"""
|
||||
units = [QgsUnitTypes.RenderMillimeters,
|
||||
QgsUnitTypes.RenderMetersInMapUnits,
|
||||
QgsUnitTypes.RenderMapUnits,
|
||||
QgsUnitTypes.RenderPixels,
|
||||
QgsUnitTypes.RenderPercentage,
|
||||
@ -204,6 +205,8 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
self.assertEqual(res, QgsUnitTypes.RenderPixels)
|
||||
|
||||
# check some aliases - used in data defined labeling
|
||||
res, ok = QgsUnitTypes.decodeRenderUnit('Meters')
|
||||
assert ok
|
||||
res, ok = QgsUnitTypes.decodeRenderUnit('MapUnits')
|
||||
assert ok
|
||||
self.assertEqual(res, QgsUnitTypes.RenderMapUnits)
|
||||
|
Loading…
x
Reference in New Issue
Block a user