PostGIS:多边形的边界框

wil*_*aks 3 sql postgresql postgis geospatial

SELECT id, ST_Box2D(areas) AS bbox FROM mytable;
Run Code Online (Sandbox Code Playgroud)

在此示例中, "mytable"包含两列:" id "是行的唯一ID号," areas "是每行包含一个MULTIPOLYGON几何字段.


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

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


第一个例子

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

第二个例子

  • id:321
  • area:一个多边形,在巴黎有一个圆圈,在多伦多有一个圆圈
  • 因此bbox应该返回一个多边形,其中包含一个巴黎的矩形,一个多伦多的矩形

Nic*_*vén 5

您应该使用ST_Dump http://postgis.org/documentation/manual-1.5/ST_Dump.html

然后,每个多边形将获得一行.拆分几何体时,其他字段将重复.它就像一个聚合函数,但另一种方式.

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

SELECT (ST_Dump(the_geom)).geom from mytable;
Run Code Online (Sandbox Code Playgroud)

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

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

HTH

/尼克拉斯

你想要你的多边形每一行吗?这就是我的想法,但是如果你只想要一个带有bbox的表,每行一个带有id的引用原始的multipolygon(你将cource获得为多边形的每个部分重复的相同id)然后你可以做同样的byt只是提取类似的bbox:

CREATE TABLE newTable AS
SELECT id, BOX2D((ST_Dump(the_geom)).geom) AS myBox FROM originamTable
Run Code Online (Sandbox Code Playgroud)

我担心我没有得到你想要的东西,但ST_Dump在这种情况下你有很多可能性.