Question

I have an application that receives a number of datums that characterize 3 dimensional spatial and temporal processes. It then filters these datums and creates actions which are then sent to processes that perform the actions. Rinse and repeat.

At present, I have a collection of custom filters that perform a lot of complicated spatial/temporal calculations.

Many times as I discuss my system to individuals in my company, they ask if I'm using a rules engine.

I have yet to find a rules engine that is able to reason well temporally and spatially. (Things like: When are two 3D entities ever close? Is 3D entity A ever contained in 3D region B? If entity C is near entity D but oriented backwards relative to C then perform action D.)

I have looked at Drools, Cyc, Jess in the past (say 3-4 years ago). It's time to re-examine the state of the art. Any suggestions? Any standards that you know of that support this kind of reasoning? Any defacto standards? Any applications?

Thanks!

Was it helpful?

Solution

Premise - remember that a SQL-based1 DBMS is a (quite capable) inference engine, as can be seen from these comparisons between SQL and Prolog:

To address specifically your spatio-temporal applications, this book will help:

That is, combining Interval and Relation Theory is possible to reasoning about spatio-temporal problems effectively (see 5.2 Applications of Intervals).

Of course, if your SQL-based DBMS is not (yet) equipped with interval (and other) operators you will need to extend it appropriately (via store-procedures and/or User-Defined Functions - UDFs).

Update: skimming the paper pointed out in comments by timemirror (Towards a 3D Spatial Query Language for Building Information Models) they do essentially what I touched on above:

(last page)

IMPLEMENTATION CONCEPTS

The implementation of the abstract type system into a query language will be performed on the basis of the query language SQL, which is a widely established standard in the field of object-relational databases. The international standard SQL:1999 extends the relational model to include object-oriented aspects, such as the possibility to define complex abstract data types with integrated methods.

I do not concur with the "object-relational database" terminology (for reason off-topic here) but I think the rest is pertinent.


Update: a quote regardind 3D and interval theory from the book cited above:

NOTE: All of the intervals discussed so far can be thought of as one-dimensional. However, we might want to combine two one-dimensional intervals to form a twodimensional interval. For example, a rectangular plot of ground might be thought of as a two-dimensional interval, because it is, by definition, an object with length and width, each of which is basically a one-dimensional interval measured along some axis. And, of course, we can extend this idea to any number of dimensions. For example, a (rather simple!) building might be regarded as a three-dimensional interval: It is an object with length, width, and height, or in other words a cuboid. (More realistically, a building might be regarded as a set of several such cuboids that overlap in various ways.) And so on. In what follows, however, we will restrict our attention to one-dimensional intervals specifically, barring explicit statements to the contrary, and we will omit the "one-dimensional" qualifier for simplicity.

Note

  1. I wrote SQL-based and not relational because there are ways to use such DBMSes that completely deviate from relational theory.

OTHER TIPS

This is Spatial Reasoning... a few models but 9DE-IM is now accepted by OGC and implemented in PostGIS and other programming tools.

PostGIS implements a spatial reasoning engine based on dimensionally extended 9 intersection model... 9DE-IM..

http://postgis.refractions.net/documentation/manual-svn/ch04.html#DE-9IM check sect 4.3.6.1. Theory...


So does the Java Topology Suite (and Net Topology suite for C# etc)...

http://docs.codehaus.org/display/GEOTDOC/Point+Set+Theory+and+the+DE-9IM+Matrix

In particualr check out the geometry.relate stuff.. such as

boolean isRelated = geometry.relate( geometry2, "T*T***T**" )

You can test the relationships, or filter data based on them. Works with pts, lines, polygons etc...


This might help on temporal stuff..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.87.4643&rep=rep1&type=pdf

Check out SpatialRules at http://www.objectfx.com/. It's a geospatial complex event processor for 2D and 3D.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top