Fixed #25654 -- Added the GEOSGeometry.unary_union property.
This commit is contained in:
parent
1e35dd1a05
commit
034dfbfc05
|
@ -621,6 +621,11 @@ class GEOSGeometry(GEOSBase, ListMixin):
|
|||
"""
|
||||
return self._topology(capi.geos_symdifference(self.ptr, other.ptr))
|
||||
|
||||
@property
|
||||
def unary_union(self):
|
||||
"Return the union of all the elements of this geometry."
|
||||
return self._topology(capi.geos_unary_union(self.ptr))
|
||||
|
||||
def union(self, other):
|
||||
"Returns a Geometry representing all the points in this Geometry and other."
|
||||
return self._topology(capi.geos_union(self.ptr, other.ptr))
|
||||
|
|
|
@ -34,6 +34,7 @@ geos_symdifference = Topology('GEOSSymDifference', argtypes=[GEOM_PTR, GEOM_PTR]
|
|||
geos_union = Topology('GEOSUnion', argtypes=[GEOM_PTR, GEOM_PTR])
|
||||
|
||||
geos_cascaded_union = GEOSFuncFactory('GEOSUnionCascaded', argtypes=[GEOM_PTR], restype=GEOM_PTR)
|
||||
geos_unary_union = GEOSFuncFactory('GEOSUnaryUnion', argtypes=[GEOM_PTR], restype=GEOM_PTR)
|
||||
|
||||
# GEOSRelate returns a string, not a geometry.
|
||||
geos_relate = GEOSFuncFactory(
|
||||
|
|
|
@ -497,6 +497,21 @@ geometry is a point.
|
|||
Computes and returns a :class:`Point` guaranteed to be on the interior
|
||||
of this geometry.
|
||||
|
||||
.. attribute:: GEOSGeometry.unary_union
|
||||
|
||||
.. versionadded:: 1.10
|
||||
|
||||
Computes the union of all the elements of this geometry.
|
||||
|
||||
The result obeys the following contract:
|
||||
|
||||
* Unioning a set of :class:`LineString`\s has the effect of fully noding and
|
||||
dissolving the linework.
|
||||
|
||||
* Unioning a set of :class:`Polygon`\s will always return a :class:`Polygon` or
|
||||
:class:`MultiPolygon` geometry (unlike :meth:`GEOSGeometry.union`, which may
|
||||
return geometries of lower dimension if a topology collapse occurs).
|
||||
|
||||
Other Properties & Methods
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -64,6 +64,10 @@ Minor features
|
|||
* :ref:`Distance lookups <distance-lookups>` now accept expressions as the
|
||||
distance value parameter.
|
||||
|
||||
* The new :attr:`GEOSGeometry.unary_union
|
||||
<django.contrib.gis.geos.GEOSGeometry.unary_union>` property computes the
|
||||
union of all the elements of this geometry.
|
||||
|
||||
:mod:`django.contrib.messages`
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -421,6 +421,7 @@ linebreaks
|
|||
linebreaksbr
|
||||
linenumbers
|
||||
linestring
|
||||
linework
|
||||
Livni
|
||||
ljust
|
||||
loaddata
|
||||
|
@ -520,6 +521,7 @@ nestable
|
|||
neuroscientist
|
||||
newforms
|
||||
nginx
|
||||
noding
|
||||
nonspatial
|
||||
nullable
|
||||
OAuth
|
||||
|
@ -877,6 +879,7 @@ unicode
|
|||
uninstall
|
||||
uninstalling
|
||||
uninstalls
|
||||
unioning
|
||||
uniterated
|
||||
unittest
|
||||
unittests
|
||||
|
|
|
@ -582,6 +582,15 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
|
|||
a |= b # testing __ior__
|
||||
self.assertEqual(u1, a)
|
||||
|
||||
def test_unary_union(self):
|
||||
"Testing unary_union."
|
||||
for i in range(len(self.geometries.topology_geoms)):
|
||||
a = fromstr(self.geometries.topology_geoms[i].wkt_a)
|
||||
b = fromstr(self.geometries.topology_geoms[i].wkt_b)
|
||||
u1 = fromstr(self.geometries.union_geoms[i].wkt)
|
||||
u2 = GeometryCollection(a, b).unary_union
|
||||
self.assertTrue(u1.equals(u2))
|
||||
|
||||
def test_difference(self):
|
||||
"Testing difference()."
|
||||
for i in range(len(self.geometries.topology_geoms)):
|
||||
|
|
Loading…
Reference in New Issue