summaryrefslogtreecommitdiff
path: root/django/contrib/gis/serializers
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-07-18 14:50:08 +0200
committerClaude Paroz <claude@2xlibre.net>2015-07-20 20:22:29 +0200
commit1da170a203819ffda7764e53e3c268b8fc2ab452 (patch)
tree0d859a9c1ff4e7ffdee6f3bc09e536ff93e58c0b /django/contrib/gis/serializers
parent774c16d16ed67d7cf12bc2b2752768b544bdb363 (diff)
Fixed #25141 -- Diminished GDAL dependence during geojson serialization
Only require GDAL if contained geometries need coordinate transformations. Thanks drepo for the report and Tim Graham for the review.
Diffstat (limited to 'django/contrib/gis/serializers')
-rw-r--r--django/contrib/gis/serializers/geojson.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/django/contrib/gis/serializers/geojson.py b/django/contrib/gis/serializers/geojson.py
index 9c15b49676..f26147a59a 100644
--- a/django/contrib/gis/serializers/geojson.py
+++ b/django/contrib/gis/serializers/geojson.py
@@ -17,17 +17,14 @@ class Serializer(JSONSerializer):
def _init_options(self):
super(Serializer, self)._init_options()
self.geometry_field = self.json_kwargs.pop('geometry_field', None)
- self.srs = SpatialReference(self.json_kwargs.pop('srid', 4326))
+ self.srid = self.json_kwargs.pop('srid', 4326)
def start_serialization(self):
- if not HAS_GDAL:
- # GDAL is needed for the geometry.geojson call
- raise SerializationError("The geojson serializer requires the GDAL library.")
self._init_options()
self._cts = {} # cache of CoordTransform's
self.stream.write(
'{"type": "FeatureCollection", "crs": {"type": "name", "properties": {"name": "EPSG:%d"}},'
- ' "features": [' % self.srs.srid)
+ ' "features": [' % self.srid)
def end_serialization(self):
self.stream.write(']}')
@@ -48,10 +45,15 @@ class Serializer(JSONSerializer):
"properties": self._current,
}
if self._geometry:
- if self._geometry.srid != self.srs.srid:
+ if self._geometry.srid != self.srid:
# If needed, transform the geometry in the srid of the global geojson srid
+ if not HAS_GDAL:
+ raise SerializationError(
+ 'Unable to convert geometry to SRID %s when GDAL is not installed.' % self.srid
+ )
if self._geometry.srid not in self._cts:
- self._cts[self._geometry.srid] = CoordTransform(self._geometry.srs, self.srs)
+ srs = SpatialReference(self.srid)
+ self._cts[self._geometry.srid] = CoordTransform(self._geometry.srs, srs)
self._geometry.transform(self._cts[self._geometry.srid])
data["geometry"] = eval(self._geometry.geojson)
else: