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

时间:2014-02-04 10:54:32

标签: postgresql postgis pgadmin

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

我使用了这段代码:

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 Part中使用了它并解决了所有错误:

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

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

1 个答案:

答案 0 :(得分:2)

在PostgreSQL中,简单地声明数组维度不会初始化或预先分配任何内容。该阵列的所有维度都是动态的。这与通用编程语言(如C

)中的多维数组实现有很大不同

为了模仿这些语言的逻辑,你可以先用这样的语句初始化9x9x9数组:

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

然后,当引用G[i][j][k]作为分配的来源或目的地时,其余代码将正常工作。