如何在PostGIS中每n米将折线转换为点?


14

问题与此基本相同,但是我需要使用PostGIS。

我有许多条折线,并希望沿这些线每n米将其变换为点。

编辑:非常 感谢斯特凡。我的最终查询有些不同,可能是由于PostGIS(1.5)的版本较旧,但最终我得到了所需的东西。将点合并成道路密度的热图。 在此处输入图片说明


Answers:


17

这个查询应该可以解决这个问题:

WITH line AS 
    (SELECT
        your_polylinestring_id,
        (ST_Dump(geom)).geom AS geom
    FROM your_polylinestring_table),
linemeasure AS
    (SELECT
        ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
        generate_series(0, ST_Length(line.geom)::int, 10) AS i
    FROM line),
geometries AS (
    SELECT
        i,
        (ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom 
    FROM linemeasure)

SELECT
    i,
    ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
  1. 首先,您可以使用以下方法从多行字符串列中选择不同的行字符串: ST_Dump

  2. 然后,您必须使用定义度量元素ST_AddMeasure,从0(线串的开始)到线串的结束(与线串的长度相同)开始。Generate_series会以10的步长在此测量上创建一个序列。您可以"n metres"在此处进行定义(在本例中为10米)。该i值对于每个线串都重新开始。

  3. 使用ST_LocateAlongST_GeometryN创建多维点几何。

  4. 最后,您必须提取此几何的X和Y值并从中创建一个点。

结果可能如下所示: 在此处输入图片说明

编辑

公平地说,我想添加以下信息:此答案中的思想和查询均来自我用于从PostGIS中的DEM创建悬垂线的查询中。Mathieu Leplatre的这篇文章对此进行了很好的解释。


您能否澄清一下,我不熟悉这些SQL构造:在哪里WITH line AS使用?我在其他地方看不到“线”。
culebrón

2
@culebrón WITH Query可以将临时表用于较大的查询。以下是一些信息:postgresql.org/docs/8.4/static/queries-with.htmlline在下一个子查询中使用linemeasure。此子查询中的选定数据基于子查询中的选择line。他们是相互依存的。希望能有所帮助!
Stefan 2014年

在2.0以上的PostGIS中,功能为st_locate_along_measure
culebrón
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.