Якщо ви хочете перепроектувати CSV-файли з консолі Python в QGIS, ви можете використовувати наступний скрипт. Все, що вам потрібно буде змінити, - це три шляхи, про які йдеться в коментарях.
По суті, сценарій імпортує ваші файли csv у QGIS у вигляді форм-файлів (якщо припустити, що ваші геометричні поля названі X
та Y
). Потім він використовує qgis:reprojectlayer
і qgis:fieldcalculator
алгоритми з Processing Toolbox для перепроеціровать і поновлення X
і Y
поля з новими координатами. Потім вони зберігають їх у папці та перетворюють їх у файли csv у вказаному вами шляху. Отже, зрештою, ви оновили файли форм і файли csv в окремих папках.
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")
Сподіваюся, це допомагає!