შიგთავსზე გადასვლა

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 შენი პირველი ინსტრუმენტია.