Actualmente estoy usando el siguiente script para agregar algunos datos de atributos de una tabla a muchos archivos de forma individuales:
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")
}
Recibo las siguientes advertencias al final:
1: In writeOGR(shp, "PolygonsV2", speciesname, driver = "ESRI Shapefile") :
Field names abbreviated for ESRI Shapefile driver
Al ver la tabla de atributos de los archivos de forma después de este proceso, el nombre del campo se ha acortado a 'ENGL_', pero quiero que permanezca como 'ENGL_NAME'. ¿Hay alguna manera de desactivar esta abreviatura?
Cualquier ayuda muy apreciada.
Respuestas:
No puedes, es un problema de shapefile. Ver http://gdal.org/drv_shapefile.html en 'Opciones de creación'
fuente
writeOGR
? ¿Es realmente cuestión del formato?Su 'ENGL_NAME' no debe abreviarse en absoluto (menos de 10 caracteres), pero parece que writeOGR tiene su propia voluntad.
En lugar de
podrías intentar
Como writeSpatialShape parece no tener un parámetro para el destino, encontré esta solución cambiando el directorio de trabajo de un lado a otro.
El otro problema es que no produce un archivo .prj, pero ese es un problema menor, en comparación con los nombres de campo destruidos.
Esperando los momentos en que + * # -! (/ El formato ESRI Shapefile finalmente está muerto y reemplazado por ... ¿bien?
fuente
He tenido problemas similares trabajando en RStudio. Según el consejo en varios comentarios y respuestas anteriores, mi solución de tierra quemada es:
names(copy@data) <- c('new', 'short', 'names', 'you', 'pickd', 'yrslf')
names(copy@data) <- strtrim(names(copy@data), 10)
sólo para estar segurowriteOGR(copy, dsn, layer, driver = 'ESRI Shapefile')
pero no lo ejecutes todavíawriteOGR () usa base :: abreviatura - aquí hay una prueba con una copia de las líneas 158-164:
Puede ver que en realidad se abrevia dos veces (posiblemente sin sentido, no puedo entender cómo desencadenaría ese sub-bucle), y si incluso un nombre de columna> 10 acortará cualquier nombre de columna con> 7 caracteres. No puedo entender por qué uno tiene que borrar el espacio de trabajo y reiniciar si writeOGR se ha ejecutado en el mismo objeto antes, pero tal vez tenga algo que ver con que fld_names sea un vector de caracteres con nombre. Podría funcionar mejor si as.character () se envolvió alrededor de abreviate ().
fuente
Como ya se mencionó, los archivos de forma tienen un límite de caracteres de nombre de campo de 10 caracteres. writeOGR cumple con este requisito al cambiar los encabezados de campo usando un algoritmo que prioriza qué caracteres eliminar cuando hay un nombre de campo que excede el límite. No estoy seguro de cómo funciona, pero parece acortar los nombres de campo de formas extrañas e impredecibles, y puede acortar los nombres de campo de esta manera que ya cumplen con el requisito 10.
Aquí está mi trabajo. Usar strtrim () y establecer la longitud de los caracteres en 10 truncará los nombres de los campos en 10 caracteres de manera más predecible que la automatización de writeOGR.
Un problema que puede tener es si tiene nombres de campo que son idénticos para los primeros 10 caracteres, pero rara vez tengo este problema.
Lo aplico cada vez que exporto un shapefile, por si acaso.
fuente