diff --git a/src/main/webapp/WEB-INF/views/jusangdo/jusangdoNew.jsp b/src/main/webapp/WEB-INF/views/jusangdo/jusangdoNew.jsp index 3a18d40b..be1ca6c5 100644 --- a/src/main/webapp/WEB-INF/views/jusangdo/jusangdoNew.jsp +++ b/src/main/webapp/WEB-INF/views/jusangdo/jusangdoNew.jsp @@ -33,11 +33,16 @@ $(".report_menu_pdf_button"); } else { $(".report_menu_save_button").hide(); - $(".report_menu_pdf_button").hide(); + //$(".report_menu_pdf_button").hide(); } - $(".report_menu_excel_button").hide(); + //$(".report_menu_excel_button").hide(); $(".report_menu_hwp_button").hide(); $(".report_menu_print_button").hide(); + + report.pdfDownLoad(); + report.excelDownLoad(); + + } diff --git a/src/main/webapp/WEB-INF/views/map/left/mapLeft.jsp b/src/main/webapp/WEB-INF/views/map/left/mapLeft.jsp index 22c4cbfe..4be3e36a 100644 --- a/src/main/webapp/WEB-INF/views/map/left/mapLeft.jsp +++ b/src/main/webapp/WEB-INF/views/map/left/mapLeft.jsp @@ -1372,7 +1372,7 @@ function table3display(){ }
-
+
지도구분
@@ -1674,34 +1674,40 @@ function table3display(){
  • - - + +
  • - - + +
  • - - + +
  • - - + +
  • - - + + +
  • +
  • + +
  • diff --git a/src/main/webapp/js/map/main/map.js b/src/main/webapp/js/map/main/map.js index 1cb85607..818662d4 100644 --- a/src/main/webapp/js/map/main/map.js +++ b/src/main/webapp/js/map/main/map.js @@ -28,9 +28,8 @@ function hasClass(element, cls) { return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1; } -function removeClassOverlayLayer(targetEleId) { +function myRemoveClass(targetEleId, toggleClass) { var targetBtn = document.getElementById(targetEleId); - var toggleClass = 'active'; if (!targetBtn) { console.error(targetEleId + " 버튼이 존재하지 않습니다."); @@ -43,12 +42,11 @@ function removeClassOverlayLayer(targetEleId) { } } -function addClassOverlayLayer(targetEleId) { +function myAddClass(targetEleId, toggleClass) { var targetBtn = document.getElementById(targetEleId); - var toggleClass = 'active'; if (!targetBtn) { - console.error(targetEleId + " 버튼이 존재하지 않습니다."); + //console.error(targetEleId + " 버튼이 존재하지 않습니다."); return; } targetBtn.className += " " + toggleClass; @@ -259,6 +257,80 @@ OpenLayers.Control.DragPopup = OpenLayers.Class(OpenLayers.Control, { CLASS_NAME: "OpenLayers.Control.DragPopup" }); + +/** + * 광산 정보 모달 표시 함수 + * @param {String} title 제목 + * @param {String} content 내용 (HTML 태그 사용 가능) + * @param {Function} onCloseCallback 닫기 버튼 클릭 시 실행될 콜백 함수 + */ +function showMineInfoModal(title, content, onCloseCallback) { + // 이미 열려있는 모달이 있다면 제거 + if ($('#mineInfoModal').length > 0) { + $('#mineInfoModal').remove(); + } + + // 모달 HTML 생성 (스타일은 지질도 팝업과 유사하게 맞춤) + var popupHtml = + '
    ' + + ' ' + + '
    ' + + content + + '
    ' + + '
    ' + + ' ' + + '
    ' + + '
    '; + + $('body').append(popupHtml); + var modal = $('#mineInfoModal'); + + // 화면 중앙 배치 + var top = ($(window).height() - modal.outerHeight()) / 2; + var left = ($(window).width() - modal.outerWidth()) / 2; + if (top < 0) top = 20; + if (left < 0) left = 20; + modal.css({top: top, left: left}); + + // 닫기 처리 함수 + function closeModal() { + modal.remove(); + // 이벤트 리스너 정리 + $(document).off('mousemove.mineModal').off('mouseup.mineModal'); + // 콜백 실행 (주로 지도 선택 해제용) + if (onCloseCallback) onCloseCallback(); + } + + // 닫기/확인 버튼 이벤트 연결 + $('#closeMineModalBtn, #okMineModalBtn').on('click', closeModal); + + // --- 드래그 기능 구현 --- + var isDragging = false; + var offset = {x:0, y:0}; + + modal.find('.popup-header').on('mousedown', function(e) { + isDragging = true; + var pos = modal.offset(); + offset.x = e.pageX - pos.left; + offset.y = e.pageY - pos.top; + e.preventDefault(); // 텍스트 선택 방지 + }); + + $(document).on('mousemove.mineModal', function(e) { + if (isDragging) { + modal.offset({ top: e.pageY - offset.y, left: e.pageX - offset.x }); + } + }).on('mouseup.mineModal', function() { + isDragging = false; + }); +} + //---------여기 시작 코드 // ================================================================ @@ -313,24 +385,46 @@ function hole_layerOnOff() { } +/** + * 지도구분을 클릭하면 CALS 분류를 전체 해제 또는 전체 선택한다. + * @returns + */ function forceUncheckHoleLayerOnOff() { - //33 글자여야한다. - //var returnValue = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNY"; - if( true ) { - var returnValue = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNY"; - for (i = 1; i <= 33; i++) { - var char = returnValue.charAt(i); - if( char==='Y') { - $("#browser").find("#hole"+i).prop("checked", true); - } else { - $("#browser").find("#hole"+i).prop("checked", false); - } - } + //thkim + var eleId = "map-label-cals"; + var toggleClass = "active"; - changeLegend(returnValue); - } - - + var targetBtn = document.getElementById(eleId); + var returnValue = null; + if (hasClass(targetBtn, toggleClass)) { + myRemoveClass(eleId, toggleClass); + returnValue = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYN"; + } else { + myAddClass(eleId, toggleClass); + returnValue = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNY"; + } + + for (i = 1; i <= 33; i++) { + var char = returnValue.charAt(i); + if( char==='Y') { + $("#browser").find("#hole"+i).prop("checked", true); + } else { + $("#browser").find("#hole"+i).prop("checked", false); + } + } + + changeLegend(returnValue); + //hideLeftSideBar(); + $(window).trigger('resize'); + BASE_MAP.updateSize(); + +} + +/** + * 좌측 side bar를 숨긴다. + * @returns + */ +function hideLeftSideBar() { var body = $('body'); if (body.hasClass("page-sidebar-closed")) { @@ -339,11 +433,6 @@ function forceUncheckHoleLayerOnOff() { } else { body.addClass("page-sidebar-closed"); } - - $(window).trigger('resize'); - BASE_MAP.updateSize(); - - } function getMyDrillingProjectCodes() { @@ -423,8 +512,10 @@ var VWORLD_URL = "https://xdworld.vworld.kr/2d/Base/service/${z}/${x}/${y}.png // ------------------------------- // TBL_HEADER_HOLE 설정 // ------------------------------ -var T_HOLE = "TBL_HEADER_HOLE"; -var T_WEB_STEEP_SLOPE = "WEB_STEEP_SLOPE"; //""; +var T_HOLE = "TBL_HEADER_HOLE"; +var T_STEEP_SLOPE = "WEB_STEEP_SLOPE"; // 급경사지가 들어 있는 테이블 명 +var T_RESISTIVITY = "TEMP_RESISTIVITY_SURVEY_SUB"; // 물리탐사 - 전기비저항이 들어 있는 테이블 명 +var T_REFRACTION = "TBL_REFRACTION_SURVEY_SUB"; // 물리탐사 - 굴절법탄성파가 들어 있는 테이블 명 var T_HOLE_M = "TBL_HEADER_HOLE_M"; var F_PROJECT_CODE = "PROJECT_CODE"; @@ -469,6 +560,11 @@ var WELL_LAYER; // 관정 레이어 var STEEP_SLOPE_LAYER; // 급경사지 레이어 var CTL_SELECT_SLOPE; // 급경사지 선택 +var RESISTIVITY_LAYER; // 물리탐사 - 전기비저항 +var REFRACTION_LAYER; // 물리탐사 - 굴절법탄성파 + + + var HOLE_SELECT; // 시추공 선택 var HOLE_SELECT2; // 3d지반 var HOLE_AREA; // 영역 선택 @@ -760,10 +856,10 @@ function initApp(param){ // 급경사지 레이어 STEEP_SLOPE_LAYER = new OpenLayers.Layer.WMS( - "WEB_STEEP_SLOPE", + T_STEEP_SLOPE, O2MAP_URL, { - layers : T_WEB_STEEP_SLOPE, + layers : T_STEEP_SLOPE, transparent : true, format : "image/png", crs : "EPSG:3857", @@ -779,6 +875,49 @@ function initApp(param){ STEEP_SLOPE_LAYER.setVisibility(false); + + // 물리탐사 - 전기비저항 레이어 + RESISTIVITY_LAYER = new OpenLayers.Layer.WMS( + T_RESISTIVITY, + O2MAP_URL, + { + layers : T_RESISTIVITY, + transparent : true, + format : "image/png", + crs : "EPSG:3857", + }, { + singleTile : false, + isBaseLayer : false, + visibility: false, + transitionEffect: "resize", + buffer : 0, + removeBackBufferDelay : 0 + } + ); + + RESISTIVITY_LAYER.setVisibility(false); + + // 물리탐사 - 굴절법탄성파 레이어 + REFRACTION_LAYER = new OpenLayers.Layer.WMS( + T_REFRACTION, + O2MAP_URL, + { + layers : T_REFRACTION, + transparent : true, + format : "image/png", + crs : "EPSG:3857", + }, { + singleTile : false, + isBaseLayer : false, + visibility: false, + transitionEffect: "resize", + buffer : 0, + removeBackBufferDelay : 0 + } + ); + + REFRACTION_LAYER.setVisibility(false); + /* if( getQueryString("masterCompanyCode") && true ) { HOLE_DRILLING = new OpenLayers.Layer.WMS( @@ -961,6 +1100,12 @@ function initApp(param){ STEEP_SLOPE_LAYER.mergeNewParams({version : '1.3.0'}); BASE_MAP.addLayer(STEEP_SLOPE_LAYER); + RESISTIVITY_LAYER.mergeNewParams({version : '1.3.0'}); + BASE_MAP.addLayer(RESISTIVITY_LAYER); + + REFRACTION_LAYER.mergeNewParams({version : '1.3.0'}); + BASE_MAP.addLayer(REFRACTION_LAYER); + @@ -1246,17 +1391,31 @@ function initApp(param){ validationTailler = ' 검증됨'; } console.log( contents + validationTailler ); - alert( contents ); + // ====== [수정된 부분] ====== + // 1. 줄바꿈(\n)을 HTML 태그(
    )로 변환 + var htmlContent = contents.replace(/\n/g, '
    '); + + // 2. alert 대신 모달 함수 호출 + // 모달이 닫힐 때(callback) 선택 상태를 해제(unselect)합니다. + showMineInfoModal("광산 상세 정보", htmlContent, function() { + CTL_SELECT_MINE.unselect(feature); + }); + + isFound = true; + // ========================== } } + // 해당하는 광산 정보를 찾지 못한 경우 바로 선택 해제 + if (!isFound) { + CTL_SELECT_MINE.unselect(feature); + } }, error: function(xhr, status, error) { console.error("API 호출 에러:", error); alert("상세 정보를 가져오는데 실패했습니다."); + CTL_SELECT_MINE.unselect(feature); }, complete: function() { - // 알림창 닫은 후 선택 상태 해제 (다시 클릭 가능하도록) - CTL_SELECT_MINE.unselect(feature); } }); } @@ -1355,7 +1514,13 @@ function initApp(param){ BASE_MAP.setLayerIndex(MINE_LAYER, 6); // 급경사지 레이어를 그 위(index 7)에 둡니다. - BASE_MAP.setLayerIndex(STEEP_SLOPE_LAYER, 7); + BASE_MAP.setLayerIndex(STEEP_SLOPE_LAYER, 7); + + // 물리탐사 - 전기비저항 레이어를 그 위(index 8)에 둡니다. + BASE_MAP.setLayerIndex(RESISTIVITY_LAYER, 7); + + // 물리탐사 - 굴절법탄성파 레이어를 그 위(index 9)에 둡니다. + BASE_MAP.setLayerIndex(REFRACTION_LAYER, 7); } // ▲▲▲ 레이어 순서(Z-index) 조정 코드 ▲▲▲ @@ -2069,12 +2234,7 @@ function initApp(param){ const positionX = Number(getQueryString("positionX")); const positionY = Number(getQueryString("positionY")); - if( userArea && masterCompanyCode && false) { - addDrillingHoles(masterCompanyCode); - forceUncheckHoleLayerOnOff(); - } else { - BASE_MAP.setCenter(new OpenLayers.LonLat(14184425.793355, 4302405.8698004), 7); - } + BASE_MAP.setCenter(new OpenLayers.LonLat(14184425.793355, 4302405.8698004), 7); if( getQueryString("masterCompanyCode") ) { @@ -4240,7 +4400,8 @@ function changeLegend(checkList) { '0626', '0731', '0738', - '0871' + '0871', + '0000' // 아무것도 안 보여주기 용도. ]; var record = typeValue[id]; @@ -4498,14 +4659,16 @@ function initOverlayLayers(targetEleId) { offOverlayLayer(targetEleId, 'map-btn-icon-mine-button', MINE_LAYER); offOverlayLayer(targetEleId, 'map-btn-icon-well-button', WELL_LAYER); offOverlayLayer(targetEleId, 'map-btn-icon-steep-slope-button', STEEP_SLOPE_LAYER); + offOverlayLayer(targetEleId, undefined, RESISTIVITY_LAYER); //물리탐사 - 전기저항 + offOverlayLayer(targetEleId, undefined, REFRACTION_LAYER); //물리탐사 - 굴절법탄성파 } function offOverlayLayer(targetEleId, myEleId, LAYER) { if( LAYER ) { if( targetEleId === myEleId) { } else { - LAYER.setVisibility(false); - removeClassOverlayLayer(myEleId); + LAYER.setVisibility(false); + myRemoveClass(myEleId); } } } @@ -5883,7 +6046,6 @@ function showGeologyLegend() { function toggleOverlayLayer(liEleId, layerName, LAYER, message) { - initControl(liEleId); // 다른 컨트롤 상태 초기화 if (!LAYER) { @@ -5897,7 +6059,7 @@ function toggleOverlayLayer(liEleId, layerName, LAYER, message) { var toggleClass = 'active'; if (hasClass(targetBtn, toggleClass)) { - removeClassOverlayLayer(liEleId); + myRemoveClass(liEleId, toggleClass); // 레이어 숨김 -> 컨트롤 비활성화 LAYER.setVisibility(false); @@ -5907,7 +6069,7 @@ function toggleOverlayLayer(liEleId, layerName, LAYER, message) { CTL_INFO.setText(layerName + " Off"); CTL_INFO.deactivate(); } else { - addClassOverlayLayer(liEleId); + myAddClass(liEleId, toggleClass); // [ON 처리] 레이어 표시 -> 컨트롤 활성화 (선택 모드 여부 상관없음) LAYER.setVisibility(true); @@ -6135,41 +6297,18 @@ function geologySteepSlope() { } -//물리탐사 +//물리탐사 - 전기저항 function geologyResistivitySurvey() { - initControl(); // 다른 컨트롤 상태 초기화 - - // STEEP_SLOPE_LAYER 가 정상적으로 생성되었는지 확인 - if (!STEEP_SLOPE_LAYER) { - console.error("급경사지 레이어가 초기화되지 않았습니다."); - return; - } - - // 현재 레이어의 표시 상태를 가져옵니다. - var isVisible = STEEP_SLOPE_LAYER.getVisibility(); + var liEleId = undefined; + var layerName = '물리탐사 - 전기저항'; + var message = '물리탐사 - 전기저항 정보는 빨간색 선으로 보여집니다.'; + toggleOverlayLayer(liEleId, layerName, RESISTIVITY_LAYER, message); +} - if (isVisible ) { - // 레이어가 현재 보이고 있다면, 숨깁니다. - STEEP_SLOPE_LAYER.setVisibility(false); - CTL_INFO.setText("급경사지 Off"); - CTL_INFO.deactivate(); // 정보창도 비활성화 - - } else { - - // 레이어를 보이게 설정하고 강제로 다시 그립니다. - STEEP_SLOPE_LAYER.setVisibility(true); - STEEP_SLOPE_LAYER.redraw(true); - - // CTL_INFO의 infoDiv가 내부 요소를 absolute 포지셔닝할 수 있도록 'relative'로 설정 - $(CTL_INFO.infoDiv).css("position", "relative"); - - // CTL_INFO 텍스트 설정 시 버튼 HTML을 함께 삽입 - CTL_INFO.setText("급경사지 On"); - CTL_INFO.activate(); - $("#CTL_INFO").css("bottom", "65px"); - $("#CTL_INFO").css("left", "20px"); - - showToast('급경사지 정보는 빨간색 선으로 보여집니다.'); - } - +//물리탐사 - 굴절법탄성파 +function geologyRefractionSurvey() { + var liEleId = undefined; + var layerName = '물리탐사 - 굴절법탄성파'; + var message = '물리탐사 - 굴절법탄성파 정보는 빨간색 선으로 보여집니다.'; + toggleOverlayLayer(liEleId, layerName, REFRACTION_LAYER, message); } \ No newline at end of file