gpt4 book ai didi

r - 如何在不耗尽内存的情况下将非常大的 OpenStreetMap 文件划分为 R 中的较小文件?

转载 作者:行者123 更新时间:2023-12-04 10:55:34 27 4
gpt4 key购买 nike

我目前正在寻找不大于墨西哥城市大小的 map 文件(最大,大约 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)
}

我在循环内运行它,但它甚至无法通过第一个。当我尝试运行它时,我的电脑死机了,我只能用手机截屏。内存在几分钟内稳定地倾斜,然后突然上升得非常快,在我的电脑死机之前我无法使用react。

这样做的更好方法是什么?我希望必须运行这个循环大约 100-150 次,所以任何在内存方面更有效的方法都会有所帮助。我不想从 API 服务下载较小的文件。
如有必要,我愿意使用另一种编程语言(最好是 Python 或 C++),但我更愿意将其保留在 R 中。

enter image description here

最佳答案

我建议不要为此使用R。

这项工作有更好的工具。从命令行或使用 DBMS 拆分、过滤内容的多种方法.

以下是从 OSM Wiki 中提取的一些替代方案 http://wiki.openstreetmap.org :

Filter your osm files using osmfilter : "osmfilter 用于过滤 OpenStreetMap 数据文件的特定标签。您可以定义不同类型的过滤器来获取 OSM 对象(即节点、路、关系),包括它们的依赖对象,例如路节点、关系路、关系其他关系。”

使用 osmconvert 基于多边形或边框进行裁剪:http://wiki.openstreetmap.org/wiki/Osmconvert#Applying_Geographical_Borders

您可以为 osmfilter 和 osmconvert 编写 bash 脚本,但我建议使用 DBMS。只需使用 osm2pgsql 导入 PostGIS ,并将您的 R 代码与任何 Postgresql 驱动程序连接起来。这将优化您的读/写操作。

关于r - 如何在不耗尽内存的情况下将非常大的 OpenStreetMap 文件划分为 R 中的较小文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com