Príklady pre Python

Vstavaný modl pre programovací jazyk Python umožňuje vykonávanie rôznych úloh. Tu sú niektoré príklady:

Spúšťajú sa CTRL+ALT+P, prípadne vybrať záložku Zásuvný modul a tam vyberiete Konzola jazyka Python.

Príkazy sa spúšťajú buď doriadku alebo do editora kódu:

Napríklad:

a=6
b=5
c=a+b
print(c)
11

Vytvorenie jednoduchej vrstvy cesty:

from qgis.core import (
    QgsVectorLayer,
    QgsField,
    QgsFeature,
    QgsGeometry,
    QgsPointXY,
    QgsProject
)
from qgis.PyQt.QtCore import QVariant
import os

# === 🔧 NASTAVENIA ===
output_path = r"C:\QGISexport\cesta.geojson"  # kam uložiť súbor
crs = "EPSG:5514"  # S-JTSK / Krovak East North

# vytvor pamäťovú čiarovú vrstvu
vl = QgsVectorLayer(f"LineString?crs={crs}", "cesta", "memory")
pr = vl.dataProvider()

# pridaj atribúty
pr.addAttributes([
    QgsField("id", QVariant.Int),
    QgsField("nazov", QVariant.String)
])
vl.updateFields()

# definuj body čiary (v metroch – EPSG:5514)
points = [
    QgsPointXY(-442500, -1174800),
    QgsPointXY(-442000, -1174600),
    QgsPointXY(-441700, -1174300),
    QgsPointXY(-441400, -1174100)
]

# vytvor čiaru
f = QgsFeature()
f.setGeometry(QgsGeometry.fromPolylineXY(points))
f.setAttributes([1, "hlavna_cesta"])
pr.addFeature(f)
vl.updateExtents()

# export do GeoJSON
os.makedirs(os.path.dirname(output_path), exist_ok=True)
QgsVectorFileWriter.writeAsVectorFormat(vl, output_path, "utf-8", vl.crs(), "GeoJSON")

# pridaj do mapy
layer = QgsVectorLayer(output_path, "cesta", "ogr")
QgsProject.instance().addMapLayer(layer)

print("✅ Hotovo! Vrstva 'cesta.geojson' bola vytvorená a pridaná do mapy.")

Najkratšia trasa vybranej zastávky na skutočnej ceste:

from qgis.core import (
    QgsProject,
    QgsProcessingFeedback,
    QgsVectorLayer,
    QgsFeature,
    QgsField,
    QgsGeometry,
    QgsPointXY
)
from qgis.PyQt.QtCore import QVariant
import processing
import os

# === 🔧 NASTAVENIA ===
zastavky_path = r"C:\QGISexport\linka4.geojson"  # súbor s bodmi (musí obsahovať pole 'poradie')
cesty_path = r"C:\QGISexport\cesty.geojson|layername=cesty"  # sieť ciest
output_path = r"C:\QGISexport\Trasa_linka4.shp"  # kam uložiť výslednú trasu
poradie_field = "poradie"  # pole určujúce poradie zastávok

# === 🚀 SPUSTENIE ===
feedback = QgsProcessingFeedback()
project = QgsProject.instance()

# načítanie vrstiev
zastavky = QgsVectorLayer(zastavky_path, "linka4geojson", "ogr")
cesty = QgsVectorLayer(cesty_path, "cesty", "ogr")

if not zastavky.isValid() or not cesty.isValid():
    raise Exception("❌ Skontroluj cesty k vstupným vrstvám – niektorá sa nenačítala.")

# zoradenie zastávok podľa poradia
features = list(zastavky.getFeatures())
features.sort(key=lambda f: f[poradie_field])

# výstupná pamäťová vrstva
crs = cesty.crs().authid()
out_layer = QgsVectorLayer(f"LineString?crs={crs}", "Trasa_linka4", "memory")
prov = out_layer.dataProvider()
prov.addAttributes([
    QgsField("od", QVariant.Int),
    QgsField("do", QVariant.Int),
    QgsField("dlzka_m", QVariant.Double)
])
out_layer.updateFields()

# priečinok pre výstup
os.makedirs(os.path.dirname(output_path), exist_ok=True)

# výpočet najkratšej trasy medzi zastávkami
for i in range(len(features) - 1):
    start = features[i].geometry().asPoint()
    end = features[i + 1].geometry().asPoint()

    params = {
        'INPUT': cesty,
        'START_POINT': f"{start.x()},{start.y()}",
        'END_POINT': f"{end.x()},{end.y()}",
        'STRATEGY': 0,  # najkratšia vzdialenosť
        'DIRECTION_FIELD': '',
        'VALUE_FORWARD': '',
        'VALUE_BACKWARD': '',
        'VALUE_BOTH': '',
        'DEFAULT_DIRECTION': 2,
        'SPEED_FIELD': '',
        'DEFAULT_SPEED': 50,
        'TOLERANCE': 0,
        'OUTPUT': 'TEMPORARY_OUTPUT'
    }

    try:
        result = processing.run('native:shortestpathpointtopoint', params, feedback=feedback)
        path_layer = result['OUTPUT']   # ✅ už je QgsVectorLayer, netreba znovu otvárať

        for feat in path_layer.getFeatures():
            geom = feat.geometry()
            new_feat = QgsFeature()
            new_feat.setGeometry(geom)
            new_feat.setAttributes([
                features[i][poradie_field],
                features[i + 1][poradie_field],
                geom.length()
            ])
            prov.addFeature(new_feat)

        print(f"✅ Úsek {features[i][poradie_field]} → {features[i + 1][poradie_field]} hotový.")
    except Exception as e:
        print(f"⚠️ Chyba medzi {features[i][poradie_field]} a {features[i + 1][poradie_field]}: {e}")

# uloženie výsledku
out_layer.updateExtents()
QgsVectorFileWriter.writeAsVectorFormat(out_layer, output_path, "utf-8", out_layer.crs(), "ESRI Shapefile")

# pridanie do projektu
final_layer = QgsVectorLayer(output_path, "Trasa_linka4", "ogr")
QgsProject.instance().addMapLayer(final_layer)

print("✅ Hotovo! Celá trasa linky bola vytvorená a pridaná do mapy.")

Comments

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *