Exportando vários arquivos ao mesmo tempo no QGIS?

8

Eu tenho muitos arquivos .TAB abertos no QGIS e quero salvá-los no .SHP para que eu possa trabalhar com eles no ArcMap.

Existe uma maneira de salvar / exportar todos esses arquivos ao mesmo tempo ou eu realmente tenho que "salvar como" separadamente para cada arquivo?

Frida
fonte
Procure OGR2OGR
CARTOS
Eu pensei que isso foi incorporado ao QGIS? Talvez eu esteja enganado.
Frida
Talvez use ogr2ogr como uma ferramenta de texto em vez de o QGIS usá-lo. Isso abre possibilidades de conversão sem abrir o QGIS - e com a capacidade de executar uma sequência dessas instruções, convertendo um conjunto de arquivos um após o outro. Isso funcionará bem se você tiver uma maneira fácil de obter uma lista dos nomes de arquivos (como se fossem algum tipo de sequência). Se analisarmos cinco ou seis camadas, será fácil fazer uma a uma usando o QGIS - mas se estivermos falando de muitas outras camadas / arquivos, pode valer a pena o esforço. Confira os arquivos bat no Windows para salvar uma sequência de comandos de texto.
Rostranimin

Respostas:

21

Experimente este Frida:

  1. Crie uma pasta para armazenar seus Shapefiles lá (por exemplo, eu criei a pasta /tmp/data/, eu uso o GNU / Linux).

  2. No QGIS, abra o console do QGIS Python.

  3. Escreva a linha a seguir, editando o lado direito para corresponder ao caminho completo da sua pasta (inclua a barra invertida / barra invertida):

    myDir = '/tmp/data/'

  4. Pressione Enter.

  5. Copie as seguintes linhas no console do QGIS Python:

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

Agora você deve ter seus Shapefiles dentro da pasta que você criou na etapa 1.

Se você enfrentar problemas, informe-me sobre o sistema operacional e o caminho completo para sua pasta.

Germán Carrillo
fonte
1
@carcarillo, você deveria! Isso é muito útil e economiza muito trabalho.
Joseph
Um plugin parece ser uma boa ideia! Um script semelhante para rasters também seria útil. Só consigo "salvar" os locais espaciais dos rasters destinados ao MapInfo abrindo-os no QGIS e salvando-os como arquivos .tif (GeoTIFF). Parece que o ArcMap não pode acessar as informações espaciais dos rasters, a menos que eu faça isso.
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 + "!"

Para camada de varredura, use QgsRasterFileWriter

€: Você pode encontrar um exemplo mais detalhado no livro de receitas .

ymirsson
fonte
Não há realmente nenhuma maneira de fazer isso através da GUI?
Chrismarx
@chrismarx "salvar como"? com medo de não (ou pelo menos - não que eu saiba).
Ymirsson
2

Apenas uma pequena adição: se você quiser alterar o CRS do arquivo exportado e adicionar mais prefixos e sufixos, poderá alterar o script da seguinte forma:

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

O 31370 pode ser substituído pelo EPSG do CRS em que você deseja que o arquivo exportado esteja.

Hannes Ledegen
fonte