Xuất một số tệp cùng một lúc trong QGIS?


8

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?


Hãy tìm OGR2OGR
CARTOS

Tôi nghĩ rằng đã được xây dựng vào QGIS? Có lẽ tôi đã nhầm.
Frida

Có thể sử dụng ogr2ogr làm công cụ văn bản thay vì sử dụng QGIS. Điều này mở ra các khả năng chuyển đổi mà không cần mở QGIS - và với khả năng chạy một chuỗi các hướng dẫn như vậy, lần lượt chuyển đổi một tập hợp các tệp. Điều này sẽ hoạt động tốt nếu bạn có một cách dễ dàng để có được một danh sách các tên tệp (như nếu chúng là một loại trình tự). Nếu chúng ta đang xem xét năm hoặc sáu lớp thì sẽ dễ dàng thực hiện từng lớp một bằng cách sử dụng QGIS - nhưng nếu chúng ta đang nói về nhiều lớp / tệp khác thì có thể đáng để nỗ lực. Kiểm tra các tập tin bat trên Windows để lưu một chuỗi các lệnh văn bản.
Rostranimin

Câu trả lời:


21

Hãy thử Frida này:

  1. 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).

  2. Trong QGIS, mở giao diện điều khiển Python của QGIS.

  3. 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/'

  4. Nhấn Enter.

  5. 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" )
  6. 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.


1
@gcarrillo, bạn nên! Điều này rất hữu ích và tiết kiệm rất nhiều phiền phức.
Joseph

Một plugin có vẻ như là một ý tưởng tốt! Một kịch bản tương tự cho các raster cũng sẽ hữu ích. Tôi dường như chỉ có thể "lưu" các vị trí không gian của các trình quét dành cho MapInfo bằng cách mở chúng trong QGIS và lưu chúng dưới dạng tệp .tif (GeoTIFF). Có vẻ như ArcMap không thể truy cập thông tin không gian của các raster trừ khi tôi làm điều này.
Frida

8
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 .


Có thực sự không có cách nào để làm điều này thông qua gui?
chrismarx

@chrismarx "lưu dưới dạng"? sợ không (hoặc ít nhất - không phải là tôi biết).
ymirsson

2

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.