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.")
Pridaj komentár