Tôi có rất nhiều tệp .TAB được mở trong QGIS và tôi muốn lưu chúng vào .SHP để tôi có thể làm việc với chúng trong ArcMap.
Có cách nào để lưu / xuất tất cả các tệp này cùng một lúc hay tôi thực sự phải "lưu dưới dạng" riêng biệt cho mỗi tệp?
Tôi có rất nhiều tệp .TAB được mở trong QGIS và tôi muốn lưu chúng vào .SHP để tôi có thể làm việc với chúng trong ArcMap.
Có cách nào để lưu / xuất tất cả các tệp này cùng một lúc hay tôi thực sự phải "lưu dưới dạng" riêng biệt cho mỗi tệp?
Câu trả lời:
Hãy thử Frida này:
Tạo một thư mục để lưu trữ Shapefiles của bạn ở đó (ví dụ: tôi đã tạo thư mục /tmp/data/
, tôi sử dụng GNU / Linux).
Trong QGIS, mở giao diện điều khiển Python của QGIS.
Viết dòng sau, chỉnh sửa phía bên tay phải để khớp đường dẫn đầy đủ vào thư mục của bạn (đảm bảo bạn bao gồm dấu gạch chéo / dấu gạch chéo ngược):
myDir = '/tmp/data/'
Nhấn Enter.
Sao chép các dòng sau vào bảng điều khiển Python của QGIS:
for vLayer in iface.mapCanvas().layers():
QgsVectorFileWriter.writeAsVectorFormat( vLayer,
myDir + vLayer.name() + ".shp", "utf-8",
vLayer.crs(), "ESRI Shapefile" )
Nhấn Enter một vài lần.
Bây giờ bạn sẽ có Shapefiles của bạn trong thư mục bạn đã tạo ở bước 1.
Nếu bạn gặp rắc rối, hãy cho tôi biết HĐH của bạn và đường dẫn đầy đủ đến thư mục của bạn.
from qgis.core import *
suffix = "_foo"
pathToFile = "/path/to/wherever/"
layers = iface.legendInterface().layers()
for layer in layers:
newName = layer.name() + suffix + ".shp"
ret = QgsVectorFileWriter.writeAsVectorFormat(layer, pathToFile + newName, "utf-8", None, "ESRI Shapefile")
if ret == QgsVectorFileWriter.NoError:
print newName + " saved to " + pathToFile + "!"
Đối với lớp Raster, hãy sử dụng QssRasterFileWriter
€: Bạn có thể tìm thấy một ví dụ chi tiết hơn trong Cookbook .
Chỉ cần thêm một chút: Nếu bạn cũng muốn thay đổi CRS của tệp đã xuất và thêm một số tiền tố và hậu tố nữa, bạn có thể thay đổi tập lệnh như vậy:
from qgis.core import *
import os
pathToFile = "S:\\pathway\\"
trs = QgsCoordinateReferenceSystem()
trs.createFromId(31370)
suffix = "_Lambert1972_Versie2016-01-04"
prefix = "Transect_Vuursalamander_"
layers = iface.legendInterface().layers()
for layer in layers:
newName = prefix + layer.name() + suffix + ".shp"
ret = QgsVectorFileWriter.writeAsVectorFormat(layer,pathToFile + newName,'utf-8',trs,'ESRI Shapefile')
if ret == QgsVectorFileWriter.NoError:
print newName + " saved to " + pathToFile + "!"
Có thể thay thế 31370 bằng EPSG của CRS mà bạn muốn tệp được xuất.