nitrite_spatial 1.1.0 copy "nitrite_spatial: ^1.1.0" to clipboard
nitrite_spatial: ^1.1.0 copied to clipboard

Nitrite Spatial module provides support for spatial queries. The module uses JTS port of the dart package dart_jts for spatial operations.

example/example.dart

import 'package:dart_jts/dart_jts.dart';
import 'package:nitrite/nitrite.dart';
import 'package:nitrite_spatial/nitrite_spatial.dart' as sp;
import 'package:nitrite_spatial/nitrite_spatial.dart';

part 'example.no2.dart';

void main() async {
  // create a Nitrite database
  var db = await Nitrite.builder()
      .registerEntityConverter(LocationDataConverter())
      .loadModule(SpatialModule())
      .openOrCreate();

  // create an object repository for LocationData
  var repo = await db.getRepository<LocationData>();

  // create some objects and insert them into the repository
  var reader = WKTReader();
  var object1 = LocationData(id: 1, location: reader.read('POINT (500 505)'));
  var object2 = LocationData(
      id: 2, location: reader.read('LINESTRING (550 551, 525 512, 565 566)'));
  var object3 = LocationData(
      id: 3,
      location: reader
          .read('POLYGON ((550 521, 580 540, 570 564, 512 566, 550 521))'));
  await repo.insertMany([object1, object2, object3]);

  // execute a query
  var cursor = repo.find(
      filter: sp.where('location').intersects(reader
          .read('POLYGON ((490 490, 536 490, 536 515, 490 515, 490 490))')!));

  // print the results
  await cursor.forEach((element) {
    // ignore: avoid_print
    print(element);
  });
}

@Entity(indices: [
  Index(fields: ['location'], type: spatialIndex),
])
@Convertable()
class LocationData with _$LocationDataEntityMixin {
  @Id(fieldName: 'id')
  int? id;
  Geometry? location;

  LocationData({this.id, this.location});

  @override
  String toString() {
    return 'LocationData{id: $id, location: $location}';
  }

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is LocationData &&
          runtimeType == other.runtimeType &&
          id == other.id &&
          geometryEquals(location, other.location);

  @override
  int get hashCode => id.hashCode ^ location.hashCode;
}
0
likes
160
points
68
downloads

Publisher

verified publisherdizitart.com

Weekly Downloads

Nitrite Spatial module provides support for spatial queries. The module uses JTS port of the dart package dart_jts for spatial operations.

Homepage
Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

Funding

Consider supporting this project:

github.com

License

Apache-2.0 (license)

Dependencies

dart_jts, hive, nitrite

More

Packages that depend on nitrite_spatial