Commit 95f7ea3a authored by Brian Galey's avatar Brian Galey Committed by Claude Paroz
Browse files

Fixed #19028 -- Support GeoJSON output with SpatiaLite 3.0+

parent 470deb5c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -146,6 +146,8 @@ class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
            except DatabaseError:
                # we are using < 2.4.0-RC4
                pass
        if version >= (3, 0, 0):
            self.geojson = 'AsGeoJSON'

    def check_aggregate_support(self, aggregate):
        """
+3 −2
Original line number Diff line number Diff line
@@ -146,13 +146,14 @@ class GeoQuerySet(QuerySet):
        """
        backend = connections[self.db].ops
        if not backend.geojson:
            raise NotImplementedError('Only PostGIS 1.3.4+ supports GeoJSON serialization.')
            raise NotImplementedError('Only PostGIS 1.3.4+ and SpatiaLite 3.0+ '
                                      'support GeoJSON serialization.')

        if not isinstance(precision, six.integer_types):
            raise TypeError('Precision keyword must be set with an integer.')

        # Setting the options flag -- which depends on which version of
        # PostGIS we're using.
        # PostGIS we're using. SpatiaLite only uses the first group of options.
        if backend.spatial_version >= (1, 4, 0):
            options = 0
            if crs and bbox: options = 3
+8 −8
Original line number Diff line number Diff line
@@ -474,21 +474,21 @@ class GeoQuerySetTest(TestCase):

    def test_geojson(self):
        "Testing GeoJSON output from the database using GeoQuerySet.geojson()."
        # Only PostGIS 1.3.4+ supports GeoJSON.
        # Only PostGIS 1.3.4+ and SpatiaLite 3.0+ support GeoJSON.
        if not connection.ops.geojson:
            self.assertRaises(NotImplementedError, Country.objects.all().geojson, field_name='mpoly')
            return

        if connection.ops.spatial_version >= (1, 4, 0):
        pueblo_json = '{"type":"Point","coordinates":[-104.609252,38.255001]}'
        houston_json = '{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[-95.363151,29.763374]}'
        victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.305196,48.462611]}'
        chicago_json = '{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
        else:
        if postgis and connection.ops.spatial_version < (1, 4, 0):
            pueblo_json = '{"type":"Point","coordinates":[-104.60925200,38.25500100]}'
            houston_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"coordinates":[-95.36315100,29.76337400]}'
            victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.30519600,48.46261100]}'
            chicago_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
        elif spatialite:
            victoria_json = '{"type":"Point","bbox":[-123.305196,48.462611,-123.305196,48.462611],"coordinates":[-123.305196,48.462611]}'

        # Precision argument should only be an integer
        self.assertRaises(TypeError, City.objects.geojson, precision='foo')
+1 −1
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ Method PostGIS Oracle SpatiaLite
:meth:`GeoQuerySet.extent3d`          X
:meth:`GeoQuerySet.force_rhr`         X
:meth:`GeoQuerySet.geohash`           X
:meth:`GeoQuerySet.geojson`           X
:meth:`GeoQuerySet.geojson`           X                X
:meth:`GeoQuerySet.gml`               X        X       X
:meth:`GeoQuerySet.intersection`      X        X       X
:meth:`GeoQuerySet.kml`               X                X
+1 −1
Original line number Diff line number Diff line
@@ -947,7 +947,7 @@ __ http://geohash.org/

.. method:: GeoQuerySet.geojson(**kwargs)

*Availability*: PostGIS
*Availability*: PostGIS, SpatiaLite

Attaches a ``geojson`` attribute to every model in the queryset that contains the
`GeoJSON`__ representation of the geometry.