coast<-readShapeSpatial("coastline.shp")
landc<-readShapeSpatial("landcover.shp")
ro<-readShapeSpatial("roads.shp")
bc<-gBuffer(ro,width=100)
landc$ratings=1
landc$ratings[landc$LANDUSE_ID==4]=0
Di atas, saya mengambil kategori apa pun yang memiliki 4 dan di kolom baru taruh sebagai 0.
Pada titik ini, saya ingin kolom dinamai ratings
juga untuk bc
, di mana ia akan mengambil 0 jika ada di dalam buffer dan 1 jika di luar. Masalahnya adalah bahwa bc
is SpatialPolygons
dan itu tidak mengandung tabel atribut.
Jelas untuk menambahkan kolom ke SpatialPolygon
objek Anda harus mengubahnya menjadi SpatialPolygonsDataFrame
, tapi saya tidak tahu caranya.
Saya mencoba ini:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
tetapi kesalahan ini muncul:
row.names of data and Polygons IDs do not match
r
cartography
ya
sumber
sumber
Jawaban:
Apa hubungan "pantai", "ro" dan "bc" dengan masalah Anda? Masalahnya mungkin terletak pada Anda menggunakan "readShapeSpatial". Sudahkah Anda mencoba readOGR di rgdal? Jika Anda membaca bentuk poligon, readOGR akan menghasilkan objek SpatialPolygonsDataFrame.
Jika Anda memang memiliki objek SpatialPolygons dan ingin memaksa ke dalam SpatialPolygonsDataFrame, dataframe yang ditentukan harus memiliki nama rameame yang cocok dengan ID poligon di slot poligon. Ini adalah contoh cepat.
sumber
Mencoba:
match.ID
menghindari persyaratan nama pengganti untuk ID poligon pertandingansumber
Sederhana saja:
Ketika Kesalahan: "baris.nama data dan ID Poligon tidak cocok" muncul solusi ini tampaknya membantu: ganti nama ID dataframe agar cocok dengan ID poligon:
sumber
SpatialPolygonsDataFrame
membuatnya.Saya menemukan solusi berikut umumnya berfungsi.
Pertama, buat kerangka data kosong dengan ID sebagai bidang:
Kemudian dapatkan ID poligon spasial
bc
:Kemudian gunakan df sebagai argumen kedua ke fungsi konversi dataframe spasial:
Seperti
df
danspatial_df
objek dataframe, kolom dapat dengan mudah ditambahkansumber