CREATE TABLE StreamTbl (
MapNumber CHAR(10), -- 지도일련번호
StreamName CHAR(20), -- 하천 이름
Stream GEOMETRY); -- 공간 데이터 (하천개체)
INSERT INTO StreamTbl VALUES ('330000001', '한류천',
ST_GeomFromText('LINESTRING (-10 30, -50 70, 50 70)'));
INSERT INTO StreamTbl VALUES ('330000001', '안양천',
ST_GeomFromText('LINESTRING (-50 -70, 30 -10, 70 -10)'));
INSERT INTO StreamTbl VALUES ('330000002', '일산천',
ST_GeomFromText('LINESTRING (-70 50, -30 -30, 30 -60)'));
CREATE TABLE BuildingTbl (
MapNumber CHAR(10), -- 지도일련번호
BuildingName CHAR(20), -- 건물 이름
Building GEOMETRY); -- 공간 데이터 (건물개체)
INSERT INTO BuildingTbl VALUES ('330000005', '하나은행',
ST_GeomFromText('POLYGON ((-10 50, 10 30, -10 10, -30 30, -10 50))'));
INSERT INTO BuildingTbl VALUES ('330000001', '우리빌딩',
ST_GeomFromText('POLYGON ((-50 -70, -40 -70, -40 -80, -50 -80, -50 -70))'));
INSERT INTO BuildingTbl VALUES ('330000002', '디티오피스텔',
ST_GeomFromText('POLYGON ((40 0, 60 0, 60 -20, 40 -20, 40 0))'));
SELECT * FROM StreamTbl;
SELECT * FROM BuildingTbl;
SELECT * FROM StreamTbl WHERE ST_Length(Stream) > 140;
Q) 강 테이블에는 140이라는 정보를 입력한 적이 없다. 그런데 어떻게 조회가 되는 걸까?
A) ST_LENGTH라는 공간 함수에 의해서 강 길이가 자동으로 계산이 되어 해당 쿼리를 쓸 수 있는 것!
SELECT BuildingName, ST_AREA(Building) FROM BuildingTbl
WHERE ST_AREA(Building) < 500;
SELECT * FROM StreamTbl
UNION ALL
SELECT * FROM BuildingTbl;
SELECT StreamName, BuildingName, Building, Stream
FROM BuildingTbl, StreamTbl
WHERE ST_Intersects(Building, Stream) = 1 AND StreamName = '안양천';
ST_Intersects()
을 통해 두 도형이 교차하는 경우를 설정할 수 있는데 0인 경우는 교차 안함, 1인 경우는 교차함이므로 다음과 같이 작성해주었다.
ST_Intersects(Building, Stream) = 1
SELECT ST_Buffer(Stream,5) FROM StreamTbl;