แปลงวัตถุรูปหลายเหลี่ยมเชิงพื้นที่เป็นกรอบข้อมูลโดยใช้ R


18

เป้าหมายของฉันคือการแก้ไข shapefile ที่มีอยู่โดยการผสานรูปหลายเหลี่ยมบางอย่าง

หลังจากนำเข้ารูปร่างไฟล์และใช้คำสั่ง UnionSpatialPolygons ฉันได้รับโครงร่างรูปหลายเหลี่ยมที่ฉันต้องการ

อย่างไรก็ตามตอนนี้เป็นวัตถุ SpatialPolygons ไม่ใช่ SpatialPolygonsDataFrame ดังนั้นฉันจึงไม่สามารถส่งออกไปยังรูปร่างไฟล์โดยใช้ writeOGR

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


3
หากคำตอบด้านล่างมีประโยชน์คุณควรเลือกเป็นคำตอบที่ถูกต้องโดยคลิกที่เครื่องหมายถูกที่ด้านซ้ายของข้อความคำตอบ
SlowLearner

คำตอบ:


20

ดังที่ชื่อกล่าวไว้ SpatialPolygonsDataFrame นั้นเป็นเพียงวัตถุ SpatialPolygons ที่มีข้อมูลแนบอยู่ (ตารางแอตทริบิวต์) ข้อมูลจะต้องมีแถวอย่างน้อยที่สุดเท่าที่มีคุณสมบัติ

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

---- ---- แก้ไข

หากคุณต้องการแปลงSpatialPolygonsDataFrameกลับไปเป็นSpatialPolygonsวัตถุคุณเพียงแค่ต้องระบุโครงสร้างวัตถุภายใน R

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

แน่นอน @Curlew นั้นถูกต้อง ให้แน่ใจว่าจะระบุข้อโต้แย้งได้อย่างถูกต้องเมื่อมีการดำเนินIDs UnionSpatialPolygonsมิฉะนั้นคุณอาจได้รับการระบุปัญหาการโต้แย้งเมื่อแปลงกลับไปdata SpatialPolygonsDataFrame
fdetsch

1
แน่นอนว่าค่อนข้างง่าย ฉันแก้ไขคำตอบดั้งเดิมสำหรับเรื่องนั้น
Curlew

1
ฉันเพิ่งเริ่มทำงานกับรูปร่างและยังคงพยายามทำความคุ้นเคยกับสิ่งนี้ สิ่งที่แน่นอนควรจะทดแทนสำหรับข้อมูลของคุณในdata=as.data.frame("yourData")? หลังจากละลายรูปหลายเหลี่ยมด้านในโดยใช้unionSpatialPolygons(...)ฉันต้องการเขียนผลเป็น
รูปร่าง

คุณต้องมี data.frame ที่มีจำนวนแถวเท่ากันกับที่คุณมีฟีเจอร์ในวัตถุ SpatialPolygons ของคุณ ถามคำถามใหม่เกี่ยวกับunionปัญหาของคุณได้ดียิ่งขึ้น..
Curlew

1
@Curlew ขอขอบคุณคุณเพิ่งโพสต์คำถามใหม่ที่นี่gis.stackexchange.com/q/121405/40108
lightonphiri

9

ปัญหา:

1: ผลลัพธ์ของ UnionSpatialPolygons เป็นรูปหลายเหลี่ยมเชิงพื้นที่

2: การแปลงผลลัพธ์กลับเป็นกรอบข้อมูลรูปหลายเหลี่ยมเชิงพื้นที่เป็นความเจ็บปวดที่แท้จริง

-a คุณต้องการ data frame ที่แน่นอนมากเพื่อแนบไปกับรูปหลายเหลี่ยมเชิงพื้นที่

-b ข้อมูลที่คุณใช้สำหรับ UnionSpatialPolygons มีแถวมากกว่าเอาท์พุทและไม่ได้จัดรูปแบบตามที่ต้องการ

โซลูชันของฉัน (น่าเกลียด):

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

เกิดข้อผิดพลาดหาก (ความยาว (Sr @ รูปหลายเหลี่ยม)! = nrow (ข้อมูล)) หยุด (วาง ("ความยาวของวัตถุไม่ตรงกัน: \ n",: อาร์กิวเมนต์มีความยาวเป็นศูนย์นอกจากนี้: ข้อความเตือน: 1: ใช้ * ใช้และสล็อตโดยตรง
Mox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.