postgresql - 使用 PostgreSQL 选择随机点

标签 postgresql postgis

我正在尝试对一些 OSM 道路进行地理编码,并且创建了一个包含 500 条道路样本的表格。所有道路都是多线串。我使用 ST_DumpPoints 创建了另一个表,所以现在我又多了一个包含道路信息的表,其中每个条目都是单条道路的单个点。初始样本表中的 500 条记录已变成 48000 条。我想创建第三个表,其中一条道路上有三个随机点。

积分表:

| gid   | number | path   | path1 | path2 | geom | text_geom  |
|-------|--------|--------|-------|-------|------|------------|
| 39559 | 49     | {1,1}  | 1     | 1     | ...  | POINT(x y) |
| 39559 | 49     | {1,2}  | 1     | 2     | ...  | POINT(x y) |
| 39559 | ...    | ...    | ...   | ...   | ...  | ...        |
| 39559 | 49     | {1,79} | 1     | 79    | ...  | POINT(x y) |
| 15168 | Null   | {1,1}  | 1     | 1     | ...  | POINT(x y) |
| 15168 | Null   | {1,2}  | 1     | 2     | ...  | POINT(x y) |
| 15168 | ...    | ...    | ...   | ...   | ...  | ...        |
| 15168 | Null   | {1,43} | 1     | 43    | ...  | POINT(x y) |

注意:有些条目有 1800 点可供选择。该表只是为了展示它的样子。

我想要的表格:

| gid   | number | path  | path1 | path2 | geom | text_geom  |
|-------|--------|-------|-------|-------|------|------------|
| 39559 | 49     | {1,1} | 1     | 1     | ...  | POINT(x y) |
| 39559 | 49     | {1,2} | 1     | 2     | ...  | POINT(x y) |
| 39559 | 49     | {1,3} | 1     | 3     | ...  | POINT(x y) |
| 15168 | Null   | {1,1} | 1     | 1     | ...  | POINT(x y) |
| 15168 | Null   | {1,2} | 1     | 2     | ...  | POINT(x y) |
| 14005 | 460    | {1,1} | 1     | 1     | ...  | POINT(x y) |
| 14005 | 460    | {1,2} | 1     | 2     | ...  | POINT(x y) |
| 14005 | 460    | {1,3} | 1     | 3     | ...  | POINT(x y) |

另外值得一提的是,所有参赛作品都有超过三个点可供选择。

最佳答案

demo:db<>fiddle

您可以使用row_number() window function它以特定的顺序为组中的每个记录生成连续的数字。我猜,该组就是您的 gid,按照顺序,您可以简单地采用 random() 值。

我用一个更简单的表格演示了这一点:myroad 是您的 gidmypoint 是您的 text_geom 列b :

SELECT
    myroad,
    mypoint
FROM (
    SELECT
        *,
        row_number() OVER (PARTITION BY myroad ORDER BY random())
    FROM
        points
) s
WHERE row_number <= 3

关于postgresql - 使用 PostgreSQL 选择随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57177827/

相关文章:

postgresql - 基于 SELECT 条件的 postgres 约束

postgresql - 在动态查询中使用几何数据类型

postgresql - 列 xxx 缺少数据

postgresql - 带有 postgis 的 dblink postgresql 中的线串不起作用

sql - postgres 数组到列的数组

vba - Azure PostgreSQL 的 SSL 连接字符串 - 正确的语法

postgresql - 如何确保存储函数始终返回 TRUE 或 FALSE?

ruby-on-rails - Rails hStore postgresql activerecord 数据库查询?

sql - 查找与点相交的所有几何图形

django - 如何使用 View 从 PostGIS 中提取几何图形,然后使用 Django 将其添加到模板中的传单 map