IRIS Studio - 서울시 공중화장실 분포 지도
요약
목차
데이터 설명
- 데이터 변환
위/경도 좌표에 범위를 그리기 위한 GEOM 데이터컬럼 추가하기
- Import Data to IRIS DB
IRIS 데이터 추가 메뉴 이용
- IRIS Studio
보고서 메뉴를 이용하여 맵 그리기 ( 3레이어, 마커, polygon )
데이터 변환
이번 예제는 변환 프로그래밍(python, geoPandas, R 등) 없이 SQL로 직접 geo_json 을 만드는 예제입니다.
map 을 그리기 위한 데이터로 변환하기
- 원시데이터에 있는 위도, 경도 컬럼으로 부터 map 의 polygon layer 에 필요한 GEOM 데이터를 생성합니다.
화장실의 위/경도 좌표를 사각형 도형의 센터로 두고, 50미터 거리, 100미터 거리의 사각형을 범위로 하는 지도를 그리고자 합니다.
컬럼 GEOM_50M, GEOM_100M 컬럼을 생성합니다.
GEOM_50M 컬럼은 화장실의 위도, 경도를 기준으로 동,서,남,북 4방향으로 각각 50미터씩 떨어진 선으로 이루어진 사각형(polygon)의 꼭지점 GPS좌표입니다.
GEOM_100M 은 100미터 떨어진 선으로 이루어진 사각형의 꼭지점 좌표입니다.
map 을 그리기 위해 GEOM_50M, GEOM_100M 은 다음과 같은 text 타입 데이터로 만들어야 합니다.
{"type": "Polygon", "coordinates": [[[37.5565729005,126.860792131], [37.5574738995,126.860792131], [37.5574738995,126.861924069],
[37.5565729005,126.861924069], [37.5565729005,126.860792131]]]}
위도 0도인 적도에서 위도, 경도 1도의 거리는 111km 입니다.
그러나 위도가 상승할 수록, 경선 간의 거리는 감소합니다.
- 서울의 위도를 북위 37도로 하면 위선 1초의 간격은 31m, 경선 1초의 간격은 24.7m
1도는 60분, 1분은 60초. 즉 1도는 3600초
(표) 위도별 위도와 경도 1도의 길이
위도(도) |
위도 1도의 길이(km) |
경도 1도의 길이(km) |
0 |
110.569 |
111.322 |
5 |
110.578 |
110.902 |
10 |
110.603 |
109.643 |
15 |
110.644 |
117.553 |
20 |
110.701 |
114.650 |
25 |
110.770 |
100.953 |
30 |
110.850 |
96.490 |
35 |
110.941 |
91.290 |
40 |
110.034 |
85.397 |
45 |
111.132 |
78.850 |
50 |
111.230 |
71.700 |
서울의 위도를 37.5도, 경도 127.0도 로 계산하면
서울 위도 : 37.5 경도 : 127.0
(110.941 + 111.034) / 2 = 110.988 km -> 서울 위도 37.5 도 기준 위도 1도에 해당하는 거리
(91.290 + 85.397) / 2 = 88.344 km -> 서울 경도 127.0 도 기준 경도 1도에 해당하는 거리
서울 기준 위도 1도 = 110.988km : 위도 X = 0.05km X = 0.0004504995306159225
0.1km 0.0009009983061231845
서울 기준 경도 1도 = 88.344 km : 경도 Y = 0.05km Y = 0.0005659693923752604
0.1km 0.0011319387847505207
위도, 경도 정보가 있는 원시데이터 테이블에서 동,서,남,북 4개 방향으로 50M, 100M 좌표를 만드는 쿼리
select *,
(LATITUDE - 0.0004504995306) as LAT_S_50M,
(LATITUDE + 0.0004504995306) as LAT_N_50M,
(LONGITUDE + 0.000565969392375) as LNT_E_50M,
(LONGITUDE - 0.000565969392375) as LNT_W_50M,
(LATITUDE - 0.000900998306) as LAT_S_100M,
(LATITUDE + 0.000900998306) as LAT_N_100M,
(LONGITUDE + 0.001131938784751) as LNT_E_100M,
(LONGITUDE - 0.001131938784751) as LNT_W_100M,
'{"type": "Polygon", "coordinates": [[[' ||
LAT_S_50M || ',' || LNT_W_50M || '], [' ||
LAT_N_50M || ',' || LNT_W_50M || '], [' ||
LAT_N_50M || ',' || LNT_E_50M || '], [' ||
LAT_S_50M || ',' || LNT_E_50M || '], [' ||
LAT_S_50M || ',' || LNT_W_50M || ']]]}' as GEOM_50M ,
'{"type": "Polygon", "coordinates": [[[' ||
LAT_S_100M || ',' || LNT_W_100M || '], [' ||
LAT_N_100M || ',' || LNT_W_100M || '], [' ||
LAT_N_100M || ',' || LNT_E_100M || '], [' ||
LAT_S_100M || ',' || LNT_E_100M || '], [' ||
LAT_S_100M || ',' || LNT_W_100M || ']]]}' as GEOM_100M
map 을 위한 데이터 형태
화장실_ID 1
LATITUDE 37.545122 위도
LONGITUDE 127.1197902 경도
LAT_S_50M 37.5446715005 50미터 남쪽방향 위선
LAT_N_50M 37.5455724995 50미터 북쪽방향 위선
LNT_E_50M 127.120356169 50미터 동쪽방향 위선
LNT_W_50M 127.119224231 50미터 서쪽방향 위선
LAT_S_100M 37.5442210017 100미터 남쪽방향 경선
LAT_N_100M 37.5460229983 100미터 북쪽방향 경선
LNT_E_100M 127.120922139 100미터 동쪽방향 경선
LNT_W_100M 127.118658261 100미터 서쪽방향 경선
GEOM_50M {"type": "Polygon", "coordinates":
[[[37.5446715005,127.119224231], polygon 1번쩨 꼭지점
[37.5455724995,127.119224231], polygon 2번쩨 꼭지점
[37.5455724995,127.120356169], polygon 3번쩨 꼭지점
[37.5446715005,127.120356169], polygon 4번쩨 꼭지점
[37.5446715005,127.119224231]]]} polygon 1번쩨 꼭지점(다시 첫번째꼭지점으로 연결해야 4각형이 나옴)
GEOM_100M {"type": "Polygon", "coordinates":
[[[37.5442210017,127.118658261],
[37.5460229983,127.118658261],
[37.5460229983,127.120922139],
[37.5442210017,127.120922139],
[37.5442210017,127.118658261]]]}
1개의 컬럼 데이터 안에 콤마가 있으므로 데이터 구분자를 탭(tab) 으로 저장합니다.
IMPORT Data to IRIS DB
데이터 추가 메뉴
데이터 추가 메뉴

데이터 선택

데이터 가공

데이터 가공 : GPS 좌표 데이터 유형 변경(Text -> Real)

데이터 입력 설정 : IRIS DB 테이블 설정(파티션 키, 파티션 구분 컬럼 지정)

데이터 제출하기 메뉴


DB브라우저 메뉴에서 입력한 IRIS table 데이터 조회해 봅니다.

IRIS Studio
보고서 화면 생성
날짜 박스 생성
- 날짜 박스를 선택하면 날짜박스의 속성을 설정할 수 있습니다.
현재 데이터는 1개의 날짜 2019-12-30 데이터만 있습니다.

날짜 데이터의 시각화 옵션

범위 선택을 위한 콤보 박스 생성 : 50미터, 100미터 범위를 콤보박스에서 선택하게 합니다.

map layer 1
layer map(지도) : open street map 선택합니다.

지도의 기본 위치로 서울이 오도록 한 후 기본값 설정합니다.
레이어는 3개를 설정합니다.

map layer 2
- 두번째 point 레이어는 서울시 공중화장실의 위/경도를 마커로 표시하는 레이어입니다.
데이터 설정하고
DB 테이블에서 화장실별 위/경도를 select 합니다.

- point 레이어의 시각화 설정
마커의 시각화 옵션 : 위/경도 표시 마커에 대한 색깔, 크기와 툴팁 컬럼 지정합니다.

설정값에 따라 나온 지도

map layer 3
- 세번째 range 레이어는 콤보박스에서 선택한 50미터, 100미터에 따라서 사각형 범위가 마커 주변으로 그려집니다.
트리거 실행 : 콤보박스에서 선택된 값을 이벤트로 입력받아 실행되게 합니다.
실행되는 SQL 쿼리
/*+ LOCATION ( PARTITION = '20191230000000' ) */
SELECT
K, UP_DATE, NUM as ID, LATITUDE, LOGITUDE, GEOM_${combo_1}M as GEOM
FROM
ROOT.TEST1_REST_SEOUL_GEOM
;
range 레이어 설정

100 미터 range 일 때

확대 : 50 미터

확대 : 100 미터
