თემა IV¶
შრის ატრიბუტული ცხრილიდან სვეტის წაშლა შრიდან ობიექტის წაშლა დუბლირებული გეომეტრიების წაშლა დუბლირებული ცხრილური ჩანაწერების წაშლა
შესავალი¶
Tip
რეკომენდაცია: სანამდე რაიმე წაშლის ოპერაციას გაუშვებთ შეინახეთ სარეზერვო ასლი (shapefile/GeoPackage ან სხვა).
ობიექტების ინდექსით წაშლა შრიდან¶
ამ მეთოდით პირდაპირ ვკითხულობთ QgsVectorDataProvider შესაძლებლობებს და ვშლით deleteFeatures() ID-ების მასივით.
from qgis.core import QgsProject, QgsVectorDataProvider
layers = QgsProject.instance().mapLayersByName('proeqtshi arsebuli shris saxelwodeba')
if not layers:
raise ValueError('Layer "proeqtshi arsebuli shris saxelwodeba" not found')
layer = layers[0]
delf = layer.dataProvider().capabilities()
if delf & QgsVectorDataProvider.DeleteFeatures:
# წაშლა ინდექსებით
to_delete = [0, 1, 2, 3, 4]
res = layer.dataProvider().deleteFeatures(to_delete)
layer.triggerRepaint()
else:
print('წაშლა შეუძლებელია')
¶
from qgis.core import QgsProject, QgsVectorDataProvider
layers = QgsProject.instance().mapLayersByName('proeqtshi arsebuli shris saxelwodeba')
if not layers:
raise ValueError('Layer "proeqtshi arsebuli shris saxelwodeba" not found')
layer = layers[0]
delf = layer.dataProvider().capabilities()
if delf & QgsVectorDataProvider.DeleteFeatures:
# წაშლა ინდექსებით
to_delete = [0, 1, 2, 3, 4]
res = layer.dataProvider().deleteFeatures(to_delete)
layer.triggerRepaint()
else:
print('წაშლა შეუძლებელია')
რიცხვითი ატრიბუტების მქონე ობიექტების წაშლა შრიდან¶
ვარიანტი 1
layers = QgsProject.instance().mapLayersByName('sadguri')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['fid'] > 16:
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
ვარიანტი 2
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['OBJECTID_1'] > 19:
dfeats.append(feat.id())
elif feat['OBJECTID_1'] < 17:
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
ვარიანტი 3
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['OBJECTID_1'] > 19 or feat['OBJECTID_1'] < 17:
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
ვარიანტი 4
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['OBJECTID_1'] > 6 and feat['OBJECTID_1'] < 10:
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
ვრცელი მაგალითი (ვარიანტი 1)¶
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
if not (delf & QgsVectorDataProvider.DeleteFeatures):
raise RuntimeError('DeleteFeatures capability not available')
ids_to_delete = []
for feat in layer.getFeatures():
# მაგალითად წავშალოთ ები, სადაც OBJECTID_1 > 19
if feat['OBJECTID_1'] > 19:
ids_to_delete.append(feat.id())
layer.dataProvider().deleteFeatures(ids_to_delete)
layer.triggerRepaint()
სხვა სინტაქსური ვარიანტები¶
- გამოიყენეთ ლოგიკური
or/andმდგომარეობები (ვარიანტი 2 და 3). - გამოიყენეთ შუალედური შემოწმება
if 6 < feat['OBJECTID_1'] < 10:(ვარიანტი 4).
ატრიბუტებით (ტექსტური) წაშლა¶
ტექსტური ფილტრის მაგალითი — ვიშორებთ ობიექტებს კონკრეტული ენის/სახელის მიხედვით.
ვარიანტი 1
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['DISTR_ENG'] == "Tsalka":
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
ვარიანტი 2
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
delf = layer.dataProvider().capabilities()
feats = layer.getFeatures()
dfeats = []
if delf & QgsVectorDataProvider.DeleteFeatures:
for feat in feats:
if feat['DISTR_ENG'] != "Tsalka" or feat['MUNICIPAL'] == "Gurjaani":
dfeats.append(feat.id())
df = layer.dataProvider().deleteFeatures(dfeats)
layer.triggerRepaint()
სვეტების წაშლა ატრიბუტულ ცხრილში (processing)¶
processing მოდულის native:deletecolumn - ით შესაძლებელია CSV/Shapefile/GeoPackage სვეტების წაშლა და ახალ ფაილში ექსპორტი.
import processing
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName('Georgia_municipalities')[0]
output = r'C:\Users\Public\Documents\GK\PyQGIS\shp\tema_4\Georgia_municipalities2.shp'
processing.run(
'native:deletecolumn',
{
'INPUT': layer,
'COLUMN': ['SHAPE_Leng'],
'OUTPUT': output
}
)
შენიშვნა:
COLUMNარის სია იმ სვეტების სახელებისა, რომლებსაც გსურთ მოაშოროთ.
დუბლირებული ატრიბუტების წაშლა¶
შრის ცხრილში მსგავსი ელემენტების პოვნა და დაფილტვრა.
native:removeduplicatesbyattribute.
processing.run(
'native:removeduplicatesbyattribute',
{
'INPUT': layer,
'FIELDS': ['MUNICIPAL'],
'OUTPUT': r'C:\Users\Public\Documents\GK\PyQGIS\shp\test\Georgia_municipalities_unique.shp',
'DUPLICATES': r'C:\Users\Public\Documents\GK\PyQGIS\shp\test\Georgia_municipalities_duplicates.shp'
}
)
დუბლირებული გეომეტრიების მოცილება¶
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
output = r"C:\Users\Public\Documents\GK\PyQGIS\shp\tema_4\municipalities_WD.shp'
proces sing.run("native:deleteduplicategeometries", {'INPUT':layer,'OUTPUT':"output})
¶
layers = QgsProject.instance().mapLayersByName('Georgia_municipalities')
layer = layers[0]
output = r"C:\Users\Public\Documents\GK\PyQGIS\shp\tema_4\municipalities_WD.shp'
proces sing.run("native:deleteduplicategeometries", {'INPUT':layer,'OUTPUT':"output})