将网格放置到shapefile中的多边形上,然后找到每个网格正方形的质心

时间:2020-07-01 09:18:39

标签: r shapefile sf

我有一个多边形的shapefile,我想通过覆盖一个网格将其分成较小的多边形。然后,我想找到由网格创建的每个较小多边形的质心。

我的数据框是:

df<-structure(list(shape = c(1.1, 1.1, 1.1, 1.1, 2.1, 2.1, 2.1, 2.1, 3.1, 3.1, 3.1, 3.1, 
4.1, 4.1, 4.1, 4.1, 5.1, 5.1, 5.1, 5.1, 6.1, 6.1, 6.1, 6.1, 7.1, 7.1, 7.1, 7.1, 8.1, 8.1, 
8.1, 8.1, 9.1, 9.1, 9.1, 9.1), longitude = c(43, 43, 40, 40, 23, 23, 20, 20, 25, 25, 38, 38, 
25,25, 38, 38, 45, 50, 50, 45, 65, 60, 60, 65, 60, 60, 80, 80, 60, 60, 80, 80, 20, 20, 80, 
80), latitude = c(10, 13, 13, 10, 10, 13, 13, 10, 10, 10.3, 10.3, 10, 12.7, 13, 13, 12.7, 
13, 13, 10, 10, 13, 13, 10, 10, 9.8, 9.5, 9.5, 9.8, 6, 5.7, 5.7, 6, 5, 4.5, 4.5, 5)), 
row.names = c(NA, 36L), class = "data.frame")

然后我将数据框转换为shapefile,如下所示:

area <- lapply(split(df, df$shape), function(x) { coords <- as.matrix(cbind(x$longitude, 
                                                                       x$latitude)); 
list(rbind(coords, coords[1,]))}) 

names(area) <-  NULL

Coord_Ref <-  st_crs(4326)
area <-  st_sfc(st_multipolygon(x=area), crs = Coord_Ref)
area <-  st_cast(area, "POLYGON")

然后我在多边形上放置一个网格并将其绘制:

plot(st_make_grid(area, cellsize=0.5))

enter image description here

我知道如何使用st_centroid函数查找多边形的质心:

st_centroid(area)

但是,最好以不使用st_centroid的方式执行此操作吗?我收到警告“ st_centroid没有为经度/纬度数据提供正确的质心”。还是在我处理小区域时忽略此警告可以吗?

0 个答案:

没有答案