Mengekspor beberapa file secara bersamaan di QGIS?

8

Saya memiliki banyak file .TAB terbuka di QGIS dan saya ingin menyimpannya ke .SHP sehingga saya dapat bekerja dengannya di ArcMap.

Apakah ada cara untuk menyimpan / mengekspor semua file ini secara bersamaan atau apakah saya benar-benar harus "menyimpan sebagai" secara terpisah untuk setiap file tunggal?

Frida
sumber
Cari OGR2OGR
CARTOS
Saya pikir itu dibangun ke QGIS? Mungkin saya salah.
Frida
Mungkin menggunakan ogr2ogr sebagai alat teks alih-alih meminta QGIS menggunakannya. Ini membuka kemungkinan untuk mengonversi tanpa membuka QGIS - dan dengan kemampuan untuk menjalankan urutan instruksi semacam itu, mengonversi serangkaian file satu per satu. Ini akan bekerja dengan baik jika Anda memiliki cara mudah untuk mendapatkan daftar nama file (seperti jika mereka semacam urutan). Jika kita melihat lima atau enam lapisan maka itu akan mudah dilakukan satu per satu menggunakan QGIS - tetapi jika kita berbicara tentang lebih banyak lapisan / file mungkin layak dilakukan. Lihat file bat pada Windows untuk menyimpan urutan perintah teks.
Rostranimin

Jawaban:

21

Coba Frida ini:

  1. Buat folder untuk menyimpan Shapefile Anda di sana (misalnya, saya telah membuat folder /tmp/data/, saya menggunakan GNU / Linux).

  2. Di QGIS, buka konsol Python QGIS.

  3. Tulis baris berikut, edit sisi kanan untuk mencocokkan path lengkap ke folder Anda (pastikan Anda menyertakan garis miring / garis miring terbalik):

    myDir = '/tmp/data/'

  4. Tekan enter.

  5. Salin baris berikut ke konsol Python QGIS:

    for vLayer in iface.mapCanvas().layers():
        QgsVectorFileWriter.writeAsVectorFormat( vLayer, 
            myDir + vLayer.name() + ".shp", "utf-8", 
            vLayer.crs(), "ESRI Shapefile" )
    
  6. Tekan Enter beberapa kali.

Anda sekarang harus memiliki Shapefile Anda di dalam folder yang Anda buat pada langkah 1.

Jika Anda menghadapi masalah, beri tahu saya OS Anda dan jalur lengkap ke folder Anda.

Germán Carrillo
sumber
1
@ gcarrillo, Anda harus! Ini sangat berguna dan menghemat banyak gangguan.
Joseph
Plugin sepertinya ide yang bagus! Skrip serupa untuk raster juga akan bermanfaat. Saya hanya bisa "menyimpan" lokasi spasial raster yang dimaksudkan untuk MapInfo dengan membukanya di QGIS dan menyimpannya sebagai file .tif (GeoTIFF). Sepertinya ArcMap tidak dapat mengakses informasi spasial raster kecuali saya melakukan ini.
Frida
9
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 + "!"

Untuk Raster Layer gunakan QgsRasterFileWriter

€: Anda dapat menemukan contoh yang lebih rinci di Cookbook .

ymirsson
sumber
Apakah benar-benar tidak ada cara untuk melakukan ini melalui gui?
chrismarx
@chrismarx "save as"? takut tidak (atau setidaknya - tidak saya sadari).
ymirsson
2

Hanya sedikit tambahan: Jika Anda ingin mengubah CRS dari file yang diekspor juga dan menambahkan beberapa awalan dan akhiran Anda dapat mengubah skrip seperti:

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 + "!"

31370 dapat diganti dengan EPSG dari CRS yang Anda inginkan dari file yang diekspor.

Hannes Ledegen
sumber