Как получить углы ограничивающего прямоугольника из ST_Extent?

16

Есть ли способ получить широту / длину углов ограничительной рамки, которую мы получили от ST_Extent?

select ST_Extent(geom) from tableName;
Vicky
источник

Ответы:

25

ST_Extent возвращает поле, состоящее из xmin, ymin, xmax, ymax (нижняя левая, верхняя правая координаты):

osm=# select st_extent(way) from planet_osm_point;
                            st_extent                                
-------------------------------------------------------------------------
 BOX(2259828.73261444 5412478.55751597,3301031.7673783 6147766.43413396)

Чтобы получить точку, соответствующую левому нижнему углу, вы можете построить точку, состоящую из нижнего левого X-координаты (st_xmin) и нижнего левого Y-координаты (st_ymin), например:

osm=# select st_astext(st_makepoint(st_xmin(st_extent(way)), st_ymin(st_extent(way)))) 
      from planet_osm_point;
            st_astext                 
------------------------------------------
 POINT(2259828.73261444 5412478.55751597)

Обратите внимание, что поскольку st_extent возвращает ограничивающий прямоугольник, он удаляет SRID из вашей геометрии, поэтому вы можете добавить его к своей вновь созданной точке (я использую 900913 для соответствия SRID данных моего OSM):

osm=# select st_asewkt(st_setsrid(st_makepoint(st_xmin(st_extent(way)), st_ymin(st_extent(way))), 900913)) 
      from planet_osm_point;
            st_astext                 
------------------------------------------
 SRID=900913;POINT(2259828.73261444 5412478.55751597)
diciu
источник