#
Spatial Module
Nitrite Spatial module provides support for spatial queries. The module uses JTS library for spatial operations.
#
Adding Spatial Module
Add Spatial module to your project:
#
Maven
Add the Spatial dependency to your pom.xml
file:
<dependency>
<groupId>org.dizitart</groupId>
<artifactId>nitrite-spatial</artifactId>
</dependency>
#
Gradle
Add the Spatial dependency to your build.gradle
file:
dependencies {
implementation 'org.dizitart:nitrite-spatial'
}
#
Using Spatial Module
To use Spatial module, you need to load the SpatialModule
while opening the database.
Nitrite db = Nitrite.builder()
.loadModule(new SpatialModule())
.openOrCreate();
If Nitrite is using the default SimpleNitriteMapper
, then the SpatialModule
will automatically register the GeometryConverter
with the mapper. If you are using your own custom mapper, then you need to register the GeometryConverter
with the mapper.
#
GeometryConverter
GeometryConverter
is an EntityConverter
which is used to convert Geometry
object of JTS to Document
and vice-versa. It is used to store the Geometry
object in the database.
#
Using Spatial Modules with Jackson
If you are using Jackson module for serialization, you need to register the GeometryModule
with Jackson as well.
Nitrite db = Nitrite.builder()
.loadModule(new SpatialModule())
.loadModule(new JacksonMapperModule(new GeometryModule()))
.openOrCreate();
The GeometryModule
is required to serialize the Geometry
object of JTS via Jackson.
#
Spatial Index
Spatial module uses R-Tree index to store the spatial data.
To create a spatial index, you need to pass the index type as SpatialIndexer.SPATIAL_INDEX
while creating the index.
collection.createIndex(IndexOptions.indexOptions(SpatialIndexer.SPATIAL_INDEX), "location");
Spatial index is not supported on multiple fields.
#
Spatial Filter
Spatial module supports several filters to query spatial data. To know more about filters, please refer to Spatial Filters.