Is there a way to store time-bounded geometries in PostGIS?

Your plan is fine. A traditional way to handing the "end date" is to leave it NULL, so every geometry has a start and end, and those that have been superseded have a non-NULL end point. Here's a very simple temporal model.

http://postgis.net/workshops/postgis-intro/history_tracking.html

If you're going to be doing a lot of temporal querying, looking into the RANGE type in PostgreSQL is highly recommended. It's optimized for better index performance and has a number of useful query facilities to allow you to manipulate time (and other) ranges. It's very cool all around.

About the only tricky thing you're going to have to deal with is the annual update, figuring out what has changed and so on, but as long as the providers are always editing an existing copy, just doing relatively simple spatial comparisons should be sufficient.

A classic spatial similarity test for polygons is the ratio

ST_Area(ST_Intersection(A, B)) / ST_Area(ST_Union(A, B))

The closer it is to 1, the more similar the two polygons are.


Rather than think of each time-slice as a separate, complete actual layer of polygons, think of them as "virtual" layers. Instead of having the geometry as part of each region (being duplicated period after period)

regions
id, name, beg_date, end_date, geometry, stat_1, stat_2, ... stat_M

factor out the gemetries into their own table and keep only references to them in each region, allowing many-to-one relationships.

regions
id, name, beg_date, end_date, poly_id, stat_1, stat_2, ... stat_M

polygons
id, geometry

Spatial queries would require join between regions and polygons.

Let's call it a temporal-topology solution.

Ultimately, an efficient (but complicated) solution would combine spatial and temporal topology methodologies!

Tags:

Time

Postgis