Как выразить проекцию, используя чистый SQL?

Я использовал

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

Но теперь я хочу использовать sql для его реализации. И у меня есть точка (геометрия) в базе данных postgis.

Как я должен сделать?

1 ответ

В документах RGeo simple mercator factory указано, что для хранения точек используется SRID 4326, а для проекций - SRID 3785. В PostGIS для этого есть ST_Transform. Вот хороший учебник по теме. Предположим, что вы храните свое поле geom в таблице узлов и оно находится в SRID 4326, тогда вы можете использовать ST_Transform для получения той же проекции, что и в простом меркаторе RGeo. Используйте ST_SRID, чтобы узнать, какой srid у вашего поля geom:

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
Другие вопросы по тегам