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


요약

데이터는 서울시 열린 데이터 광장에서 제공하는 공공 데이터인
서울시 공중화장실 위치정보 (좌표계: WGS1984)
입니다.
map 에 표시된 화장실 위치(위/경도) 로부터 적절한 접근성 정도를 파악하기 위해
화장실 위치를 중심으로 동,서,남,북으로 각각 50미터와 100 미터 범위의 다각형 도형으로 접근성 range를 표현합니다.
지도 표현 방식 : 지도 레이어, 마커 레이어, polygon 레이어
서울 위도 ( 북위 37.5642135° ) / 경도 ( 동경 127.0016985° )

목차

  • 데이터 설명

  • 데이터 변환
    • 위/경도 좌표에 범위를 그리기 위한 GEOM 데이터컬럼 추가하기

  • Import Data to IRIS DB
    • IRIS 데이터 추가 메뉴 이용

  • IRIS Studio
    • 보고서 메뉴를 이용하여 맵 그리기 ( 3레이어, 마커, polygon )



데이터 출처

데이터 : 서울열린데이터광장


이미지 설명


최종 지도 예시

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


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




원시 데이터 설명


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


데이터 변환

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

데이터 추가 메뉴

  • 데이터 추가 메뉴

메뉴 화면

  • 데이터 선택

데이터 추가 메뉴 1단계

  • 데이터 가공

데이터 추가 메뉴 2단계

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

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

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

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

  • 데이터 제출하기 메뉴

데이터 추가 메뉴 4-1단계

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

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

데이터 추가 메뉴 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