diff --git a/django/contrib/gis/db/backends/spatialite/operations.py b/django/contrib/gis/db/backends/spatialite/operations.py index 41e829a815..693dea9fe5 100644 --- a/django/contrib/gis/db/backends/spatialite/operations.py +++ b/django/contrib/gis/db/backends/spatialite/operations.py @@ -56,9 +56,11 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): select = 'AsText(%s)' gis_operators = { + # Unary predicates + 'isvalid': SpatialOperator(func='IsValid'), + # Binary predicates 'equals': SpatialOperator(func='Equals'), 'disjoint': SpatialOperator(func='Disjoint'), - 'dwithin': SpatialOperator(func='PtDistWithin'), 'touches': SpatialOperator(func='Touches'), 'crosses': SpatialOperator(func='Crosses'), 'within': SpatialOperator(func='Within'), @@ -75,7 +77,8 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): # These are implemented here as synonyms for Equals 'same_as': SpatialOperator(func='Equals'), 'exact': SpatialOperator(func='Equals'), - + # Distance predicates + 'dwithin': SpatialOperator(func='PtDistWithin'), 'distance_gt': SpatialOperator(func='Distance', op='>'), 'distance_gte': SpatialOperator(func='Distance', op='>='), 'distance_lt': SpatialOperator(func='Distance', op='<'), @@ -96,9 +99,9 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): @cached_property def unsupported_functions(self): - unsupported = {'BoundingCircle', 'ForceRHR', 'IsValid', 'MakeValid', 'MemSize'} + unsupported = {'BoundingCircle', 'ForceRHR', 'MemSize'} if not self.lwgeom_version(): - unsupported.add('GeoHash') + unsupported |= {'GeoHash', 'IsValid', 'MakeValid'} return unsupported @cached_property diff --git a/docs/ref/contrib/gis/db-api.txt b/docs/ref/contrib/gis/db-api.txt index bb35d1c846..2b2e02ac16 100644 --- a/docs/ref/contrib/gis/db-api.txt +++ b/docs/ref/contrib/gis/db-api.txt @@ -347,7 +347,7 @@ Lookup Type PostGIS Oracle MySQL [#]_ SpatiaLite :lookup:`equals` X X X X C :lookup:`exact` X X X X B :lookup:`intersects` X X X X B -:lookup:`isvalid` X +:lookup:`isvalid` X X (LWGEOM) :lookup:`overlaps` X X X X B :lookup:`relate` X X X C :lookup:`same_as` X X X X B @@ -390,9 +390,9 @@ Function PostGIS Oracle MySQL SpatiaLite :class:`ForceRHR` X :class:`GeoHash` X X (LWGEOM) :class:`Intersection` X X X (≥ 5.6.1) X -:class:`IsValid` X +:class:`IsValid` X X (LWGEOM) :class:`Length` X X X X -:class:`MakeValid` X +:class:`MakeValid` X X (LWGEOM) :class:`MemSize` X :class:`NumGeometries` X X X X :class:`NumPoints` X X X X diff --git a/docs/ref/contrib/gis/functions.txt b/docs/ref/contrib/gis/functions.txt index f2be78d45c..b3f989126b 100644 --- a/docs/ref/contrib/gis/functions.txt +++ b/docs/ref/contrib/gis/functions.txt @@ -298,11 +298,15 @@ intersection between them. .. versionadded:: 1.10 -*Availability*: PostGIS +*Availability*: PostGIS, SpatiaLite (LWGEOM) Accepts a geographic field or expression and tests if the value is well formed. Returns ``True`` if its value is a valid geometry and ``False`` otherwise. +.. versionchanged:: 1.11 + + SpatiaLite support was added. + ``Length`` ========== @@ -327,13 +331,17 @@ resource-intensive) with the ``spheroid`` keyword argument. .. versionadded:: 1.10 -*Availability*: PostGIS +*Availability*: PostGIS, SpatiaLite (LWGEOM) Accepts a geographic field or expression and attempts to convert the value into a valid geometry without losing any of the input vertices. Geometries that are already valid are returned without changes. Simple polygons might become a multipolygon and the result might be of lower dimension than the input. +.. versionchanged:: 1.11 + + SpatiaLite support was added. + ``MemSize`` =========== diff --git a/docs/releases/1.11.txt b/docs/releases/1.11.txt index 2d3a4dc698..5683f2fc07 100644 --- a/docs/releases/1.11.txt +++ b/docs/releases/1.11.txt @@ -151,6 +151,11 @@ Minor features * Added the ability to pass the `size`, `shape`, and `offset` parameter when creating :class:`~django.contrib.gis.gdal.GDALRaster` objects. +* Added SpatiaLite support for the + :class:`~django.contrib.gis.db.models.functions.IsValid` function, + :class:`~django.contrib.gis.db.models.functions.MakeValid` function, and + :lookup:`isvalid` lookup. + :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~