【发布时间】:2019-10-19 19:37:04
【问题描述】:
我正在尝试在MULTILINESTRING 中获取POINT 的索引位置。
这是我遇到的整个查询:
SELECT req.id, (dp).geom, netgeo_point_tech.id, ST_Line_Locate_Point(st_lineMerge(geom_cable), (dp).geom)
FROM (SELECT id, ST_DumpPoints(geom) as dp, geom as geom_cable FROM netgeo_cable_test ) as req
JOIN netgeo_point_tech ON ST_dwithin(netgeo_point_tech.geom, (dp).geom, 1)
ORDER BY req.id, (dp).path [ 1] ASC
我得到的错误是:line_locate_point : 1st arg isnt a line。
错误是由于st_lineMerge() 函数的返回导致LINESTRING 和MULTILINESTRING。
我不明白这个。 st_lineMerge() 应该只返回 LINESTRING.ST_LineMerge()
当我尝试这样一个简单的查询时:
select st_astext(st_linemerge(geom)) from netgeo_cable_test
输出是:
)
我想从中吸取教训,因此,如果可能的话,请向我解释我在这里做错了什么,或者我的方法是否缺乏洞察力。
【问题讨论】:
-
在您的原始查询中,您将连接添加到另一个表,并且您只保留电缆几何的子集。合并这个子集时,结果不再是一条简单的线,而是一条多线,这使得 st_lineLocatePoint 失败。
-
@JGH 我不明白为什么它没有返回
LINESTRING?因为当我尝试没有ST_Line_Locate_Point()函数的原始查询时,我得到了我想要的。 -
@JGH 你能给我一个例子或一个开始如何解决这个问题吗?
-
@JGH 我想,我发现为什么我的查询返回 false。
st_lineMerge()也在返回MULTILINESTRING。请参阅问题的编辑。 -
您可以使用
st_dump将多行拆分为多个简单行
标签: postgresql triggers postgis plpgsql