ฉันต้องการ Spatial Grid เป็นกริดหลักสำหรับแผนที่เฉพาะเรื่องที่หลากหลาย ฉันจะสร้าง Spatial Grid จากแรสเตอร์เพื่อยกเลิกพิกเซล NA ทั้งหมดได้อย่างไร
ฉันต้องการ Spatial Grid เป็นกริดหลักสำหรับแผนที่เฉพาะเรื่องที่หลากหลาย ฉันจะสร้าง Spatial Grid จากแรสเตอร์เพื่อยกเลิกพิกเซล NA ทั้งหมดได้อย่างไร
คำตอบ:
คุณสามารถรับเซลล์ที่ไม่ใช่ 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 จะไม่มีเหตุผล
ในการแปลง 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)
ข้อกำหนดสองข้อของคุณดูเหมือนจะแตกต่างกัน:
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 แต่ก็ยังไม่ชัดเจนว่าคุณหมายถึงอะไรในคำถาม