r - 使用 R 对 1 亿个点进行空间连接
问题描述
我有一个包含 1 亿个点的数据集。我需要在空间上将它们连接到它们相交的区域。我正在使用sf
and st_join
,但不出所料,当我尝试执行此操作时,我的机器内存不足。
为了解决这个问题,我将我的数据拆分为更易于管理的大小并循环遍历它们以获得我想要的结果。但是,我想看看是否有更聪明的方法来实现我的最终目标(将区域 ID 附加到我的原始数据中)。
require("data.table")
require("dplyr")
require("sf")
DT <- data.table(X=runif(100000000, min=300000, max=500000),
Y=runif(100000000, min=200000, max=400000),
UID = 1:100000000,
Group = rep(1:50, each=100000000/50))
Polygon <- st_read("https://ons-inspire.esriuk.com/arcgis/services/Administrative_Boundaries/Regions_December_2019_Boundaries_EN_BFE/MapServer/WFSServer?request=GetCapabilities&service=WFS") %>%
select(-gml_id) %>%
st_cast(., "GEOMETRYCOLLECTION") %>%
st_collection_extract(., "POLYGON") %>%
group_by(across(1:(ncol(.)-1))) %>%
summarise() %>%
st_cast("MULTIPOLYGON") %>%
ungroup()
DT_Split <- split(DT, by=c("Group"))
DT_Joined <- data.table()
for (i in 1:length(DT_Split)){
DT_Join <- st_join(st_as_sf(DT_Split[[i]], coords = c("X","Y"),crs=27700), Polygon, join = st_intersects)
DT_Split_Join <- DT_Join %>% st_drop_geometry %>% as.data.table
DT_Joined <- rbindlist(list(DT_Joined, DT_Split_Join))
}
解决方案
推荐阅读
- vue.js - 将对象数组动态添加到 Vue(反应性问题)
- java - 如何显示区域?
- python - 遍历python中的列表列表
- javascript - “AbortError:操作被中止。” - 在 Firefox 中调整 HTML 5 video.currentTime 时出错
- ios - 如何在 swift IOS 示例中的 CollectionView 单元图像视图的选择上显示一个透明按钮?
- java - 我收到 CELL_TYPE_NUMERIC 错误。我有什么建议吗?
- php - 如何在 url href 的字符串中正确回显 php 变量?
- javascript - 如何使用javascript for in语句评估对象的值并返回格式
- javascript - 分别计算每个添加行的总数和 Javascript 中所有行的总数
- verilog - 如果我们将异步重置块与同步重置一起使用会发生什么?