在这种情况下,我想获得撒哈拉以南非洲次国家区域城市化的平均程度。
我的sf如下所示:
> africa_map
Simple feature collection with 543 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -25.36042 ymin: -46.96575 xmax: 63.49391 ymax: 27.66147
Geodetic CRS: WGS 84
First 10 features:
cname ccode regname continent geometry
1 Angola AO Bengo Africa MULTIPOLYGON (((13.371 -8.5...
2 Angola AO Benguela Africa MULTIPOLYGON (((12.53336 -1...
3 Angola AO Bie Africa MULTIPOLYGON (((16.61158 -1...
4 Angola AO Cabinda Africa MULTIPOLYGON (((12.78266 -4...
5 Angola AO Cuando Cubango Africa MULTIPOLYGON (((21.9838 -16...
6 Angola AO Cuanza Norte Africa MULTIPOLYGON (((15.40788 -7...
7 Angola AO Cuanza Sul Africa MULTIPOLYGON (((13.7926 -11...
或绘制:
另一方面,光栅数据采用以下形式:
> imported_raster
class : RasterLayer
dimensions : 18000, 36082, 649476000 (nrow, ncol, ncell)
resolution : 1000, 1000 (x, y)
extent : -18041000, 18041000, -9e+06, 9e+06 (xmin, xmax, ymin, ymax)
crs : +proj=moll +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
names : GHS_BUILT_LDS1975_GLOBE_R2018A_54009_1K_V2_0
values : 0, 100 (min, max)
这些比整个星球所需的要细得多。为了加速计算,我首先聚合光栅,然后将其转换为shapefile,剩余的每个光栅像素都转换为shapefile中的点几何形状。然后,这个shapefile可以聚合到我的区域边界。诚然,这不是很优雅(最终也不起作用)。
library(tidyverse)
library(sf)
library(raster)
library(stars)
library(rgdal)
> # aggregate (to 25x25 km)
> imported_raster_ag <- aggregate(imported_raster, fact=25)
>
> # convert to sp
> urbanized = rasterToPolygons(imported_raster_ag)
> # convert to sf
> urbanized_sf <- st_as_sf(urbanized)
# compare projection
st_crs(africa_map)==st_crs(urbanized_sf)
# align projection
urbanized_sf <- st_transform(urbanized_sf, st_crs(africa_map))
urbanized_sf <- urbanized_sf %>% rename(urbanization = GHS_BUILT_LDS1975_GLOBE_R2018A_54009_1K_V2_0)
> urbanized_sf
Simple feature collection with 398872 features and 1 field (with 500 geometries empty)
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -179.9999 ymin: -57.40086 xmax: 179.9963 ymax: 82.33738
Geodetic CRS: WGS 84
First 10 features:
urbanization geometry
1 0 POLYGON ((-117.1367 82.3373...
2 0 POLYGON ((-116.2261 82.3373...
3 0 POLYGON ((-115.3156 82.3373...
4 0 POLYGON ((-114.405 82.33738...
5 0 POLYGON ((-113.4944 82.3373...
6 0 POLYGON ((-112.5838 82.3373...
7 0 POLYGON ((-111.6732 82.3373...
8 0 POLYGON ((-110.7627 82.3373...
9 0 POLYGON ((-109.8521 82.3373...
10 0 POLYGON ((-108.9415 82.3373...
当时的想法是,到目前为止,我可以沿着其他旧金山的区域边界将这些点聚合起来。但是,我收到一条错误消息,我找到的唯一建议修复程序只会重复它。
> urbanized_africa <- aggregate(urbanized_sf["urbanization"], by = africa_map$geometry, mean)
although coordinates are longitude/latitude, st_intersects assumes that they are planar
Error in CPL_geos_binop(st_geometry(x), st_geometry(y), op, par, pattern, :
Evaluation error: IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4.
> urbanized_sf_fixed <- sf::st_make_valid(urbanized_sf)
Error in CPL_geos_make_valid(x) :
Evaluation error: IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4.
我想在我的转化过程中,可能有什么地方被破坏了,或者有其他更根本的缺陷。将光栅数据聚合到shapefile多边形中,有什么更优雅、更具功能性的工作流?
查看提取功能
在你的情况下
africamap$urbanized <- extract(imported_raster, africamap, fun="mean")
africa amap
仍然应该首先投影到光栅投影。如果您有nodata
值,那么明智的做法是向调用添加na.rm=TRUE
参数。
为了缩短处理时间,您还可以将光栅裁剪到非洲。
在exactextractr软件包中还有一个更快的extract版本。您还可以利用使用terra而不是光栅来进行光栅处理。
在R中,与包“光栅”中的“提取”相比,在包“空间生态”的函数“zonal.stats”中计算平均值存在偏差。对于两者,我都使用多边形作为区域字段,并使用光栅作为值。 这是一个例子: z2和z1偏差的原因是什么?
下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。
我正在尝试在R中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光
我已经为此挣扎了几个小时。我有一个包含177个多边形(即177个县)的shapefile(称为“shp”)。这个shapefile覆盖在光栅上。我的光栅(称为“ras”)由具有不同污染值的像素组成。 现在我想提取每个多边形的所有像素值及其出现次数。 这正是QGIS功能“分区直方图”所做的。但我想在R中做同样的事情。 我尝试了提取()函数,并设法获得了每个县的平均值,这已经是第一步,但我想制作像素分
我目前正在将原始矩阵转换为光栅以使用焦距函数,然后我想将光栅转换回矩阵。但是,当我尝试将光栅函数用作时,出现了一条错误消息。矩阵()。即使有这个非常简单的例子: 以下是我得到的: 如果(!is.null(names(x)))列表(names(x),,则数组(x,c(length(x),1L)中出错: “dimnames”[1]的长度不等于数组范围 我正在使用RstuIO、R版本3.4.0和、和库。
我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?