📝 დავალება 1¶
საჭირო თემები: შრის შექმნა, წაშლა, გაანგარიშებები ცხრილში, ვექტორის გეოდამუშავება
მონაცემები: sample_data/practice/task_01/ (nakveTi1, nakveti_poi)
აქ და შემდეგ ამოხსნებში გამოიყენება ზოგადი დამხმარე კოდი.
ნაწილი 1 (საქაღალდე: part_1)¶
- შექმენით ხაზოვანი შრე
reg_line, CRS EPSG:32637, და შეინახეთshpსაქაღალდეში. - ჩატვირთეთ
nakveTi1და წაშალეთ სვეტებიBLOCK,WEB_STATUS,ZONE_ID. - გამოთვალეთ
nakveTi1-ის ფართობი და პერიმეტრი. - იპოვეთ დუბლირებული ნაკვეთები და წაშალეთ
nakveTi1-დან.
ამოხსნა 1.1
ამოხსნა 1.2
ამოხსნა 1.3
from qgis.PyQt.QtCore import QVariant
pr = layer.dataProvider()
pr.addAttributes([QgsField('area_m2', QVariant.Double),
QgsField('perim_m', QVariant.Double)])
layer.updateFields()
layer.startEditing()
for f in layer.getFeatures():
g = f.geometry()
f['area_m2'] = g.area()
f['perim_m'] = g.length()
layer.updateFeature(f)
layer.commitChanges()
ფართობი გამოითვლება შრის CRS-ში. სწორი შედეგისთვის CRS უნდა იყოს პროექციული (მეტრებში).
ამოხსნა 1.4
ნაწილი 2 (საქაღალდე: part_2)¶
- შექმენით წერტილოვანი შრე
points, CRS EPSG:4326, და შეინახეთshpსაქაღალდეში. - ჩატვირთეთ
nakveti_poiდა წაშალეთ სვეტებიZONE_ID,DANISHNULE. - გამოთვალეთ
nakveti_poi-ს XY კოორდინატები. - ჩატვირთეთ
nakveTi1, იპოვეთ დუბლირებული ნაკვეთები და წაშალეთ.
ამოხსნა 2.1 – 2.3
layer = QgsVectorLayer('Point?crs=EPSG:4326', 'points', 'memory')
save_shp(layer, base + '/shp/points.shp')
poi = QgsVectorLayer(base + '/shp/nakveti_poi.shp', 'nakveti_poi', 'ogr')
idx = [poi.fields().lookupField(n) for n in ('ZONE_ID', 'DANISHNULE')]
poi.dataProvider().deleteAttributes([i for i in idx if i != -1])
poi.updateFields()
res = processing.run('native:addxyfields', {
'INPUT': poi, 'CRS': poi.crs(), 'PREFIX': '',
'OUTPUT': base + '/shp/nakveti_poi_xy.shp'})
ამოხსნა 2.4
იგივეა, რაც ამოხსნა 1.4 (native:deleteduplicategeometries).