Как преобразовать облако точек сразу в PostgreSQL с помощью PostGIS
У меня есть 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 ответ
Я надеюсь, это то, к чему вы стремитесь. Я получаю по крайней мере тот же результат.
Я выбрал 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
?