Db2 空间SQL:最适合正方形的数据类型?

Db2 空间SQL:最适合正方形的数据类型?,db2,gis,geospatial,spatial,Db2,Gis,Geospatial,Spatial,我有一个支持空间的数据库(在本例中是DB2)。我需要在一张桌子里储存大量的正方形。哪种标准空间SQL数据类型最合适 我想我可以使用ST_多边形,但也许有一种更专业的类型 更好的性能 更好的数据保证(如果有人在特定列中存储非平方值,我希望将其作为错误捕获) 我试图找到一个ST_矩形或ST_正方形类型,但它们似乎不存在(?) 在我使用DB2的同时,我也对那些在DB2上不起作用的解决方案感兴趣,只要它们符合标准。您可能正在寻找——我不确定DB2,但它是OGC标准的一部分。任何非垂直或非水平线或多边

我有一个支持空间的数据库(在本例中是DB2)。我需要在一张桌子里储存大量的正方形。哪种标准空间SQL数据类型最合适

我想我可以使用ST_多边形,但也许有一种更专业的类型

  • 更好的性能
  • 更好的数据保证(如果有人在特定列中存储非平方值,我希望将其作为错误捕获)
我试图找到一个ST_矩形或ST_正方形类型,但它们似乎不存在(?)


在我使用DB2的同时,我也对那些在DB2上不起作用的解决方案感兴趣,只要它们符合标准。

您可能正在寻找——我不确定DB2,但它是OGC标准的一部分。任何非垂直或非水平线或多边形都将通过此函数生成一个矩形,通常将坐标存储为浮点数。

在DB2中,它也是一个多边形。看起来您正在存储网格,所以快速检查可能是,如果ST_信封(几何体)=几何体,那么您有一个正方形

此代码来自

结果:

ID          ENVELOPE
----------- ---------------------------------------------------------------
      1     -

      2     POLYGON (( 9 9, 11 9, 11 11, 9 11, 9 9))

      3     POLYGON (( 10 10, 50 10, 50 30, 10 30, 10 10))

      4     POLYGON (( 10 9, 20 9, 20  11, 10 11, 10 9))

      5     POLYGON (( 40 120, 90 120, 90 150, 40 150, 40 120))

见ID=5?最后一个多边形==ST_封套(几何体)

即使数据表示矩形或正方形,您仍需要使用ST_多边形类型。但是,在对数据执行查询时,可以使用一阶过滤器,例如

通常,空间数据库将比较相交点的封套(即包含多边形的矩形)。然后执行更昂贵的多边形到多边形相交计算。在这种情况下,由于多边形等于封套,因此可以跳过第二个更昂贵的步骤


至于数据验证,您可以添加一个数据库触发器来检查ST_EQUALS(ST_ENVELOPE(geom),geom)=1。

但就我所见,ST_envolope是一个函数,而不是一个类型?对不起,我刚才删除了很多令人费解的废话。这些点在Postgis中存储为一个float4序列,不确定DB2是否正确,但必须大致相同,或者可能是DB2/Oracle“number”类型之一。我猜所有的矩形都是存储为基本浮点类型的坐标,通过智能索引为常见的空间查询启用了地理功能。Troles是正确的。ST_信封是一个返回ST_多边形的函数;ST_信封不是一种类型。“浮动”优化特定于PostGIS。
ID          ENVELOPE
----------- ---------------------------------------------------------------
      1     -

      2     POLYGON (( 9 9, 11 9, 11 11, 9 11, 9 9))

      3     POLYGON (( 10 10, 50 10, 50 30, 10 30, 10 10))

      4     POLYGON (( 10 9, 20 9, 20  11, 10 11, 10 9))

      5     POLYGON (( 40 120, 90 120, 90 150, 40 150, 40 120))