# ============================================================================= # Vyber vrstvu s daným jménem z mapy # ============================================================================= layer_name = 'NazevVrstvy' layers = QgsProject.instance().mapLayersByName(layer_name) if layers: layer = layers[0] else: print(f"Vrstva s názvem {layer_name} nebyla nalezena.") # ============================================================================= # Otevři shapefile a přidej ho do mapy (předpokládaná cesta na Windows) # ============================================================================= cesta_k_shapefile = r'C:\cesta\k\tvurimu\shapefile.shp' shapefile_vrstva = QgsVectorLayer(cesta_k_shapefile, 'Shapefile Vrstva', 'ogr') if not shapefile_vrstva.isValid(): print("Vrstva není platná!") else: QgsProject.instance().addMapLayer(shapefile_vrstva) # ============================================================================= # Vytvoř vrstvu v paměti s bodovou geometrií a 'id' atributem # ============================================================================= vrstva_pamet = QgsVectorLayer("Point?crs=EPSG:4326", "BodovaVrstva", "memory") poskytovatel = vrstva_pamet.dataProvider() # Přidej 'id' atribut poskytovatel.addAttributes([QgsField("id", QVariant.Int)]) vrstva_pamet.updateFields() # Přidej vrstvu do projektu QgsProject.instance().addMapLayer(vrstva_pamet) # ============================================================================= # Přidej vypočítaný (například plocha envelope) sloupec do vybrané vrstvy # ============================================================================= layer.startEditing() layer.dataProvider().addAttributes([QgsField("plocha_envelope", QVariant.Double)]) layer.updateFields() index = layer.fields().indexFromName('plocha_envelope') for feature in layer.getFeatures(): geom = feature.geometry() envelope = geom.boundingBox() area = envelope.width() * envelope.height() layer.changeAttributeValue(feature.id(), index, area) layer.commitChanges() # ============================================================================= # Procházej všechny geometrie ve vrstvě # ============================================================================= for feature in layer.getFeatures(): geom = feature.geometry() # Zpracuj geometrii podle potřeby print(geom.asWkt()) # ============================================================================= # Udělej výběr ve vrstvě výrazem # ============================================================================= vyraz = '"atribut" > 100' layer.selectByExpression(vyraz) # ============================================================================= # Udělej výběr ve vrstvě obdélníkem (rectangle) # ============================================================================= xmin = 10 ymin = 10 xmax = 20 ymax = 20 obdelnik = QgsRectangle(xmin, ymin, xmax, ymax) layer.selectByRect(obdelnik, QgsVectorLayer.SetSelection) # ============================================================================= # Udělej výběr pomocí geometrie z jiné vrstvy # ============================================================================= nazev_druhe_vrstvy = 'DruhaVrstva' druhe_vrstvy = QgsProject.instance().mapLayersByName(nazev_druhe_vrstvy) if druhe_vrstvy: druha_vrstva = druhe_vrstvy[0] # Sluč všechny geometrie z druhé vrstvy geom = None for feature in druha_vrstva.getFeatures(): if geom is None: geom = feature.geometry() else: geom = geom.combine(feature.geometry()) if geom: # Vyber prvky v 'layer', které protínají geometrii 'geom' layer.selectByGeometry(geom, QgsVectorLayer.SetSelection) else: print("Geometrie v druhé vrstvě není k dispozici.") else: print(f"Vrstva s názvem {nazev_druhe_vrstvy} nebyla nalezena.") # ============================================================================= # Procházej geometrie ve výběru # ============================================================================= vybrane_prvky = layer.selectedFeatures() for feature in vybrane_prvky: geom = feature.geometry() # Zpracuj geometrii podle potřeby print(geom.asWkt())