📝 დავალება 2¶
საჭირო თემები: ატრიბუტული მონიშვნები, წაშლა, კოორდინატების კონვერტაცია, ვექტორის გეოდამუშავება
მონაცემები: sample_data/practice/task_02/ (nakveTi1, frame, Pol_line)
ნაწილი 1 (საქაღალდე: part_1)¶
nakveTi1-დან მონიშნეთ ნაკვეთი საკადასტრო კოდით "350445037" და გაიტანეთshp-ში.nakveTi1-დან წაშალეთ ობიექტები, სადაცOBJECTIDმეტია 2897895-ზე და ნაკლებია 3009460-ზე.nakveTi1-ის ის ობიექტები, რომლებიცframeშრეშია მოქცეული, მოჭერით და შეინახეთclipped_parcels.shpსახელითshpსაქაღალდეში.
ამოხსნა 1.1
layer = QgsVectorLayer(base + '/shp/nakveTi1.shp', 'nakveTi1', 'ogr')
# სვეტის სახელი შეამოწმეთ: [f.name() for f in layer.fields()]
layer.selectByExpression('"CADASTRAL_CODE" = \'350445037\'')
processing.run('native:saveselectedfeatures',
{'INPUT': layer, 'OUTPUT': base + '/shp/parcel_350445037.shp'})
layer.removeSelection()
ამოხსნა 1.2
ამოხსნა 1.3
ნაწილი 2 (საქაღალდე: part_2)¶
- შექმენით წერტილოვანი შრე
points(EPSG:4326) და შეინახეთshp-ში. - გადაიყვანეთ კოორდინატები ათწილად გრადუსებში და დაბეჭდეთ კონსოლში:
- 42°17'2.95"N, 43°16'55.79"E
- 42°17'26.48"N, 43°16'46.89"E
Pol_lineშრეში გამოთვალეთ სიგრძე ორ სხვადასხვა სვეტში:WGS_Length(ელიფსოიდური) დაUTM_Length(UTM ზონის პროექციაში).
ამოხსნა 2.2
ამოხსნა 2.3
from qgis.PyQt.QtCore import QVariant
line = QgsVectorLayer(base + '/shp/Pol_line.shp', 'Pol_line', 'ogr')
line.dataProvider().addAttributes([QgsField('WGS_Length', QVariant.Double),
QgsField('UTM_Length', QVariant.Double)])
line.updateFields()
# ელიფსოიდური სიგრძე
d = QgsDistanceArea()
d.setSourceCrs(line.crs(), QgsProject.instance().transformContext())
d.setEllipsoid('WGS84')
# UTM ზონა: 43°E -> 38N -> EPSG:32638
to_utm = QgsCoordinateTransform(line.crs(), QgsCoordinateReferenceSystem('EPSG:32638'),
QgsProject.instance())
line.startEditing()
for f in line.getFeatures():
g = f.geometry()
f['WGS_Length'] = d.measureLength(g)
g_utm = QgsGeometry(g)
g_utm.transform(to_utm)
f['UTM_Length'] = g_utm.length()
line.updateFeature(f)
line.commitChanges()