postgis——空间关系

postgis不仅可以用来存储空间数据,更常用的是用来比较几何图形之间的关系。例如我们想要通过手机查看离自己最近的共享单车的为止,就是通过比较停车位置、街道之间的几何关系来实现。

ST_Equals
ST_Equals(geometry A, geometry B)用于测试两个图形的空间相等性。
如果两个相同类型的几何图形具有相同的x、y坐标值,即如果第二个图形与第一个图形的坐标信息相等(相同),则ST_Equals()返回TRUE。

postgis=# select name from t1 where st_equals(geom,st_geomfromtext('point(1 1)'));
  name  
--------
 point3
(1 row)

ST_Intersects、ST_Disjoint、ST_Crosses和ST_Overlaps
ST_Intersects、ST_Crosses和ST_Overlaps测试几何图形是否相交。
如果两个图形有相同的部分,即如果它们的边界或内部相交,则ST_Intersects(geometry A, geometry B)返回TRUE。ST_Intersects()方法的对立方法是ST_Disjoint(geometry A, geometry B)。但通常使用 not ST_Intersects更好,因为可以使用索引。

postgis=# select name from t_gis where st_equals(geom,'0101000020E610000000000000000000000000000000000000');
 name  
-------
 Point
(1 row)

ST_Touches
ST_Touches()测试两个几何图形是否在它们的边界上接触,但在它们的内部不相交。

postgis=# select st_touches(st_geomfromtext('POLYGON((0 0, 1 0, 1 1, 0 1,0 0))'),st_geomfromtext('POLYGON((1 0, 2 0, 2 1, 1 1,1 0))'));
 st_touches 
------------
 t
(1 row)

ST_Within和ST_Contains
ST_Within()和ST_Contains()测试一个几何图形是否完全位于另一个几何图形内。

postgis=# select st_within(st_geomfromtext('POLYGON((0 0, 1 0, 1 1, 0 1,0 0))'),st_geomfromtext('POLYGON((0 0,2 0,2 2,0 2,0 0))'));
 st_within 
-----------
 t
(1 row)

ST_Distance和ST_DWithin
ST_Distance(geometry A, geometry B)计算两个几何图形之间的最短距离,并将其作为浮点数返回。可以用来查询某个物体周围具体xxx范围内的物体。例如:
–创建表t1:

postgis=# select name,st_astext(geom) from t1;   
  name  | st_astext  
--------+------------
 point1 | POINT(0 0)
 point2 | POINT(1 0)
 point3 | POINT(1 1)
 point4 | POINT(2 0)
 point5 | POINT(2 2)
 point6 | POINT(2 1)
(6 rows)

–查询点(1 ,1)具体1之内的点

postgis=# select name from t1 where st_dwithin(geom,st_geomfromtext('point(1 1)'),1);
  name  
--------
 point2
 point3
 point6
(3 rows)
发布了97 篇原创文章 · 获赞 25 · 访问量 8098

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/104051985