# HG changeset patch # User Justin Bronn # Date 1237486130 18000 # Node ID 87b34dce202d71ac0463f28ce316a1cf41ae21b0 # Parent be2975906c897f2b0ce60aec5c850276e5eac83a Added `merged` property to LineString & MultiLineString, which returns the output of the GEOS line merging operation. --- a/django/contrib/gis/geos/collections.py Thu Mar 19 12:33:18 2009 -0500 +++ b/django/contrib/gis/geos/collections.py Thu Mar 19 13:08:50 2009 -0500 @@ -103,6 +103,14 @@ _allowed = (LineString, LinearRing) _typeid = 5 + @property + def merged(self): + """ + Returns a LineString representing the line merge of this + MultiLineString. + """ + return self._topology(capi.geos_linemerge(self.ptr)) + class MultiPolygon(GeometryCollection): _allowed = Polygon _typeid = 6 --- a/django/contrib/gis/geos/linestring.py Thu Mar 19 12:33:18 2009 -0500 +++ b/django/contrib/gis/geos/linestring.py Thu Mar 19 13:08:50 2009 -0500 @@ -126,6 +126,11 @@ return self._listarr(self._cs.__getitem__) @property + def merged(self): + "Returns the line merge of this LineString." + return self._topology(capi.geos_linemerge(self.ptr)) + + @property def x(self): "Returns a list or numpy array of the X variable." return self._listarr(self._cs.getX) --- a/django/contrib/gis/geos/prototypes/topology.py Thu Mar 19 12:33:18 2009 -0500 +++ b/django/contrib/gis/geos/prototypes/topology.py Thu Mar 19 13:08:50 2009 -0500 @@ -3,9 +3,9 @@ topological operations on geometries. """ __all__ = ['geos_boundary', 'geos_buffer', 'geos_centroid', 'geos_convexhull', - 'geos_difference', 'geos_envelope', 'geos_intersection', - 'geos_pointonsurface', 'geos_preservesimplify', 'geos_simplify', - 'geos_symdifference', 'geos_union', 'geos_relate'] + 'geos_difference', 'geos_envelope', 'geos_intersection', + 'geos_linemerge', 'geos_pointonsurface', 'geos_preservesimplify', + 'geos_simplify', 'geos_symdifference', 'geos_union', 'geos_relate'] from ctypes import c_char_p, c_double, c_int from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR, GEOS_PREPARE @@ -28,6 +28,7 @@ geos_difference = topology(lgeos.GEOSDifference, GEOM_PTR) geos_envelope = topology(lgeos.GEOSEnvelope) geos_intersection = topology(lgeos.GEOSIntersection, GEOM_PTR) +geos_linemerge = topology(lgeos.GEOSLineMerge) geos_pointonsurface = topology(lgeos.GEOSPointOnSurface) geos_preservesimplify = topology(lgeos.GEOSTopologyPreserveSimplify, c_double) geos_simplify = topology(lgeos.GEOSSimplify, c_double) --- a/django/contrib/gis/geos/tests/test_geos.py Thu Mar 19 12:33:18 2009 -0500 +++ b/django/contrib/gis/geos/tests/test_geos.py Thu Mar 19 13:08:50 2009 -0500 @@ -824,6 +824,17 @@ self.assertEqual(mpoly.intersects(pnt), prep.intersects(pnt)) self.assertEqual(c, prep.covers(pnt)) + def test26_line_merge(self): + "Testing line merge support" + ref_geoms = (fromstr('LINESTRING(1 1, 1 1, 3 3)'), + fromstr('MULTILINESTRING((1 1, 3 3), (3 3, 4 2))'), + ) + ref_merged = (fromstr('LINESTRING(1 1, 3 3)'), + fromstr('LINESTRING (1 1, 3 3, 4 2)'), + ) + for geom, merged in zip(ref_geoms, ref_merged): + self.assertEqual(merged, geom.merged) + def suite(): s = unittest.TestSuite() s.addTest(unittest.makeSuite(GEOSTest))