Sphere based calculations for geography don't appear to be faster?
Marco Boeringa
marco at boeringa.demon.nl
Wed Oct 2 03:16:23 PDT 2024
I now looked at some of the documentation of geographiclib and better
understand the current implementation for PostGIS.
Clearly, there is no special treatment for sphere based calculations
where flattening=0. There are two separate classes 'Geodesic' and
'GeodesicExact' in geographiclib, but both do full spheroid aware
calculations, the difference between the classes being that
'GeodesicExact' can handle larger values for flattening while still
keeping errors in check, at the cost of 2-3x slower processing,
according to the documentation. But that is a different distinction than
between simplified sphere versus complicated spheroid calculations as
suggested in the PostGIS Help text.
The PolygonAreaT class of geographiclib that I guess is used by PostGIS
for calculating geodesic areas also fully depends on the 'Geodesic' and
'GeodesicExact' classes, and thus follows the same distinction.
https://geographiclib.sourceforge.io/C++/doc/classGeographicLib_1_1Geodesic.html#details
https://geographiclib.sourceforge.io/C++/doc/classGeographicLib_1_1GeodesicExact.html#details
https://geographiclib.sourceforge.io/C++/doc/classGeographicLib_1_1PolygonAreaT.html#details
As Paul suggested, it would be interesting to see if indeed the current
implementation in PostGIS simply sets flattening to 0, and doesn't
feature a dedicated sphere based code section, as also indicated by the
timing results of the tests I did with PostGIS 3.4.3. The Help for
ST_Area (https://postgis.net/docs/ST_Area.html) is ambiguous, as the
"Enhanced: 2.2.0 - measurement on spheroid performed with GeographicLib
for improved accuracy and robustness." text suggests geographiclib may
only be used for the spheroid case, not sphere, but this may not
represent the true implementation as Paul suggests.
Marco
Op 1-10-2024 om 22:20 schreef Paul Ramsey:
>
>> On Oct 1, 2024, at 1:18 PM, Regina Obe <lr at pcorp.us> wrote:
>>
>> This does not surprise me. I think Paul wrote that note 15 years ago and even then I don't recall it making a significant difference and back then we weren't even using geographylib and think we are now even for sphere.
>> We should probably take that not out of the docs.
>>
>> Paul you have anything to say about the below? Does it make a difference maybe if you have a narly multipolygon with 5,000,000 points?
> No idea. But I bet if you trace the code you’ll find that area uses the geographiclib code in both spherical and spheroidal mode, it just sets the major and semi-major axes equal for the spherical mode. I haven’t confirmed that, but my best guess.
>
> P
>
>>> -----Original Message-----
>>> From: Marco Boeringa
>>> Subject: Sphere based calculations for geography don't appear to be faster?
>>>
>>> Hi,
>>>
>>> After the PostGIS 3.4.3 release, that fixed an issue with sphere based
>>> calculations for geography type, I decided to run a quick test to see if sphere
>>> based calculations would give a performance benefit for my workflow. Due to
>>> the existing bug, I had been using spheroid based calculations exclusively up to
>>> now.
>>>
>>> According to the Help (https://postgis.net/docs/ST_Area.html), the sphere
>>> based calculations should be faster. However, looking at the timings listed
>>> below, it appears there is no significant difference?
>>>
>>> SQL used:
>>>
>>> DROP MATERIALIZED VIEW IF EXISTS atest;
>>> CREATE MATERIALIZED VIEW atest AS SELECT
>>> ST_AREA(way::geography,true/false) FROM planet_osm_polygon
>>>
>>> The test data was the Geofabrik Italy extract, and used the polygon table of an
>>> osm2pgsql import containing +/- 19M records, containing polygons of varying
>>> sizes up to country size. The tests were run on a local dedicated system with
>>> plenty of IO and CPU.
>>>
>>> Marco
>>>
>>> *** SPHEROID ***:
>>> Start time 2024-10-01 08:07:05.984
>>> Finish time 2024-10-01 08:07:15.248
>>>
>>> Start time 2024-10-01 08:08:13.881
>>> Finish time 2024-10-01 08:08:24.362
>>>
>>> Start time 2024-10-01 08:08:42.772
>>> Finish time 2024-10-01 08:08:51.998
>>>
>>> Start time 2024-10-01 08:09:16.137
>>> Finish time 2024-10-01 08:09:26.484
>>>
>>> *** SPHERE ***
>>> Start time 2024-10-01 08:10:35.261
>>> Finish time 2024-10-01 08:10:45.846
>>>
>>> Start time 2024-10-01 08:11:05.856
>>> Finish time 2024-10-01 08:11:16.110
>>>
>>> Start time 2024-10-01 08:11:35.278
>>> Finish time 2024-10-01 08:11:44.499
>>>
>>> Start time 2024-10-01 08:12:18.769
>>> Finish time 2024-10-01 08:12:29.020
More information about the postgis-users
mailing list