QgsWkbTypes PyQGIS-ში¶
QgsWkbTypes არის PyQGIS-ის კლასი, რომელიც განსაზღვრავს გეომეტრიის ტიპებს — ანუ პასუხობს კითხვაზე: "ეს შრე წერტილებისგანაა, ხაზებისგან, თუ პოლიგონებისგან?"
🔑 ძირითადი იდეა¶
QgsWkbTypes შეიცავს კონსტანტებს (enumerations), რომლებიც აღწერს გეომეტრიის ტიპს WKB (Well-Known Binary) ფორმატის მიხედვით.
ეს კლასი გამოიყენება:
- ახალი შრის ან ფაილის შექმნისას (
QgsVectorFileWriter,QgsMemoryLayer) - გეომეტრიის ტიპის შემოწმებისას
- ფეიჩერის გეომეტრიის განსაზღვრისას
📐 ძირითადი გეომეტრიის ტიპები¶
| კონსტანტი | მნიშვნელობა | გამოყენება |
|---|---|---|
QgsWkbTypes.Point |
წერტილი | სახლი, სადგური, სხვა ობიექტი |
QgsWkbTypes.LineString |
ხაზი | გზა, მდინარე, მილსადენი |
QgsWkbTypes.Polygon |
პოლიგონი | მიწის ნაკვეთი, ტბა, შენობა |
QgsWkbTypes.MultiPoint |
მრავალი წერტილი | ერთ feature-ში მრავალი წერტილი |
QgsWkbTypes.MultiLineString |
მრავალი ხაზი | გზების ქსელი |
QgsWkbTypes.MultiPolygon |
მრავალი პოლიგონი | კუნძულები, ანკლავები |
QgsWkbTypes.NoGeometry |
გეომეტრია არ არის | მხოლოდ ატრიბუტების ცხრილი |
QgsWkbTypes.Unknown |
უცნობი ტიპი | განუსაზღვრელი |
▶️ გამოყენება — შრის შექმნისას¶
from qgis.core import (
QgsVectorFileWriter,
QgsFields,
QgsField,
QgsWkbTypes,
QgsCoordinateReferenceSystem
)
from PyQt5.QtCore import QVariant
fields = QgsFields()
fields.append(QgsField('ID', QVariant.Int))
fields.append(QgsField('Name', QVariant.String))
# Point შრის შექმნა
writer = QgsVectorFileWriter(
r'C:\GIS\points.shp',
'UTF-8',
fields,
QgsWkbTypes.Point, # ← აქ
QgsCoordinateReferenceSystem('EPSG:32638'),
'ESRI Shapefile'
)
del writer
📌 QgsWkbTypes.Point — ეუბნება writer-ს, რომ ფაილში მხოლოდ წერტილები ჩაიწერება.
🔍 გეომეტრიის ტიპის შემოწმება¶
layer = QgsVectorLayer(r'C:\GIS\roads.shp', 'Roads', 'ogr')
geom_type = layer.wkbType()
print(geom_type) # → 2 (LineString)
# ადამიანის-წასაკითხი სახელი
type_name = QgsWkbTypes.displayString(geom_type)
print(type_name) # → "LineString"
🛠 პრაქტიკული მეთოდები¶
QgsWkbTypes.geometryType(wkb_type)¶
WKB ტიპს გარდაქმნის ზოგად კატეგორიად:
from qgis.core import QgsWkbTypes
wkb = QgsWkbTypes.MultiPolygon
# კატეგორია
category = QgsWkbTypes.geometryType(wkb)
# → QgsWkbTypes.PolygonGeometry
# სახელი
print(QgsWkbTypes.displayString(wkb))
# → "MultiPolygon"
გეომეტრიის კატეგორიები:
| კატეგორია | WKB ტიპები |
|---|---|
PointGeometry |
Point, MultiPoint |
LineGeometry |
LineString, MultiLineString |
PolygonGeometry |
Polygon, MultiPolygon |
NullGeometry |
NoGeometry |
QgsWkbTypes.hasZ(wkb_type) და QgsWkbTypes.hasM(wkb_type)¶
შეამოწმებს, ჰქვია თუ არა Z (სიმაღლე) ან M (საზომი) კოორდინატი:
# PointZ — 3D წერტილი
wkb_3d = QgsWkbTypes.PointZ
print(QgsWkbTypes.hasZ(wkb_3d)) # → True
print(QgsWkbTypes.hasM(wkb_3d)) # → False
QgsWkbTypes.isSingleType() და QgsWkbTypes.isMultiType()¶
print(QgsWkbTypes.isSingleType(QgsWkbTypes.Point)) # → True
print(QgsWkbTypes.isMultiType(QgsWkbTypes.MultiPolygon)) # → True
🌐 Z და M ტიპები (3D და საზომი)¶
| ტიპი | აღწერა |
|---|---|
QgsWkbTypes.PointZ |
3D წერტილი (X, Y, Z) |
QgsWkbTypes.PointM |
საზომი წერტილი (X, Y, M) |
QgsWkbTypes.PointZM |
3D + საზომი (X, Y, Z, M) |
QgsWkbTypes.LineStringZ |
3D ხაზი |
QgsWkbTypes.PolygonZ |
3D პოლიგონი |
# 3D Point შრის შექმნა
writer = QgsVectorFileWriter(
r'C:\GIS\points_3d.shp',
'UTF-8',
fields,
QgsWkbTypes.PointZ, # ← Z კოორდინატი
QgsCoordinateReferenceSystem('EPSG:32638'),
'ESRI Shapefile'
)
del writer
📊 WKB რიცხვითი მნიშვნელობები¶
QgsWkbTypes კონსტანტები რეალურად მთელი რიცხვებია (OGC WKB სტანდარტი):
print(int(QgsWkbTypes.Point)) # → 1
print(int(QgsWkbTypes.LineString)) # → 2
print(int(QgsWkbTypes.Polygon)) # → 3
print(int(QgsWkbTypes.MultiPoint)) # → 4
print(int(QgsWkbTypes.PointZ)) # → 1001
print(int(QgsWkbTypes.PointM)) # → 2001
print(int(QgsWkbTypes.PointZM)) # → 3001
📌 შეჯამება¶
QgsWkbTypesგანსაზღვრავს გეომეტრიის ტიპს PyQGIS-ში- გამოიყენება
QgsVectorFileWriter,QgsMemoryLayerდა სხვა კლასებში - მხარს უჭერს 2D, 3D (Z) და M ტიპებს
displayString()გეომეტრიის სახელს სტრიქონად აბრუნებსgeometryType()ზოგად კატეგორიად გარდაქმნის
👉 ყოველ ჯერზე, როდესაც ახალ შრეს ქმნი ან გეომეტრიის ტიპს ამოწმებ — QgsWkbTypes შენი პირველი ინსტრუმენტია.