如何使用纯sql表达投影?

时间:2012-12-28 03:10:43

标签: postgis rgeo

我用过

RGEO_FACTORY = RGeo::Geographic.simple_mercator_factory
RGEO_FACTORY.point(lon, lat).projection

但是现在我想用sql来实现它。我在postgis数据库中有点(几何)。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

RGeo simple mercator factory docs表示它使用SRID 4326来存储点,使用SRID 3785进行投影。 PostGIS有ST_Transform。这是一个很好的tutorial,涵盖了这个主题。假设您将geom字段存储在'nodes'表中并且它在SRID 4326中,那么您可以使用ST_Transform获得与RGeo simple mercator相同的投影。使用ST_SRID来了解哪个是geom字段的srid:

select geom, ST_SRID(geom) from nodes limit 1;
                        geom                        | st_srid 
----------------------------------------------------+---------
 0101000020E61000004A97FE25A9523E40B6B9D683EEE74D40 |    4326

select ST_Transform(geom, 3785) from nodes limit 1;
                    st_transform                    
----------------------------------------------------
 0101000020C90E0000FE8D2A88D4C04941A418472F1AE25F41

如果您尝试将geom转换为相同的srid,则不会更改:

select ST_Transform(geom, 4326) from nodes limit 1;
                    st_transform                    
----------------------------------------------------
 0101000020E61000004A97FE25A9523E40B6B9D683EEE74D40