本文整理汇总了Python中qgis.core.QgsGeometry.combine方法的典型用法代码示例。如果您正苦于以下问题:Python QgsGeometry.combine方法的具体用法?Python QgsGeometry.combine怎么用?Python QgsGeometry.combine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsGeometry
的用法示例。
在下文中一共展示了QgsGeometry.combine方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: layerOmmb
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def layerOmmb(self, layer, writer, feedback):
req = QgsFeatureRequest().setSubsetOfAttributes([])
features = vector.features(layer, req)
total = 100.0 / len(features)
newgeometry = QgsGeometry()
first = True
for current, inFeat in enumerate(features):
if first:
newgeometry = inFeat.geometry()
first = False
else:
newgeometry = newgeometry.combine(inFeat.geometry())
feedback.setProgress(int(current * total))
geometry, area, angle, width, height = newgeometry.orientedMinimumBoundingBox()
if geometry:
outFeat = QgsFeature()
outFeat.setGeometry(geometry)
outFeat.setAttributes([area,
width * 2 + height * 2,
angle,
width,
height])
writer.addFeature(outFeat)
示例2: union_geometry
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def union_geometry(vector, request=QgsFeatureRequest()):
"""Return union of the vector geometries regardless of the attributes.
(If request is specified, filter the objects before union).
If all geometries in the vector are invalid, return None.
The boundaries will be dissolved during the operation.
:param vector: Vector layer
:type vector: QgsVectorLayer
:param request: Filter for vector objects
:type request: QgsFeatureRequest
:return: Union of the geometry
:rtype: QgsGeometry or None
"""
result_geometry = None
for feature in vector.getFeatures(request):
if result_geometry is None:
result_geometry = QgsGeometry(feature.geometry())
else:
# But some feature.geometry() may be invalid, skip them
tmp_geometry = result_geometry.combine(feature.geometry())
try:
if tmp_geometry.isGeosValid():
result_geometry = tmp_geometry
except AttributeError:
pass
return result_geometry
示例3: layerOmmb
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def layerOmmb(self, layer, writer, progress):
current = 0
fit = layer.getFeatures()
inFeat = QgsFeature()
total = 100.0 / layer.featureCount()
newgeometry = QgsGeometry()
first = True
while fit.nextFeature(inFeat):
if first:
newgeometry = inFeat.geometry()
first = False
else:
newgeometry = newgeometry.combine(inFeat.geometry())
current += 1
progress.setPercentage(int(current * total))
geometry, area, perim, angle, width, height = self.OMBBox(newgeometry)
if geometry:
outFeat = QgsFeature()
outFeat.setGeometry(geometry)
outFeat.setAttributes([area,
perim,
angle,
width,
height])
writer.addFeature(outFeat)
示例4: merge
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def merge(feature, features_input):
"""
Merge geometries from features list that touch given feature.
"""
count = 0
features_output = [ feature ]
geom = QgsGeometry(feature.geometry())
#geom = QgsGeometry.fromPolygon(feature.geometry())
while True:
breakloop = True
for f in features_input:
if f in features_output:
continue
g = f.geometry()
#if geom.equals(g):
# continue
if geom.contains(g):
continue
if geom.within(g):
geom = QgsGeometry(g)
features_output.append(f)
breakloop = False
break
if not geom.disjoint(g) or geom.touches(g) or geom.overlaps(g):
geom = QgsGeometry(geom.combine(g))
features_output.append(f)
breakloop = False
break
if breakloop:
break
return (geom, features_output)
示例5: processAlgorithm
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def processAlgorithm(self, progress):
vlayerA = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
vlayerB = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT2))
vproviderA = vlayerA.dataProvider()
fields = vector.combineVectorFields(vlayerA, vlayerB)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, vproviderA.geometryType(), vproviderA.crs()
)
inFeatA = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()
index = vector.spatialindex(vlayerB)
nElement = 0
selectionA = vector.features(vlayerA)
nFeat = len(selectionA)
for inFeatA in selectionA:
nElement += 1
progress.setPercentage(nElement / float(nFeat) * 100)
geom = QgsGeometry(inFeatA.geometry())
atMapA = inFeatA.attributes()
intersects = index.intersects(geom.boundingBox())
for i in intersects:
request = QgsFeatureRequest().setFilterFid(i)
inFeatB = vlayerB.getFeatures(request).next()
tmpGeom = QgsGeometry(inFeatB.geometry())
try:
if geom.intersects(tmpGeom):
atMapB = inFeatB.attributes()
int_geom = QgsGeometry(geom.intersection(tmpGeom))
if (
int_geom.wkbType() == QGis.WKBUnknown
or QgsWKBTypes.flatType(int_geom.geometry().wkbType()) == QgsWKBTypes.GeometryCollection
):
int_com = geom.combine(tmpGeom)
int_sym = geom.symDifference(tmpGeom)
int_geom = QgsGeometry(int_com.difference(int_sym))
try:
if int_geom.wkbType() in wkbTypeGroups[wkbTypeGroups[int_geom.wkbType()]]:
outFeat.setGeometry(int_geom)
attrs = []
attrs.extend(atMapA)
attrs.extend(atMapB)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
except:
ProcessingLog.addToLog(
ProcessingLog.LOG_INFO,
self.tr(
"Feature geometry error: One or more output features ignored due to invalid geometry."
),
)
continue
except:
break
del writer
示例6: buffering
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def buffering(progress, writer, distance, field, useField, layer, dissolve,
segments):
if useField:
field = layer.fieldNameIndex(field)
outFeat = QgsFeature()
inFeat = QgsFeature()
inGeom = QgsGeometry()
outGeom = QgsGeometry()
current = 0
features = vector.features(layer)
total = 100.0 / float(len(features))
# With dissolve
if dissolve:
first = True
for inFeat in features:
attrs = inFeat.attributes()
if useField:
value = attrs[field]
else:
value = distance
inGeom = QgsGeometry(inFeat.geometry())
outGeom = inGeom.buffer(float(value), segments)
if first:
tempGeom = QgsGeometry(outGeom)
first = False
else:
tempGeom = tempGeom.combine(outGeom)
current += 1
progress.setPercentage(int(current * total))
outFeat.setGeometry(tempGeom)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
else:
# Without dissolve
for inFeat in features:
attrs = inFeat.attributes()
if useField:
value = attrs[field]
else:
value = distance
inGeom = QgsGeometry(inFeat.geometry())
outGeom = inGeom.buffer(float(value), segments)
outFeat.setGeometry(outGeom)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
current += 1
progress.setPercentage(int(current * total))
del writer
示例7: processAlgorithm
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def processAlgorithm(self, progress):
vlayerA = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
vlayerB = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT2))
vproviderA = vlayerA.dataProvider()
geomType = vproviderA.geometryType()
if geomType in GEOM_25D:
raise GeoAlgorithmExecutionException(
self.tr('Input layer has unsupported geometry type {}').format(geomType))
fields = vector.combineVectorFields(vlayerA, vlayerB)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
geomType, vproviderA.crs())
outFeat = QgsFeature()
index = vector.spatialindex(vlayerB)
selectionA = vector.features(vlayerA)
total = 100.0 / len(selectionA)
for current, inFeatA in enumerate(selectionA):
progress.setPercentage(int(current * total))
geom = QgsGeometry(inFeatA.geometry())
atMapA = inFeatA.attributes()
intersects = index.intersects(geom.boundingBox())
for i in intersects:
request = QgsFeatureRequest().setFilterFid(i)
inFeatB = vlayerB.getFeatures(request).next()
tmpGeom = QgsGeometry(inFeatB.geometry())
if geom.intersects(tmpGeom):
atMapB = inFeatB.attributes()
int_geom = QgsGeometry(geom.intersection(tmpGeom))
if int_geom.wkbType() == QGis.WKBUnknown or QgsWKBTypes.flatType(int_geom.geometry().wkbType()) == QgsWKBTypes.GeometryCollection:
int_com = geom.combine(tmpGeom)
int_sym = geom.symDifference(tmpGeom)
int_geom = QgsGeometry(int_com.difference(int_sym))
if int_geom.isGeosEmpty() or not int_geom.isGeosValid():
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
self.tr('GEOS geoprocessing error: One or '
'more input features have invalid '
'geometry.'))
break
try:
if int_geom.wkbType() in wkbTypeGroups[wkbTypeGroups[int_geom.wkbType()]]:
outFeat.setGeometry(int_geom)
attrs = []
attrs.extend(atMapA)
attrs.extend(atMapB)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
except:
ProcessingLog.addToLog(ProcessingLog.LOG_INFO,
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
continue
del writer
示例8: selectionChanged
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def selectionChanged(self, layer):
if not layer.geometryType() == QGis.Polygon:
return
fullGeometry = QgsGeometry()
for feature in layer.selectedFeatures():
if fullGeometry.isEmpty():
fullGeometry = QgsGeometry(feature.constGeometry())
else:
fullGeometry = fullGeometry.combine(feature.constGeometry())
if not fullGeometry.isEmpty():
crs = osr.SpatialReference()
crs.ImportFromProj4(str(layer.crs().toProj4()))
self.doprofile.calculatePolygonProfile(fullGeometry, crs, self.mdl, self.plotlibrary)
示例9: createSinglePolygon
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def createSinglePolygon(self, vlayer):
provider = vlayer.dataProvider()
feat = QgsFeature()
geom = QgsGeometry()
fit = provider.getFeatures()
fit.nextFeature(feat)
geom = QgsGeometry(feat.geometry())
count = 10.00
add = ( 40.00 - 10.00 ) / provider.featureCount()
while fit.nextFeature(feat):
geom = geom.combine(QgsGeometry( feat.geometry() ))
count = count + add
self.progressBar.setValue(count)
return geom
示例10: compute_mask_geometries
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def compute_mask_geometries(self, parameters, poly):
geom = None
for g in poly:
if geom is None:
geom = QgsGeometry(g)
else:
# do an union here
geom = geom.combine(g)
if parameters.do_buffer:
geom = geom.buffer(parameters.buffer_units, parameters.buffer_segments)
# reset the simplified geometries dict
self.simplified_geometries = {}
return geom
示例11: dissolveFeatures
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def dissolveFeatures(features, fields=None, attributes=None):
outFeat = QgsFeature(fields)
first = True
for inFeat in features:
if first:
tmpInGeom = QgsGeometry(inFeat.geometry())
outFeat.setGeometry(tmpInGeom)
first = False
else:
tmpInGeom = QgsGeometry(inFeat.geometry())
tmpOutGeom = QgsGeometry(outFeat.geometry())
try:
tmpOutGeom = QgsGeometry(tmpOutGeom.combine(tmpInGeom))
outFeat.setGeometry(tmpOutGeom)
except:
pass
if attributes is not None:
outFeat.setAttributes(attributes)
return outFeat
示例12: _union_geometries
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def _union_geometries(geometries):
""" Return a geometry which is union of the passed list of geometries.
:param geometries: Geometries for the union operation.
:type geometries: list
:returns: union of geometries
:rtype: QgsGeometry
"""
if QGis.QGIS_VERSION_INT >= 20400:
# woohoo we can use fast union (needs GEOS >= 3.3)
return QgsGeometry.unaryUnion(geometries)
else:
# uhh we need to use slow iterative union
if len(geometries) == 0:
return QgsGeometry()
result_geometry = QgsGeometry(geometries[0])
for g in geometries[1:]:
result_geometry = result_geometry.combine(g)
return result_geometry
示例13: dissolveFeatures
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def dissolveFeatures(features, fields=None, attributes=None):
# Adapted from QGIS Processing plugin Dissolve by Victor Olaya
outFeat = QgsFeature(fields)
first = True
for inFeat in features:
if first:
tmpInGeom = QgsGeometry(inFeat.geometry())
outFeat.setGeometry(tmpInGeom)
first = False
else:
tmpInGeom = QgsGeometry(inFeat.geometry())
tmpOutGeom = QgsGeometry(outFeat.geometry())
try:
tmpOutGeom = QgsGeometry(tmpOutGeom.combine(tmpInGeom))
outFeat.setGeometry(tmpOutGeom)
except Exception:
pass
if attributes is not None:
outFeat.setAttributes(attributes)
return outFeat
示例14: processAlgorithm
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def processAlgorithm(self, progress):
fileName = self.getParameterValue(self.INPUT)
layer = dataobjects.getObjectFromUri(fileName)
fieldName = self.getParameterValue(self.FIELD)
value = self.getParameterValue(self.VALUE)
selected = layer.selectedFeaturesIds()
if len(selected) == 0:
GeoAlgorithmExecutionException(
self.tr('There is no selection in the input layer. '
'Select one feature and try again.'))
ft = layer.selectedFeatures()[0]
geom = QgsGeometry(ft.geometry())
attrSum = ft[fieldName]
idx = QgsSpatialIndex(layer.getFeatures())
req = QgsFeatureRequest()
completed = False
while not completed:
intersected = idx.intersects(geom.boundingBox())
if len(intersected) < 0:
progress.setInfo(self.tr('No adjacent features found.'))
break
for i in intersected:
ft = layer.getFeatures(req.setFilterFid(i)).next()
tmpGeom = QgsGeometry(ft.geometry())
if tmpGeom.touches(geom):
geom = tmpGeom.combine(geom)
selected.append(i)
attrSum += ft[fieldName]
if attrSum >= value:
completed = True
break
layer.setSelectedFeatures(selected)
self.setOutputValue(self.OUTPUT, fileName)
示例15: __mergeFeaturesSimple
# 需要导入模块: from qgis.core import QgsGeometry [as 别名]
# 或者: from qgis.core.QgsGeometry import combine [as 别名]
def __mergeFeaturesSimple(self, provider, origFeats):
newFeats = []
QgsMessageLog.logMessage("---- Merge Simple: {0} features".format(len(origFeats)), "VoGis", Qgis.Info)
if len(origFeats) < 1:
return []
prevToPnt = None
#newGeom = QgsGeometry()
newGeom = QgsGeometry().fromPolylineXY([])
attrMap = None
#newGeom = QgsGeometry.fromPolyline([QgsPoint(1, 1), QgsPoint(2, 2)])
#QgsMessageLog.logMessage("newGeom WKB Type {0}".format(newGeom.wkbType() == QGis.WKBLineString), "VoGis", Qgis.Info)
for feat in origFeats:
#QgsMessageLog.logMessage("{0}:{1}".format("ORIG FEAT AttributeMap", self.__printAttribs(feat.attributeMap())), "VoGis", Qgis.Info)
#self.__printAttribs(feat.attributeMap())
currentGeom = feat.geometry()
currentPnts = currentGeom.asPolyline()
if prevToPnt is None:
#QgsMessageLog.logMessage("combining FIRST {0}".format(currentGeom.asPolyline()), "VoGis", Qgis.Info)
newGeom = newGeom.combine(currentGeom)
attrMap = feat.attributes()
else:
if currentPnts[0] == prevToPnt:
#QgsMessageLog.logMessage("combining {0}".format(currentGeom.asPolyline()), "VoGis", Qgis.Info)
newGeom = newGeom.combine(currentGeom)
attrMap = feat.attributes();
else:
#QgsMessageLog.logMessage("creating {0}".format(newGeom.asPolyline()), "VoGis", Qgis.Info)
featNew = self.createQgLineFeature(newGeom.asPolyline())
featNew = self.__transferAttributes(provider, attrMap, featNew)
newFeats.append(featNew)
#feat = QgsFeature()
#newGeom = QgsGeometry()
newGeom = QgsGeometry().fromPolylineXY(currentPnts)
attrMap = feat.attributes()
#newGeom = QgsGeometry.fromPolyline([QgsPoint(1, 1), QgsPoint(2, 2)])
prevToPnt = currentPnts[len(currentPnts) - 1]
featNew = self.createQgLineFeature(newGeom.asPolyline())
self.__transferAttributes(provider, attrMap, featNew)
#newFeats.append(self.createQgLineFeature(newGeom.asPolyline()))
newFeats.append(featNew)
tmpFeats = []
for feat in newFeats:
if feat.geometry().isEmpty() is True:
QgsMessageLog.logMessage("dropping empty geometry", "VoGis", Qgis.Warning)
continue
else:
tmpFeats.append(feat)
newFeats = tmpFeats
QgsMessageLog.logMessage("---- {0} features after Merge Simple".format(len(newFeats)), "VoGis", Qgis.Info)
#for idx, f in enumerate(newFeats):
# QgsMessageLog.logMessage("--------feature {0}---------".format(idx), "VoGis", Qgis.Info)
# geo = f.geometry()
# pnts = geo.asPolyline()
# for i, v in enumerate(pnts):
# QgsMessageLog.logMessage(" pnt {0}: {1}/{2}".format(i, v.x(), v.y()), "VoGis", Qgis.Info)
return newFeats