Saat ini saya menggunakan skrip berikut untuk menambahkan beberapa data atribut dari sebuah tabel ke banyak bentuk individu:
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")
}
Saya mendapatkan peringatan berikut di akhir:
1: In writeOGR(shp, "PolygonsV2", speciesname, driver = "ESRI Shapefile") :
Field names abbreviated for ESRI Shapefile driver
Saat melihat tabel atribut shapefile setelah proses ini, nama bidang telah disingkat menjadi 'ENGL_', tapi saya ingin tetap sebagai 'ENGL_NAME'. Apakah ada cara untuk mematikan singkatan ini?
Setiap bantuan sangat dihargai.
Jawaban:
Anda tidak bisa, ini masalah shapefile. Lihat http://gdal.org/drv_shapefile.html di bawah 'Opsi Pembuatan'
sumber
writeOGR
? Apakah ini benar-benar masalah format?'ENGL_NAME' Anda tidak boleh disingkat sama sekali (kurang dari 10 karakter), tetapi tampaknya writeOGR sendiri.
Alih-alih
Anda mungkin mencoba
Karena writeSpatialShape tampaknya tidak memiliki parameter untuk tujuan, saya menemukan pemecahan masalah ini berpindah direktori kerja bolak-balik.
Masalah lain yang ada adalah, bahwa itu tidak menghasilkan file .prj, tapi itu masalah kecil, dibandingkan dengan nama bidang yang dihancurkan.
Menunggu saat + * # -! (/ Format ESRI Shapefile akhirnya mati dan digantikan oleh ... yah?
sumber
Saya mengalami masalah serupa yang bekerja di RStudio. Per saran dalam berbagai komentar dan jawaban di atas, solusi saya yang hangus adalah:
names(copy@data) <- c('new', 'short', 'names', 'you', 'pickd', 'yrslf')
names(copy@data) <- strtrim(names(copy@data), 10)
hanya untuk memastikanwriteOGR(copy, dsn, layer, driver = 'ESRI Shapefile')
tapi jangan jalankan duluwriteOGR () menggunakan basis :: singkatan - inilah tes dengan salinan baris 158-164:
Anda dapat melihatnya benar-benar memanggil singkatan dua kali (mungkin tanpa tujuan, saya tidak tahu bagaimana Anda akan memicu sub-loop), dan jika bahkan satu nama kolom> 10 maka itu akan mempersingkat nama kolom dengan> 7 karakter. Saya tidak tahu mengapa kita harus menghapus ruang kerja dan me-restart jika writeOGR telah dijalankan pada objek yang sama sebelumnya, tapi mungkin itu ada hubungannya dengan fld_names menjadi vektor karakter bernama. Ini mungkin bekerja lebih baik jika as.character () dililit singkatan ().
sumber
Seperti yang telah disebutkan, shapefile memiliki batas karakter nama bidang 10 karakter. writeOGR memenuhi persyaratan ini dengan mengubah judul bidang menggunakan beberapa algoritma yang memprioritaskan karakter apa yang harus dihapus ketika ada nama bidang yang melebihi batas. Saya tidak yakin cara kerjanya, tetapi sepertinya memperpendek nama bidang dengan cara yang aneh dan tidak dapat diprediksi, dan dapat mempersingkat nama bidang dengan cara yang sudah memenuhi 10 persyaratan.
Inilah pekerjaan saya. Menggunakan strtrim () dan mengatur panjang karakter ke 10 akan memotong nama field menjadi 10 karakter lebih dapat diprediksi daripada otomatisasi writeOGR.
Satu masalah yang mungkin Anda miliki adalah jika Anda memiliki nama bidang yang identik untuk 10 karakter pertama, tetapi saya jarang memiliki masalah ini.
Saya menerapkan ini setiap kali saya mengekspor shapefile, untuk berjaga-jaga.
sumber