เซ็ตย่อย SpatialPolygonsDataFrame

ฉันมี SpatialPolygonsDataFrame ที่ฉันสร้างขึ้นโดยการอ่านในเชปไฟล์โดยใช้ readOGR ในแพ็คเกจ rgdal ฉันกำลังพยายามใช้มันเพื่อสร้างตารางสุ่มตัวอย่างโดยใช้ spsample ในแพ็คเกจ sp เพื่อใช้ในการประมาณค่าจากข้อมูลการสำรวจที่รวบรวมในพื้นที่ อย่างไรก็ตาม SpatialPointsDataFrame ครอบคลุมพื้นที่ขนาดใหญ่กว่าแบบสำรวจมาก และด้วยเหตุนี้ การแก้ไขจึงเป็นการทำนายค่าที่อยู่ห่างไกลจากจุดที่ดำเนินการสำรวจใดๆ ข้อมูลการสำรวจและเชปไฟล์ถูกฉายโดยใช้ proj4string เดียวกัน

ฉันต้องการสับเซ็ต SpatialPolygonsDataFrame โดยใช้พิกัดที่กำหนดโดยสถานีสำรวจ แต่ฉันไม่แน่ใจว่าค่าที่เกี่ยวข้องถูกจัดเก็บไว้ที่ใดในวัตถุ

ฉันเกรงว่าจะให้ข้อมูลที่เกี่ยวข้องไม่ได้เนื่องจากเชปไฟล์ไม่ได้โฮสต์ออนไลน์ อย่างไรก็ตาม ฉันจะยืมโค้ดบางส่วนจากคำตอบของ Paul Hiemstra ต่อ โพสต์สำหรับเนเธอร์แลนด์:

library(ggplot2)
library(sp)
library(automap)
library(rgdal)

#get the spatial data for the Netherlands
con <- url("http://gadm.org/data/rda/NLD_adm0.RData")
print(load(con))
close(con)

class(gadm)
bbox(gadm)
>         min      max
>r1  3.360782  7.29271
>r2 50.755165 53.55458

สมมติว่าการสำรวจได้ดำเนินการในพื้นที่นี้:

bbox(surveys)
    >         min      max
    >r1     4.000    7.000
    >r2    51.000   53.000

ฉันจะครอบตัดพื้นที่ของ SpatialPolygonsDataFrame นั้นได้อย่างไร


แก้ไข: คำถามนี้ ดูเหมือนจะตอบของฉัน ขออภัยที่ค้นหาไม่มากพอ (แม้ว่าความคิดเห็นจะทำให้ฉันรู้สึกได้ว่าควรหันไปใช้ rgeos ที่ไหน) อย่างไรก็ตาม gIntersection ทำให้ R ขัดข้อง...


person jslefche    schedule 18.04.2012    source แหล่งที่มา
comment
คำตอบสั้น ๆ น่าจะเป็น 'package:rgeos' ขออภัย ฉันไม่มีเวลาสำหรับคำตอบที่ยาวในขณะนี้ จึงเป็นเพียงความคิดเห็น...   -  person Spacedman    schedule 18.04.2012
comment
ดูที่ฟังก์ชัน gIntersection() ในแพ็คเกจ rgeos   -  person Sophia    schedule 18.04.2012
comment
ความทรงจำที่คลุมเครือของฉันเกี่ยวกับเรื่องนี้ก็คือหนึ่งในแพ็คเกจเชิงพื้นที่มีฟังก์ชันการซ้อนทับที่ส่งคืนบูลีนของรูปหลายเหลี่ยมที่ตรงกัน จากนั้นคุณสามารถใช้ taRifx::subsetSPDF เพื่อจับเฉพาะรูปหลายเหลี่ยมเหล่านั้น   -  person Ari B. Friedman    schedule 18.04.2012
comment
ยังไม่ชัดเจนจากคำถามว่าคุณต้องการครอบตัดรูปหลายเหลี่ยมไปที่กรอบขอบของจุด (มีวัตถุเพียงอันเดียวใน gadm ตัวอย่างของคุณ) หรือคุณต้องการลบวัตถุใด ๆ ที่ไม่ตัดกับจุดนั้นหรือไม่ อย่างแรกนั้นใช้งานง่าย over() และ [ ใน sp ส่วนอย่างที่สองต้องใช้เครื่องมือโทโพโลยีและ rgeos ใช้งานได้ แต่คุณต้องการที่จะตัดกรอบขอบเขตของจุดต่างๆ ออกหรือไม่?   -  person mdsumner    schedule 19.04.2012
comment
ขออภัย ควรบอกว่าอันที่สองใช้งานง่ายกว่า () อันแรกต้องใช้โทโพโลยี . .   -  person mdsumner    schedule 19.04.2012
comment
@Sophia ขอบคุณสำหรับความเป็นผู้นำ ฉันกำลังลอง gIntersection อยู่ในขณะนี้ แต่ใช้เวลานานพอสมควร ไม่แน่ใจว่านั่นเป็นเรื่องปกติสำหรับหลักสูตรเมื่อทำงานกับเชพไฟล์หรือไม่...   -  person jslefche    schedule 19.04.2012


คำตอบ (1)


ขึ้นอยู่กับขนาดของรูปหลายเหลี่ยมที่คุณสามารถทำบางอย่างได้

range = cbind(c(4,7), c(51,53))
centroids <- coordinates(spdf)

spdf.subset <- spdf[centroids[,1] > range[1,1] &
                    centroids[,1] < range[2,1] &
                    centroids[,2] > range[1,2] &
                    centroids[,2] < range[2,2],]
person fgregg    schedule 19.06.2012