Nếu bạn đang tìm cách từ chối các tệp csv từ Bảng điều khiển Python trong QGIS thì bạn có thể sử dụng tập lệnh sau. Tất cả những gì bạn cần thay đổi là ba con đường được đề cập trong các bình luận.
Về cơ bản, tập lệnh nhập các tệp csv của bạn vào QGIS dưới dạng shapefiles (giả sử các trường hình học của bạn được đặt tên X
và Y
). Sau đó, nó sử dụng các thuật toán qgis:reprojectlayer
và qgis:fieldcalculator
từ Hộp công cụ xử lý để định hướng lại và cập nhật X
và Y
các trường với tọa độ mới. Sau đó, nó lưu chúng trong một thư mục và chuyển đổi chúng thành các tệp csv theo đường dẫn bạn chỉ định. Vì vậy, cuối cùng, bạn đã cập nhật các tệp shapefiles và csv trong các thư mục riêng biệt.
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")
Hi vọng điêu nay co ich!