Как преобразовать облако точек сразу в PostgreSQL с помощью PostGIS - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть pointcloud, у которого есть определенный SRID.Теперь я хочу преобразовать все pointcloud, используя запрос select, в другой SRID (здесь: 4326 лат, lon).Мой первый супер неэффективный подход:

SELECT 
ST_X
( 
    ST_GeometryN( p , n ) 
) as lon , 
ST_Y
( 
    ST_GeometryN( p , n ) 
) as lat 
FROM 
ST_Ttransform
( 
    ST_SetSRID
    ( 
        ST_GeomFromText
        ( 
            'MULTIPOINT
            ( 
                10.0 20.0 30.0 , 40.0 50.0 60.0 , 70.0 80.0 90 
            )' -- three example 3d coordinates
        ) , 
        SRID_FROM -- current pointcloud srid
    ) , 
    SRID_TO -- desired pointcloud srid
) 
AS p 
CROSS JOIN 
generate_series
( 
    1 , 
    ST_NumGeometries( p ) 
) n

Есть ли лучший способ добиться этой трансформации?Мне нужно преобразовать примерно 10k - 100k точек одновременно.

1 Ответ

0 голосов
/ 28 февраля 2019

Я надеюсь, это то, к чему вы стремитесь.Я получаю по крайней мере тот же результат.

Я выбрал Pseudo Mercator (EPSG: 3857) и преобразовал его в WGS84 (EPSG: 4326)

SELECT ST_X(p) as lon , ST_Y(p) as lat 
FROM 
(SELECT (ST_DumpPoints(
                       ST_Transform(
                                    ST_GeomFromText( 
       'MULTIPOINT(10.0 20.0 30.0 , 40.0 50.0 60.0 , 70.0 80.0 90)', 3857) , 4326))).geom as p) gtab


         lon          |         lat
----------------------+----------------------
 8.98315284119521e-05 | 0.000179663056819876
 0.000359326113647809 | 0.000449157642049691
 0.000628820698883665 | 0.000718652227279505
(3 Zeilen)


Но остается вопрос: зачем импортировать егокак MULTIPOINT?

...