Daha çox

Atributların nöqtə qatından yaddaş linestring qatına PYQGIS kopyalanması


Kopyalama atributları ilə bir az yığdım.

.Csv faylından yaradılmış bir Nöqtə Layerim var. Bu təbəqədəki hər bir xüsusiyyət üçün yaddaş qatında yeni bir Polyline həndəsəsi yaradıram. Point layından atributları yeni yaradılan Polyline-a əlavə etmək olmur.

Budur kodum:

#mcvLayer - Point Layer nl = Create_layer ("New_line", "LineString") nl.show_layer hh = iface.activeLayer () a = QgsPoint (0,0) # Burada mcvLayer.dataProvider () nöqtəsi üçün başqa bir nöqtə olacaq. getFeatures (): pattrs = point.attributes () pgeom = point.geometry (). asPoint () nl.create_line (a, pgeom, pattrs) class Create_layer (object): def __init __ (self, name, type): self. type = type self.name = name self.layer = QgsVectorLayer (self.type, self.name, "memory") self.pr = self.layer.dataProvider () def create_line (self, startpoint, endpoint, attributelist): özünü .feat = QgsFeature () self.feat.setGeometry (QgsGeometry.fromPolyline ([startpoint, endpoint])) self.pr.addFeatures ([attributelist]) self.layer.updateExtents ()

Ancaq əldə etdiyim yalnız:

TypeError: QgsVectorDataProvider.addFeatures (QgsFeature siyahısı) -> (bool, QgsFeature siyahısı): arqument 1-in gözlənilməz növü 'list' var

QGIS 2.8.1 istifadə edirəm


Heç bir sahə olmadan yaddaş qatı yaradırsınız. Bəzi atributları təyin etmək üçün müvafiq sahələrə ehtiyacınız var. Yaddaş təbəqələri yaratarkən arqument tipinin bir hissəsi kimi sahə tərifləri verə bilərsiniz:

self.layer = QgsVectorLayer (self.type + '? field_a: string (20) & field_b: int', self.name, "memory")

Qatınızın işləməsi üçün nöqtə qatı ilə eyni sahələri təyin etməlisiniz. Başqa bir yol, yaradılan yaddaş qatına atributlar əlavə etməkdir.

prov = mcvLayer.dataProvider () sahələri = prov.fields () nl = Create_layer ("New_line", "LineString", sahələr)

Sonra içində():

def __init __ (öz, ad, tip, sahələr): self.type = type self.name = name self.layer = QgsVectorLayer (self.type, self.name, "memory") in the field for self.layer.startEditing () in sahələr: self.layer.addAttribute (field) self.layer.commitChanges () self.pr = self.layer.dataProvider () QgsMapLayerRegistry.instance (). addMapLayer (self.layer) def create_line (self, startpoint, endpoint, attributelist) ): feat = QgsFeature (sahələr) feat.setGeometry (QgsGeometry.fromPolyline ([startpoint, endpoint])) feat.setAttributes (attributelist) self.pr.addFeatures ([feat]) self.layer.updateExtents ()

Fikri alacağınıza ümid edirəm.


Videoya baxın: QGIS Python PyQGIS - Calculate Field Values Field Calculator (Oktyabr 2021).