@@ -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