[postgis-devel] PostGIS 3 and MobilityDB

Regina Obe lr at pcorp.us
Thu Jul 8 23:50:06 PDT 2021


Regarding  your note to Bas question earlier why you can't use librtopo
-- Your note ---
* This would require a HUGE work to change all over the MobilityDB code <liblwgeom_function> -> <librttopo_function>
* Not all liblwgeom functions are implemented in librttopo, for example the azimuth_pt_pt function that I have used in the examples of this thread.
-- End your note --

The first note it's my understanding that all the librttopo functions are the same as liblwgeom but with rt_ in front to prevent conflict with PostGIS so not sure why this is huge work if you are only using about 10 of them.

The second I do see the azimuth_pt_pt  code defined in librttopo, but looks like it isn't exposed

https://git.osgeo.org/gitea/rttopo/librttopo/src/branch/master/src/measures.c#L2271

Sandro,

Is there a reason that wasn't exposed?

Seems trivial enough though that you could just reimplement in MobilityDB.

Thanks,
Regina

From: Regina Obe [mailto:lr at pcorp.us] 
Sent: Friday, July 9, 2021 2:27 AM
To: 'PostGIS Development Discussion' <postgis-devel at lists.osgeo.org>
Cc: 'Mahmoud Sakr' <m_attia_sakr at yahoo.com>; 'mohamed sayed' <mohamed_bakli at aun.edu.eg>; 'SCHOEMANS Maxime' <Maxime.Schoemans at ulb.be>
Subject: RE: [postgis-devel] PostGIS 3 and MobilityDB

A side note, I think you need to change the way you are detecting PostgreSQL.  It just doesn’t work for me and suspect it will be an issue for anyone with multiple PostgreSQL installs or non-standard paths  – as I had mentioned here - https://github.com/MobilityDB/MobilityDB/pull/20 .  You should be using the 
CMAKE PostgreSQL package to detect PostgreSQL.  I always end up having to copy pgRouting code in so the PostgreSQL detection works right.

As I recall compiling MobilityDB a while ago it has both a dependency to liblwgeom as well as the PostGIS lib.
The dependency of PostGIS lib is a little troubling as I mentioned here

https://github.com/MobilityDB/MobilityDB/issues/16


Even the extensions packaged with PostGIS don’t have a direct dependency to PostGIS lib just to liblwgeom.

So not even a parallel branch will work here unless you change how you are doing things and what to change is unclear to me.  The issue with depending on PostGIS lib is we only guarantee SQL API compatibility across minor versions, not C-API.  Meaning if the function isn’t exposed via the SQL API, we don’t need to worry about it as PostgreSQL upgrade would not care as it only fails if it tries to call a function that is referenced in an SQL API function.

That said if you must rely on PostGIS lib all your postgis.h dependencies should only be Datum ones and any others will make your code brittle to PostGIS changes.
I’m thinking for the liblwgeom dependency you should be able to use librtopo for that. Still not clear to me why you can’t, but we can discuss in dev meeting.

My understanding of the main speed issue is the serializing and deserializing of data across the PostgreSQL barrier.

One thought that comes to mind which I’ve been thinking about (perhaps crazy), is some sort of iterator function where you pass a bytea or jsonb representation of data (has to be bytea or jsonb or some other so we have no direct dependency to mobility types or any other non-built-in types) and you define the instruction.  Similar to the jsonb_path 

https://www.youtube.com/watch?v=LOXmgM8Vtqc

except it would be some sort of operation of the form

SELECT postgis_iterate(your_data, ‘interation query’);

Where the query would define possible agreed upon function names and what to do with the data and outputs back a bytea of the operation.

If it’s bytea I suppose we could have code internal to PostGIS that can understand tpoint  and other types mobility uses.

Not sure if that would help solve similar issue Darafei mentioned with h3-pg -  https://github.com/bytesandbrains/h3-pg

Thanks,
Regina


From: postgis-devel [mailto:postgis-devel-bounces at lists.osgeo.org] On Behalf Of Esteban Zimanyi
Sent: Thursday, July 8, 2021 9:00 AM
To: PostGIS Development Discussion <postgis-devel at lists.osgeo.org>
Cc: Mahmoud Sakr <m_attia_sakr at yahoo.com>; mohamed sayed <mohamed_bakli at aun.edu.eg>; SCHOEMANS Maxime <Maxime.Schoemans at ulb.be>
Subject: Re: [postgis-devel] PostGIS 3 and MobilityDB

Dear Regina

Many thanks for allowing us to participate in the PostGIS Day Development meeting 2021.

Allow me to explain further why a solution based on lbrttopo is not viable for us. A foundational result of moving object databases is the fact that ANY function on static geometries (i.e., those manipulated by PostGIS) can be generalized to temporal (or moving) geometries (i.e., those manipulated by MobilityDB). This is called LIFTING and conceptually this amounts to applying the static function to every timestamp of the moving geometry. For obvious performance reasons lifting cannot be implemented like this. The approach followed by MobilityDB is to fully delegate the static function to PostGIS and to determine the minimal number of timestamps at which the PostGIS function needs to be called. This is explained in the article
https://docs.mobilitydb.com/pub/TODS.pdf

The mainstream MobilityDB version implements the OGC Moving Features Access standard 
https://docs.opengeospatial.org/is/16-120r3/16-120r3.html
for moving POINTS (i.e., something like 'Point(1 1)@t1, Point(2 2)@t2, ....'). As stated above in this thread, for implementing this we required
* the functions in liblwgeom.h
* the functions stated in the postgis.h file
https://github.com/MobilityDB/MobilityDB/blob/develop/point/include/postgis.h

However, the ISO standard ISO 19141:2008 Geographic information — Schema for moving features
https://www.iso.org/standard/41445.html
requires to implement moving GEOMETRIES, more precisely RIGID (i.e. non-deforming) temporal geometries. Our initial implementation of this standard is explained in the article 
https://docs.mobilitydb.com/pub/TempGeometriesICDE2021.pdf
We are currently implementing OGC Moving Features Access standard for rigid temporal geometries and it is impossible to know upfront what are the PostGIS functions we would need for that.

As mentioned above in this thread, we are willing to do ANYTHING in our code to enable a sustainable way to access PostGIS functions in MobilityDB. This could include, e.g., Paul's suggestion to refactor our code as a parallel branch to postgis_raster and the other PostGIS extensions.

Regards

Esteban


On Wed, Jul 7, 2021 at 10:46 AM Regina Obe <lr at pcorp.us> wrote:
How many functions are we talking about here in this postgis_c_api and how many of these are not already covered in librttopo?
 
> Statically linking to the copy of liblwgeom will cause explosions when using two versions with same func names at the same time.
 
I thought we had that solved so each static can’t see the other functions inside (I forget what we changed – I think Sandro had changed it something to do with not exporting symbols I think it was).  We had issues with this with raster, sfcgal, and postgis_topology earlier on cause they each have their own static copy of liblwgeom which each exported the symbols and were dancing around in an unwholesome manner.
I haven’t seen the issue you described here for a couple of years now.
 
My main concern with a postgis_c_api is that sounds like MobilityDB needs a lot of the functions which would mean that library would get fat very quickly and bind their versioning to our versioning.  I’d rather sort out why librtopo https://git.osgeo.org/gitea/rttopo/librttopo is not a viable solution while liblwgeom is as the point of librttopo was to have a minimalist liblwgeom
 
MobilityDB folks – you are welcome to our Dev meeting -  https://trac.osgeo.org/postgis/wiki/PostGISDevelopment2021
Signup is here -  https://nextcloud.osgeo.org/apps/polls/s/4w1vSTPsIuJySw7g
 
Thanks,
Regina
 



More information about the postgis-devel mailing list