0

座標である2つの列になるSQLのクエリがあります。

{lat1,lat2,lat3} および {lon1,lon2,lon3}

同じ位置にある要素が同じオブジェクトを参照するようにします (別の列では配列として参照されます)。

これは次のようになります。

オブジェクトの緯度経度
----------------------------------------------
 {1,2,3} | {lat1,lat2,lat3} | {lon1,lon2,lon3}

私がやりたいのは、緯度/経度のカップルを次のようにすることです:

オブジェクトの座標
----------------------------------------------
 {1,2,3} | {{lat1,lon1},{lat2,lon2},{lat3,lon3}}

または次のようなもの:

オブジェクトの座標
----------------------------------------------
 {1,2,3} | {{1,lat1,lon1},{2,lat2,lon2},{3,lat3,lon3}}

postgresqlでこれを達成するにはどうすればよいですか?

4

2 に答える 2

1

次のようにクエリを使用できます(データ型を変更した後):

select
array_cat
(
    array_cat
    (
        array [ [ objects[1], latitutes[1], longitudes[1] ] ]
    ,   array [ objects[2], latitutes[2], longitudes[2] ]
    )
,   array [ objects[3], latitutes[3], longitudes[3] ]
)
from examplary_table ;

次のような結果が得られます。

{{1,111,121},{2,112,122},{3,113,123}}

テスト目的:

with examplary_table as
(
    select * from
    (
    values
        (
            '{1,2,3}'::int[]
        ,   '{111,112,113}'::int[]
        ,   '{121,122,123}'::int[]
        )
    ) a (objects, latitutes, longitudes)
)
select
array_cat
(
    array_cat
    (
        array [ [ objects[1], latitutes[1], longitudes[1] ] ]
    ,   array [ objects[2], latitutes[2], longitudes[2] ]
    )
,   array [ objects[3], latitutes[3], longitudes[3] ]
)
from examplary_table ;
于 2013-01-26T00:00:28.063 に答える
0

最も簡単な方法は、それらを読み取り、分解してから、新しい配列に戻すことだと思います。

$def = array( '{1,2,3}', '{lat1,lat2,lat3}', '{lon1,lon2,lon3}' );

$new = array();
$i=0;
foreach( $def as $value ) {
    $list = explode( ",", str_replace( array("{", "}"), null, $value ) );
    $k=0;
    foreach( $list as $item ) {
        $new[$k][$i] = $item;
        $k++;
    }
    $i++;
}

出力:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => lat1
            [2] => lon1
        )

    [1] => Array
        (
            [0] => 2
            [1] => lat2
            [2] => lon2
        )

    [2] => Array
        (
            [0] => 3
            [1] => lat3
            [2] => lon3
        )

)
于 2013-01-21T15:38:57.693 に答える