Skip to content

Commit 7828dc4

Browse files
committed
fixes for position kit and coordinate transformer
1 parent 31e1514 commit 7828dc4

14 files changed

+359
-225
lines changed

src/quickgui/plugin/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ IF(QMLPLUGINDUMP_FOUND)
109109
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/qmldir ${QGIS_QUICK_TYPEINFO_GENERATE_DIR}
110110
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:qgis_quick_plugin> ${QGIS_QUICK_TYPEINFO_GENERATE_DIR}
111111
COMMAND ${QMLPLUGINDUMP_EXECUTABLE}
112-
ARGS QgsQuick ${QGIS_QUICK_VERSION} . --output ${QGIS_QUICK_PLUGIN_TYPEINFO}
112+
ARGS QgsQuick ${QGIS_QUICK_VERSION} . -noinstantiate --output ${QGIS_QUICK_PLUGIN_TYPEINFO}
113113
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
114+
COMMENT "Generating qgsquick.qmltypes with qmlplugindump"
114115
POST_BUILD
115116
)
116117
ENDIF()

src/quickgui/plugin/qgsquickplugin.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "qgsrelationmanager.h"
2929
#include "qgscoordinatetransformcontext.h"
3030
#include "qgsvectorlayer.h"
31+
#include "qgsunittypes.h"
3132

3233
#include "qgsquickfeaturehighlight.h"
3334
#include "qgsquickcoordinatetransformer.h"
@@ -60,6 +61,7 @@ void QgsQuickPlugin::registerTypes( const char *uri )
6061
qRegisterMetaType< QgsPoint >( "QgsPoint" );
6162
qRegisterMetaType< QgsPointXY >( "QgsPointXY" );
6263
qRegisterMetaType< QgsQuickFeatureLayerPair >( "QgsQuickFeatureLayerPair" );
64+
qRegisterMetaType< QgsUnitTypes::DistanceUnit >( "QgsUnitTypes::DistanceUnit" );
6365

6466
qmlRegisterType< QgsProject >( uri, 0, 1, "Project" );
6567
qmlRegisterType< QgsQuickFeatureHighlight >( uri, 0, 1, "FeatureHighlight" );

src/quickgui/plugin/qgsquickpositionmarker.qml

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Item {
4747
/**
4848
* Whether circle representing accuracy of the position should be rendered.
4949
*/
50-
property var withAccuracy: true
50+
property bool withAccuracy: true
5151

5252
/**
5353
* Icon for position marker.

src/quickgui/qgsquickcoordinatetransformer.cpp

+15-6
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
***************************************************************************/
1515

1616
#include "qgsquickcoordinatetransformer.h"
17+
#include "qgslogger.h"
1718

1819
QgsQuickCoordinateTransformer::QgsQuickCoordinateTransformer( QObject *parent )
1920
: QObject( parent )
2021
{
2122
mCoordinateTransform.setSourceCrs( QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) );
22-
mCoordinateTransform.setContext( QgsCoordinateTransformContext() );
2323
}
2424

2525
QgsPoint QgsQuickCoordinateTransformer::projectedPosition() const
@@ -32,7 +32,7 @@ QgsPoint QgsQuickCoordinateTransformer::sourcePosition() const
3232
return mSourcePosition;
3333
}
3434

35-
void QgsQuickCoordinateTransformer::setSourcePosition( QgsPoint sourcePosition )
35+
void QgsQuickCoordinateTransformer::setSourcePosition( const QgsPoint &sourcePosition )
3636
{
3737
if ( mSourcePosition == sourcePosition )
3838
return;
@@ -74,6 +74,11 @@ void QgsQuickCoordinateTransformer::setSourceCrs( const QgsCoordinateReferenceSy
7474
updatePosition();
7575
}
7676

77+
void QgsQuickCoordinateTransformer::setTransformContext( const QgsCoordinateTransformContext &context )
78+
{
79+
mCoordinateTransform.setContext( context );
80+
}
81+
7782
void QgsQuickCoordinateTransformer::updatePosition()
7883
{
7984
double x = mSourcePosition.x();
@@ -88,10 +93,14 @@ void QgsQuickCoordinateTransformer::updatePosition()
8893
z = 0;
8994
}
9095

91-
if ( mMapSettings )
92-
mCoordinateTransform.setContext( mMapSettings->transformContext() );
93-
94-
mCoordinateTransform.transformInPlace( x, y, z );
96+
try
97+
{
98+
mCoordinateTransform.transformInPlace( x, y, z );
99+
}
100+
catch ( const QgsCsException &exp )
101+
{
102+
QgsDebugMsg( exp.what() );
103+
}
95104

96105
mProjectedPosition = QgsPoint( x, y );
97106
mProjectedPosition.addZValue( mSourcePosition.z() );

src/quickgui/qgsquickcoordinatetransformer.h

+18-11
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@
2121
#include "qgspoint.h"
2222

2323
#include "qgis_quick.h"
24-
#include "qgsquickmapsettings.h"
24+
#include "qgscoordinatetransformcontext.h"
25+
#include "qgscoordinatereferencesystem.h"
26+
#include "qgspoint.h"
2527

2628
/**
2729
* \ingroup quick
2830
* Helper class for transform of coordinates (QgsPoint) to a different coordinate reference system.
2931
*
32+
* It requires connection of transformation context from mapSettings, source position and source CRS to
33+
* calculate projected position in desired destination CRS
34+
*
3035
* \note QML Type: CoordinateTransformer
3136
*
3237
* \since QGIS 3.2
@@ -47,8 +52,8 @@ class QUICK_EXPORT QgsQuickCoordinateTransformer : public QObject
4752
//! Source CRS, default 4326
4853
Q_PROPERTY( QgsCoordinateReferenceSystem sourceCrs READ sourceCrs WRITE setSourceCrs NOTIFY sourceCrsChanged )
4954

50-
//! Map settings, for getting transformation context
51-
Q_PROPERTY( QgsQuickMapSettings *mapSettings MEMBER mMapSettings NOTIFY mapSettingsChanged )
55+
//! Transformation context, can be set from QgsQuickMapSettings::transformContext()
56+
Q_PROPERTY( QgsCoordinateTransformContext transformContext WRITE setTransformContext )
5257

5358
public:
5459
//! Creates new coordinate transformer
@@ -61,7 +66,7 @@ class QUICK_EXPORT QgsQuickCoordinateTransformer : public QObject
6166
QgsPoint sourcePosition() const;
6267

6368
//!\copydoc QgsQuickCoordinateTransformer::sourcePosition
64-
void setSourcePosition( QgsPoint sourcePosition );
69+
void setSourcePosition( const QgsPoint &sourcePosition );
6570

6671
//!\copydoc QgsQuickCoordinateTransformer::destinationCrs
6772
QgsCoordinateReferenceSystem destinationCrs() const;
@@ -75,29 +80,31 @@ class QUICK_EXPORT QgsQuickCoordinateTransformer : public QObject
7580
//!\copydoc QgsQuickCoordinateTransformer::sourceCrs
7681
void setSourceCrs( const QgsCoordinateReferenceSystem &sourceCrs );
7782

83+
//!\copydoc QgsQuickCoordinateTransformer::transformContext
84+
void setTransformContext( const QgsCoordinateTransformContext &context );
85+
7886
signals:
79-
//! Projected position changed
87+
//!\copydoc QgsQuickCoordinateTransformer::projectedPosition
8088
void projectedPositionChanged();
8189

82-
//! Source position changed
90+
//!\copydoc QgsQuickCoordinateTransformer::sourcePosition
8391
void sourcePositionChanged();
8492

85-
//! Destination CRS changed
93+
//!\copydoc QgsQuickCoordinateTransformer::destinationCrs
8694
void destinationCrsChanged();
8795

88-
//! Source CRS changed
96+
//!\copydoc QgsQuickCoordinateTransformer::sourceCrs
8997
void sourceCrsChanged();
9098

91-
//! Map settings changed
92-
void mapSettingsChanged();
99+
//!\copydoc QgsQuickCoordinateTransformer::transformContext
100+
void transformContextChanged();
93101

94102
private:
95103
void updatePosition();
96104

97105
QgsPoint mProjectedPosition;
98106
QgsPoint mSourcePosition;
99107
QgsCoordinateTransform mCoordinateTransform;
100-
QgsQuickMapSettings *mMapSettings = nullptr;
101108
};
102109

103110
#endif // QGSQUICKCOORDINATETRANSFORMER_H

0 commit comments

Comments
 (0)