R使用ms_simplify()处理法国城市矢量数据时进程内存溢出报错
问题原因
ms_simplify()默认使用包内置的V8 JavaScript引擎执行简化逻辑,V8引擎有独立的内存上限,不受R全局内存配置控制。你设置的sys_mem参数仅在调用系统原生mapshaper命令行工具时才会生效,默认模式下该参数不生效,因此还是会触发内存不足报错。
可行解决方案
- 方案1:切换为调用系统原生mapshaper执行简化
先通过node.js的npm包管理器安装全局mapshaper工具,命令如下:
安装完成后,在调用npm install -g mapshaperms_simplify()时新增sys = TRUE参数启用系统原生调用,此时sys_mem参数即可正常生效:shp2 <- ms_simplify(shp.city.sf, sys = TRUE, sys_mem = 12) - 方案2:使用sf包原生简化函数规避V8内存限制
sf包自带基于GEOS引擎的拓扑简化函数st_simplify(),完全在R内存环境中运行,不会触发V8内存报错:# dTolerance控制简化精度,单位与数据坐标系一致,数值越大简化程度越高 shp2 <- st_simplify(shp.city.sf, dTolerance = 100, preserveTopology = TRUE) - 方案3:提前裁剪数据体量降低内存消耗
如果你不需要数据集的所有属性字段,提前筛选保留必要字段后再执行简化,可大幅降低内存占用:
预处理完成后再执行简化操作即可。# 仅保留城市编码、名称、几何字段,其余字段删除 shp.city.sf <- shp.city.sf[, c("code", "nom", "geometry")]
内容的提问来源于stack exchange,提问作者BPeif
相关产品推荐
相关产品推荐

