首页 > 解决方案 > Postgresql:访问路径中的各个点?

问题描述

我一直在试图弄清楚如何访问路径的各个点(或任何其他几何类型)。我阅读了 v13 文档的第 8.8 章和第 9.11 章,尽管(对我而言)这似乎是一个非常基本的要求,但我找不到解决方法。我现在正在考虑将路径转换为不同类型的文本,并使用字符串操作函数提取信息。

我在这里错过了什么吗?我也搜索了 SO 并且从未被问过,所以这真的让我想知道我是否以错误的方式思考这个问题。

我希望有一些函数或运算符可以在其中输入路径和索引并得出相应的点。

感谢您对此的任何帮助。

PS:我使用的是香草 PostgreSQL 13(即没有 postgis)。我对 postgis 不熟悉,我最初的印象是,仅仅满足这个要求就有点过头了(也许在性能方面,但主要是因为我需要了解它)。

此致

标签: postgresqlpostgis

解决方案


同样在这里,不要gis,因为它太多了。

我会说用正则表达式解析 path::text 表达式并返回一个带有点的数组。

我会去报告任何结果。此函数将路径转换为字符串数组。如果需要,这些字符串可以转换为点。

 create or replace function path2points( path ) returns point[] as
 $$
   with points as (
     select point( unnest(
              string_to_array( regexp_replace( $1::text,'[()][()]','', 'g' ),'),(')
            ) ) as point
   ) select array_agg( point ) from points
 $$ language sql immutable strict;

这是解决这个问题的一种非常愚蠢的方法,可能不是很快,但它会成功。


推荐阅读