本文整理汇总了Python中qgis.core.QgsFeature.geometryAndOwnership方法的典型用法代码示例。如果您正苦于以下问题:Python QgsFeature.geometryAndOwnership方法的具体用法?Python QgsFeature.geometryAndOwnership怎么用?Python QgsFeature.geometryAndOwnership使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsFeature
的用法示例。
在下文中一共展示了QgsFeature.geometryAndOwnership方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import geometryAndOwnership [as 别名]
def __init__(self,layer, tolerance, uid, errors):
QObject.__init__(self)
self.layer = layer
self.feat_count = self.layer.featureCount()
self.tolerance = tolerance
self.uid = uid
self.errors = errors
self.multiparts = []
self.points = []
self.invalids = []
self.features = []
self.attributes = {}
self.geometries = {}
self.geometries_wkt = {}
self.geometries_vertices = {}
# create spatial index object
self.spIndex = QgsSpatialIndex()
self.layer_fields = [QgsField(i.name(), i.type()) for i in self.layer.dataProvider().fields()]
if self.uid is not None:
self.uid_index = [index for index,field in enumerate(self.layer_fields) if field.name() == self.uid].pop()
self.fid_to_uid = {}
self.uid_to_fid = {}
new_key_count = 0
f_count = 1
for f in self.layer.getFeatures():
self.progress.emit(45 * f_count / self.feat_count)
f_count += 1
attr = f.attributes()
if f.geometry().wkbType() == 5 :
attr = f.attributes()
if self.errors and self.uid is not None:
self.multiparts.append(attr[self.uid_index])
self.uid_to_fid[attr[self.uid_index]] = f.id()
for multipart in f.geometry().asGeometryCollection():
new_key_count += 1
if self.uid is not None:
self.fid_to_uid[new_key_count] = attr[self.uid_index]
attr = f.attributes()
new_feat = QgsFeature()
new_feat.setAttributes(attr)
new_feat.setFeatureId(new_key_count)
if self.tolerance:
snapped_wkt = make_snapped_wkt(multipart.exportToWkt(), self.tolerance)
else:
snapped_wkt = multipart.exportToWkt()
snapped_geom = QgsGeometry.fromWkt(snapped_wkt)
new_feat.setGeometry(snapped_geom)
self.features.append(new_feat)
self.attributes[new_key_count] = attr
self.geometries[new_key_count] = new_feat.geometryAndOwnership()
self.geometries_wkt[new_key_count] = snapped_wkt
self.geometries_vertices[new_key_count] = [vertex for vertex in vertices_from_wkt_2(snapped_wkt)]
# insert features to index
self.spIndex.insertFeature(new_feat)
elif f.geometry().wkbType() == 1:
if self.errors and self.uid is not None:
self.points.append(attr[self.uid_index])
elif not f.geometry().isGeosValid():
if self.errors and self.uid is not None:
self.invalids.append(attr[self.uid_index])
elif f.geometry().wkbType() == 2:
attr = f.attributes()
if self.tolerance:
snapped_wkt = make_snapped_wkt(f.geometry().exportToWkt(), self.tolerance)
else:
snapped_wkt = f.geometry().exportToWkt()
snapped_geom = QgsGeometry.fromWkt(snapped_wkt)
f.setGeometry(snapped_geom)
new_key_count += 1
f.setFeatureId(new_key_count)
self.features.append(f)
self.attributes[f.id()] = attr
self.geometries[f.id()] = f.geometryAndOwnership()
self.geometries_wkt[f.id()] = snapped_wkt
self.geometries_vertices[f.id()] = [vertex for vertex in vertices_from_wkt_2(snapped_wkt)]
# insert features to index
self.spIndex.insertFeature(f)
if self.uid is not None:
self.fid_to_uid[f.id()] = attr[self.uid_index]
self.uid_to_fid[attr[self.uid_index]] = f.id()