Več

Brisanje izbranih funkcij z uporabo PyQGIS?

Brisanje izbranih funkcij z uporabo PyQGIS?


Imam oblikovno datoteko z enim samim poljem DN. Želim izbrisati vse funkcije, ki nimajo posebne vrednosti polja. Recimo, da DN lahko 1,2 ali 3.

Doslej sem lahko izvedel, kako izbrati funkcije in kako izbrisati funkcijo, vendar jih nisem uspel združiti. Recimo, da želim, da ostanejo samo funkcije z DN = 3:

Izbira funkcij, ki jih najdem tukaj, pa ne vem, ali dela tisto, kar naj bi naredil, ker nisem našel načina, kako preveriti, kaj je v notranjosti.

select = layer.getFeatures (QgsFeatureRequest (). setFilterExpression (u '"DN"! = 3'))

izbrišite funkcije, ki jih najdete tukaj

res = Ilayer.dataProvider (). deleteFeatures ()

Kolikor vem, jedeleteFeatures ()zahteva ID -je funkcij, vendar nimam pojma, kako jih pridobitiizberitekateri jeQgsFeatureIterator.


Lahko preklopite na iterator in dobite datoteko.id ()za vsako funkcijo v njem:

z edit (layer): # sestavite zahtevo za filtriranje funkcij na podlagi atributa request = QgsFeatureRequest (). setFilterExpression ('"DN"! = 3') # ne potrebujemo atributov ali geometrije, jih preskočite, da zmanjšate stroške . # te vrstice niso strogo potrebne, vendar izboljšujejo zmogljivost request.setSubsetOfAttributes ([]) request.setFlags (QgsFeatureRequest.NoGeometry) # zanke nad funkcijami in brisanje za f v layer.getFeatures (zahteva): layer.deleteFeature (f.id ( ))

Ali s QGIS <2.12

request = QgsFeatureRequest (). setFilterExpression ('"DN"! = 3') request.setSubsetOfAttributes ([]) request.setFlags (QgsFeatureRequest.NoGeometry) ids = [f.id () za f v layer.getFeatures (zahteva)] layer.startEditing () za fid v id -jih: layer.deleteFeature (fid) layer.commitChanges ()

Izvajanje dejanja dodajanja funkcije z uporabo PyQGIS

Poskušam implementirati / ponovno uporabiti funkcijo Dodaj funkcijo v vtičniku python. obstaja razred/funkcija, ki upravlja ustvarjanje geometrije na platnu na podlagi definicije geometrije plasti? Preverjam API ’m, vendar ne morem najti funkcije, ki bi vam omogočila digitalizacijo geometrije in jo posredovala kot funkcijo sloju – ali kaj podobnega.

Uspelo mi je preklopiti plast v način urejanja, zdaj pa ne najdem načina za izvedbo tega.

Torej v bistvu — & gt z API -jem PyQGIS.

3 odgovori

Popolna rešitev s shranjevanjem plasti, kot je zahtevano v komentarju:

Odgovoril pred 4 meseci od Marioba s 5 glasovi za

Tudi jaz sem nekaj časa poskušal to ugotoviti.

Gumb se nahaja v razredu QgisInterface.

Nato plasti dodajte lastnosti, ki jih želite dodati.

Odgovoril pred 4 meseci od Nicola s 7 glasovi za

Tu bi bil način dodajanja nove funkcije vektorju poligona:

S svojimi komentarji mislim, da bi moralo biti to samoumevno.

V tem primeru vam sploh ne bi bilo treba začeti urejevalne seje in to funkcijo bi zapisali neposredno v datoteko, kar morda ni ravno tisto, kar poskušate implementirati.

Kakorkoli že, manjka zdaj, da točke, ki so dodane na ta seznam, niso strogo kodirane, ampak dejansko prihajajo od uporabnika. Zato bi morali vse to združiti z dogodkom klika, ki ob kliku dobi koordinate in jih doda na seznam. Ker vse to poteka prek vtičnika, predlagam tudi, da dodate gumb, ki vam omogoča začetek urejanja (tj. Nastavitev novih točk) in ga lahko ustavite (torej gumb, ki omogoča preklapljanje, na primer tipičen gumb »Dodaj funkcijo«, zagotovo pa bi lahko dodali tudi dva ločena gumba). Funkcionalnost gumbov bi seveda prišla PyQtin nato sklic na vaše funkcije PyQGIS. Morda boste želeli dodati tudi vrstico, ki združuje vsako posamezno točko, ki je nastavljena za uporabo kot točko. Čeprav je izbirno, bi to močno izboljšalo uporabniško izkušnjo.

Mimogrede, zgornji primer bi ustvaril poligon, ki bolj ali manj skriva Kolumbijo:

PS: za navdih sem si ogledal kuharsko knjigo PyQGIS, ki jo je pred nekaj dnevi izdal Packt Pub.


Poglej si posnetek: QGIS Python PyQGIS - Calculate Field Values Field Calculator