Wenn Sie CSV-Dateien von der Python-Konsole in QGIS neu projizieren möchten, können Sie das folgende Skript verwenden. Alles, was Sie ändern müssten, sind die drei Pfade, die in den Kommentaren erwähnt werden.
Im Wesentlichen importiert das Skript Ihre CSV-Dateien als Shapefiles in QGIS (vorausgesetzt, Ihre geometrischen Felder heißen X
und Y
). Anschließend werden die Algorithmen qgis:reprojectlayer
und qgis:fieldcalculator
aus der Processing Toolbox verwendet , um die Felder X
und Y
mit den neuen Koordinaten neu zu projizieren und zu aktualisieren . Anschließend werden diese in einem Ordner gespeichert und in einem von Ihnen angegebenen Pfad in CSV-Dateien konvertiert. Am Ende haben Sie also Shapefiles und CSV-Dateien in separaten Ordnern aktualisiert.
import glob, os, processing
path_to_csv = "C:/Users/You/Desktop/Testing//" # Change path to the directory of your csv files
shape_result = "C:/Users/You/Desktop/Testing/Shapefile results//" # Change path to where you want the shapefiles saved
os.chdir(path_to_csv) # Sets current directory to path of csv files
for fname in glob.glob("*.csv"): # Finds each .csv file and applies following actions
uri = "file:///" + path_to_csv + fname + "?delimiter=%s&crs=epsg:4326&xField=%s&yField=%s" % (",", "x", "y")
name = fname.replace('.csv', '')
lyr = QgsVectorLayer(uri, name, 'delimitedtext')
QgsMapLayerRegistry.instance().addMapLayer(lyr) # Imports csv files to QGIS canvas (assuming 'X' and 'Y' fields exist)
crs = 'EPSG:32633' # Set crs
shapefiles = QgsMapLayerRegistry.instance().mapLayers().values() # Identifies loaded layers before transforming and updating 'X' and 'Y' fields
for shapes in shapefiles:
outputs_0 = processing.runalg("qgis:reprojectlayer", shapes, crs, None)
outputs_1 = processing.runalg("qgis:fieldcalculator", outputs_0['OUTPUT'], 'X', 0, 10, 10, False, '$x', None)
outputs_2 = processing.runalg("qgis:fieldcalculator", outputs_1['OUTPUT_LAYER'], 'Y', 0, 10, 10, False, '$y', shape_result + shapes.name())
os.chdir(shape_result) # Sets current directory to path of new shapefiles
for layer in glob.glob("*.shp"): # Finds each .shp file and applies following actions
new_layer = QgsVectorLayer(layer, os.path.basename(layer), "ogr")
new_name = layer.replace('.shp', '')
csvpath = "C:/Users/You/Desktop/Testing/CSV results/" + new_name + ".csv" # Change path to where you want the csv(s) saved
QgsVectorFileWriter.writeAsVectorFormat(new_layer, csvpath, 'utf-8', None, "CSV")
Hoffe das hilft!