Max*_*cia 6 memory r openstreetmap osmar
我目前正在寻找不大于墨西哥城市规模的地图文件(最大,经度约为3度/纬度).但是,在尝试这样做时,我一直遇到内存问题(至少).OSM XML对象的文件大小为1.9 GB,以供参考.
library(osmar)
get.map.for.municipality<-function(province,municipality){
base.map.filename = 'OpenStreetMap/mexico-latest.osm'
#bounds.list is a list that contains the boundaries
bounds = bounds.list[[paste0(province,'*',municipality)]]
my.bbox = corner_bbox(bounds[1],bounds[2],bounds[3],bounds[4])
my.map.source = osmsource_file(base.map.filename)
my.map = get_osm(my.bbox,my.map.source)
return(my.map)
}
Run Code Online (Sandbox Code Playgroud)
我在循环中运行它,但它甚至无法通过第一个循环.当我尝试运行它时,我的计算机冻结了,我只能用手机截取屏幕截图.记忆在几分钟内稳定地倾斜,然后它很快就快速上升,在计算机冻结之前我无法做出反应.
这样做的更好方法是什么?我希望必须运行这个循环大约100-150次,所以任何在内存方面更有效的方法都会有所帮助.我不想从API服务下载较小的文件.如果有必要,我愿意使用另一种编程语言(最好是Python或C++),但我更喜欢将它保存在R.

我建议不要为此使用 R。
有更好的工具可以完成这项工作。从命令行或使用DBMS分割、过滤内容的方法有很多。
以下是从 OSM Wiki http://wiki.openstreetmap.org中提取的一些替代方案:
使用 osmfilter 过滤你的 osm 文件:“osmfilter 用于过滤 OpenStreetMap 数据文件中的特定标签。你可以定义不同类型的过滤器来获取 OSM 对象(即节点、路径、关系),包括它们的依赖对象,例如路径的节点,关系的方式、其他关系的关系。”
使用 osmconvert 基于多边形或边框进行裁剪:http://wiki.openstreetmap.org/wiki/Osmconvert#Applying_Geographical_Borders
您可以为 osmfilter 和 osmconvert 编写 bash 脚本,但我建议使用 DBMS。只需使用osm2pgsql导入 PostGIS ,并将 R 代码与任何 Postgresql 驱动程序连接。这将优化您的读/写操作。