You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rmapshaper调用系统mapshaper裁剪sf图层过慢且转GeoJSON报错

问题排查与解决方案

一、sf图层裁剪耗时异常问题

执行代码:

ms_clip(MySfLayer, MySfClippingLayer, sys=TRUE, sys_mem=30)

已启用系统mapshaper(sys=TRUE)并分配30GB内存,mapshaper 0.6.102已正确安装并配置到PATH,R及rmapshaper均为最新版本,但R中处理耗时数小时,直接在Windows系统中使用mapshaper执行相同操作却速度极快。怀疑rmapshaper未调用系统mapshaper,或sf相关预处理步骤耗时过长。

排查与解决步骤

  1. 验证系统mapshaper调用状态
    运行rmapshaper::check_sys_mapshaper(),确认返回TRUE。若返回FALSE,说明环境变量PATH未生效,可重启R会话,或手动指定mapshaper路径:
    options(rmapshaper.mapshaper_path = "C:/你的mapshaper安装路径/mapshaper.exe")
    
  2. 绕开自动转换的耗时步骤
    手动将sf图层导出到短路径的GeoJSON文件,再传入ms_clip,跳过R内部的sf到GeoJSON转换:
    # 创建临时目录(确保路径短)
    dir.create("C:/temp_ms", showWarnings = FALSE)
    # 导出图层
    sf::st_write(MySfLayer, "C:/temp_ms/target.geojson", delete_dsn = TRUE)
    sf::st_write(MySfClippingLayer, "C:/temp_ms/clip.geojson", delete_dsn = TRUE)
    # 执行裁剪
    result <- ms_clip("C:/temp_ms/target.geojson", "C:/temp_ms/clip.geojson", sys=TRUE, sys_mem=30)
    

二、GeoJSON格式裁剪时的文件名过长报错

执行代码:

MySfLayer <- 
ms_clip(MyGeoJLayer, MyGeoJClippingLayer, sys=TRUE, sys_mem=30)

报错信息:

Allocating 30 GB of heap memory
[o] Wrote C:\Users\JLDUPO~1\AppData\Local\Temp\RtmpScM8M9\filec6066891abc.geojson
Error in unlink(c(target_layer, overlay_layer)) :
file name conversion problem -- name too long?

解决方法

问题源于Windows默认的文件路径长度限制(260字符),R生成的临时文件路径超出限制。可通过以下方式解决:

  1. 修改R的临时目录到短路径
    Sys.setenv(TMP = "C:/temp")
    Sys.setenv(TEMP = "C:/temp")
    # 重新执行裁剪
    MySfLayer <- ms_clip(MyGeoJLayer, MyGeoJClippingLayer, sys=TRUE, sys_mem=30)
    
  2. 手动保存GeoJSON到短路径文件
    参考第一部分的手动导出方法,直接传入短路径的文件路径到ms_clip,避免使用R自动生成的长临时文件名。

内容的提问来源于stack exchange,提问作者Jean-Luc Dupouey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:11