from qgis.core import ( QgsVectorLayer, QgsFeature, QgsField, QgsGeometry, QgsProject, QgsVectorFileWriter) from qgis.utils import iface Importy - měli by být implicitně v qgis konzole identifikujeme vstupní vrstvu a její crs vrstva = QgsProject.instance().mapLayersByName("Okresy")[0] crs = vrstva.crs() nastavíme výstup centroid_layer = QgsVectorLayer(f"Point?crs={crs.authid()}", "County Centroids", "memory") f”” - vkládáme proměnnou crs.authid() tedy epsg kód, vrstva “County Centroids” v paměti provider = centroid_layer.dataProvider() její datový zdroj provider.addAttributes([ QgsField("county_name", type=QVariant.String), QgsField("avg_dist", type=QVariant.Double) ]) centroid_layer.updateFields() vnořené cykly - procházíme polygony okresů a bereme si geometrii a název for feature in vrstva.getFeatures(): current_geometry = feature.geometry() centroid = current_geometry.centroid() county_name = feature["NAZ_LAU1"] zaznamenáme vzdálenosti do okresů, které se liší a dotýkají distances = [] for neighbor in vrstva.getFeatures(): if neighbor.id() != feature.id() and current_geometry.touches(neighbor.geometry()): distances.append(centroid.distance(neighbor.geometry().centroid())) avg_distance = sum(distances) / len(distances) if distances else 0 vložíme výsledek do datového zdroje výstupní vrstvy centroid_feature = QgsFeature() centroid_feature.setGeometry(centroid) centroid_feature.setAttributes([county_name, avg_distance]) provider.addFeature(centroid_feature) výstup do shapefile, r”” pro raw string aby neidentifikoval esc sekvence output_path = r"C:\path\to\output\directory\centroids.shp" QgsVectorFileWriter.writeAsVectorFormat(centroid_layer, output_path, "utf-8", crs, "ESRI Shapefile") přidáme vzniklý shapefile iface.addVectorLayer(output_path, "County Centroids", "ogr") Upravte kód aby místo průměrné vzdálenosti centroidů u centroidu napsal jméno souseda s nejdelší hranicí