我有一个空间启用数据库(DB2,在这种情况下)。我需要存储大量的方格在一个表中。这标准的空间SQL数据类型是最适合的?

我想我可以使用 ST_polygon, 但也许有一个更专门的类型,它将得到

  • 更好的性能
  • 更好的数据保障(我想要抓住它作为一个错误,如果有人在那里储存的非广场价值在特定列)

我试图找到一个 ST_rectangleST_square 类型,但他们似乎并不存在(?)

虽然我工作DB2,我也有兴趣的解决方案,它不工作DB2,只要他们符合标准的.

有帮助吗?

解决方案

在DB2它也是一个多边形。它看起来就像你是储存的网格,这样一个快速检查可能是,如果ST_ENVELOPE(几何形状)==几何形状的,然后你有一个广场

这个代码是从

DB2的文件

SET CURRENT PATH = CURRENT PATH, db2gse;
CREATE TABLE sample_geoms (id INTEGER, geometry ST_Geometry);

INSERT INTO sample_geoms VALUES
(1, ST_Geometry(ST_Point('point EMPTY',0)));

INSERT INTO sample_geoms VALUES
(2, ST_Geometry(ST_Point('point zm (10 10 16 30)' ,0)));

INSERT INTO sample_geoms VALUES
(3, ST_Geometry(ST_Multipoint('multipoint m (10 10 5, 50 10 6, 
         10 30 8)' ,0)));

INSERT INTO sample_geoms VALUES
(4, ST_Geometry(ST_Linestring('linestring (10 10, 20 10)',0)));

INSERT INTO sample_geoms VALUES
(5, ST_Geometry(ST_Polygon('polygon((40 120, 90 120, 90 150, 
         40 150, 40 120))',0)));


SELECT id, CAST(ST_AsText(ST_Envelope(geometry)) as VARCHAR(160))  Envelope
FROM sample_geoms;

结果:

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_ENVELOPE(几何形状)

其他提示

即使你的数据表示矩形或正方形,你将仍然需要使用ST_POLYGON类型。然而,在执行针对查询数据,可以使用的第一阶过滤器例如 ST_EnvIntersects.

通常情况下,一个空间数据库将进行比较的信封(即一个矩形,其中包含的多边形)对于一个交叉路口。然后执行更加昂贵的面对面交叉计算。在这种情况下,由于面都是平等的信封中,你可以跳过第二个更昂贵的步骤。

尽数据验证,可以添加一个数据库,检查ST_EQUALS(ST_ENVELOPE(几何),几何)=1个。

你可以寻找 ST_Envelope -我不知道肯定有关DB2但它是一部分OGC的标准。任何非垂直的或非水平线或多边形,将产生一个矩形,通过这种功能,储存的坐标通常作为浮动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top