การแปลงรูปหลายเหลี่ยมเป็นแรสเตอร์โดยใช้ R


15

ฉันพยายามแปลง Shapefile เป็นแรสเตอร์ภายใน R วิธีการของฉันคือการอ่านในแรสเตอร์ดังต่อไปนี้:

library(rgdal) # Loads SP package by default
demo <- readOGR('F:/data/', 'shapefile') # Creates a SpatialPolygonsDataFrame class (sp)

มันใช้งานได้ดีและฉันสามารถลงจุดได้ อย่างไรก็ตามมันเป็นไฟล์รูปร่างขนาดใหญ่และฉันต้องการแปลงให้เป็นแรสเตอร์ ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:

r <- raster(ncol=180, nrow=180)
Demo_ras = rasterize(r, demo, 'pop')  # pop is an integer here

ข้อความผิดพลาด:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "rasterize", for signature "RasterLayer", "SpatialPolygonsDataFrame"

ฉันสับสนเล็กน้อยซึ่งเป็นลำดับที่ถูกต้องของข้อโต้แย้ง ฉันเคยลองแล้ว:

Demo_ras = rasterize(demo, r, 'pop')

ซึ่งส่งผลให้เกิดข้อผิดพลาดการติดตาม:

Error in .polygonsToRaster(x, y, ...) : 
  polygon and raster have no overlapping areas

ในขณะที่เหมาะสมที่ไม่สามารถสร้างแรสเตอร์สำหรับพื้นที่ที่ไม่ครอบคลุมSpatialPolygonsDataFrameแต่ฉันไม่แน่ใจว่าข้อมูลใดที่ฉันต้องระบุเพื่อให้แรสเตอร์ควรมีSpatialPolygonsDataFrameพื้นที่

คำตอบ:


23

ฟังก์ชัน rasterize () ต้องการให้มีรูปร่าง (รูปหลายเหลี่ยม) ก่อนแล้วตามด้วย raster โดยปริยายดังนั้นข้อผิดพลาดแรกของคุณคือ คำสั่งที่สองที่คุณแสดงDemo_ras = rasterize(demo, r, 'pop')เป็นวิธีที่ถูกต้อง แต่เมื่อคุณค้นพบว่ามันต้องการขอบเขตในการจับคู่!

คุณสามารถกำหนดขอบเขตของแรสเตอร์เพื่อให้ครอบคลุมขอบเขตของรูปหลายเหลี่ยมที่เหมือนกัน:

extent(r) <- extent(demo)

... สิ่งนี้น่าจะใช้ได้ผลกับตัวอย่างที่คุณให้ไว้ตราบใดที่ 'ป๊อป' เป็นชื่อที่ถูกต้องของตัวแปรใน 'สาธิต' ต่อไปนี้ใช้งานได้ในขณะนี้ (R 2.14 / OSX) โดยที่ AREA เป็นคอลัมน์จำนวนจริงใน boundary.shp:

poly <- readOGR("/workingdirectory", "boundary") # does not work  with final slash '/' 
r <- raster(ncol=180, nrow=180)
extent(r) <- extent(poly)
rp <- rasterize(poly, r, 'AREA')

เห็นการแก้ไขของคุณและตรวจสอบอีกครั้ง - เครื่องหมายสแลชสุดท้ายเป็นทางเลือกใน OSX ฉันไม่เห็นด้วยกับ Windows ใช่ไหม น่ารู้!
Simbamangu

อืมฉันมีปัญหากับการทับทั้ง OSX และ Windows .. ไม่แน่ใจว่าเราใช้เวอร์ชั่นเดียวกันหรือไม่
djq

OSX 10.7.2 / R 2.14 ในเหมือง; ทำงานได้ทั้งสองทาง คุณใช้อะไร
Simbamangu

เพื่อการแปลง automatize ผมเขียนนี้: github.com/brry/misc/blob/master/shp2raster.R
แบล็กเบอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.