mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #26510 -- Allowed dim/trim/precision as WKTWriter init arguments
Thanks Tim Graham for the review.
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user