11import 'package:dart_jts/dart_jts.dart' ;
22import 'package:nitrite/nitrite.dart' ;
3+ import 'package:nitrite_spatial/src/geom_utils.dart' ;
34import 'package:nitrite_spatial/src/indexer.dart' ;
45
56/// The abstract base class for all spatial filters in Nitrite.
@@ -57,11 +58,25 @@ class _GeometryValidationFilter extends FieldBasedFilter {
5758 } catch (e) {
5859 return false ;
5960 }
61+ } else if (fieldValue is Document ) {
62+ // For entity repositories, geometry is stored as a Document with serialized string
63+ try {
64+ var geometryString = fieldValue['geometry' ] as String ? ;
65+ if (geometryString != null ) {
66+ documentGeometry = GeometrySerializer .deserialize (geometryString);
67+ }
68+ } catch (e) {
69+ return false ;
70+ }
6071 } else {
6172 return false ;
6273 }
6374
64- return _validator (documentGeometry! , value as Geometry );
75+ if (documentGeometry == null ) {
76+ return false ;
77+ }
78+
79+ return _validator (documentGeometry, value as Geometry );
6580 }
6681}
6782
@@ -258,10 +273,24 @@ class _NearValidationFilter extends NitriteFilter {
258273 } catch (e) {
259274 return false ;
260275 }
276+ } else if (fieldValue is Document ) {
277+ // For entity repositories, geometry is stored as a Document with serialized string
278+ try {
279+ var geometryString = fieldValue['geometry' ] as String ? ;
280+ if (geometryString != null ) {
281+ documentGeometry = GeometrySerializer .deserialize (geometryString);
282+ }
283+ } catch (e) {
284+ return false ;
285+ }
261286 } else {
262287 return false ;
263288 }
264289
290+ if (documentGeometry == null ) {
291+ return false ;
292+ }
293+
265294 // For near queries, check if the geometry is within the distance
266295 // For points, check direct distance. For other geometries, check if they intersect the circle.
267296 if (documentGeometry is Point ) {
@@ -272,7 +301,7 @@ class _NearValidationFilter extends NitriteFilter {
272301 } else {
273302 // For non-point geometries, check if they intersect the circle
274303 var circle = _createCircle (center, radius);
275- return documentGeometry! .intersects (circle);
304+ return documentGeometry.intersects (circle);
276305 }
277306 }
278307}
0 commit comments