[Qgis-developer] Python: Union selected polygons in a layer
Daniel
danielvaz at gmail.com
Sat Oct 5 04:55:02 PDT 2013
Try the QgsGeometry::combine() method.
http://www.qgis.org/api/classQgsGeometry.html#a63244d3435cc99794b82a6cbd0af0eb5
Quoting class doc
*Note:*this operation is not called union since its a reserved word in C++.
On Sat, Oct 5, 2013 at 8:07 AM, gene <martin.laloux at gmail.com> wrote:
> I also do not see union in Geometry Handling
> <http://www.qgis.org/en/docs/pyqgis_developer_cookbook/geometry.html> :
>
> the layer:
>
> for elem in layer.getFeatures():
> geom= elem.geometry()
> print geom.exportToGeoJSON()
> { "type": "LineString", "coordinates": [ [203271.93800293002277613,
> 89444.43836556003952865], [204056.96179387057782151,
> 89149.26942016639804933], [204590.77797171016572975,
> 89111.58827820124861319], [204823.14501382855814882,
> 89456.99874621508934069] ] }
> { "type": "LineString", "coordinates": [ [204541.79248715547146276,
> 89757.64295613372814842], [204474.17871974196168594,
> 90086.05268357080058195] ] }
>
>
> Using the see <https://github.com/inky/see> module (alternative to
> Python's dir()):
>
> from see import see
> see(geom)
> hash() help() repr()
> str()
> .Error() .addPart() .addRing()
> .adjacentVertices() .area() .asGeometryCollection()
> .asMultiPoint() .asMultiPolygon() .asMultiPolyline()
> .asPoint() .asPolygon() .asPolyline()
> .asWkb() .avoidIntersections() .boundingBox()
> .buffer() .centroid()
> .closestSegmentWithContext()
> .closestVertex() .closestVertexWithContext()
> .combine() .contains() .convertToMultiType()
> .convexHull() .crosses() .deletePart()
> .deleteRing() .deleteVertex() .difference()
> .disjoint() .distance() .equals()
> .exportToGeoJSON() .exportToWkt() .fromMultiPoint()
> .fromMultiPolygon() .fromMultiPolyline() .fromPoint()
> .fromPolygon() .fromPolyline() .fromRect()
> .fromWkb() .fromWkt() .insertVertex()
> .interpolate() .intersection() .intersects()
> .isGeosEmpty() .isGeosEqual() .isGeosValid()
> .isMultipart() .length() .makeDifference()
> .moveVertex() .overlaps() .reshapeGeometry()
> .simplify() .splitGeometry() .sqrDistToVertexAt()
> .symDifference() .touches() .transform()
> .translate() .type() .validateGeometry()
> .vertexAt() .within() .wkbSize()
> .wkbType()
>
> I see .intersection(), .touches() but no .union()
>
> Whereas with Shapely:
> --------------------------
>
> from shapely.geometry import LineString, shape
> from json import loads
> # empty shapely geometry
> myunion = LineString()
> for elem in layer.getFeatures():
> geom = elem.geometry()
> # transformation of the QGIS geometry to shapely geometry with
> the geo_interface
> geoms = shape(jloads(elem.geometry().exportToGeoJSON()))
> myunion = myunion.union(geoms)
> print myunion
> MULTILINESTRING ((203271.9380029300227761 89444.4383655600395286,
> 204056.9617938705778215 89149.2694201663980493, 204590.7779717101657297
> 89111.5882782012486132, 204823.1450138285581488 89456.9987462150893407),
> (204541.7924871554714628 89757.6429561337281484, 204474.1787197419616859
> 90086.0526835708005819))
>
> and
> gem = QgsGeometry.fromWkt(myunion.wkt)
> gem
> <qgis.core.QgsGeometry object at 0x12986fef0>
> print gem.exportToGeoJSON()
> { "type": "MultiLineString", "coordinates": [ [
> [203271.93800293002277613, 89444.43836556003952865],
> [204056.96179387057782151, 89149.26942016639804933],
> [204590.77797171016572975, 89111.58827820124861319],
> [204823.14501382855814882, 89456.99874621508934069] ], [
> [204541.79248715547146276, 89757.64295613372814842],
> [204474.17871974196168594, 90086.05268357080058195] ] ] }
>
> or with ogr (same result):
> -------------
> from osgeo import ogr
> # empty ogr geometry
> myunion = ogr.Geometry(ogr.wkbLineString)
> for elem in layer.getFeatures():
> geom = elem.geometry()
> # transformation of the QGIS geometry to ogr geometry
> geoms = ogr.CreateGeometryFromWkb(geom.asWkb())
> myunion = myunion.Union(geoms)
>
> Is there a comparable solution with PyQGIS ?
>
>
>
>
> --
> View this message in context:
> http://osgeo-org.1560.x6.nabble.com/Python-Union-selected-polygons-in-a-layer-tp5081862p5081959.html
> Sent from the Quantum GIS - Developer mailing list archive at Nabble.com.
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
--
Daniel Vaz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20131005/aeac0d14/attachment-0001.html>
More information about the Qgis-developer
mailing list