A junção de tabela com o arquivo .csv resulta em campos nulos após a junção


8

Semelhante às perguntas já feitas sobre arquivos .dbf, estou tentando associar arquivos .csv a uma cobertura .gdb ou shapefile no QGIS. As tabelas adicionadas ao QGIS antes da associação ficam bem, mas depois que a associação é concluída, a tabela amalgamada tem valores NULL para todos os campos associados. O mesmo acontece com uma variedade de tabelas diferentes, e independentemente de eu estar ingressando em um arquivo shapefile ou .gdb.

Estou executando o QGIS 2.0.1 em um OSX 10.8.5. Os arquivos de tabela originais estão contidos no formato .mdb, então eu comprei e usei o MDB ACCDB Viewer para exportá-los para .CSV O fato de estarem bem quando visualizados separadamente me leva a acreditar que o problema está no procedimento de associação, não no tabelas em si.

Sugestões?



Você pode verificar se a coluna no csv é do mesmo tipo que a coluna que está sendo unida no shapefile / gdb de destino? Geralmente, você pode ver os tipos de campo na janela de propriedades de cada camada, indo para a guia Campos .
precisa saber é o seguinte

1
Aha - para que o shapefile tenha um campo inteiro, enquanto todos os campos da tabela são campos de string. A conversão de .mdb para .csv teria perdido os tipos de campo? Posso apenas alterar o tipo de campo na caixa de diálogo de propriedades?
KMT

Certifique-se de verificar se você tem correspondências exatas. Eu tive esse problema mesmo quando os tipos de campo correspondiam. Acontece que o problema era que eu tinha um espaço em branco nas minhas cordas. Isso foi solucionado com a criação de um novo campo usando a trim(oldField)funcionalidade QGIS .
Lauren

Respostas:


2

Os arquivos .csv no QGIS, por padrão, importam todos os dados como seqüências de caracteres. Você precisa criar um arquivo de texto .csvt que informe ao QGIS quais colunas devem ser especificadas e quais tipos de dados.

A .csvt file contains only one line and the types for each column have to be quoted and comma separated, e.g.

"Integer","Real","String"

Citado em: http://anitagraser.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/

Seus dados serão do mesmo tipo e a associação deverá funcionar.


Obrigado @Amos Budde, vou tentar a rota .csvt também, mas, como se viu, tentei um shapefile e uma tabela diferentes, ambos com campos de string e ainda não funcionam - recebo valores nulos na tabela unida . Meus dados são compartilhados acima - você tem alguma chance de experimentá-lo?
KMT

apenas tentei com um arquivo .csvt e ainda sem sorte. Funciona para você?
KMT

2

É melhor garantir que os dois campos tenham o mesmo tipo de dados.

O tipo de campo não pode ser alterado para shapefiles. Mas é fácil criar um novo campo de texto vazio e torná-lo igual ao campo inteiro.

Você pode usar uma expressão de calculadora de campo que se parece com: tostring( "INT_FIELD" )e simplesmente substituir INT_FIELDpelo nome do campo inteiro real.

Você também pode alterar facilmente um valor de atributo da camada CSV do número do texto <-> .


ATUALIZAR

Se você estiver obtendo valores nulos, tente manter a associação, mas apenas feche e reabra a tabela de atributos para ver se os valores associados estão lá (ou mesmo feche / reabra o QGIS).

Consegui ingressar com êxito em um csv em um shapefile com uma mistura de tipos de campo, portanto, string vs inteiro não deve ser o problema.


ATUALIZAÇÃO 2

Parece que, para se livrar dos valores nulos, eles precisam realmente ter um registro correspondente na tabela correspondente da qual as junções estão sendo feitas. Mas na imagem abaixo, você pode ver que alguns têm um registro correspondente:

junta-se com sucesso em amarelo


Ok, mesmo quando ambos são valores de string, estou tendo o problema de valores NULL na tabela unida. Outros pensamentos?
KMT

Não há sorte em fechar / abrir a tabela de atributos ou o QGIS.
KMT

@KMT Existem dados que você pode compartilhar para que qualquer pessoa possa testar?
precisa saber é o seguinte

Certo. Shapefile em dropbox.com/sh/jvbh2pafm2dreec/lr0GiFiq2t (usando o arquivo "Delta Covers"). Tabela em dropbox.com/sh/qw25uxmaoo6pgqh/s8EKrU9DfL (usando a tabela "Covers_Survey"). Também tenha um arquivo .gdb (o mesmo que o shapefile) em dropbox.com/sh/8vdalc68jjd2c7i/iFpsm7MgAD . Associação com base nos campos "Covlnk_text" (shapefile) e "Covlnktxt" (tabela).
KMT

1
@KMT Acho que a conversão dos tipos de dados do campo não ajudará em nada, pois os valores ainda não corresponderão. Eu voltaria aos dados de origem (o mdb) e compararia os valores na saída csv com a tabela mdb (talvez eles tenham sido confusos de alguma forma). O LibreOffice Base também pode abrir um mdb.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.