自动将线捕捉到点吗?


19

我有两个矢量shapefile:一个文件是表示人孔的点,另一个是折线文件,它表示通向人孔的管道。我需要在距最近的沙井的指定距离内捕捉线。

是否有一种简单的方法无需手动完成此操作?

线->点

更新资料

根据Alexandre,我已将shapefile导出为spacespaceite格式。不知道下一步该怎么做。

在此处输入图片说明

更新#2我创建了一个新的数据库文件,并使用spatialite-gui导入了shapefile文件到新的数据库中,我调整了SQL查询,但是如您所见,我收到一条错误消息:“没有这样的列:f.geom”

在此处输入图片说明


在Spatialite空间表(图层)中,要素几何保存在属性中。名称可以不同。在“管道”表中,该属性称为几何。我将假设mh也作为Geometry属性来更新我的答案。
亚历山大·内托

我收到一个错误“没有这样的功能:ST_Snap”。我正在Windows 7 64bit上使用QGIS 1.8。
GreyHippo

您有什么Spatialite?您可以在QGIS>帮助>关于
Alexandre Neto中

“没有这样的专栏:f.geom” -尝试使用f.Geometry
vinayan

我的Spatialite版本是3.0.1
GreyHippo

Answers:


26

如果您愿意将数据放入Postgis(或Spatialite)中,则可以使用ST_Snap进行所需的操作。

只需使用线layer \ table作为输入,并将点图层作为参考,然后设置公差。像这样:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

结果是这样的:

在此处输入图片说明

然后,您可以使用要素标识符更新几何。


我将代码放在哪里“选择...来自...”?“使用功能标识符”是什么意思?
GreyHippo

将文件导入数据库(postgis或spacespaceite)后,可以使用DB Manager查看数据库表并在SQL Window中运行SQL查询(代码),然后将其加载到画布中。告诉我这是否对您有用,然后我们将进行更新。
亚历山大·内托

Alexandre,请参阅上面的更新。我将文件导出到两个spacespacelite文件。
GreyHippo

您应该将两个文件放在同一个Spatialite数据库中,只需将“ pipe”拖到“ mh.sqlite”数据库中即可。之后,更新SQL代码,将“ points”更改为“ mh”,将“ lines”更改为“ pipe”。同时将“ gid”修改为您的“ pipe” ID。之后,您可以执行并加载结果。
亚历山大·内托

3

我对QGIS或GRASS不太了解,但是一些快速的Google搜索已在GRASS中产生v.clean应该可以解决问题。

看看这篇文章这篇文章

QGIS和GRASS的替代品:

如果要在ArcGIS中执行此操作,则可能会将数据存储在文件地理数据库中的要素数据集中,并创建拓扑以识别点层不在直线端点上的区域。然后,您可以使用Error Inspector修复错误

但是,最快,最简单的解决方案可能是在FME中。您可以尝试使用快照程序工具或更好的AnchoredSnapper工具。如果使用AnchoredSnapper,请确保您的捕捉类型为“端点捕捉”。当然,您将需要FME的许可证。但是,如果您没有试用版,则可以下载14天试用版。


我看过v.clean,但它仅使用一层,我需要将一层与另一层进行比较。另外,我更多地是在寻找QGIS /开源选项。
GreyHippo

1
@GreyHippo,草是开源的
artwork21

1
我知道GRASS是开源的,但您的其他选择却不是。
GreyHippo


-1

手动方式

Qgis->设置->捕捉选项(我不确定,但可能需要CadTools扩展名)并启用拓扑编辑。

自动方式

v.clean,位于QGIS的SEXTANTE工具箱的GRASS工具中。如果您拥有PostGIS 2.0,则可以使用ST_Snap和ST_SnapToGrid()(并且没有理由不能使用它,这是一个非常好的空间工具)

商业方式

FME和MRF工具(商业扩展,我有一个评估版。非常好)。

另外,我对使用开源工具进行水管/下水道管理很感兴趣,您有什么建议吗?


我认为这就是GreyHippo所谓“手动执行”的意思。仅使用“捕捉”选项,您将需要手动移动每个悬空节点以激活捕捉。还是我错过了什么?
杰克

没有。我是盲人。
simplexio

Simplexio,我不想手动进行。我希望有一个我不知道的插件或程序。
GreyHippo

我认为您不能在两层上使用GRASS v.clean吗?
GreyHippo

1
如果我正确地记得,它可以解决太短的线。您会看到,您遇到的问题不是您的人孔在正确的地方,而是您的下水道网络在拓扑上不正确。那只需要管道层。我所看到的每个公用事业网络系统都假定每个下水道交叉口都有人孔。本课程假设您要具有正确的拓扑。
simplexio
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.