페이지 트리
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

이 페이지의 이전 버전을 보고 있습니다. 현재 버전 보기.

현재와 비교 페이지 이력 보기

버전 1


작성 날짜 : 2025.07.30


작성자 :  황송희  / 검수자 :  이승우


GeoMap 컴포넌트의 권역별 데이터 조회 방식 안내 및 사용 가이드입니다.


권역별 데이터 표시 기능

GeoMap 컴포넌트는 배경 지도 위 또는 배경 지도 없이, 권역별 지리 데이터를 다양한 방식으로 시각화할 수 있습니다.

🗺️예시

1) 기본 지도

URL: https://rnd.bimatrix.co.kr/aud7/extention/portal/SimpleSSO_Con.jsp?reportCode=REPD8B00FD132AD4E9288E0957F7497185B

2) 세계 지도

URL: https://rnd.bimatrix.co.kr/aud7/extention/portal/SimpleSSO_Con.jsp?reportCode=REP05B9036D8BD048DFBE65C3D32CBA8AEC

3) Drill To Detail 샘플

URL: https://rnd.bimatrix.co.kr/aud7/extention/portal/SimpleSSO_Con.jsp?reportCode=REP07FF9E92977D4DCF88E3B8936B5E01CE

참조 테이블

GeoMap 컴포넌트는 제품의 레파지토리 테이블을 참조하여 권역별 지리 데이터를 시각화합니다.

테이블 목록

  • 필요 테이블 목록

    테이블 명테이블 설명Row 개수
    MAP_GEO_0국가별 0레벨 전 세계 국가 데이터263
    MAP_GEO_1국가별 1레벨 구역 데이터(시도)17
    MAP_GEO_2국가별 2레벨 구역 데이터(시군구)264
    MAP_GEO_3국가별 3레벨 구역 데이터(읍면동)8,629
    MAP_GEO_4국가별 3레벨 구역 데이터(리)30,322
    MAP_GEO_DOMESTIC_CODE대한민국 지리정보체계 코드 데이터(행정동 및 법정동)21,703
    MAP_GEO_COUNTRY_CODE전 세계 지리정보체계 코드 데이터(ISO Alpha3, ISO Alpha2, ISO Numeric)263
    MAP_GEO_LANGUAGE지역명 다국어 데이터39,495
  • 권역별 지리 데이터 표시 기능을 사용하기 위해서는 지리 정보가 포함된 참조 테이블과 그 하위 데이터가 모두 필요합니다.
  • 데이터 적재 방법: GeoMap 컴포넌트 어드민 사용 가이드

캐시 파일

권역별 지리 데이터를 조회할 경우, 대용량 데이터 처리를 고려하여 실행되는 쿼리문을 기준으로 개별 캐시 파일이 생성됩니다. 동일한 쿼리문이 재실행될 경우, 데이터를 재조회하지 않고 생성된 캐시 파일을 참조하여 지리 데이터를 컴포넌트 View에 표시합니다.

📁 캐시 파일 생성 경로: REPORT_PATH/GEO_JSON 하위


해당 경로의 폴더가 없거나 하위에 파일이 없는 경우

해당 경로에 해당 폴더가 없거나, 하위에 캐시 파일이 존재하지 않는 경우는 다음과 같은 사유일 수 있습니다.

  • 제품 하위 버전을 사용하는 경우
  • 제품을 커스텀하여 캐시 파일 생성 경로를 변경한 경우

[GeoMap] Source 보고서 내의 Server Script > MAP_SERVICE 스크립트 내에 해당 로직이 구현되어 있습니다. 아래를 참고하시면 생성 경로를 확인하실 수 있습니다.

따라서 데이터가 수정되었더라도 실행되는 쿼리문이 동일한 경우, 변경 사항이 반영되지 않고 이전 데이터가 계속 표시될 수 있습니다. 캐시 파일 삭제 후 동작을 재확인해주시길 바랍니다.

기타 FAQ

  1. 시군구 레벨에서 특정 시가 구 레벨과 같이 표시됩니다. ex) 포항시와 포항시 하위의 구를 나누고 싶습니다.
     답변

    시군구 레벨(MAP_GEO_2) 에서 시와 구 레벨이 구분되지 않는 문제의 원인은 아래와 같습니다.

    현재 GeoMap 에서 사용 중인 행정구역 코드 체계는 통계청의 행정구역 코드를 기준으로 하고 있으며, 이를 MAP_GEO_DOMESTIC_CODE 테이블에서 확인할 수 있습니다.

    해당 데이터는 MAP_GEO_2 테이블에서 확인할 수 있습니다.

     

    예를 들어 포항시의 경우에 (포항시 / 포항시 남구 / 포항시 북구) 라는 세 개의 행정구역이 모두 같은 레벨에 포함되어 있어 중첩 표시되는 현상이 발생하고 있습니다.

    이 문제를 해결하려면, 어떤 특정 구역(예를 들어 포항시만 표시하겠다) 만 표시하고 싶다면 포항시 남구와 포항시 북구 데이터를 제외하도록 쿼리를 수정하시면 됩니다. 

    포항 지역을 예시로 들었지만, 동일한 현상이 발생하는 다른 지역에도 동일하게 적용됩니다.

     

    ⁕ 시와 구 데이터를 동시에 제공하는 이유

    시와 구 데이터를 동시에 제공하는 이유는, 사용자가 상황에 맞게 유연하게 사용할 수 있도록 하기 위함입니다.

    예를 들어, 포항시 전체 데이터를 보고 싶을 때는 각 구 데이터를 선택적으로 포함할 수 있습니다.

    이를 이용하여 다양한 상황에 맞게 데이터를 활용할 수 있습니다.

  2. 데이터를 수정했는데도 이전의 데이터가 계속 표시됩니다.
     답변

    #캐시파일 안내 설명을 확인 부탁드립니다.

  3. 데이터를 최신화하니 읍면동/리 레벨에서 경계 데이터가 겹쳐 보입니다.
     답변

    행정동 기준 경계 데이터가 추가되면서, 법정동 데이터와 함께 조회될 경우 경계가 중복 표시될 수 있습니다.

    자세한 내용은 [i-AUD] GeoMap 컴포넌트 (지도, 맵) 사용 가이드 의 "지리 데이터 최신화 안내" 를 참고하시기 바랍니다.

    ✔ 해결 방법

    1) Source 보고서 재적용

    해당 이슈를 반영하여 Source 보고서가 수정되었습니다. → Source 보고서를 최신 버전으로 재다운로드 후 적용하시기 바랍니다.

    2) 직접 수정

    기존 보고서를 유지해야 하는 경우, 아래와 같이 수정이 필요합니다.

    • Server Script > @VARIABLES
      • VS_GID_DIV_TYPE 변수 설정 로직 추가
    • Server Script > @MAP_QUERY
      • 법정동 / 행정동 경계 데이터를 구분하여 조회하도록 수정
    변경 전변경 후
    // 선택 항목의 하위 보기	
    
    var langSQL = "\n , CASE WHEN T2.LABEL	   IS NULL THEN T1.LABEL     --DEFUALT NAME"
                + "\n   ELSE T2.LABEL    						         -- KOREAN NAME"
                + "\n   END AS LABEL";
    			
    	if(VS_GID_3){
    		sql = "    SELECT     T1.GID_0     AS GID_0     "
    			+ "\n           , T1.GID_1     AS GID_1     "
    			+ "\n           , T1.GID_2     AS GID_2     "
    			+ "\n           , T1.GID_3     AS GID_3     "
    			+ "\n           , T1.GID_4     AS GID_4     "
    			+ "\n           , ''           AS GID_5     "
    			+ "\n           , T1.NAME      AS NAME      "
    			+ "\n           , T1.PROPERTY      AS PROPERTY      "
    			+ langSQL
    			+ "\n           , T1.GEO       AS GEO       "
    			+ "\n           , 4            AS LEVEL_VALUE     "
    			+ "\n           , T1.MIN_X     AS MIN_X     "
    			+ "\n           , T1.MIN_Y     AS MIN_Y     "
    			+ "\n           , T1.MAX_X     AS MAX_X     "
    			+ "\n           , T1.MAX_Y     AS MAX_Y     "
    			+ "\n   FROM MAP_GEO_4 T1                   "
    			+ "\n   LEFT JOIN MAP_GEO_LANGUAGE T2 		"
    			+ "\n     ON T1.GID_4 = T2.GID_CODE		  	"
    			+ "\n    WHERE GID_0 IN(:VS_GID_0)          "
    			+ "\n     AND GID_1 IN(:VS_GID_1)           "
    			+ "\n     AND GID_2 IN(:VS_GID_2)           "
    			+ "\n     AND GID_3 IN(:VS_GID_3)           ";
    	}else if(VS_GID_2){
    		sql = "    SELECT     T1.GID_0     AS GID_0     "
    			+ "\n           , T1.GID_1     AS GID_1     "
    			+ "\n           , T1.GID_2     AS GID_2     "
    			+ "\n           , T1.GID_3     AS GID_3     "
    			+ "\n           , ''           AS GID_4     "
    			+ "\n           , ''           AS GID_5     "
    			+ "\n           , T1.NAME      AS NAME      "
    			+ "\n           , T1.PROPERTY      AS PROPERTY      "
    			+ langSQL
    			+ "\n           , T1.GEO       AS GEO       "
    			+ "\n           , 3            AS LEVEL_VALUE     "
    			+ "\n           , T1.MIN_X     AS MIN_X     "
    			+ "\n           , T1.MIN_Y     AS MIN_Y     "
    			+ "\n           , T1.MAX_X     AS MAX_X     "
    			+ "\n           , T1.MAX_Y     AS MAX_Y     "
    			+ "\n   FROM MAP_GEO_3 T1                   "
    			+ "\n   LEFT JOIN MAP_GEO_LANGUAGE T2 		"
    			+ "\n     ON T1.GID_3 = T2.GID_CODE		  	"
    			+ "\n    WHERE GID_0 IN(:VS_GID_0)          "
    			+ "\n     AND GID_1 IN(:VS_GID_1)           "
    			+ "\n     AND GID_2 IN(:VS_GID_2)           ";
    var DIV_TYPE = {
      "B": "법정동",
      "H": "행정동",
    };
    if(util.IsNullOrEmpty(VS_GID_DIV_TYPE)) VS_GID_DIV_TYPE = DIV_TYPE["B"]; //하위 호환성을 위해, VS_DIVISION_TYPE이 없을 경우 법정동으로 조회합니다.
    Matrix.WriteLog("[GeoMap] Source Server Script: 찐찐찐 @VARIABLES VS_GID_DIV_TYPE::"+VS_GID_DIV_TYPE);
    
    // 선택 항목의 하위 보기	
    var langSQL = "\n , CASE WHEN T2.LABEL	   IS NULL THEN T1.LABEL     --DEFUALT NAME"
                + "\n   ELSE T2.LABEL    						         -- KOREAN NAME"
                + "\n   END AS LABEL";
    
    
    	if(VS_GID_3){
    		sql = "    SELECT     T1.GID_0     AS GID_0     "
    			+ "\n           , T1.GID_1     AS GID_1     "
    			+ "\n           , T1.GID_2     AS GID_2     "
    			+ "\n           , T1.GID_3     AS GID_3     "
    			+ "\n           , T1.GID_4     AS GID_4     "
    			+ "\n           , ''           AS GID_5     "
    			+ "\n           , T1.NAME      AS NAME      "
    			+ "\n           , T1.PROPERTY      AS PROPERTY      "
    			+ langSQL
    			+ "\n           , T1.GEO       AS GEO       "
    			+ "\n           , 4            AS LEVEL_VALUE     "
    			+ "\n           , T1.MIN_X     AS MIN_X     "
    			+ "\n           , T1.MIN_Y     AS MIN_Y     "
    			+ "\n           , T1.MAX_X     AS MAX_X     "
    			+ "\n           , T1.MAX_Y     AS MAX_Y     "
    			+ "\n   FROM MAP_GEO_4 T1                   "
    			+ "\n   LEFT JOIN MAP_GEO_LANGUAGE T2 		"
    			+ "\n     ON T1.GID_4 = T2.GID_CODE		  	"
    			+ "\n    WHERE GID_0 IN(:VS_GID_0)          "
    			+ "\n     AND GID_1 IN(:VS_GID_1)           "
    			+ "\n     AND GID_2 IN(:VS_GID_2)           "
    			+ "\n     AND GID_3 IN(:VS_GID_3)           ";
    
            if(VS_GID_DIV_TYPE == DIV_TYPE["B"]){ //법정동 코드 조회
                sql += "\n     AND GID_4 NOT LIKE '%H'      ";
            }else { //행정동 코드 조회
                sql += "\n     AND GID_4 LIKE '%H'          ";
            }
    
    	}else if(VS_GID_2){
    		sql = "    SELECT     T1.GID_0     AS GID_0     "
    			+ "\n           , T1.GID_1     AS GID_1     "
    			+ "\n           , T1.GID_2     AS GID_2     "
    			+ "\n           , T1.GID_3     AS GID_3     "
    			+ "\n           , ''           AS GID_4     "
    			+ "\n           , ''           AS GID_5     "
    			+ "\n           , T1.NAME      AS NAME      "
    			+ "\n           , T1.PROPERTY      AS PROPERTY      "
    			+ langSQL
    			+ "\n           , T1.GEO       AS GEO       "
    			+ "\n           , 3            AS LEVEL_VALUE     "
    			+ "\n           , T1.MIN_X     AS MIN_X     "
    			+ "\n           , T1.MIN_Y     AS MIN_Y     "
    			+ "\n           , T1.MAX_X     AS MAX_X     "
    			+ "\n           , T1.MAX_Y     AS MAX_Y     "
    			+ "\n   FROM MAP_GEO_3 T1                   "
    			+ "\n   LEFT JOIN MAP_GEO_LANGUAGE T2 		"
    			+ "\n     ON T1.GID_3 = T2.GID_CODE		  	"
    			+ "\n    WHERE GID_0 IN(:VS_GID_0)          "
    			+ "\n     AND GID_1 IN(:VS_GID_1)           "
    			+ "\n     AND GID_2 IN(:VS_GID_2)           ";
    
            if(VS_GID_DIV_TYPE == DIV_TYPE["B"]){ //법정동 코드 조회
                sql += "\n     AND GID_3 NOT LIKE '%H'      ";
            }else { //행정동 코드 조회
                sql += "\n     AND GID_3 LIKE '%H'          ";
            }

    📌 참고

    • 관련 이슈: (BCRM#G0940) [GeoMap 지도 컴포넌트] 행정동 기준 지리데이터 신규 추가 지원

    • 릴리즈 버전: 7.0.500.20260416-21





  • 레이블 없음