지형 정보를 표현한 데이터
데이터 형식 : Geometry
Geometry 데이터 유형은 다양한 유형의 기하학적 데이터를 저장할 수 있으며,
이러한 데이터는 점, 선, 면, 다각형, 다중 선, 다중 면 등이 될 수 있습니다.
Geometry 데이터 유형은 다음과 같은 데이터 유형을 포함합니다.
함수명 | 설명 | 비고 |
---|---|---|
ST_GeomFromText() | 문자열을 Geometry 형식으로 변환 | Point, LineString, Polygon 등 |
ST_AsText() | Geometry 형식을 문자열 형식으로 변환 | Point, LineString, Polygon 등 |
ST_Length() | LineString의 길이를 구한다. | |
ST_Area() | Polygon의 면적을 구한다. | |
ST_Intersects() | 두 도형의 교차 여부를 확인한다. | 0: 교차 안 함 1: 교차 함 |
ST_Buffer() | 도형에서부터 주어진 거리만큼 떨어진 좌표 집합을 구한다. | |
ST_Contains() | 한 도형 안에 다른 도형이 들어 있는지 확인 | 0: 포함X 1: 포함 |
ST_Distance() | 두 도형 사이의 거리를 구함 | |
ST_Union() | 두 도형을 합한 결과 좌표 집합을 구함 | |
ST_Intersection() | 두 도형이 교차하는 좌표 집합을 구한다. |
DROP DATABASE IF EXISTS GisDB;
CREATE DATABASE GisDB;
USE GisDB;
CREATE TABLE StreamTbl (
MapNumber CHAR(10),-- 지도일련번호
StreamName CHAR(10), -- 하천이름
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 BuildingTbl
UNION ALL
SELECT * FROM StreamTbl;
SELECT * FROM StreamTbl WHERE ST_Length(Stream) > 140; -- 길이가 140초과인 하천
SELECT * FROM BuildingTbl WHERE ST_AREA(Building) <500; -- 면적이 500미만인 건물 조회
-- 안양천과 겹치는 건물 조회
SELECT StreamName, BuildingName, Building, Stream
FROM BuildingTbl, StreamTbl
where st_intersects(Building, Stream)=1 and StreamName = '안양천';
select st_buffer(Stream,5) from StreamTbl; -- 하천을 조금 두껍게 표현 (보기좋게)