Gabung file CSV ke shapefile

9

Saya ingin bergabung dengan file CSV ke shapefile.

Ketika saya mengidentifikasi bidang untuk memfasilitasi bergabung, misalnya,

map <- spChFIDs(map, as.character(map$ID))

dikembalikan

Kesalahan dalam spChFIDs (SP, x): panjangnya berbeda

Adakah yang bisa menyarankan?

pengguna3915459
sumber
Terima kasih. Tetapi ID kolom memang memiliki nilai unik yang dapat digunakan sebagai bidang gabungan. Haruskah input bidang memiliki panjang yang sama?
user3915459
Bisakah Anda memposting sampel peta dan csv Anda?
cengel
@cengel Ini adalah kumpulan data besar dan tangkapan layar tidak akan cukup untuk menunjukkan variasi. Bidang "ID" di "peta" shapefile adalah serangkaian angka (dengan berbagai jumlah digit).
user3915459
Mungkin menyimpan CSV ke tabel, sehingga Anda tahu bidang gabungan adalah tipe data yang sama.
klewis

Jawaban:

7

Ini adalah bagaimana Anda dapat melakukannya di R menggunakan sp::merge

library(raster)
# read data    
p <- shapefile("path/file.shp")
d <- read.csv("path/file.csv")

# merge on common variable, here called 'key'
m <- merge(p, d, by='key')

# perhaps save as shapefile again
shapefile(m, "path/merged.shp")
Robert Hijmans
sumber
Hai @RobertH, saya dikirim ke sini dari pertanyaan yang saya posting kemarin. Ketika saya bergabung dengan variabel umum, apakah saya menarik variabel itu dari shapefile atau CSV? Kedua variabel tersebut cocok dalam konten, tetapi tidak berdasarkan nama. Saya sudah mencoba bermain-main dengannya sedikit dan terus mendapatkan kesalahan (terutama: Kesalahan dalam [.data.frame(x @ data,, by.x, drop = FALSE): kolom yang tidak ditentukan dipilih)
Lauren
1
Menemukannya. Karena saya perlu bergabung dengan dua lapisan yang memiliki nama berbeda, saya harus mengubah sedikit format. Itu lebih mirip penggabungan (p, d, by.x = "key", by.y = "matching.key")
Lauren
3

Saya tidak tahu bagaimana hubungannya dengan R untuk bergabung dengan shapefile dengan csv. Namun, jika ini dapat membantu Anda, Anda juga dapat melakukan ini pada QGIS menggunakan pluggin MMQGIS.

masukkan deskripsi gambar di sini

Leasye
sumber
Terima kasih. Saya sudah mencoba dengan ArcGIS sebelumnya tetapi kumpulan data sangat besar dan saya lebih suka melakukan ini di R.
user3915459
2

Jika Anda bekerja di R maka shapefile dan .csv Anda harus dimuat sebagai data.frame atau data.table. Anda dapat menggunakan join () untuk menggabungkan mereka.

Apakah Anda memiliki informasi lebih lanjut tentang shapefile seperti apa yang Anda miliki?

Saya beruntung melakukan hal berikut ketika saya menggabungkan shapefile dan data. Perhatikan bahwa Anda harus meninggalkan ekstensi .shp di argumen "layer". Saya menggunakan "GEOID" tempat Anda meletakkan nama "bentuk" apa pun yang menarik.

library("rgdal")
library("data.table")
shapefile = readOGR(dsn = "DIRECTORY WITH SHAPEFILES", layer = "THE ACTUAL SHAPEFILE")
shapefile@data$id = rownames(shapefile@data)
shapefile.points = fortify(shapefile, region = "id")
shapefile.df = join(shapefile.points, shapefile@data, by = "id")
shapefile.df = subset(shapefile.df, select = c(long, lat, group, GEOID))
names(shapefile.df) = c("long", "lat", "group", "GEOID")

Kemudian Anda dapat menggabungkan data Anda menggunakan sesuatu seperti

full.data = join(mydata, shapefile.df, by = "GEOID", type = "full")
Nancy
sumber
1

Jika Anda bekerja di R maka penggabungan sebenarnya tidak diperlukan. Anda dapat menggunakan ggplot untuk menampilkan data Anda di peta. Lihat, contoh saya. Liner satu ini bekerja sangat baik dengan file bentuk bangladesh = fortify(p1, region = "ADM1_EN"). Dan, maka Anda bisa menggunakannya

ggplot() + geom_map(data = br2016a, aes(map_id = ADM1_EN, fill = HectareLocal), 
                    map =bangladesh) +
  expand_limits(x = bangladesh$long, y = bangladesh$lat) + 
  coord_fixed(.96) +
  scale_fill_gradient(low="thistle2", high="darkred", 
                      guide="colorbar", na.value="white") +
  labs(title = "Bangladesh Boro Rice (Local variety), 2016", x = element_blank(), y = element_blank(), 
       fill='Hectares') +   theme(legend.position = "bottom") 

Dan, peta yang saya dapatkan ada di sini.

Keluaran

Ambrish Dhaka
sumber