IRIS Studio - 서울시 공중화장실 분포 지도¶
데이터는 서울시 열린 데이터 광장에서 제공하는 공공 데이터인 서울시 공중화장실 위치정보(WGS1984) 입니다.
서울시 지도에 표시된 화장실 위치(위/경도) 외에 접근성 정도를 파악하기 위해 화장실 위치를 중심으로 동,서,남,북으로 각각 50미터와 100 미터 범위로 접근성 range를 표현합니다.
보고서 작성을 위해 IRIS Analyzer 와 IRIS Studio 를 활용합니다.
- IRIS-Analyzer
- 데이터 추가
- IRIS-Studio
- map
- 콤보박스
Contents
데이터 설명¶
- 형태
- 출처 : 서울시 열린데이터광장 서울시 공중화장실 위치정보
- URL http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-1370&srvType=S&serviceKind=1¤tPageNo=1
데이터 변환¶
- 이번 예제는 변환 프로그래밍(python, geoPandas, R 등) 없이 SQL로 직접 geo_json 을 만드는 예제입니다.(보고서 생성일 : 2019년 12월)
- 추후 Geo Data 변환을 위한 기능을 추가할 예정입니다.
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¶
데이터 추가 메뉴¶
- 데이터 추가 메뉴
- 데이터 선택
- tab 으로 분리하여 읽어 들인 sample 데이터 모습
- 데이터 가공 : GPS 좌표 데이터 유형 변경(Text -> Real)
- 데이터 입력 설정 : IRIS DB 테이블 설정(파티션 키, 파티션 구분 컬럼 지정)
- IRIS 에 테이블 생성하는 법 참조하세요.
- 데이터 제출
- 테이블 생성 및 로딩이 완료되면 작업현황 에 체크가 표시됩니다.
입력이 정상적으로 완료된 경우의 화면입니다.
- DB브라우저 메뉴에서 입력한 IRIS table 데이터를 조회해 봅니다.
- 참고로 일부 사용자 계정에서는 DB브라우저 메뉴에 접근이 되지 않습니다.
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 미터