Como especificar campos para exportar do QGIS?

9

Estou usando o QGIS 2.0.1 e estou conectado a um banco de dados espacialmente habilitado para MS SQL Server (não ESRI). Consigo conectar-me à camada e carregá-la no meu sumário. Ocultei vários campos que não são importantes para a visibilidade.

Agora, quero exportar esses dados para outro tipo de dados (usaremos shapefile para este exemplo). Quando clico com o botão direito do mouse na camada, escolha "Salvar como" e defino o arquivo de saída, recebo o seguinte erro:

A exportação para o arquivo vetorial falhou. Erro: tipo não suportado para o campo GlobalID

Nota 1 : Se eu marcar "Ignorar criação de atributo" na caixa de diálogo, o shapefile será criado sem erros.

Nota 2 : O ArcGIS não tem esse problema, apenas converte o campo GUID para o tipo "TEXT".

Olhando para a tabela, um dos campos que ocultei é um GUID do tipo SQL < uniqueidentifier >, que provavelmente é o culpado. Na tentativa de resolver isso, deixei o campo "oculto". Eu teria assumido que, como o campo estava oculto, o QGIS não tentaria exportar esse campo, mas acabou não sendo o caso.

Você pode definir os campos que deseja exportar do QGIS?

É possível que o QGIS exporte apenas os campos "Visível"? Ou existe outra maneira alternativa de fazer isso no QGIS (talvez defina os campos por meio de uma consulta ogr2ogr)? Isso parece uma falha do QGIS se eu não conseguir definir quais campos exportar.

ATUALIZAÇÃO: Eu fiz um teste usando um shapefile de amostra para ver se eu poderia limitar os campos de saída. A seguinte linha de comando ogr2ogr funcionou e eliminou todos os campos, exceto "nome":

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

mas usando o QGIS e adicionando:

-sql "select name from city"

para a seção "layer" da caixa de diálogo "Save As" não resultou em um shapefile com apenas um campo. Então, eu realmente não vejo como posso manipular a saída do arquivo para mostrar apenas alguns campos selecionados. Qualquer ajuda é apreciada.

RyanKDalton
fonte
Se o ogr2ogr pode fazer isso, o QGIS pode, porque essa é exatamente a ferramenta que está sendo executada em segundo plano. Infelizmente, não tenho o banco de dados do SQL Server para testar ...
underdark
Direita. Então, tentei adicionar -sql "select <fields> from <table>"(excluindo o campo GlobalID dos <campos>) à parte "Camada" da caixa de diálogo "Salvar como", mas o mesmo erro ainda apareceu. Eu usei mal esse bloco de código ou isso é um bug?
precisa saber é o seguinte
esta resposta sugere -select em vez de -sql gis.stackexchange.com/questions/30691/… ... Eu acho que vai na seção de fonte de dados, não na camada.
underdark
Sem sorte para mim, com qualquer uma das suas sugestões, também tentei várias combinações das opções -select & -sql nos campos "Layer" e "Data Source" das "OGR creation options" :( Certamente, não posso o primeiro com a necessidade de exportar um subconjunto de campos ...
RyanKDalton 27/09
pode valer a pena verificar com os desenvolvedores. pode ser um bug.
Subterrâneo

Respostas:

1

Se funcionar para você em linha de comando com ogr2ogr, acho que é a melhor solução para usar isso. Você pode escrever um arquivo bat simples para criar um shapefile a partir do banco de dados MSSQL. Obviamente, você não pode editar os dados e salvar de volta para o servidor dessa maneira.

O QGIS possui as caixas de entrada Fonte de dados e Camada, mas essas são apenas para os parâmetros -dsco e -lco do ogr2ogr. O driver shapefile do OGR não possui dsco ou lco útil para suas necessidades:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

Como alternativa, deve ser possível escrever um plug-in python que solicite os dados do servidor com um comando SQL SELECT conforme suas necessidades. Isso até permitiria a edição de dados.

AndreJ
fonte
Até agora, essa parece ser a idéia mais viável. Existe uma maneira de chamar diretamente a linha de comando ogr2ogr da interface com o usuário do QGIS para executar sua própria sintaxe ogr2ogr?
achou?
Não diretamente. Mas você pode seqüestrar o terminal do gdalwarp para inserir seu comando ogr2ogr ali. Você recebe um erro que a camada não foi criada, mas é assim mesmo no sistema de arquivos. Não tenho certeza do que acontece se o arquivo já existir, então é melhor adicionar-overwrite também. E é melhor usar nomes de caminho completo para os arquivos.
Andrej
Como alternativa, você já tentou usar um arquivo virtual GDAL VRT como mediador entre o MSSQL e o QGIS?
Andrej
Eu não tenho, mas não é GDAL para trabalhar com rasters? Estou trabalhando com uma camada vetorial de pontos. Eu gosto da idéia de uma "mesa virtual" como um intermediário. O QGIS 2 não possui uma camada de memória na qual possamos escrever?
precisa saber é o seguinte
11
Há também um driver GDAL ogrvrt: gdal.org/ogr/drv_vrt.html . Mas acho que isso deveria ser melhor colocado em outra questão.
Andrej
0

Eu sugiro que você verifique a tabela de atributos para a camada no sumário e se o campo GlobalID existe. Alterne para o modo de edição, remova a coluna que cria o problema durante a exportação e feche a janela. Salve como shapefile ou qualquer formato de saída desejado. Eu espero que isso ajude.

Farhat Abbas
fonte
11
Não tenho certeza se a exclusão do campo na tabela do SQL Server é uma boa opção. Ainda pode ser necessário pelo servidor.
Andrej
Eu acho que a exclusão de uma coluna de atributo do QGIS TOC Layer salva a estrutura atualizada no buffer QGIS e permite exportar o arquivo em outro formato. uma vez que você terminar de exportação não salvar as alterações na camada (que foram excluídos)
Farhat Abbas