在地图上检测路口的有效方法是什么?


14

对于我的项目,我可能会从任何来源收到地图,对于我正在制作的C ++算法,该算法必须知道路口(两个以上路段相交的节点)在哪里。此外,在我得到的许多地图中,都有道路上冲和下冲(即:道路连接不正确)。解决问题的一种方法是使用Autocad“清理”道路网络。我的问题是:

  1. 有没有一种有效的方法(任何软件可以做到这一点?)以GML格式获取我的地图,其中包含有关地图中道路交叉口的信息?(也许有一个GML标签,上面写着一个特定的节点是一个结点)
  2. 还有其他方法可以“清洁”道路网吗?

同事们建议使用FME,但这涉及编写脚本,我们不确定该脚本是否足够灵活以适应所有地图。检测路口的唯一其他方法是使用蛮力并找出哪些路段具有公共节点。ArcGIS有帮助吗?(还没使用过,但听说过)我敢肯定应该有更好的方法...


2
是否需要找到自相交的道路?它应如何处理退化的几何形状(所有顶点重合从而长度为零的折线)。在相交是线性线段而不仅仅是点的地方,如何处理重合线?
Kirk Kuykendall 2010年

@柯克:您提到的情况让我有些震惊。我是GIS的新手,甚至不知道存在这种可能性。1.Self相交需要多个路段。除非是天桥,否则我会将这些交叉路口视为路口。2.我什至无法看到退化的几何图形,所以我不知道该怎么回答。3.重合线应被视为两条独立的道路,因为这也是我认为它们也将出现在现实生活中的方式。
导航

Answers:


9

如果您的道路呈空间形式(例如Shapefile),则可以将其加载到PostGIS中,并使用SQL查询自动查找。我之前已经做过-SQL语句旨在为每条道路查找在地理上相交的道路,并为每个交叉路口创建一个节点。

稍后我将尝试清理,但这是您可以采取的基本流程...

for line in road_layer_lines:
    ilines = get_intersecting_objects(line)
    for iline in ilines:
        road_junctions.extend(get_intersection(line, iline))

ST_ *函数是在PostGIS中使其工作的原因

  • ST_Envelope抓取给定几何的边界框-用于加速算法。可以快速但不太准确地通过边界框缩小地理搜索范围,然后使用实际几何形状扫描结果。
  • ST_Intersects:确定两个几何是否相交
  • ST_Intersection:返回两个几何的交集

以下只是一些片段,因为我没有时间完成,也许有人可以在我回到这里之前对其进行编辑...

SELECT id, the_geom FROM road_lines
SELECT roads.id FROM road_lines roads WHERE ST_Intersects(roads.the_geom, my_geom)
SELECT ST_Intersection(roads.the_geom, my_geom) FROM road_lines roads WHERE roads.id = my_id

只是共享:我遇到的另一个数据库是< oracle.com/technetwork/database/berkeleydb/overview/index.html >。显然,查询非常快,因为查询可以作为可嵌入应用程序的库使用。
导航

1
@ dmsnell-也许您可以提供用于完成此任务的SQL查询类型的示例?
RyanKDalton

11

您可以使用缓冲区以惊人的方式分析折线。这通常效率不高-缓冲区会创建许多其他顶点-但是(a)这是许多GIS中可用的技术(基于矢量或栅格的技术),并且(b)有时它可以产生否则难以获得的信息。

在这种情况下,先对道路进行少量缓冲,然后对相同数量的负数进行缓冲,然后在所有弯道所有交叉路口周围几乎没有“孤岛” 。这很容易在几何上证明。

这是一个10 m折线缓冲区(灰色)及其-10 m缓冲区(浅红色)在650 m宽的地图中的示例:

图1

现在,将原始多段线图层与这些岛多边形相交,按岛标识符合并线段,然后计算片段数:

图2

浅黄色段表示高计数段,深青色段表示低计数段。通过这种方式,我们(a)找到了所有折弯和交叉点(包括自相交)和近交点(参见最左端,两个线段不太相交的地方))和(b)区分了折弯和交点。我们可以通过选择包含两个或多个相连线段的岛来找到几乎交界处:折弯仅包含相连线段。

由于缓冲的对称性,相交岛的质心是相交点。

这种分析风格的一个美丽方面是,它并不关心基础折线的表示方式:它可以是单个要素,可以是每个线段的一个要素,或介于两者之间的任何要素。


6

是的,您可以肯定使用FME进行此操作。有许多处理变形,交叉和拓扑的“变压器”。在这种情况下,我将尝试使用TopologyBuilder变压器。

任何脚本都在图形环境中完成,因此非常简单。

您始终可以从www.safe.com获得试用版。

(披露:Mark Ireland,又名FME传播者,Safe Software Inc.)


我第二。从AutoCAD到GML的转换以及拓扑清理,FME都非常适合该特定问题。它在应用中可以是惊人的通用。
blord-castillo 2011


-1

您可以免费试用Arcgis网络分析师的服务,只需单击几下即可在不到10秒的时间内完成此操作。


-1

可以使用网络分析师在ArcGIS中完成此过程。

在ArcGIS中还有另一种方法:您可以按照以下步骤操作:“ Arctoolbox”→“数据管理工具”→“功能”→“特征顶点到点”,然后就可以执行所需的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.