我们如何定义几何的三维数组?



我想在pgAdmin中为postgis编写一个基于postgresql的代码。它定义了几何的三维数组。

我为此使用了以下代码:

DECLARE
G geometry[9][9][9];
BEGIN
for i IN 1..9 LOOP
for j IN 1..9 LOOP
for k IN 1..9 LOOP
G[i][j][k] := [value that I want];
END LOOP;
END LOOP;
END LOOP;

但它返回了此错误:

"array subscript out of range"

我改用了这个:

DECLARE
G geometry[9][9][9];
BEGIN
for i IN array_lower(G, 1)..array_upper(G, 1) LOOP
for j IN array_lower(G, 1)..array_upper(G, 1) LOOP
for k IN array_lower(G, 1)..array_upper(G, 1) LOOP
G[i][j][k] := [value that I want];
END LOOP;
END LOOP;
END LOOP;

这次我有一个不同的错误:

"lower bound of FOR loop cannot be null"

我在 BEGIN 部分中使用它并解决了所有错误:

G[1][1][1] := '01010000200400000000000000000000000000000000000000'; 

但我认为这不是真的,并且不会计算循环的所有迭代。我认为这只考虑了G[1][1][1]。我现在应该怎么做?

在PostgreSQL中,简单地声明数组维度不会初始化或预分配任何东西。数组在所有维度上都是动态的。这与通用编程语言(如C)中的多维数组实现有很大不同。

为了模仿这些语言的逻辑,您可以首先使用如下语句初始化 9x9x9 数组:

G:=array_fill('point(0 0)'::geometry, array[9,9,9]);

然后,代码的其余部分将在引用G[i][j][k]作为赋值的源或目标时起作用。

最新更新