Chương 2 POSTGRESQL VÀ POSTGIS
2.3. Hàm trong PostGIS
2.3.5. Nhóm hàm đưa ra đối tượng hình mới
• ST_Intersection()
- Chức năng của hàm ST_Intersection là trả về một hình, hiển thị phần chung giữa hình A
và hình B. Nếu hình A và hình B khơng có bất kỳ điểm chung thì trả về đối tượng hình rỗng.
- Cú pháp : geometry ST_Intersection(geometry A, geometry B);
- Ví dụ : SELECT ST_AsText(ST_Intersection(‘POINT(0 0)’::geometry, ‘LINESTRING(2 0, 0 2)’::geometry));
Giá trị trả về EMTRY
SELECT ST_AsText(ST_Intersection(‘POINT(0 0)’::geometry, ‘LINESTRING (0 0,0 2)’::geometry));
Giá trị trả về : POINT(0 0). • ST_Difference()
- Chức năng của hàm ST_Difference là trả về một hình hiển thị phần của hình A mà khơng giao với hình B. Chúng ta có thể hiểu theo cơng thức sau :
ST_Difference() = GeometryA – ST_Intersection(A, B).
Nếu A hồn tồn nằm trong B, thì A và B khơng có điểm khác biệt, nghĩa là, hàm ST_Difference() trả về giá trị rỗng.
Hình 2-4 : Minh họa hàm ST_Difference() Hình 2-4 biểu diễn 2 đường thẳng A và B giao nhau.
Hình 2-5 biểu diễn điểm khác nhau giữa hai đường A và B là phần của đường A không giao với đường B
- Cú pháp : geometry ST_Difference(geometry geomA, geometry geomB); - Ví dụ : SELECT ST_AsText (ST_Difference(
ST_GeomFromText(‘LINESTRING(50 100, 50 200)’), ST_GeomFromText(‘LINESTRING(50 50, 50 150)’))); Giá trị trả về LINESTRING (50 150, 50 200).
• ST_Union()
- Trả về một hình hiển thị hợp của các hình. Kiểu trả về của hàm có thể là MULTI*, hình đơn lẻ hoặc tập hợp các hình.
- Cú pháp : geometry ST_Union (geometry g1, geometry g2)
- Ví dụ : SELECT ST_AsText(ST_Union(ST_GeomFromText(’POINT(1 2)’), ST_GeomFromText(’POINT(-2 3)’) ) ); Giá trị trả về : MULTIPOINT (-2 3, 1 2). SELECT ST_AsText(ST_Union(ST_GeomFromText(‘POINT(1 2)’), ST_GeomFromText(‘POINT(1 2)’))); Giá trị trả về : POINT (1 2) • ST_SymDifference()
- Chức năng của hàm ST_SymDifference trả về một hình hiển thị phần của hình A và hình B khơng giao nhau. Nó được gọi là sự khác nhau đối xứng lý do : ST_SymDifference(A, B) = ST_SymDifference (B, A). Chúng ta có thể hiểu theo công thức sau :
ST_SymDifference (A, B) = ST_Union (A, B) – ST_Intersection (A, B).
Hình 2-5 : Minh họa hàm ST_SymDifference().
Hình 2-7 biểu diễn kết quả của hàm ST_SymDifference(), nó trả về 1 phần của đường A và 1 phần của đường B mà không giao nhau.
- Cú pháp : geometry ST_SymDifference (geometry geomA, geometry geomB); - Ví dụ : SELECT ST_AsText( ST_SymDifference (
ST_GeomFromText(‘LINESTRING (50 100, 50 200)’), ST_GeomFromText(‘LINESTRING (50 50, 50 150)’))); Giá trị trả về : MULTILINESTRING ((50 150, 50 200),(50 50, 50 100));