Rgeos จะลดค่าที่เกี่ยวข้องเมื่อทำการตัดกันรูปหลายเหลี่ยม


11

ฉันพยายามที่จะตัดสอง SpatialPolygonsDataFrames และรับ SpatialPolygonsDataFrame เป็นผลลัพธ์ น่าเสียดายที่การใช้gIntersectionฟังก์ชั่นจากrgeos(ซึ่งทำงานได้อย่างน่าประทับใจอย่างรวดเร็วเพื่อตัดรูปหลายเหลี่ยม) ฉันไม่สามารถเรียกข้อมูลที่เกี่ยวข้องได้ ลองพิจารณาตัวอย่างต่อไปนี้:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

ฉันสามารถเขียนฟังก์ชั่น wrapper ที่จัดการการถ่ายโอนdata.framesแต่มันจะเป็นความเจ็บปวดเล็กน้อยที่จะได้รับการตรวจสอบที่ถูกต้องและก่อนที่ฉันจะทำฉันหวังว่าจะมีคนยืนยันว่าไม่มีทางที่ดีกว่าหรือชี้ให้ฉันฟังก์ชั่นอื่น สำหรับgIntersection) ซึ่งจะอนุญาตให้ฉันรักษาความสัมพันธ์data.framesไว้

ปรับปรุง

gIntersectionสะท้อนต่อไปนี้อาจอาจจะมีพฤติกรรมเจตนามาก ท้ายที่สุดของ SPDF สองตัวที่มี data.frame คุณผ่านมาได้บ้าง ดังนั้นฉันอาจต้องเขียนเสื้อคลุมที่ผสานทั้งสอง


1
คุณโหลด polgyons ของคุณได้อย่างไร - readShape * หรือ readOGR? ฉันมีพฤติกรรมแปลก ๆ กับ gIntersection ขึ้นอยู่กับว่าฉันเคยโหลด SPDFs ใดมาก่อน
Simbamangu

@Simbamangu ที่น่าสนใจ ฉันกำลังใช้ readShapePoly แล้วรวมเข้ากับ data.frame ....
Ari B. Friedman

gIntersection ควรให้ data.frames ที่ผสานกันสำหรับพื้นที่ที่ทับซ้อนกัน - ถ้าฉันเรียกใช้ Vector | Geoprocessing | Intersect ใน QGIS ผลลัพธ์คือชุดของคุณลักษณะที่ผสานสำหรับการทับซ้อนและ QGIS ไม่ใช้ไลบรารี GEOS เดียวกันสำหรับการดำเนินการเชิงพื้นที่เช่น นี้?
Simbamangu

ถ้าเป็นอย่างนั้นฉันก็จะนิ่งงัน ฉันได้เขียนรหัสของฉันอีกครั้งเพื่อรวม data.frames ด้วยมือแล้วใส่กลับเข้าไปใหม่ดังนั้นฉันจะไม่ใช้เวลานี้อีกในตอนนี้ แต่คำใบ้ว่าฟังก์ชั่นการอ่านในไฟล์ shapefile มีประโยชน์
Ari B. Friedman

1
ชัดเจนว่าไม่ใช่คำตอบ แต่ฉันไม่มีคะแนนเพียงพอที่จะแสดงความคิดเห็น ... อารีย์ฉันสงสัยว่าคุณจะแบ่งปันรหัสของคุณเพื่อแยกตัวแปรตามฟังก์ชั่นการซ้อนทับ rgeos หรือไม่ ฉันกำลังมีปัญหาห่อหัวของฉันรอบวิธีที่ดีในการรักษา id รูปหลายเหลี่ยมเดิมจากการดำเนินการ rgeos ต่างๆเช่น gUnion ...
jed.a.long

คำตอบ:


2

สำหรับโครงการฉันมีความต้องการเดียวกัน มากขึ้นกว่าการรักษาdata.frameเราต้องวางในตำแหน่งรหัสต่อไปในการจัดการประเภทรูปทรงเรขาคณิตการส่งออกและดำเนินการทำความสะอาด (เช่นคอลเลกชันเรขาคณิตสะอาด) มีบาง geoprocess แยกสมบูรณ์ ในกรณีที่คุณยังต้องทำงานดังกล่าวใน R คุณสามารถลองแพ็คเกจRFigisGeo ได้ :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

ทั้งคำตอบของคุณและ @ berndv ดูเหมือนว่าพวกเขาจะแก้ปัญหาของฉันได้ ขอบคุณ! ทำเครื่องหมายอันนี้นับตั้งแต่ที่มาก่อน
Ari B. Friedman

10

พฤติกรรมของ gIntersection จะไม่ส่งผ่านข้อมูลที่ตัดกันโดยการออกแบบ:

เนื่องจากไม่มีการจับคู่ทั่วไประหว่างวัตถุเชิงพื้นที่ที่ตัดกันการดำเนินการโดยพลการใด ๆ กับคุณลักษณะต้องใช้สมมติฐานเกี่ยวกับความตั้งใจของผู้ใช้ที่ไม่รู้จัก นี่คือเหตุผลที่ไม่มีช่องข้อมูลควรผ่าน ...

... การออกแบบของ gIntesection () เป็นแบบไม่ตั้งใจเนื่องจากมีเพียงผู้ใช้เท่านั้นที่รู้ว่าต้องทำอย่างไรกับคุณลักษณะของเอนทิตีที่เปลี่ยนรูปทรงเรขาคณิต ผู้ใช้ที่แตกต่างกันอาจตั้งสมมติฐานแตกต่างกัน แต่ไม่มีวิธีการแก้ปัญหาทั่วไปเกินกว่าจะผ่าน IDs ของรูปทรงเรขาคณิตที่ตัดกันเช่นเดียวกับที่ทำในกลไก row.names ()

ด้วยความประหลาดใจของฉันแพ็คเกจแรสเตอร์มีฟังก์ชั่นการแยกซึ่งตัดและส่งข้อมูลด้วยเช่นกัน

แพ็คเกจแรสเตอร์มีฟังก์ชั่นบางอย่างที่ขยาย rgeos โดยพยายามจัดการข้อมูลแอ็ตทริบิวต์เช่นกัน ในกรณีนี้ดู raster :: intersect และรายการฟังก์ชันที่นี่:? "raster-package" (ส่วนที่สิบสี่)

ข้อมูลที่สมบูรณ์ฉันได้รับในนี้: http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


0

สำหรับผู้ที่ (เช่นฉัน) ซึ่งคำตอบข้างต้นไม่ได้ผลลิงก์ที่นี่อธิบายว่าคุณสามารถทำสิ่งนี้ได้อย่างแม่นยำด้วยจุดตัดของแรสเตอร์

ฉันจะเก็บข้อมูลคุณลักษณะทั้งหมดได้อย่างไรเมื่อตัดรูปหลายเหลี่ยมสองรูปใน R

ฉันใช้สิ่งนี้เพื่อครอบตัด SpatialPointsDataFrame ด้วยรูปร่าง SpatialPolygons; มันสร้างเวอร์ชันที่ถูกครอบตัด / ที่ถูกครอบตัดของ SpatialPointsDataFrame เพื่อรักษาข้อมูลดั้งเดิม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.