The JADE 2022 release meets tomorrow’s business demands.
The JADE platform has provided a geospatial capability since 2010. This capability is currently only accessible using the .Net API. We are seeking expressions of interest in a RootSchema API that would allow developers to access the existing spatial capability directly from a JADE application.
See: https://github.com/jadesoftwarenz/JADE-geospatial-demo for an example C# application that uses the JADE .Net API to demonstrate the capability.
The current feature set is comprised of:
Data types that enable you to represent spatial data in the database
Spatial operators and predicate functions provided by the open-source GEOS - Geometry engine: https://trac.osgeo.org/geos/wiki
An R-Tree collection type for indexing multi-dimensional information
Spatial data, also known as geospatial data, is information about a physical object that can be represented by numerical values in a geographic coordinate system.
In the database, spatial objects are used to represent the location, size, and shape of an object on planet Earth such as a building, a lake, a mountain, or a city. Spatial objects may also include attributes that provide more information about the entity that is being represented. Geographic Information Systems (GIS) or other specialized software applications can be used to access, visualise, manipulate and analyse geospatial data.
Spatial data is useful for any kind of location-based data, including locations on earth identified with latitude and longitude angles and locations identified with XY coordinates in a Cartesian grid.
The main data type JADE provides is commonly known as a geometry. Geometry types are represented as points on a planar, or flat-earth, surface. An example would be (5,2) where the first number represents that point's position on the horizontal (x) axis and the second number represents the point's position on the vertical (y) axis.
The underlying spatial model and implementation provides the following capability:
Representation: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection
Predicates: Intersects, Touches, Disjoint, Crosses, Within, Contains, Overlaps, Equals, Covers
Operations: Union, Distance, Intersection, Symmetric Difference, Convex Hull, Envelope, Buffer, Simplify, Polygon Assembly, Valid, Area, Length.
JADE provides a tree data structure like a BTree, used for indexing multi-dimensional information. The R in Rtree stands for rectangle, indicating the shape Rtree uses to split space. For more details about Rtree and how it works, see the following Web sites.
The JADE .NET R-Tree collection supports eight spatial search operations: Contain, Within, Disjoint, Intersect, Touch, Cross, Overlap, and Equal.
We have previously created a Polygon class to hold the corners of the rectangle around the coordinated area and also a Coordinate class with x and y Real properties that are perceived to be lat / long since the data we are using is LINZ based. The Polygon includes an Array of Coordinates. We also have a MultiPolygon with a collection of Polygons. We then added a method on Polygon to manage finding if a point was inside the polygon definition. This was specifically used in relation to the local districts in NZ. We have a method to return the google image of the area (currently unused). On the Coordinate class there's methods to determine the distance to / from the coordinate given the curvature of the earth etc.
As far as extensions possibly the travelling salesman problem solution would be good, although without roads to drive that's potentially moot. Being able to draw the polygon into a control would be good and potentially place points into it. Like a forest boundary and where the trees are in the forest.
We have used spatial search for an address feature, it worked pretty well.
The classes (including RadeRTree) are unpublished. Would be really great if this could be moved formally into the product, published and supported.
If you have had or envisage a use case for a geospatial capability in a JADE application, please record your use case in a comment and explain why a RootSchema API would be preferable to the existing .Net API for your use case.