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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章