如何使用 PostGIS 在 PostgreSQL 中一次转换点云
How to transform an point cloud at once in PostgreSQL with PostGIS
我有一个具有特定 SRID 的点云。现在我想使用 select 查询将整个点云转换为不同的 SRID(此处:4326 lat, 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 个点。
希望这就是您的目标。我至少得到了相同的结果。
我选择了伪墨卡托 (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
?
我有一个具有特定 SRID 的点云。现在我想使用 select 查询将整个点云转换为不同的 SRID(此处:4326 lat, 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 个点。
希望这就是您的目标。我至少得到了相同的结果。
我选择了伪墨卡托 (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
?