必需的结果:
一个有两个表‘边’和‘节点’的数据库,可以用来生成一个图,它代表了某一地区(如城市)所有可行驶的道路(公路)。数据集是从.osm文件中解析的。
背景:
我将进行第二次尝试,创建一个包含两个表的数据库--节点和边,可以用来对其进行不同的最短路径计算。
首先,我尝试手动将不同的数据提取到数据库(php脚本)中:
问题是,这个序列是非常不可靠的,它只在小型数据集上工作,比如数千个节点,而不是数百万节点。
问题:
一个由数以百万计的节点和边缘组成的数据库,进行道路提取。根据特定的标签过滤器生成边缘是非常慢的。
可能的解决方案:
这次我要做的是:
问题:
如何正确地将.osm文件解析到数据库中,从而生成“边缘”和“节点”表?
如何才能将.osm中的可行驶道路提取到数据库中?
如何快速完成(我指的是数以百万计的节点和边表运行的脚本数小时,而不是数周)?
我应该把关系考虑进去吗?
如果是,我该怎么做?
发布于 2011-04-26 12:34:26
正如我在评论中提到的,在哪里真的没有必要插入被列入黑名单的边缘。另外,另一个问题出现在我的脑海中。为什么要删除节点表中的节点呢?您可以在节点表中添加一个特殊的标志字段(我们称之为used)。
将新行插入节点表时,此字段设置为false。此外,您还可以为边缘表中的insert实现一个触发器,对于每一个插入的行,节点表中的适当行都被标记为已使用。
完成该操作后,您可以只删除所有未使用的节点。也就是说,我想你现在用的是这样的东西:
delete from nodes where id not in (select start_node from edges);
delete from nodes where id not in (select end_node from edges);我建议你做以下几件事:
delete from nodes where used = false;发布于 2012-08-10 06:05:55
您可以使用渗透来执行任务。那你只需要提供一个包围盒..。关于多个示例和进一步的解释,请检查:此链接(查看“示例用法”一章)
https://stackoverflow.com/questions/5790227
复制相似问题