Как выразить проекцию, используя чистый 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