diff --git a/src/main/webapp/js/map/main/map.js b/src/main/webapp/js/map/main/map.js index 96b4e700..a4d93998 100644 --- a/src/main/webapp/js/map/main/map.js +++ b/src/main/webapp/js/map/main/map.js @@ -358,6 +358,8 @@ var MINERAL_LAYER; // 광물 레이어 var MINE_LAYER; // 광산 레이어 var WELL_LAYER; // 관정 레이어 var STEEP_SLOPE_LAYER; // 급경사지 레이어 +var CTL_SELECT_SLOPE; // 급경사지 선택 + var HOLE_SELECT; // 시추공 선택 var HOLE_SELECT2; // 3d지반 var HOLE_AREA; // 영역 선택 @@ -1145,6 +1147,21 @@ function initApp(param){ }); CTL_SELECT.events.register("getfeatureinfo", CTL_SELECT, addHole); BASE_MAP.addControl(CTL_SELECT); + + + // 급경사지 선택 컨트롤 생성 + // 급경사지 레이어 전용 컨트롤을 별도로 만듭니다. + CTL_SELECT_SLOPE = new OpenLayers.Control.WMSGetFeatureInfo({ + url: O2MAP_URL, + crs: "EPSG:3857", + infoFormat: "application/json", + layers: [STEEP_SLOPE_LAYER], + queryVisible: true, + maxFeatures: 1 + }); + // 급경사지 정보를 처리할 콜백 함수(addSteepSlope)를 등록합니다. + CTL_SELECT_SLOPE.events.register("getfeatureinfo", CTL_SELECT_SLOPE, addSteepSlope); + BASE_MAP.addControl(CTL_SELECT_SLOPE); HOLE_SELECT2 = new OpenLayers.Layer.Vector("SELECT"); @@ -2722,15 +2739,20 @@ function isSelectHole(){ function onSelectHole(){ - offSelectHole(); + offSelectHole(); // 모든 컨트롤 초기화 (initControl 호출됨) - CTL_TOOLTIP.deactivate(); - CTL_SELECT.activate(); + CTL_TOOLTIP.deactivate(); + CTL_SELECT.activate(); // 기본 시추공 선택 활성화 - CTL_INFO.setText("선택 모드"); - CTL_INFO.activate(); - $("#CTL_INFO").css("bottom","65px"); - $("#CTL_INFO").css("left","20px"); + // 컨트롤이 초기화되었으므로, 급경사지 레이어가 눈에 보인다면 다시 선택 기능을 켜줍니다. + if (STEEP_SLOPE_LAYER && STEEP_SLOPE_LAYER.getVisibility()) { + if (CTL_SELECT_SLOPE) CTL_SELECT_SLOPE.activate(); + } + + CTL_INFO.setText("선택 모드"); + CTL_INFO.activate(); + $("#CTL_INFO").css("bottom","65px"); + $("#CTL_INFO").css("left","20px"); } @@ -2779,6 +2801,112 @@ function addHole(evt){ } +//급경사지 선택 시 호출될 콜백 함수 (팝업 표시) +function addSteepSlope(evt){ + if (evt.text.length > 50) { + // 1. 서버 응답(JSON) 파싱 + var values = JSON.parse(evt.text); + + if(values.features && values.features.length > 0) { + var feature = values.features[0]; + var props = feature.properties; + + // 2. 팝업을 띄울 위치 계산 (클릭한 지점) + // evt.xy는 화면 픽셀 좌표이므로 지도 좌표(LonLat)로 변환합니다. + var lonlat = BASE_MAP.getLonLatFromPixel(evt.xy); + + // 기존 팝업 제거 + removeTooltip(); + + // 3. 컬럼명 -> 한글 주석 매핑 객체 정의 + var colLabels = { + "GID": "고유번호", "MNGNO": "관리번호", "DISTRICTNM": "지구명", + "MNGORG": "관리기관", "MNGDEPT": "관리부서", "MNGTYPE": "관리주체", + "SIDO": "시도", "SGG": "시군구", "EMD": "읍면동", "LI": "리", "BUNJI": "지번", "JIMOK": "지목", + "AREAM2": "지정면적(㎡)", "AREACODE": "구역코드", + "SLATI": "시점 위도", "SLONG": "시점 경도", "ELATI": "종점 위도", "ELONG": "종점 경도", + "USETYPE": "토지이용현황", "SLOPETYPE": "사면유형", "STRUCTTYPE": "구조물유형", + "MAXHEIGHT": "최대수직고(m)", "JDLENGTH": "연장(m)", "AVGSLOPE": "평균경사(°)", "AVGSLOPEDO": "평균경사도", + "SLOPESHAPE": "사면형상", "WATERSOUR": "용출수", "CEILDITCH": "산마루측구", "COLLAPSEHIS": "붕괴이력", + "CONSTYEAR": "설치년도", "CONSTRUCTOR": "시공자", "SOILSLOPE": "토사상태", + "WALLCONCRE": "콘크리트옹벽", "WALLSTONE": "석축/개비온", "BEDROCK": "암반상태", + "TREEDENS": "식생(교목)", "PLANTDENS": "식생(관목)", "EXTFORCE": "외력인자", + "VDISTDNSTREAM": "하류거리(m)", "VDISTPUBLIC": "공공시설거리(m)", "VDISTNAME": "피해예상시설명", + "VDISTRIVER": "하천거리(m)", "VICTBUILDD": "피해예상건물", "VICTFARM": "피해예상농경지", "VICTROAD": "피해예상도로", + "ASSTOPO": "인접지형", "ASSDIST": "인접거리(m)", "ASSRATE": "인접등급/하천", + "ISSAFETY": "안전성여부", "EMERMEA": "응급대책", "REPAIRPLAN": "보수보강계획", + "NEEDMEAS": "계측필요여부", "REASONMEAS": "계측사유", "RISKRATE": "위험등급", "EVALSCORE": "평가점수", + "MNGDT": "관리일자", "MAINTYEAR": "정비년도", "MAINTDETAILS": "정비내역", + "INVESTDEPT": "조사부서", "INVESTNAME": "조사자", "INVESTDT": "조사일자", + "EXPERTOPINION": "전문가의견", "REMARK": "비고" + }; + + // 4. 팝업 내용(HTML) 생성 + var tagStr = ""; + // 내용이 많으므로 스크롤 영역 생성 + tagStr += '
| 급경사지 상세 정보 | '; + tagStr += '|
| ' + label + ' | '; + tagStr += '' + value + ' | '; + tagStr += '