summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2015-12-05 19:05:52 +0500
committerClaude Paroz <claude@2xlibre.net>2015-12-18 19:44:43 +0100
commitc984e2bc15aa41de87404d6dd5d7e64f1a8e5038 (patch)
tree650a79d43e111973ab77f4c6c25524f4e20519bf /django
parentcd3c042b0473e762b0e89bc69a9244c4a1fed66e (diff)
Fixed #25869 -- Added trim and precision properties to WKTWriter.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/gis/geos/prototypes/io.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/django/contrib/gis/geos/prototypes/io.py b/django/contrib/gis/geos/prototypes/io.py
index ed28bcdccd..87aec30605 100644
--- a/django/contrib/gis/geos/prototypes/io.py
+++ b/django/contrib/gis/geos/prototypes/io.py
@@ -54,6 +54,9 @@ wkt_writer_set_outdim = GEOSFuncFactory(
'GEOSWKTWriter_setOutputDimension', argtypes=[WKT_WRITE_PTR, c_int]
)
+wkt_writer_set_trim = GEOSFuncFactory('GEOSWKTWriter_setTrim', argtypes=[WKT_WRITE_PTR, c_char])
+wkt_writer_set_precision = GEOSFuncFactory('GEOSWKTWriter_setRoundingPrecision', argtypes=[WKT_WRITE_PTR, c_int])
+
# WKBReader routines
wkb_reader_create = GEOSFuncFactory('GEOSWKBReader_create', restype=WKB_READ_PTR)
wkb_reader_destroy = GEOSFuncFactory('GEOSWKBReader_destroy', argtypes=[WKB_READ_PTR])
@@ -164,6 +167,9 @@ class WKTWriter(IOBase):
_destructor = wkt_writer_destroy
ptr_type = WKT_WRITE_PTR
+ _trim = False
+ _precision = None
+
def write(self, geom):
"Returns the WKT representation of the given geometry."
return wkt_writer_write(self.ptr, geom.ptr)
@@ -178,6 +184,27 @@ class WKTWriter(IOBase):
raise ValueError('WKT output dimension must be 2 or 3')
wkt_writer_set_outdim(self.ptr, new_dim)
+ @property
+ def trim(self):
+ return self._trim
+
+ @trim.setter
+ def trim(self, flag):
+ self._trim = bool(flag)
+ wkt_writer_set_trim(self.ptr, b'\x01' if flag else b'\x00')
+
+ @property
+ def precision(self):
+ return self._precision
+
+ @precision.setter
+ def precision(self, precision):
+ if isinstance(precision, int) and precision >= 0 or precision is None:
+ self._precision = precision
+ wkt_writer_set_precision(self.ptr, -1 if precision is None else precision)
+ else:
+ raise AttributeError('WKT output rounding precision must be non-negative integer or None.')
+
class WKBWriter(IOBase):
_constructor = wkb_writer_create