Saya mencoba melakukan penggabungan spasial antara data titik dan data poligon.
Saya memiliki data yang menunjukkan koordinat spasial dari suatu peristiwa dalam file csv saya A dan memiliki file lain, shapefile B, yang berisi batas-batas suatu area sebagai poligon.
head(A)
month longitude latitude lsoa_code crime_type
1 2014-09 -1.550626 53.59740 E01007359 Anti-social behaviour
2 2014-09 -1.550626 53.59740 E01007359 Public order
3 2014-09 -1.865236 53.93678 E01010646 Anti-social behaviour
head(B@data)
code name altname
0 E05004934 Longfield, New Barn and Southfleet <NA>
1 E05000448 Lewisham Central <NA>
2 E05003149 Hawcoat <NA>
Saya ingin bergabung dengan data kejahatan A ke shapefile B saya untuk memetakan peristiwa kejahatan yang terjadi di daerah saya A. Sayangnya saya tidak dapat melakukan penggabungan atribut berdasarkan code
kode dalam A mengacu pada unit yang berbeda dari kode di B.
Saya telah membaca sejumlah tutorial dan posting tetapi tidak dapat menemukan jawaban. Saya mencoba:
joined = over(A, B)
dan overlay
, tetapi tidak mencapai apa yang saya inginkan.
Apakah ada cara untuk melakukan ini secara langsung atau akankah transformasi antara dari A ke format lain diperlukan?
Secara konseptual saya ingin memilih titik-titik A yang termasuk dalam code
area B (mirip dengan "bergabung berdasarkan lokasi spasial di ArcGIS").
Apakah seseorang memiliki masalah ini dan menyelesaikannya?
sumber
point.in.polygon()
dalam paketsp
?point.in.polygon
apakah ini akan melestarikan variabelmonth
dancrime_type
. Apakah kamu tahu tentang itu?point.in.poly
dan akhirnya memilih titik-titik yang termasuk dalam poligon yang relevan. Terima kasih.Jawaban:
Fungsi point.in.poly dalam paket spatialEco mengembalikan objek SpatialPointsDataFrame dari titik-titik yang memotong objek poligon sp dan secara opsional menambahkan atribut poligon.
Pertama mari kita tambahkan paket yang dibutuhkan dan buat beberapa contoh data.
Sekarang, mari kita melihat data dan memplotnya.
Akhirnya, kita bisa memotong titik dengan poligon. Hasilnya akan menjadi objek SpatialPointsDataFrame dengan, dalam hal ini, dua atribut tambahan (PIDS, y) yang terkandung dalam data poligon srdf.
Jika tidak ada kolom identifikasi unik dalam data poligon, Anda dapat dengan mudah menambahkannya.
Setelah titik dan poligon berpotongan, kami dapat mengumpulkan titik menggunakan ID poligon unik yang merupakan atribut dalam data poligon.
sumber
sp::point.in.polygon
sebenarnya mengembalikan nilai numerik (0 = titik di luar, 1 = di dalam, 2 = di tepi, 3 = di titik). Bisa jadi hal yang tepat untuk beberapa keadaan. Berpikir itu membantu untuk dicatat di sini, karena ini adalah hasil google teratas untuk istilah terkaitover()
dari paketsp
bisa sedikit membingungkan tetapi berfungsi dengan baik. Saya berasumsi Anda telah membuat spasial "A" dengancoordinates(A) <- ~longitude+latitude
:Alih-alih objek spasial titik, ini hanya memberi Anda bingkai data, dengan no yang sama. baris sebagai A, dan "kode" variabel tunggal dari setiap poligon berpotongan dari B.
sumber
over()
ada masalah dengan poin pada simpul poligon, meskipun saya pikir ini adalah solusi termudah yang saya temukan sejauh ini.Berikut ini adalah solusi seperti dplyr:
Data populasi berasal dari: https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates/datasets/parlemenaryconstituencymidyearpopulationestimates
Saya harus mengonversi file bentuk yang diunduh dari ke geoJson: https://geoportal.statistics.gov.uk/datasets/westminster-parliamentary-constituencies-december-2018-uk-bgc/data?page=1
Anda dapat melakukannya dengan:
sumber