Index: django/contrib/gis/db/models/manager.py
===================================================================
--- django/contrib/gis/db/models/manager.py	(revision 9548)
+++ django/contrib/gis/db/models/manager.py	(working copy)
@@ -63,6 +63,9 @@
     def scale(self, *args, **kwargs):
         return self.get_query_set().scale(*args, **kwargs)
 
+    def snaptogrid(self, *args, **kwargs):
+        return self.get_query_set().snaptogrid(*args, **kwargs)
+
     def svg(self, *args, **kwargs):
         return self.get_query_set().svg(*args, **kwargs)
 
Index: django/contrib/gis/db/models/query.py
===================================================================
--- django/contrib/gis/db/models/query.py	(revision 9548)
+++ django/contrib/gis/db/models/query.py	(working copy)
@@ -217,6 +217,24 @@
              }
         return self._spatial_attribute('scale', s, **kwargs)
 
+    def snaptogrid(self, size=0.01, **kwargs):
+        """
+        Snap all points of the input geometry to the grid defined by
+        cell size.
+        """
+        if SpatialBackend.version[0]<1:
+            raise "Postgis version doesn't support SnapToGrid"
+        if not isinstance(size, (float, int)):
+            raise TypeError('Size of the grid must be float or int.')        
+ 
+        field_name = kwargs.get('field_name', None)
+        tmp, geo_field = self._spatial_setup('snaptogrid', field_name=field_name)
+        field_col = self._geocol_select(geo_field, field_name)
+        geo_col = self.query.custom_select.get(geo_field, field_col)
+        custom_sel = '%s(%s, %s)' % (SpatialBackend.snaptogrid, geo_col, size)
+        self.query.custom_select[geo_field] = custom_sel
+        return self._clone()
+
     def svg(self, **kwargs):
         """
         Returns SVG representation of the geographic field in a `svg`
Index: django/contrib/gis/db/backend/postgis/__init__.py
===================================================================
--- django/contrib/gis/db/backend/postgis/__init__.py	(revision 9548)
+++ django/contrib/gis/db/backend/postgis/__init__.py	(working copy)
@@ -30,6 +30,7 @@
                                     point_on_surface=POINT_ON_SURFACE,
                                     scale=SCALE,
                                     select=GEOM_SELECT,
+                                    snaptogrid=SNAP_TO_GRID,
                                     svg=ASSVG,
                                     sym_difference=SYM_DIFFERENCE,
                                     transform=TRANSFORM,
Index: django/contrib/gis/db/backend/postgis/query.py
===================================================================
--- django/contrib/gis/db/backend/postgis/query.py	(revision 9548)
+++ django/contrib/gis/db/backend/postgis/query.py	(working copy)
@@ -60,6 +60,7 @@
     PERIMETER = get_func('Perimeter')
     POINT_ON_SURFACE = get_func('PointOnSurface')
     SCALE = get_func('Scale')
+    SNAP_TO_GRID = get_func('SnapToGrid')
     SYM_DIFFERENCE = get_func('SymDifference')
     TRANSFORM = get_func('Transform')
     TRANSLATE = get_func('Translate')
