[QGIS-Developer] Unclear wording for QgsDistanceArea

Johannes Kröger (WhereGroup) johannes.kroeger at wheregroup.com
Wed Sep 28 05:42:37 PDT 2022


Hi!

I am in QGIS 3.22 in an empty project set to EPSG:3035.

Considering the following Python code run via the script editor:

 >>> point_a = QgsPointXY(7.824, 48)
 >>> point_b = QgsPointXY(7.829, 47.98)
 >>> da = QgsDistanceArea()
 >>> print(da.willUseEllipsoid())
False
 >>> print(da.ellipsoid())
NONE
 >>> measure = da.measureLine(point_a, point_b)
 >>> print(measure)
0.02061552812809131
 >>> meters = da.convertLengthMeasurement(measure, 
QgsUnitTypes.DistanceMeters)
 >>> print(meters)
2294.910093653533

I was wondering how it was able to turn the seemingly unit-less 
0.0206... into a distance in meters and checked the docs. The 
documentation 
https://qgis.org/pyqgis/master/core/QgsDistanceArea.html#qgis.core.QgsDistanceArea.lengthUnits 
says:

 > Usually, the measurements returned by QgsDistanceArea are in meters. 
If no valid ellipsoid is set, then the units may not be meters. The 
units can be retrieved by calling lengthUnits() and areaUnits().

As it said "usually" and I didn't do anything special on purpose, I 
expected this to return a distance measurement in meters but instead I 
apparently got a distance in degrees (well, some cartesian measure 
between my points as a float) which I could *convert* to meters. I have 
no valid ellipsoid set so as the docs say, this could have happened 
("may not be meters").

Checking the .lengthUnits() as suggested confirms that my 
QgsDistanceArea somehow decided to consider my coordinate values, and 
thus the measurement, to be in degrees:

 >>> da.lengthUnits() == QgsUnitTypes.DistanceDegrees
True

But why? I find the language very unclear and confusing there.
Do "usually" and "may" mean that this is undefined, random behaviour 
unless one explicitly sets an ellipsoid?
If so, should the docs strongly suggest to always use an ellipsoid so 
that there is no "may"?
Do those words express the doc writer's vision of how the class what 
usually be used?
If so, should the docs suggest a specific setup of the class?
Why did it consider my point coordinates to be in degrees?
How did it convert the degrees to meters if it supposedly does not use 
an ellipsoid?
8)

Cheers, Hannes

-- 
Johannes Kröger / GIS-Entwickler/-Berater

---------------------------------------------
Schon gewusst?
In unserem Blog geben wir Tipps & Tricks zu Open-Source-GIS-Software
und berichten aus unserem Experten-Alltag:
https://wheregroup.com/blog/
---------------------------------------------

WhereGroup GmbH
Grevenweg 89
20537 Hamburg
Germany

Tel: +49 (0)228 / 90 90 38 - 36
Fax: +49 (0)228 / 90 90 38 - 11

johannes.kroeger at wheregroup.com
www.wheregroup.com
Geschäftsführer:
Olaf Knopp, Peter Stamm
Amtsgericht Bonn, HRB 9885
-------------------------------

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0x840A4B843789797F.asc
Type: application/pgp-keys
Size: 2472 bytes
Desc: OpenPGP public key
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20220928/95e48606/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 665 bytes
Desc: OpenPGP digital signature
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20220928/95e48606/attachment.sig>


More information about the QGIS-Developer mailing list