Kir*_*ill 5 mysql postgresql openstreetmap xml-parsing
要求的结果:
具有两个表,"边缘"和"节点"的数据库,可用于生成表示某个区域(例如城市)中所有可行驶道路(高速公路)的图形.数据集是从.osm文件解析的.
背景:
我要第二次尝试创建一个包含两个表的数据库 - 节点和边,可用于对其进行不同的最短路径计算.
首先,我尝试手动将不同的数据提取到数据库中(php脚本):
问题是这个序列非常不可靠,它只能在小型数据集上运行"如此",例如数千个节点,而不是数百万个.
问题:
对于由数百万个节点和边组成的数据库,道路提取(基于某个标签过滤器生成边缘)非常慢.
可能的方法:
我这次要做的事情:
题:
如何正确地将.osm文件解析为数据库以使"边"和"节点"表成为结果?
如何从.osm中仅将可行驶的道路提取到数据库中?
我该如何快速完成(我的意思是为数百万个节点和边缘表运行数小时的脚本,而不是数周)?
我应该考虑到关系吗?
如果是的话,我该怎么做?
正如我在评论中提到的,实际上没有必要插入列入黑名单的边缘。另外,我想到了另一个问题。为什么仍然需要从节点表中删除节点?您可以在节点表中添加一个特殊的标志字段(我们称之为used )。
当您向节点表插入新行时,该字段将设置为 false。您还可以实现一个触发器来插入边缘表,对于每个插入的行,节点表中的相应行被标记为已使用。
完成后,您可以删除所有未使用的节点。也就是说,我想现在你使用的是这样的东西:
delete from nodes where id not in (select start_node from edges);
delete from nodes where id not in (select end_node from edges);
Run Code Online (Sandbox Code Playgroud)
我建议您执行以下操作:
delete from nodes where used = false;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3018 次 |
最近记录: |