Mais

Editar o DBF para um arquivo de forma está produzindo resultados totalmente diferentes em R e QGIS, mas as tabelas de atributos são idênticas


Estou tendo um problema peculiar que espero que alguém possa lançar alguma luz. Na verdade, estou criando meu mapa em R, mas estou usando o QGIS como uma ferramenta para verificar meu processo de mapeamento (R newb aqui). Então, vamos aprofundar.

Estou tentando traçar rios na minha área de interesse (Tanzânia), mas o arquivo de forma de origem (diva-gis.org) inclui toneladas de linhas de água desnecessárias. Por uma questão de reprodutibilidade, incluirei todos os DBFs e shapefiles editados. Aqui está o arquivo DBF original e aqui está o shapefile original. Se parece com isso.

Como você pode ver no DBF, muitos dos rios são desconhecidos / sem nome e listados como "UNK", o que não é muito útil para mim. No QGIS, sou simplesmente capaz de abrir a tabela de atributos, classificar por nome e remover todos os valores UNK. Como alternativa, posso filtrar esses valores por meio da expressão SQL:

"NAM"! = "DESCONHECIDO"

Ambos produzem os mesmos resultados. Aqui está o DBF editado pelo QGIS e aqui está o shapefile editado pelo QGIS. Esta é a aparência do mapa:

Então as coisas ficam estranhas. Novamente, estou criando este mapa em R. Usando os dados de origem originais, edito o DBF com o pacote "estrangeiro", sobrescrevo o DBF e mapeio usando ggplot. Estou obtendo um resultado totalmente diferente do mostrado acima. Aqui está um pequeno snippet de código de exemplo (não para o mapa completo, mas é essencialmente assim que esta parte do código do mapa será semelhante):

library (rgdal) library (estrangeira) library (ggplot2) # definir seu diretório de trabalho apropriado setwd ("D: / Mapping-R / Returns-Practice") #read dbf, expressão sql para remover todos os valores UNK em NAM water.lines < - read.dbf ("original-waterlines.dbf") water.lines <- water.lines [water.lines $ NAM! = "UNK",] #overwrite dbf write.dbf (water.lines, "TZA_water_lines_dcw.dbf" ) #read shapefile, fortificar para criar um quadro de dados legível water.lines.shp <- readOGR (dsn = "D: / Mapping-R / Returns-Practice", layer = "original-waterlines") water.lines.shp <- fortify (water.lines.shp) #plot ggplot () + geom_polygon (data = water.lines.shp, aes (long, lat, group = group), color = "slategray4")

O resultado deste código é assim:

Meio alongado e descolado, mas claramente não segue o mesmo padrão de linha da imagem editada pelo QGIS. Isso tem me deixado absolutamente louco. Na verdade, eu examinei e verifiquei os atributos R em relação aos atributos QGIS e eles combinaram perfeitamente, mas o resultado da imagem é completamente diferente. Depois de brincar um pouco mais com isso, descobri que meu código era o culpado e foi aí que eu errei. Mas então eu abri o DBF original, removi manualmente todos os valores UNK e conectei-o de volta ao QGIS. Aqui está o DBF resultante e aqui está seu arquivo de forma correspondente, que corresponde à imagem / gráfico R e se parece com isto:

O que da?! As tabelas de atributos são idênticas, mas as imagens são diferentes. Eu sinto que deve haver algo realmente óbvio que estou perdendo, mas estou brincando com isso há literalmente horas e não consigo descobrir.


É assim que eu faria na R.

library (rgdal) # leia no shapefile tz.wl <- readOGR (".", "TZA_water_lines_dcw") # agora selecione tz.wl.selection <- tz.wl [tz.wl $ NAM! = 'UNK',] # você pode escrever isso e comparar com seu arquivo Qgis: writeOGR (tz.wl.selection, ".", "TZA_water_lines_selection", driver = "ESRI Shapefile")

Não mexa com DBFs Shapefile!

A conexão entre geometrias e atributos fica confusa facilmente, especialmente se você começar a remover ou reordenar entradas no DBF. Isso nunca vai funcionar.

Use um formato de arquivo diferente ou uma biblioteca que suporte Shapefiles como um todo e não apenas DBF.


Assista o vídeo: 5# Poradnik Quantum Gis - tworzenie i edycja obiektów wektorowych (Outubro 2021).