summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-04-16 10:50:24 +0200
committerClaude Paroz <claude@2xlibre.net>2016-04-16 19:51:00 +0200
commit10c53385f85aa424e83c65a002d5ca1679d2dd71 (patch)
treef98ecff9bdcd6d50daa5d4711a19419e8a976e99 /django
parent05d08367d781a11ce935bec1eb18f2b59ad5ed1b (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.py6
-rw-r--r--django/contrib/gis/geos/prototypes/io.py31
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