IRIS Studio - 서울시 공중화장실 분포 지도

데이터는 서울시 열린 데이터 광장에서 제공하는 공공 데이터인 서울시 공중화장실 위치정보(WGS1984) 입니다.

서울시 지도에 표시된 화장실 위치(위/경도) 외에 접근성 정도를 파악하기 위해 화장실 위치를 중심으로 동,서,남,북으로 각각 50미터와 100 미터 범위로 접근성 range를 표현합니다.

보고서 작성을 위해 IRIS Analyzer 와 IRIS Studio 를 활용합니다.

  • IRIS-Analyzer
    • 데이터 추가
  • IRIS-Studio
    • map
    • 콤보박스



최종 지도 예시

서울시 공중화장실 분포 : 최종 결과 예시


서울시 공중화장실 분포(100미터 polygon map)


데이터 설명


서울시 공중화장실 위치정보 (좌표계: WGS1984)에 대한 파일

데이터 변환

  • 이번 예제는 변환 프로그래밍(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

데이터 추가 메뉴

  • 데이터 추가 메뉴
메뉴 화면

  • 데이터 선택
데이터 추가 메뉴 1단계

  • tab 으로 분리하여 읽어 들인 sample 데이터 모습
데이터 추가 메뉴 2단계

  • 데이터 가공 : GPS 좌표 데이터 유형 변경(Text -> Real)
데이터 추가 메뉴 3-2단계

데이터 추가 메뉴 3-2단계

  • 데이터 제출
    • 테이블 생성 및 로딩이 완료되면 작업현황 에 체크가 표시됩니다.
데이터 추가 메뉴 4-1단계

입력이 정상적으로 완료된 경우의 화면입니다.
데이터 추가 메뉴 4-1단계

  • DB브라우저 메뉴에서 입력한 IRIS table 데이터를 조회해 봅니다.
    • 참고로 일부 사용자 계정에서는 DB브라우저 메뉴에 접근이 되지 않습니다.
데이터 추가 메뉴 4-1단계


IRIS Studio

  • 날짜 박스를 선택하면 날짜박스의 속성을 설정할 수 있습니다.
    • 현재 데이터에는 1개의 날짜 2019-12-30 데이터만 있습니다.
날짜 속성

  • 날짜 데이터의 시각화 옵션
날짜 시각화옵션

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


map layer 1

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

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


map layer 2

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

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


  • 설정값에 따라 나온 지도
layer_map_2-3


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 레이어 설정
layer_map_3_1

  • 100 미터 range 일 때
layer_map_3_2


  • 확대 : 50 미터
layer_map_4
  • 확대 : 100 미터
layer_map_5