Atualmente, estou usando o script a seguir para adicionar alguns dados de atributo de uma tabela a vários shapefiles individuais:
library(rgdal)
specieslist <- read.csv("SpeciesList1.txt", header=F)
attdata <- read.table("TestAtt.csv", sep = ",", header=T)
for (n in 1:dim(specieslist)[1])
{
speciesname <- specieslist[n,1]
shp <- readOGR("Mesoamerica_modified_polygons", speciesname)
shp$ENGL_NAME<-attdata[n,2]
writeOGR(shp, "PolygonsV2", speciesname, driver="ESRI Shapefile")
}
Recebo o (s) seguinte (s) aviso (s) no final:
1: In writeOGR(shp, "PolygonsV2", speciesname, driver = "ESRI Shapefile") :
Field names abbreviated for ESRI Shapefile driver
Ao visualizar a tabela de atributos dos shapefiles após esse processo, o nome do campo foi reduzido para 'ENGL_', mas quero que ele permaneça como 'ENGL_NAME'. Existe uma maneira de desativar essa abreviação?
Qualquer ajuda muito apreciada.
Respostas:
Você não pode, é uma questão de shapefile. Veja http://gdal.org/drv_shapefile.html em 'Opções de criação'
fonte
writeOGR
? É realmente questão do formato?Seu 'ENGL_NAME' não deve ser abreviado (menos de 10 caracteres), mas o writeOGR tem vontade própria, ao que parece.
Ao invés de
você pode tentar
Como writeSpatialShape parece não ter um parâmetro para o destino, eu encontrei essa solução alternativa alternando o diretório de trabalho.
O outro problema é que ele não produz um arquivo .prj, mas é um problema menor, comparado aos nomes de campos destruídos.
Aguardando os horários em que + * # -! (/ Formato ESRI Shapefile finalmente está morto e substituído por ... bem?
fonte
Eu tenho tido problemas semelhantes trabalhando no RStudio. De acordo com os conselhos de vários comentários e respostas acima, minha solução de terra arrasada é:
names(copy@data) <- c('new', 'short', 'names', 'you', 'pickd', 'yrslf')
names(copy@data) <- strtrim(names(copy@data), 10)
só pra ter certezawriteOGR(copy, dsn, layer, driver = 'ESRI Shapefile')
mas não execute aindaO writeOGR () usa base :: abreviar - aqui está um teste com uma cópia das linhas 158-164:
Você pode ver que as chamadas realmente abreviam duas vezes (possivelmente sem sentido, não consigo descobrir como você acionaria esse sub-loop) e, se pelo menos um nome de coluna> 10, encurtará qualquer nome de coluna com> 7 caracteres. Não consigo entender por que é necessário limpar o espaço de trabalho e reiniciar se o writeOGR já tiver sido executado no mesmo objeto antes, mas talvez isso tenha algo a ver com fld_names ser um vetor de caractere nomeado. Poderia funcionar melhor se as.character () estivesse contornado abreviado ().
fonte
Como já mencionado, os shapefiles possuem um limite de 10 caracteres para o nome do campo. O writeOGR atende a esse requisito alterando os cabeçalhos dos campos usando um algoritmo que prioriza quais caracteres remover quando houver um nome de campo que exceda o limite. Não sei ao certo como funciona, mas parece reduzir nomes de campos de maneiras estranhas e imprevisíveis e pode diminuir nomes de campos dessa maneira que já atendiam aos 10 requisitos.
Aqui está o meu trabalho. O uso de strtrim () e a definição do tamanho dos caracteres para 10 truncarão os nomes dos campos para 10 caracteres mais previsivelmente do que a automação do writeOGR.
Um problema que você pode ter é se você tiver nomes de campo idênticos para os 10 primeiros caracteres, mas raramente tenho esse problema.
Aplico isso toda vez que exporto um shapefile, apenas por precaução.
fonte