簡體   English   中英

在 R 中對齊大型柵格和空間點

[英]Aligning large raster and SpatialPoints in R

我有兩個數據集:

  1. 包含澳大利亞每個像素植被分類的柵格文件

該文件被描述為具有 EPSG:3577 https://epsg.io/3577的投影。 所有其他元數據以及數據本身都可以在http://www.agriculture.gov.au/abares/forestsaustralia/forest-data-maps-and-tools/spatial-data/forest-cover中找到

  1. 一個csv 文件,其中包含一個緯度列、一個經度列和各種其他變量的數據。

由於這也是一個大型數據集,我將只提供這個的頭部:

firms <- structure(list(latitude = c(-20.5897, -22.4119, -21.132, -23.9083, 
-23.5908, -23.689), longitude = c(147.6421, 148.8484, 148.1897, 
147.2966, 150.1676, 150.0994), brightness = c(320.7, 316.7, 320.5, 
320.1, 315.8, 314.3), scan = c(1.6, 2.1, 1.8, 1.7, 2.7, 2.7), 
    track = c(1.3, 1.4, 1.3, 1.3, 1.6, 1.6), acq_date = c("2017-01-01", 
    "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01"
    ), acq_time = c(47L, 47L, 47L, 47L, 47L, 47L), satellite = c("Terra", 
    "Terra", "Terra", "Terra", "Terra", "Terra"), instrument = c("MODIS", 
    "MODIS", "MODIS", "MODIS", "MODIS", "MODIS"), confidence = c(34L, 
    26L, 36L, 53L, 33L, 22L), version = c(6.2, 6.2, 6.2, 6.2, 
    6.2, 6.2), bright_t31 = c(299.6, 295.3, 299.7, 296.6, 291.7, 
    289.3), frp = c(19, 25.8, 22.9, 17.6, 35.4, 30), daynight = c("D", 
    "D", "D", "D", "D", "D"), type = c(0L, 0L, 0L, 0L, 0L, 0L
    )), row.names = c(NA, -6L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x10200e2e0>)

我的目標很簡單:

Plot 柵格數據,然后 plot 將 csv 文件中的每一行作為柵格頂部的一個點。

我對plot()levelplot()ggplot()很滿意,盡管后者看起來很傻,因為將這個巨大的柵格轉換為 data.frame 需要花費太多時間。

到目前為止,我的代碼如下所示:

library(rgdal)
library(raster)
library(rasterVis)
library(sp)
  1. 載入光柵文件
test <- raster('w001000.adf')
  1. 然后為 data.frame 創建坐標並使其成為 SpatialPoints 格式
coordinates(firms) <- ~longitude + latitude
firms_pts <- SpatialPoints(coords=coordinates(firms), proj4string = CRS("+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"))
  1. 將點數據轉換為與柵格相同的crs
firms_lyr <- spTransform(firms_pts, crs(test))

當我嘗試 plot 此時的數據時,我看不到任何點。

  1. 所以我在兩個數據集中使用相同的范圍,現在 plot 大致在彼此之上。
extent(test) <- extent(firms)
  1. plot
plot(test)
points(firms_lyr, pch=16, cex=0.1)

現在......令人討厭的是,數據集在空間上沒有正確對齊這個

顯然,這與投影有關。

我很確定我在步驟 3 和/或 4 中做錯了什么

這管用嗎? 我不確定這些點是否是遠東的點。

數據

firms <- structure(list(latitude = c(-20.5897, -22.4119, -21.132, -23.9083,  -23.5908, -23.689), 
                        longitude = c(147.6421, 148.8484, 148.1897, 147.2966, 150.1676, 150.0994)), 
                   .Names = c("longitude", "latitude"), 
                   class = "data.frame", row.names = c(NA, -6L))

xy <- firms[,c(2,1)]
firms_pts <- SpatialPointsDataFrame(coords = xy, data = firms,
                       proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))

使用 adf 進行 Shapefile 重投影

library(raster)
setwd(paste(dirname(rstudioapi::getActiveDocumentContext()$path), "/aus_for18", sep=""))
test <- raster("aus_for18.adf")
firms_lyr <- spTransform(firms_pts, crs(test))

繪圖

plot(test)
points(firms_lyr, pch=16, cex=1) #Queensland points

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM