SELECT id, ST_Box2D(areas) AS bbox FROM mytable;
在此示例中,表“mytable”包含两列:“ id ”是行的唯一ID号和“区域“是一个 geometry 字段,每行包含一个 MULTIPOLYGON 。
这适用于仅包含一个多边形的多边形,但有些行的多边形非常分散,因此当多边形在欧洲包含一个多边形而在加拿大包含一个多边形时,边界框不相关。
所以我需要一种方法来获得每个多边形每个多边形一个box2d,但我还没有找到。 更准确地说,我的目标是每行返回一个多面,每个多边形包含一个box2d。
第一个例子
第二个例子
答案 0 :(得分:5)
您应该使用ST_Dump
http://postgis.org/documentation/manual-1.5/ST_Dump.html
然后你会得到每个多边形一行。拆分几何体时,其他字段将重复。它就像一个聚合函数,但另一种方式。
语法有点特殊,因为它输出一个复合数据类型,所以你必须像这样提取几何部分:
SELECT (ST_Dump(the_geom)).geom from mytable;
因为这会在表格中为您提供更多行,您只需从查询中创建一个新表。
然后你可以在新表中的新几何列上创建一个索引,它将构建在每个单个多边形的边界框上。
HTH
/尼克拉斯
您是否希望每个多边形的多边形?这就是我的想法,但是如果你只想要一个带有bbox的表,每行一个带有id的引用原始的multipolygon(你将cource获得为多边形的每个部分重复的相同id)然后你可以做同样的byt只是提取像:
这样的bboxCREATE TABLE newTable AS
SELECT id, BOX2D((ST_Dump(the_geom)).geom) AS myBox FROM originamTable
恐怕我没有真正得到你想要的东西,但在这种情况下,ST_Dump
有很多可能性。
答案 1 :(得分:1)
您必须分别打包相关位(比如加拿大和法国组件)。 PostGIS中最好的工具是几何访问器ST_GeometryN(geometry,int)
(参考:http://postgis.refractions.net/docs/ST_GeometryN.html)。该链接有一个很好的例子,可以将访问者与ST_NumGeometries结合起来。
更新评论:
以下是旧金山的一个简单示例 - 此表包含名为the_geom
的几何字段,gid
记录1是st_numgeometries
报告的具有两个多面的字段(注意序数索引为1而不是0):
=> select st_box2d(st_geometryn(the_geom, 1)) from tl_2009_06075_cousub00 \
where gid = 1;
st_box2d
-------------------------------------------------------------------------
BOX(-123.173828125 37.6398277282715,-122.935707092285 37.8230590820312)
(1 row)
=> select st_box2d(st_geometryn(the_geom, 2)) from tl_2009_06075_cousub00 \
where gid = 1;
st_box2d
----------------------------------------------------------------------------
BOX(-122.612289428711 37.7067184448242,-122.281776428223 37.9298248291016)
(1 row)