Ahs*_*tar 5 postgresql postgis pgrouting
我正在 Windows 上工作,并在数据库上启用了扩展 postgis、pgrouting。我安装了 postgreSQL 9.4,并且正在使用来自无界研讨会( http://workshops.boundlessgeo.com/tutorial-routing/ )的数据。
SELECT pgr_nodeNetwork('edges',0.001,'geom','gid','noded')
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,它运行大约 1 分钟,之后会生成FAIL. 我该如何解决这个问题?我的 pgr_createTopology 查询已成功运行。
NOTICE: PROCESSING:
NOTICE: pgr_nodeNetwork('edges',0.001,'geom','gid','noded')
NOTICE: Performing checks, pelase wait .....
NOTICE: Processing, pelase wait .....
ERROR: line_locate_point: 1st arg isnt a line
CONTEXT: SQL statement "create temp table inter_loc on commit drop as ( select * from (
(select l1id, l2id, st_linelocatepoint(line,source) as locus from intergeom)
union
(select l1id, l2id, st_linelocatepoint(line,target) as locus from intergeom)) as foo
where locus<>0 and locus<>1)"
PL/pgSQL function pgr_nodenetwork(text,double precision,text,text,text) line 184 at EXECUTE statement
********** Error **********
ERROR: line_locate_point: 1st arg isnt a line
SQL state: XX000
Context: SQL statement "create temp table inter_loc on commit drop as ( select * from (
(select l1id, l2id, st_linelocatepoint(line,source) as locus from intergeom)
union
(select l1id, l2id, st_linelocatepoint(line,target) as locus from intergeom)) as foo
where locus<>0 and locus<>1)"
PL/pgSQL function pgr_nodenetwork(text,double precision,text,text,text) line 184 at EXECUTE statement
Run Code Online (Sandbox Code Playgroud)
我在我的项目中遇到了这个问题,我花了几个小时试图找出导致它的原因以及如何解决它。我将描述我的情况以及我如何解决它,希望它能在将来帮助其他人。
我正在使用ogr2ogr将 Shapefile 导入到我的数据库中,并且-nlt PROMOTE_TO_MULTI在导入过程中我使用了作为我的参数之一;这导致我的几何图形被导入为 MultiLineStrings。
从我观察到的行为以及其他人(以及更多人)提到的情况来看,该函数不能很好地与 MutliLineStrings 配合使用。pgr_nodeNetwork()
由于 MultiLineStrings 不适用于路由,因此我从 dkastl 的答案中获取了 SQL并在我的数据上运行它,以查看我是否确实需要MultiLineStrings 或者我是否可以使用 LineStrings。
SELECT
COUNT(
CASE WHEN ST_NumGeometries(geom) > 1 THEN 1 END
) AS multi,
COUNT(geom) AS total
FROM network_nodes;
Run Code Online (Sandbox Code Playgroud)
运行之后,我发现我对 MultiLineStrings 的需求为零,因此我使用 ogr2ogr 重新导入了我的 Shapefile -nlt LINESTRING,然后就可以pgr_nodeNetwork()毫无问题地运行了。
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |