diff options
| author | Claude Paroz <claude@2xlibre.net> | 2016-04-16 10:50:24 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2016-04-16 19:51:00 +0200 |
| commit | 10c53385f85aa424e83c65a002d5ca1679d2dd71 (patch) | |
| tree | f98ecff9bdcd6d50daa5d4711a19419e8a976e99 /django | |
| parent | 05d08367d781a11ce935bec1eb18f2b59ad5ed1b (diff) | |
Fixed #26510 -- Allowed dim/trim/precision as WKTWriter init arguments
Thanks Tim Graham for the review.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/gis/geos/geometry.py | 6 | ||||
| -rw-r--r-- | django/contrib/gis/geos/prototypes/io.py | 31 |
2 files changed, 27 insertions, 10 deletions
diff --git a/django/contrib/gis/geos/geometry.py b/django/contrib/gis/geos/geometry.py index f66effd756..744d89275f 100644 --- a/django/contrib/gis/geos/geometry.py +++ b/django/contrib/gis/geos/geometry.py @@ -408,7 +408,7 @@ class GEOSGeometry(GEOSBase, ListMixin): @property def wkt(self): "Returns the WKT (Well-Known Text) representation of this Geometry." - return wkt_w(3 if self.hasz else 2).write(self).decode() + return wkt_w(dim=3 if self.hasz else 2).write(self).decode() @property def hex(self): @@ -419,7 +419,7 @@ class GEOSGeometry(GEOSBase, ListMixin): """ # A possible faster, all-python, implementation: # str(self.wkb).encode('hex') - return wkb_w(3 if self.hasz else 2).write_hex(self) + return wkb_w(dim=3 if self.hasz else 2).write_hex(self) @property def hexewkb(self): @@ -428,7 +428,7 @@ class GEOSGeometry(GEOSBase, ListMixin): extension of the WKB specification that includes SRID value that are a part of this geometry. """ - return ewkb_w(3 if self.hasz else 2).write_hex(self) + return ewkb_w(dim=3 if self.hasz else 2).write_hex(self) @property def json(self): diff --git a/django/contrib/gis/geos/prototypes/io.py b/django/contrib/gis/geos/prototypes/io.py index ef59f93a98..161541d6f4 100644 --- a/django/contrib/gis/geos/prototypes/io.py +++ b/django/contrib/gis/geos/prototypes/io.py @@ -170,6 +170,14 @@ class WKTWriter(IOBase): _trim = False _precision = None + def __init__(self, dim=2, trim=False, precision=None): + super(WKTWriter, self).__init__() + if bool(trim) != self._trim: + self.trim = trim + if precision is not None: + self.precision = precision + self.outdim = dim + def write(self, geom): "Returns the WKT representation of the given geometry." return wkt_writer_write(self.ptr, geom.ptr) @@ -212,6 +220,10 @@ class WKBWriter(IOBase): _destructor = wkb_writer_destroy ptr_type = WKB_WRITE_PTR + def __init__(self, dim=2): + super(WKBWriter, self).__init__() + self.outdim = dim + def write(self, geom): "Returns the WKB representation of the given geometry." return six.memoryview(wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))) @@ -280,10 +292,13 @@ def wkt_r(): return thread_context.wkt_r -def wkt_w(dim=2): +def wkt_w(dim=2, trim=False, precision=None): if not thread_context.wkt_w: - thread_context.wkt_w = WKTWriter() - thread_context.wkt_w.outdim = dim + thread_context.wkt_w = WKTWriter(dim=dim, trim=trim, precision=precision) + else: + thread_context.wkt_w.outdim = dim + thread_context.wkt_w.trim = trim + thread_context.wkt_w.precision = precision return thread_context.wkt_w @@ -295,14 +310,16 @@ def wkb_r(): def wkb_w(dim=2): if not thread_context.wkb_w: - thread_context.wkb_w = WKBWriter() - thread_context.wkb_w.outdim = dim + thread_context.wkb_w = WKBWriter(dim=dim) + else: + thread_context.wkb_w.outdim = dim return thread_context.wkb_w def ewkb_w(dim=2): if not thread_context.ewkb_w: - thread_context.ewkb_w = WKBWriter() + thread_context.ewkb_w = WKBWriter(dim=dim) thread_context.ewkb_w.srid = True - thread_context.ewkb_w.outdim = dim + else: + thread_context.ewkb_w.outdim = dim return thread_context.ewkb_w |
