შრის შექმნა(ESRI Shapefile)¶
ოფიციალური დოკუმენტაცია
Class: QgsWkbTypes
GDAL OGR
საკოორდინატო სისტემის შესარჩევად: Coordinate Systems Worldwide
რა არის QgsField,QgsFields() , QVariant, QgsFeature() , iface და ა.შ დეტალებს
< < < განმარტებების განყოფილებაში ნახავ
წერტილოვანი შრე¶
ზოგიერთი განმარტება
- გეომეტრია დაკონკრეტებულია აქვე რადგან საჭიროა writer - ში მისი გათვალისწინება, QgsWkbTypes.Point ის ნაცვლად შესაძლებელია Line, Polygon, Unknown, Null - ის გამოყენება.
✅ ძირითადი გეომეტრიული ტიპები PyQGIS-ში:¶
| ტიპი | შრის ტიპი (string სახით) | მაგალითი კოდში |
|---|---|---|
| წერტილი | "Point" |
QgsGeometry.fromPointXY(QgsPointXY(x, y)) |
| მრავალწერტილი | "MultiPoint" |
QgsGeometry.fromMultiPointXY([QgsPointXY(x1, y1), QgsPointXY(x2, y2)]) |
| ხაზი | "LineString" |
QgsGeometry.fromPolylineXY([QgsPointXY(x1, y1), QgsPointXY(x2, y2)]) |
| მრავალხაზი | "MultiLineString" |
QgsGeometry.fromMultiPolylineXY([[QgsPointXY(x1, y1), QgsPointXY(x2, y2)], [QgsPointXY(x3, y3), QgsPointXY(x4, y4)]]) |
| პოლიგონი | "Polygon" |
QgsGeometry.fromPolygonXY([[QgsPointXY(x1, y1), QgsPointXY(x2, y2), QgsPointXY(x3, y3), QgsPointXY(x1, y1)]]) |
| მრავალპოლიგონი | "MultiPolygon" |
QgsGeometry.fromMultiPolygonXY([[[QgsPointXY(x1, y1), QgsPointXY(x2, y2), QgsPointXY(x3, y3), QgsPointXY(x1, y1)]]]) |
- shapefile_home ცვლადია და თემატური სახელწოდებით გადის სკრიპტში
- ატრიბუტული ცხრილის სვეტებს შექმნის QgsFields()
- File Handling - "r" - Read - Default value. Opens a file for reading, error if the file does not exist
- writer კრებს ინფორმაციას, უნიკოდირებას, სვეტებს, გეომეტრიას, საკოორდინატო სისტემას და აერიანებს მას კონტეინერად.
- ახალი შრე შეიქმნება და შეინახება 'ESRI Shapefile' დრაივერის დახმარებით.
- არგუმენტებში აუცილებელია გადავცეთ უნიკოდირება, პროექცია, დრაივერი და ა.შ
- ფუნქცია დააბრუნებს ობიექტს რომელიც განსაზღვრულია როგორც writer კოდში, რომელსაც შეუძლია დაამატოს და ჩაწეროს ახალი ობიექტები შრეში.
გატესტე კოდი პირდაპირ QGIS - ის Python - ის კონსოლში, რომლის გამოძახება შეგიძლია სწრაფი ღილაკებით
Left Ctrl+Left Alt+P
კოდის დაკომენტარებაში ან პირიქით დაგეხმარება ეს სწრაფი ღილაკები
Left Ctrl+Left Shift+:
შესაძლებელია აქვე ჩავწეროთ მონაცემი შრეში
del(writer)-ის ადგილი
ობიექტის დამატების კოდი უნდა მოვათავსოთ writer-ის შექმნის შემდეგ და del(writer)-მდე. del(writer) ხურავს ფაილს და მონაცემებს დისკზე წერს, ამიტომ მის შემდეგ writer.addFeature(fc) უკვე აღარ იმუშავებს.
სრული თანმიმდევრობა ერთ სკრიპტში:
შრის დამატება QGIS პროექტის გარემოში¶
| shapefile_point.py | |
|---|---|
ახალი წერტილოვანი ვექტორული შრის შექმნა, წყვილი წერტილებით და დამატება QGIS პროექტის გარემოში.
XY.index(i) თუ enumerate?
ზემოთ ციკლში ID-ს XY.index(i) გვიბრუნებს. ის სიაში ეძებს ელემენტს და აბრუნებს მის ადგილს. ეს მუშაობს, მაგრამ თუ სიაში ორი ერთნაირი წერტილია, ორივეს ერთი და იგივე ID მიენიჭება, ამას გარდა ყოველ ჯერზე სიას თავიდან ეძებს.
მარტივი ალტერნატივაა enumerate, რომელიც თვითონ გვაძლევს ნომერს და ელემენტს:
for n, (x, y) in enumerate(XY, start=1):
fc = QgsFeature()
fc.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(x, y)))
fc.setAttributes([n, 'lake']) # n = 1, 2, 3 ...
writer.addFeature(fc)
start=1 ნიშნავს, რომ დათვლა 1-დან დაიწყება (ნაგულისხმევად 0-დანაა).
შრის შექმნა ფუნქციით (გაუმჯობესებული ვერსია)¶
ზემოთ მოცემული სკრიპტები ყოველ ჯერზე ხელით გვაიძულებს გეომეტრიის, ველების და გზის გადაწერას. ქვემოთ მოცემული ფუნქცია:
- მუშაობს ნებისმიერ გეომეტრიაზე (
Point,LineString,Polygon,Multi...) - მუშაობს Shapefile-ზეც და GeoPackage-ზეც (გაფართოების მიხედვით ირჩევს დრაივერს)
- ამოწმებს, არსებობს თუ არა ფაილი და საქაღალდე, ხოლო შეცდომისას გვიბრუნებს გასაგებ შეტყობინებას
- ველებს იღებს მარტივი სიიდან და ყველა ობიექტს ერთად ამატებს
- ბოლოს ამატებს შრეს პროექტში
გამოყენების მაგალითები¶
წერტილოვანი შრე მონაცემებით
ცარიელი პოლიგონური შრე GeoPackage-ში (მონაცემებს მერე ხელით დავხატავთ)
| example_polygon_gpkg.py | |
|---|---|
რატომ GeoPackage?
Shapefile-ს აქვს შეზღუდვები: ველის სახელი მაქსიმუმ 10 სიმბოლო, ტექსტი 254 სიმბოლომდე, ერთი შრე 3–7 ფაილისგან შედგება. .gpkg ამ პრობლემებს არ შეიცავს, ამიტომ ახალი პროექტებისთვის ის უკეთესი არჩევანია.
QVariant-ის შესახებ
QGIS 3.38+ ვერსიებიდან QVariant.Int და მსგავსი ტიპები ჩანაცვლებულია QMetaType.Type.Int ტიპით. ძველი ვარიანტი ჯერ კიდევ მუშაობს, მაგრამ შესაძლოა გაფრთხილება გამოიტანოს.
წერტილოვანი შრის შექმნა CSV ფაილიდან¶
ხშირად კოორდინატები ცხრილშია (მაგ. GPS-ით აღებული წერტილები). ქვემოთ მოცემული სკრიპტი კითხულობს CSV-ს და ზემოთ აღწერილ create_layer() ფუნქციას იყენებს შრის შესაქმნელად.
CSV ფაილის მაგალითი (points.csv, პირველი სტრიქონი სათაურია):
ID,Name,X,Y
1,Ტბა 1,356671.0049,4679923.0988
2,Ტბა 2,356672.2015,4679929.5719
3,წყარო,356676.9835,4679938.1332
რას უნდა მიექცეს ყურადღება
- კოორდინატების სვეტების სახელები (
X,Y) და EPSG კოდი (32638) უნდა ემთხვეოდეს თქვენს მონაცემებს. გეოგრაფიულ კოორდინატებზე (გრძედი/განედი) გამოიყენეთ4326. - თუ CSV წერტილით-მძიმით (
;) არის გამოყოფილი,DictReader-ს დაამატეთdelimiter=';'. - ფუნქცია
create_layer()უნდა იყოს უკვე გაშვებული იმავე კონსოლში.
სწრაფი ალტერნატივა
თუ შრის ფაილად შენახვა არ გვჭირდება, QGIS-ს შეუძლია CSV პირდაპირ წერტილებად გახსნას:
ველების დამატება არსებულ შრეში¶
არსებულ შრეში ახალი სვეტების დამატება და მათი გამოთვლა იხილეთ გვერდზე ატრიბუტული ცხრილის გამოთვლები.
ℹ️ განმარტებები – PyQGIS კომპონენტები¶
ამ განყოფილებაში იხილავ ხშირად გამოყენებული ობიექტებისა და კლასების მოკლე ახსნებს, რომლებიც საჭიროა PyQGIS სკრიპტების წერისას.
❗ ეს კომპონენტები ხშირად გვხვდება შრის შექმნის, ატრიბუტების ან გეომეტრიასთან მუშაობის დროს.
🔹 QgsField¶
გამოიყენება შრის ველის (ატრიბუტის სვეტის) განსაზღვრისთვის. მოიცავს ველის სახელსა და ტიპს.
მაგალითი:
🔹 QgsFields¶
წარმოადგენს ველების კოლექციას (ანუ რამდენიმე QgsField ერთად). საჭიროა, როცა უნდა გადმოაწოდო ყველა ველი ერთად, მაგალითად შრის შექმნისას.
მაგალითი:
🔹 QVariant¶
Qt-ის მონაცემთა ტიპების კლასი, რომელსაც QGIS იყენებს ატრიბუტის მნიშვნელობების ტიპების განსასაზღვრად. (მაგ. String, Int, Double და სხვ.)
მაგალითები:
QVariant.String– ტექსტური ველიQVariant.Int– მთელი რიცხვიQVariant.Double– ათწილადი რიცხვი
🔹 QgsFeature¶
წარმოადგენს ერთ ობიექტს (წერტილს, ხაზს ან პოლიგონს) თავისი გეომეტრიითა და ატრიბუტებით.
მაგალითი:
feature = QgsFeature()
feature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(44.8, 41.7)))
feature.setAttributes(["Tbilisi"])
🔹 iface¶
iface (Interface) არის QGIS-ის მთავარი ობიექტი, რომელიც გამოიყენება QGIS-ის ინტერფეისთან (Layers Panel, Map Canvas და სხვ.) ურთიერთობისთვის.
მაგალითი:
iface.addVectorLayer("/path/to/file.shp", "My Layer", "ogr")
# ამატებს ფენას პირდაპირ QGIS-ის პროექტში
⚠️ iface ხელმისაწვდომია მხოლოდ QGIS-ის Python Console-ში. სტანდარტულ Python სკრიპტში ის არ მუშაობს.
🔹 დამატებითი სასარგებლო კლასები¶
| კლასი | აღწერა |
|---|---|
QgsGeometry |
გეომეტრიის ობიექტი (წერტილი, ხაზი, პოლიგონი და სხვ.) |
QgsPointXY |
2D წერტილის ობიექტი – x და y კოორდინატებით |
QgsVectorLayer |
ვექტორული შრის ობიექტი |
QgsProject |
QGIS პროექტი – იძლევა შრეების დამატებისა და მართვის საშუალებას |
QgsCoordinateReferenceSystem |
საკოორდინატო სისტემის განსაზღვრა EPSG კოდის მიხედვით |