我有一个20GB的GeoPackage,我需要与一个小得多的GeoPackage(100MB)相交。如果文件大小较小,那么这将起作用:
library(sf)
BigDataset <- st_read("https://automaticknowledge.org/gb/greenspace/Manchester_greenspace.gpkg")
Dataset <- st_read("https://automaticknowledge.org/gb/wards/Manchester_wards.gpkg")
Intersection <- Dataset %>%
st_intersection(., BigDataset) %>%
st_collection_extract(., "POLYGON")
然而,由于20GB文件的大小,我的R会话崩溃了。有没有一种方法可以一次只迭代加载20GB GeoPackage的一部分(比如将其分块为1000个行组),并在加载和处理所有数据后最终生成单个“Intersection”输出之前对每个块执行交集?
1条答案
按热度按时间eit6fx6z1#
你很幸运,你正在处理geopackages。对于一个geopackage是一个数据库(sqlite是技术性的),可以使用SQL查询。
考虑这段代码;它的作用是:
要构造用于迭代的sql代码,请考虑使用
{glue}
包。此外,这可能有点超出范围,应该可以使用空间SQL函数完全在数据库中执行操作,省略内存受限的R。