QGIS API Documentation
4.3.0-Master (52aa6503bed)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
core
qgsdistancearea.h
Go to the documentation of this file.
1
/***************************************************************************
2
qgsdistancearea.h - Distance and area calculations on the ellipsoid
3
---------------------------------------------------------------------------
4
Date : September 2005
5
Copyright : (C) 2005 by Martin Dobias
6
email : won.der at centrum.sk
7
***************************************************************************
8
* *
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
13
* *
14
***************************************************************************/
15
16
#ifndef QGSDISTANCEAREA_H
17
#define QGSDISTANCEAREA_H
18
19
#include "
qgis.h
"
20
#include "qgis_core.h"
21
#include "
qgscoordinatetransform.h
"
22
#include "
qgsellipsoidutils.h
"
23
24
#include <QReadWriteLock>
25
#include <QVector>
26
27
class
QgsGeometry
;
28
class
QgsAbstractGeometry
;
29
class
QgsCurve
;
30
struct
geod_geodesic;
31
53
class
CORE_EXPORT
QgsDistanceArea
54
{
55
public
:
56
QgsDistanceArea
();
57
~QgsDistanceArea
();
58
59
QgsDistanceArea
(
const
QgsDistanceArea
&other );
60
SIP_SKIP
QgsDistanceArea
(
QgsDistanceArea
&&other );
61
QgsDistanceArea
&
operator=
(
const
QgsDistanceArea
&other );
62
QgsDistanceArea
&
operator=
(
QgsDistanceArea
&&other );
63
69
bool
willUseEllipsoid
()
const
;
70
75
void
setSourceCrs
(
const
QgsCoordinateReferenceSystem
&crs,
const
QgsCoordinateTransformContext
&context );
76
82
QgsCoordinateReferenceSystem
sourceCrs
()
const
{
return
sourceToEllipsoid().sourceCrs(); }
83
90
QgsCoordinateReferenceSystem
ellipsoidCrs
()
const
{
return
sourceToEllipsoid().destinationCrs(); }
91
100
bool
setEllipsoid(
const
QString &ellipsoid );
101
109
bool
setEllipsoid(
double
semiMajor,
double
semiMinor );
110
118
QString
ellipsoid
()
const
{
return
mEllipsoid; }
119
126
double
ellipsoidSemiMajor
()
const
{
return
mSemiMajor; }
127
134
double
ellipsoidSemiMinor
()
const
{
return
mSemiMinor; }
135
143
double
ellipsoidInverseFlattening
()
const
{
return
mInvFlattening; }
144
155
double
measureArea(
const
QgsGeometry
&geometry )
const
SIP_THROW
(
QgsCsException
);
156
167
double
measureLength(
const
QgsGeometry
&geometry )
const
SIP_THROW
(
QgsCsException
);
168
179
double
measurePerimeter(
const
QgsGeometry
&geometry )
const
SIP_THROW
(
QgsCsException
);
180
188
double
measureLine(
const
QVector<QgsPointXY> &points )
const
SIP_THROW
(
QgsCsException
);
189
198
double
measureLine(
const
QgsPointXY
&p1,
const
QgsPointXY
&p2 )
const
SIP_THROW
(
QgsCsException
);
199
213
double
measureLineProjected(
const
QgsPointXY
&p1,
double
distance = 1,
double
azimuth = M_PI_2,
QgsPointXY
*projectedPoint
SIP_OUT
=
nullptr
)
const
;
214
219
Qgis::DistanceUnit
lengthUnits()
const
;
220
225
Qgis::AreaUnit
areaUnits()
const
;
226
232
double
measurePolygon(
const
QVector<QgsPointXY> &points )
const
SIP_THROW
(
QgsCsException
);
233
239
double
bearing(
const
QgsPointXY
&p1,
const
QgsPointXY
&p2 )
const
SIP_THROW
(
QgsCsException
);
240
251
static
QString formatDistance(
double
distance,
int
decimals,
Qgis::DistanceUnit
unit,
bool
keepBaseUnit =
false
);
252
263
static
QString formatArea(
double
area,
int
decimals,
Qgis::AreaUnit
unit,
bool
keepBaseUnit =
false
);
264
274
double
convertLengthMeasurement(
double
length,
Qgis::DistanceUnit
toUnits )
const
;
275
285
double
convertAreaMeasurement(
double
area,
Qgis::AreaUnit
toUnits )
const
;
286
297
QgsPointXY
computeSpheroidProject(
const
QgsPointXY
&p1,
double
distance = 1,
double
azimuth = M_PI_2 )
const
;
298
318
QVector<QVector<QgsPointXY> > geodesicLine(
const
QgsPointXY
&p1,
const
QgsPointXY
&p2,
double
interval,
bool
breakLine =
false
)
const
;
319
338
double
latitudeGeodesicCrossesAntimeridian(
const
QgsPointXY
&p1,
const
QgsPointXY
&p2,
double
&fractionAlongLine
SIP_OUT
)
const
;
339
361
QgsGeometry
splitGeometryAtAntimeridian(
const
QgsGeometry
&geometry )
const
;
362
363
private
:
364
// Calculates area of polygon on ellipsoid
365
double
computePolygonArea(
const
QVector<QgsPointXY> &points )
const
;
366
367
double
computePolygonFlatArea(
const
QVector<QgsPointXY> &points )
const
;
368
373
void
computeAreaInit()
const
;
374
375
void
setFromParams(
const
QgsEllipsoidUtils::EllipsoidParameters
¶ms );
376
377
enum
MeasureType
378
{
379
Default,
380
Area,
381
Length
382
};
383
385
mutable
QgsCoordinateTransform mCachedSourceToEllipsoid;
386
388
QString mEllipsoid;
389
391
double
mSemiMajor, mSemiMinor, mInvFlattening;
392
393
mutable
std::unique_ptr< geod_geodesic > mGeod;
394
395
QgsCoordinateReferenceSystem mDestinationCrs;
// the ellipsoid CRS, which is the destination CRS for mCachedSourceToEllipsoid
396
QgsCoordinateReferenceSystem mSourceCrs;
397
QgsCoordinateTransformContext mCoordTransformContext;
398
399
mutable
bool
mCoordTransformDirty =
false
;
400
401
// utility functions for polygon area measurement
402
403
double
measure(
const
QgsAbstractGeometry *geomV2, MeasureType type = Default )
const
;
404
double
measureLine(
const
QgsCurve *curve )
const
;
405
double
measurePolygon(
const
QgsCurve *curve )
const
;
406
407
QgsCoordinateTransform sourceToEllipsoid()
const
;
408
409
friend
class
TestQgsDistanceArea
;
410
};
411
412
#endif
Qgis::DistanceUnit
DistanceUnit
Units of distance.
Definition
qgis.h:5568
Qgis::AreaUnit
AreaUnit
Units of area.
Definition
qgis.h:5645
QgsAbstractGeometry
Abstract base class for all geometries.
Definition
qgsabstractgeometry.h:82
QgsCoordinateReferenceSystem
Represents a coordinate reference system (CRS).
Definition
qgscoordinatereferencesystem.h:216
QgsCoordinateTransformContext
Contains information about the context in which a coordinate transform is executed.
Definition
qgscoordinatetransformcontext.h:61
QgsCsException
Custom exception class for Coordinate Reference System related exceptions.
Definition
qgsexception.h:60
QgsCurve
Abstract base class for curved geometry type.
Definition
qgscurve.h:36
QgsDistanceArea::ellipsoidCrs
QgsCoordinateReferenceSystem ellipsoidCrs() const
Returns the ellipsoid (destination) spatial reference system.
Definition
qgsdistancearea.h:90
QgsDistanceArea::operator=
QgsDistanceArea & operator=(const QgsDistanceArea &other)
Definition
qgsdistancearea.cpp:91
QgsDistanceArea::~QgsDistanceArea
~QgsDistanceArea()
QgsDistanceArea::TestQgsDistanceArea
friend class TestQgsDistanceArea
Definition
qgsdistancearea.h:409
QgsDistanceArea::sourceCrs
QgsCoordinateReferenceSystem sourceCrs() const
Returns the source spatial reference system.
Definition
qgsdistancearea.h:82
QgsDistanceArea::ellipsoidInverseFlattening
double ellipsoidInverseFlattening() const
Returns ellipsoid's inverse flattening.
Definition
qgsdistancearea.h:143
QgsDistanceArea::ellipsoid
QString ellipsoid() const
Returns ellipsoid's acronym.
Definition
qgsdistancearea.h:118
QgsDistanceArea::ellipsoidSemiMajor
double ellipsoidSemiMajor() const
Returns the ellipsoid's semi major axis.
Definition
qgsdistancearea.h:126
QgsDistanceArea::setSourceCrs
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
Definition
qgsdistancearea.cpp:134
QgsDistanceArea::QgsDistanceArea
QgsDistanceArea()
Definition
qgsdistancearea.cpp:48
QgsDistanceArea::willUseEllipsoid
bool willUseEllipsoid() const
Returns whether calculations will use the ellipsoid.
Definition
qgsdistancearea.cpp:129
QgsDistanceArea::ellipsoidSemiMinor
double ellipsoidSemiMinor() const
Returns ellipsoid's semi minor axis.
Definition
qgsdistancearea.h:134
QgsGeometry
A geometry is the spatial representation of a feature.
Definition
qgsgeometry.h:267
QgsPointXY
Represents a 2D point.
Definition
qgspointxy.h:62
qgis.h
SIP_SKIP
#define SIP_SKIP
Definition
qgis_sip.h:138
SIP_OUT
#define SIP_OUT
Definition
qgis_sip.h:57
SIP_THROW
#define SIP_THROW(name,...)
Definition
qgis_sip.h:215
qgscoordinatetransform.h
qgsellipsoidutils.h
QgsEllipsoidUtils::EllipsoidParameters
Contains parameters for an ellipsoid.
Definition
qgsellipsoidutils.h:42
Generated on
for QGIS API Documentation by
1.17.0