3
SELECT id, ST_Box2D(areas) AS bbox FROM mytable;

在此示例中,“mytable”包含两列:“ id ”是行的唯一 id 编号,“ area ”是每行包含一个MULTIPOLYGON的几何字段。


这适用于仅包含一个多边形的多面体,但有些行的多边形非常分散,因此当多面体包含一个在欧洲的多边形和一个在加拿大的多边形时,边界框不相关。

所以我需要一种方法来为每个多边形的每个多边形获得一个 box2d,但我还没有找到如何做到的。更准确地说,我的目标是每行返回一个多多边形,每个多边形包含一个 box2d。


第一个例子

  • 编号:123
  • area : 在澳大利亚只包含一个椭圆形多边形的多多边形
  • 因此bbox应该返回一个在澳大利亚只包含一个矩形(边界框)的多边形

第二个例子

  • 编号:321
  • area : 一个多面体,在巴黎有一个圆,在多伦多有一个圆
  • 因此bbox应该返回一个多面体,其中包含一个在巴黎的矩形,一个在多伦多的矩形
4

2 回答 2

5

您应该使用ST_Dump https://postgis.net/docs/ST_Dump.html

然后你会得到每个多边形一行。分割几何时将复制其他字段。它就像一个聚合函数,但反过来。

语法有点特殊,因为它输出复合数据类型,因此您必须像这样提取几何部分:

SELECT (ST_Dump(the_geom)).geom from mytable;

因为这会在表中为您提供更多行,所以您应该从查询中创建一个新表。

然后您可以在新表中的该新几何列上创建一个索引,它将建立在每个单个多边形的边界框上。

高温高压

/尼克拉斯

你想让你的多边形也各排一排吗?这就是我的想法,但是如果您只想要一个带有 bboxes 的表,每行一个带有 id 的表引用原始多面体(您当然会为多面体的每个部分重复相同的 id),那么您可以执行相同的字节只是提取 bboxes 之类的:

CREATE TABLE newTable AS
SELECT id, BOX2D((ST_Dump(the_geom)).geom) AS myBox FROM originamTable

恐怕我并没有真正得到你想要的,但ST_Dump在这种情况下你有很多可能性。

于 2010-10-11T07:19:07.647 回答
1

您必须分别装箱相关位(例如加拿大和法国组件)。PostGIS 中最好的工具是几何访问器ST_GeometryN(geometry,int)(参考: http: //postgis.refractions.net/docs/ST_GeometryN.html)。该链接有一个很好的例子,将访问器与ST_NumGeometries结合起来。

更新每条评论:

这是旧金山的一个简单示例——该表包含一个名为 的几何字段the_geomgid记录 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)
于 2010-10-11T02:34:43.370 回答