วิธีการผลิตตารางเชิงพื้นที่จากแรสเตอร์?


9

ฉันต้องการ Spatial Grid เป็นกริดหลักสำหรับแผนที่เฉพาะเรื่องที่หลากหลาย ฉันจะสร้าง Spatial Grid จากแรสเตอร์เพื่อยกเลิกพิกเซล NA ทั้งหมดได้อย่างไร


6
ส่งเรื่องที่สนใจให้เราที่นี่ โค้ดเล็ก ๆ น้อย ๆ สำหรับสร้างแรสเตอร์และคุณคาดหวังอะไร
Spacedman

คำตอบ:


14

คุณสามารถรับเซลล์ที่ไม่ใช่ NA ทั้งหมดในแรสเตอร์ด้วย:

r = raster(matrix(runif(20),5,4))
r[r>.5]=NA

coordinates(r)[!is.na(values(r)),]
          x   y
 [1,] 0.375 0.7
 [2,] 0.125 0.5
 [3,] 0.375 0.5
 [4,] 0.625 0.5
 [5,] 0.875 0.5
 [6,] 0.125 0.3
 [7,] 0.375 0.3
 [8,] 0.625 0.3
 [9,] 0.375 0.1
[10,] 0.875 0.1

นั่นคือเซลล์ที่ไม่ใช่ NA จากนั้นคุณสามารถให้ฟีดเหล่านี้กับ SpatialPixels

SpatialPixels(SpatialPoints(coordinates(r)[!is.na(values(r)),]))
Object of class SpatialPixels
Grid topology:
  cellcentre.offset cellsize cells.dim
x             0.125     0.25         4
y             0.100     0.20         4
SpatialPoints:
          x   y
 [1,] 0.375 0.7
 [2,] 0.125 0.5
 [3,] 0.375 0.5
 [4,] 0.625 0.5
 [5,] 0.875 0.5
 [6,] 0.125 0.3
 [7,] 0.375 0.3
 [8,] 0.625 0.3
 [9,] 0.375 0.1
[10,] 0.875 0.1
Coordinate Reference System (CRS) arguments: NA 

แม้ว่าจะมีอะไรเป็นส่วนตัวบนกริดฉันก็ยังคงเป็นแรสเตอร์

ฉันไม่แน่ใจโดยสมบูรณ์ว่าคุณต้องการอะไร - SpatialGridวัตถุมีการกำหนดกริดเต็มรูปแบบสี่เหลี่ยมดังนั้นหากไม่มีพิกเซล NA จะไม่มีเหตุผล


ขอบคุณเพื่อนฉันก็ไม่แน่ใจว่าสิ่งที่ต้องการ ฉันพยายามที่จะพัฒนาเวิร์กโฟลว์เพื่อสร้างแผนที่แรสเตอร์ที่เหมือนกัน (ในแง่ของความละเอียด coorinates, crs, ... ) จากข้อมูลจุดต่าง ๆ rasterize ไม่ใช่ตัวเลือกเนื่องจากการกระเจิงของจุดเชิงพื้นที่ จำเป็นต้องใช้ iwd หรือคล้ายกัน คุณพูดถูกกริดเป็นรูปสี่เหลี่ยมผืนผ้า - สิ่งที่ฉันต้องการในฐานะแม่แบบต้นแบบอาจเป็น SpatialPointsDataFrame ซึ่งสามารถ gridded S.
Janbob Squarebrains

คุณอาจต้องการมาสเตอร์แรสเตอร์ (ฮ่า!) แล้วสร้างกริดที่ตามมาทั้งหมดพร้อมกัน
Radar

2
ตกลง หากสิ่งที่ gridded แรสเตอร์มักจะเป็นคำตอบ ไม่ว่าจะเป็นหรือลุยผ่านการวิเคราะห์ข้อมูลเชิงพื้นที่ประมาณ 20 หน้าใน R เพื่อหาวิธีการทำ SpatialPixels จริง ๆ แล้วฉันได้เลือกนักเรียนปริญญาเอก เขาเลือก ... อย่างชาญฉลาด!
Spacedman

20

ในการแปลง RasterLayer เป็นวัตถุ Spatial * (Grid หรือ Pixels) คุณสามารถใช้ฟังก์ชัน coercion "เป็น"

library(raster)
r <- raster(matrix(runif(20),5,4))
r[r>.5] <- NA
g <- as(r, 'SpatialGridDataFrame')
p <- as(r, 'SpatialPixels')

plot(r)
points(p)

7

ข้อกำหนดสองข้อของคุณดูเหมือนจะแตกต่างกัน:

1) แม่แบบกริดแรสเตอร์ที่เชื่อถือได้บางชนิด

2) ตารางกระจัดกระจายที่ไม่ได้เก็บเซลล์ที่หายไปอย่างชัดเจน

sp :: GridTopology ให้อันแรกมันเป็นเพียงคำอธิบายของกริดตามพิกัดเซลล์ล่างซ้าย (cellcentre.offset) ระยะห่างระหว่างเซลล์ (Cellize) และขนาดของกริด (cells.dim)

คลา sp :: SpatialPixelsDataFrame ช่วยให้คุณสามารถเก็บกริดกระจัดกระจาย แต่ด้วยตัวเองมันเก็บมากกว่า "แม่แบบ" - มันยังเก็บทุกพิกัดอย่างชัดเจน นี่เป็นเพราะมันทำงานสองงานอย่างหนึ่งช่วยให้คุณรักษาพิกัดดั้งเดิมที่มาจากกริดและอาจผิดปกติเล็กน้อยสองอย่างช่วยให้คุณเก็บเฉพาะเซลล์เหล่านั้นที่มีค่าที่ถูกต้อง (เนื้อหา * เป้าหมายทั้งสองควรแยกจากกัน แต่เป็นอีกเรื่องหนึ่ง)

ฉันไม่คิดว่าแพคเกจแรสเตอร์มีอะนาล็อกที่ชัดเจนถึง GridTopology แต่คุณสามารถถือส่วนประกอบเพื่อ "ย้อนกลับไปเอง":

library(raster)
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)

## "cellsize"
res(r1)
## [1] 0.4761905 1.6666667

## extreme cell corners (just a different convention to sp's cellcentre)
extent(r1)
class       : Extent 
xmin        : 0 
xmax        : 10 
ymin        : -90 
ymax        : 90 

## we can also use bbox to get the same thing
bbox(r1)
min max
s1   0  10
s2 -90  90

## grid dimensions (including number of attributes/layers as 3rd "dim")
dim(r1)
## [1] 108  21   1

เชื่อมโยงสิ่งเหล่านี้เข้าด้วยกันเราสามารถเปลี่ยนจาก raster เป็น sp:

GridTopology(bbox(r1)[,1] + res(r1)/2, res(r1), dim(r1)[2:1])

(โปรดทราบว่าจะต้องย้อนกลับมิติข้อมูลอย่างไร) อีกวิธีที่ง่ายกว่าคือการบีบบังคับให้ SpatialGrid และใช้ getGridTopology ของ sp แม้ว่าจะมีราคาแพงกว่าเนื่องจากพิกัดที่ถูกสร้างขึ้นระหว่างทาง:

getGridTopology(as(r1, "SpatialGrid"))

ทั้งสามส่วนของแรสเตอร์ "โทโพโลยี" ไม่จำเป็นทั้งหมดเนื่องจากบางส่วนมีความซ้ำซ้อน แต่ไม่มีวิธีอื่นในการจับพวกมันทั้งหมดเป็นวัตถุเดียว - ยกเว้นแรสเตอร์ที่สร้างขึ้นด้านบนนั้นเป็น "ว่างเปล่า" และสามารถทำ งานที่ GridTopology ทำเพื่อ sp ฉันไม่แน่ใจเกี่ยวกับรายละเอียดว่า "ว่าง" เป็นอย่างไร แต่แน่นอนไม่เก็บช่อง "data" อย่างชัดเจนและเล็กกว่าที่จะมีค่าอยู่ในนั้น โดยทั่วไปแพคเกจแรสเตอร์ทำอย่างดีที่สุดเพื่อให้การใช้งานหน่วยความจำเหลือน้อยที่สุดดังนั้นคุณอาจไม่ต้องกังวลกับการเป็น "เบาบาง"

นั่นอาจช่วยอธิบายเพิ่มเติมอีกเล็กน้อยฉันรู้ว่าฉันทับคำตอบของ Spacedman แต่ก็ยังไม่ชัดเจนว่าคุณหมายถึงอะไรในคำถาม

  • (เนื่องจากคุณสามารถเก็บเซลล์ที่กระจัดกระจายได้โดยเพียงแค่เก็บดัชนีไว้แทนที่จะเป็นพิกัดที่ชัดเจนและในขั้นต้น "พิกัดที่ไม่สม่ำเสมอ" ของเซลล์นั้นสามารถเก็บไว้เป็นคุณลักษณะได้หากคุณต้องการจริงๆทั้ง sp หรือแรสเตอร์จัดการกับ rasters ที่ไม่ปกติเลย ไม่ใช่กรณีที่เป็นเส้นตรงที่เรียบง่าย - นี่คือการรักษาด้วยเครื่องมือ GIS ส่วนใหญ่ แต่เป็นเรื่องที่น่าเสียดายเพราะมันค่อนข้างธรรมดาในรูปแบบเช่น NetCDF และจัดการโดยกราฟิกเก่าที่ดีของ R :: ฟังก์ชั่นภาพ (แม้ว่าจะไม่ใช่ถ้าใช้ rasterImage ล่าสุด) .)

ขอบคุณสำหรับคำแนะนำที่ฉันต้องย่อย หวังว่าจะช่วยให้ฉันแก้ปัญหาหรือโพสต์คำถามที่ชัดเจนยิ่งขึ้น!
Janbob Squarebrains

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