공간 데이터 실습과 공간 함수

hyojeong_sss·2021년 3월 10일
0
post-thumbnail

공간 데이터 실습


하천 테이블 생성 및 데이터 추가

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))'));
  • POLYGON : 괄호가 하나씩 더 들어가고 시작점과 끝점이 같아야 함

하천 테이블 조회

SELECT * FROM StreamTbl;

  • mysql에서 Special View을 제공
  • 3개의 하천 데이터 확인 가능

빌딩 테이블 조회

SELECT * FROM BuildingTbl;


Q) 길이가 140 초과인 강 조회하기

SELECT * FROM StreamTbl WHERE ST_Length(Stream) > 140;

Q) 강 테이블에는 140이라는 정보를 입력한 적이 없다. 그런데 어떻게 조회가 되는 걸까?

A) ST_LENGTH라는 공간 함수에 의해서 강 길이가 자동으로 계산이 되어 해당 쿼리를 쓸 수 있는 것!


Q) 면적이 500 미만인 건물 조회하기

SELECT BuildingName, ST_AREA(Building) FROM BuildingTbl
	WHERE ST_AREA(Building) < 500;

  • Special View가 제공되지 않음. SELECT문에 공간 데이터에 해당하는 열을 넣지 않고, 빌딩 이름(BuildingName)과 계산된 면적(ST_AREA)만 입력했기 때문

강과 빌딩 한번에 보기

SELECT * FROM StreamTbl
UNION ALL
SELECT * FROM BuildingTbl;


공간 데이터 형식의 함수

  • 공간 데이터 입력/출력/조회하기 위해서는 기존 SQL 구문으로 처리 불가능
    그래서 MySQL은 공간 데이터를 처리하기 위한 공간 함수를 제공


Q) 안양천을 거치는 빌딩들 조회

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


Q) 강의 폭을 더 크게 설정하기 (5로 설정)

SELECT ST_Buffer(Stream,5) FROM StreamTbl;

profile
컴공생

0개의 댓글