Skip to content

Commit f4b724f

Browse files
committed
Add dwithin
1 parent 86b1e75 commit f4b724f

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

django_mongodb_backend/gis/operations.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ def _gis_distance_operator(field, value, op=None, params=None):
9595
return cmd
9696

9797

98+
def _gis_dwithin_operator(field, value, op=None, params=None): # noqa: ARG001
99+
return {field: {"$geoWithin": {"$centerSphere": [value["coordinates"], params[0]]}}}
100+
101+
98102
class GISOperations(BaseSpatialOperations, BaseDatabaseOperations):
99103
Adapter = Adapter
100104

@@ -117,6 +121,7 @@ def gis_operators(self):
117121
"distance_gte": SpatialOperator("distance_gte", _gis_distance_operator),
118122
"distance_lt": SpatialOperator("distance_lt", _gis_distance_operator),
119123
"distance_lte": SpatialOperator("distance_lte", _gis_distance_operator),
124+
"dwithin": SpatialOperator("dwithin", _gis_dwithin_operator),
120125
}
121126

122127
unsupported_functions = {

tests/gis_tests_/tests.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,8 @@ def test_distance_lte_lookup(self):
5151
city = City.objects.create(point=Point(40.7589, -73.9851))
5252
qs = City.objects.filter(point__distance_lt=(Point(40.7670, -73.9820), 1000))
5353
self.assertIn(city, qs)
54+
55+
def test_dwithin_lookup(self):
56+
city = City.objects.create(point=Point(40.7589, -73.9851))
57+
qs = City.objects.filter(point__dwithin=(Point(40.7670, -73.9820), 1000))
58+
self.assertIn(city, qs)

0 commit comments

Comments
 (0)