我有两个矢量shapefile:一个文件是表示人孔的点,另一个是折线文件,它表示通向人孔的管道。我需要在距最近的沙井的指定距离内捕捉线。
是否有一种简单的方法无需手动完成此操作?

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

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

我有两个矢量shapefile:一个文件是表示人孔的点,另一个是折线文件,它表示通向人孔的管道。我需要在距最近的沙井的指定距离内捕捉线。
是否有一种简单的方法无需手动完成此操作?

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

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

Answers:
如果您愿意将数据放入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
结果是这样的:

然后,您可以使用要素标识符更新几何。
我对QGIS或GRASS不太了解,但是一些快速的Google搜索已在GRASS中产生v.clean应该可以解决问题。
QGIS和GRASS的替代品:
如果要在ArcGIS中执行此操作,则可能会将数据存储在文件地理数据库中的要素数据集中,并创建拓扑以识别点层不在直线端点上的区域。然后,您可以使用Error Inspector修复错误。
但是,最快,最简单的解决方案可能是在FME中。您可以尝试使用快照程序工具或更好的AnchoredSnapper工具。如果使用AnchoredSnapper,请确保您的捕捉类型为“端点捕捉”。当然,您将需要FME的许可证。但是,如果您没有试用版,则可以下载14天试用版。
在QGIS中,将几何捕捉到图层即可完成所需的工作。查看此线程 如何将线捕捉到最近的点?
手动方式
Qgis->设置->捕捉选项(我不确定,但可能需要CadTools扩展名)并启用拓扑编辑。
自动方式
v.clean,位于QGIS的SEXTANTE工具箱的GRASS工具中。如果您拥有PostGIS 2.0,则可以使用ST_Snap和ST_SnapToGrid()(并且没有理由不能使用它,这是一个非常好的空间工具)
商业方式
FME和MRF工具(商业扩展,我有一个评估版。非常好)。
另外,我对使用开源工具进行水管/下水道管理很感兴趣,您有什么建议吗?