空间查询

空间查询是地理数据库所支持的一种查询方法。这种查询与普通的SQL查询有较大的差别。首先,空间查询允许用户使用一些普通数据库没有的几何数据类型,如点类型、线类型与面类型,而普通查询的操作对象多数为数值、文本等数据。此外,空间查询有许多与几何关系有关的运算符,如相邻、相交,而普通查询用到的多数都是相等、大于、小于等运算符。

空间查询类型

空间查询需要一定的关系运算符来表达几何体之间的关系。通常,空间查询分为两类:空间数量量算与空间几何关系分析。目前的地理数据库通常只能处理二维几何体的空间查询。不同的数据库对于空间查询运算符的名称有着不同的表达,下面采用的是比较常见的表达方式:

空间数量量算

空间数量量算主要是指对空间对象的几何参数进行量算,以获得关于这些几何体的属性信息。在地理数据库中,主要的空间数量量算有:

SQL函数的格式是:函数名(参数1,参数2):返回类型

  • Distance(geometry, geometry) : double:两个几何体的距离测量
  • Length(geometry) : double:几何测量
  • Area(geometry) : double:面积测量
  • Buffer(double) : Geometry:缓冲区运算,返回与当前几何体距离小于或等于某个距离的点的集合。
  • ConvexHull( ):Geometry:凸包运算,返回一个包含当前几何体所有点的凸包。

由于地球是一个椭球体,因此在空间数据库之中,所有的几何体都是带有地图投影与空间参照系的。空间数量量算都是在一定的投影与参照系下进行。对于若干几何体,由于不同参照系的椭球参数不同,如果把他们放在不同的空间参照系下进行空间数量量算,会得出不同的结果。

空间几何关系分析

空间几何关系分析主要是指使用一些几何谓词来对由空间几何体之间的位置与形状产生的关系进行推断。

  • Equals(geometry, geometry) : boolean:判定两个几何体是否完全相等。这里的相等的意思是两个几何体在空间中所包含的点集完全相同,与他们边界的坐标顺序无关。
  • Disjoint(geometry, geometry) : boolean:判定两个几何体是否完全相离。两个几何体没有任何共同部分称为相离。
  • Intersects(geometry, geometry) : boolean:判定两个几何体是否相交,两个几何体如果不是相离,就是相交。其他与“交”有关的空间谓词,如Touches,Crosses都是Intersects的一个特例。
  • Touches(geometry, geometry) : boolean:判定两个几何体是否相碰。两个几何体的边界有交集,但内部没交集则称为相碰。
  • Crosses(geometry, geometry) : boolean:判定两个几何体是否相穿。相穿指两个几何体的内部有公共部分,且公共部分的维度至少少于其中一个几何体的维度。
  • Overlaps(geometry, geometry) : boolean:判定两个几何体是否重叠。重叠指两个几何体有公共部分,且公共部分的维度与两个几何体相同。
  • Within(geometry, geometry) : boolean:判定两个几何体中的A是否完全被B包含。
  • Contains(geometry, geometry) : boolean:判定两个几何体中的A是否完全包含B。

限制

由于算法中实现的难度,在大多数空间数据库中,大部分空间查询都只能应用在由折线组成的几何体之上。一些空间数据库,例如PostGIS,都不支持对由圆弧和更加复杂的曲线组成的几何体的空间查询。

参考

Dimensionally Extended Nine-Intersection Model (DE-9IM) by Christian Strobl

参见