feat: 현장투수시험_평균투수계수_투수계수_총수두_하이픈_입력_지원
parent
91b72e5fc9
commit
1529c7ccaa
|
|
@ -1727,7 +1727,8 @@ public class WebConfirm
|
|||
com_code = isnull(resultSet.getString("COM_CODE"));
|
||||
}
|
||||
else {
|
||||
sql = "SELECT MAX(TO_NUMBER(COM_CODE))+1 AS MAX_CODE FROM " + tbl_name;
|
||||
sql = "SELECT MAX(TO_NUMBER(COM_CODE))+1 AS MAX_CODE FROM " + tbl_name + " " +
|
||||
"WHERE REGEXP_LIKE(COM_CODE, '^[0-9]+$')";
|
||||
query = new DatabaseQuery(sql);
|
||||
resultSet = query.execute(connection);
|
||||
if (resultSet.next()) {
|
||||
|
|
|
|||
|
|
@ -179,6 +179,8 @@ public class MainController
|
|||
ModelAndView mv = new ModelAndView();
|
||||
|
||||
String src = request.getParameter("src");
|
||||
|
||||
int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS"));
|
||||
|
||||
if( src != null && src.toLowerCase().equals("drilling") ) {
|
||||
mv.addObject("isFromDrillingSystem", true);
|
||||
|
|
@ -207,8 +209,7 @@ public class MainController
|
|||
|
||||
} else {
|
||||
mv.addObject("isLogin", true);
|
||||
|
||||
if ("admin_user".equals(request.getSession().getAttribute("USERID").toString()) == true) {
|
||||
if ("admin_user".equals(request.getSession().getAttribute("USERID").toString()) == true || nCls == 65535) {
|
||||
EgovMap regiCount = commonService.getRegiCountAdmin();
|
||||
mv.addObject("WAIT_CNT", regiCount.get("waitCnt"));
|
||||
mv.addObject("CONFIRM_CNT", regiCount.get("confirmCnt"));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
public class MyPermission {
|
||||
|
||||
// 1. 각 권한에 대한 플래그를 2의 거듭제곱으로 정의합니다.
|
||||
public static final int PERMISSION_NONE = 0; // 0000
|
||||
public static final int PERMISSION_READ = 1; // 0001
|
||||
public static final int PERMISSION_WRITE = 2; // 0010
|
||||
public static final int PERMISSION_EXECUTE = 4; // 0100
|
||||
public static final int PERMISSION_DELETE = 8; // 1000
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
// 2. 여러 권한을 하나의 정수 변수에 할당 (읽기 + 쓰기 권한 부여)
|
||||
int myPermissions = PERMISSION_READ | PERMISSION_WRITE; // 1 | 2 = 3 (0011)
|
||||
|
||||
System.out.println("초기 권한 설정 (읽기, 쓰기)");
|
||||
printPermissions(myPermissions);
|
||||
|
||||
// 3. 특정 권한이 있는지 확인
|
||||
System.out.println("\n--- 권한 확인 ---");
|
||||
// (myPermissions & PERMISSION_READ) != 0 으로 체크해도 동일합니다.
|
||||
if ((myPermissions & PERMISSION_READ) == PERMISSION_READ) {
|
||||
System.out.println("결과: 읽기 권한이 있습니다.");
|
||||
}
|
||||
if ((myPermissions & PERMISSION_EXECUTE) == PERMISSION_EXECUTE) {
|
||||
System.out.println("결과: 실행 권한이 있습니다.");
|
||||
} else {
|
||||
System.out.println("결과: 실행 권한이 없습니다.");
|
||||
}
|
||||
|
||||
// 4. 기존 권한에 새로운 권한 추가 (실행 권한 추가)
|
||||
System.out.println("\n--- 실행 권한 추가 ---");
|
||||
myPermissions |= PERMISSION_EXECUTE; // myPermissions = myPermissions | PERMISSION_EXECUTE;
|
||||
printPermissions(myPermissions);
|
||||
|
||||
// 5. 특정 권한 제거 (쓰기 권한 제거)
|
||||
System.out.println("\n--- 쓰기 권한 제거 ---");
|
||||
myPermissions &= ~PERMISSION_WRITE; // myPermissions = myPermissions & ~PERMISSION_WRITE;
|
||||
printPermissions(myPermissions);
|
||||
|
||||
// 6. 권한 토글 (XOR 연산, 있으면 없애고 없으면 추가)
|
||||
System.out.println("\n--- 읽기 권한 토글 (제거) ---");
|
||||
myPermissions ^= PERMISSION_READ;
|
||||
printPermissions(myPermissions);
|
||||
|
||||
System.out.println("\n--- 읽기 권한 토글 (다시 추가) ---");
|
||||
myPermissions ^= PERMISSION_READ;
|
||||
printPermissions(myPermissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* 현재 설정된 권한 상태를 출력하는 헬퍼 메서드
|
||||
*/
|
||||
public static void printPermissions(int permissions) {
|
||||
System.out.println("현재 권한 값 (Decimal): " + permissions);
|
||||
System.out.println("현재 권한 값 (Binary): " + Integer.toBinaryString(permissions));
|
||||
|
||||
System.out.print("포함된 권한: ");
|
||||
if ((permissions & PERMISSION_READ) == PERMISSION_READ) System.out.print("READ ");
|
||||
if ((permissions & PERMISSION_WRITE) == PERMISSION_WRITE) System.out.print("WRITE ");
|
||||
if ((permissions & PERMISSION_EXECUTE) == PERMISSION_EXECUTE) System.out.print("EXECUTE ");
|
||||
if ((permissions & PERMISSION_DELETE) == PERMISSION_DELETE) System.out.print("DELETE ");
|
||||
if (permissions == PERMISSION_NONE) System.out.print("NONE");
|
||||
System.out.println("\n---------------------------------");
|
||||
}
|
||||
}
|
||||
|
|
@ -232,6 +232,9 @@ function fn_isNumeric(fieldData, fieldName, msgTest) {
|
|||
function fn_validateLength(fieldData, fieldName, msgTest, intLength, decimalLength) {
|
||||
for (let i = 0; i < fieldData.length; i++) {
|
||||
let value = fieldData[i][fieldName];
|
||||
if( value === -999 ) {
|
||||
continue;
|
||||
}
|
||||
let parts = value.toString().split(".");
|
||||
if (parts[0].length > intLength || (parts[1] && parts[1].length > decimalLength)) {
|
||||
alert(msgTest + "의 값은 정수 : " + intLength + "자리, 소수점 이하 : " + decimalLength + "자리까지 입력할 수 있습니다.");
|
||||
|
|
@ -241,14 +244,43 @@ function fn_validateLength(fieldData, fieldName, msgTest, intLength, decimalLeng
|
|||
return true;
|
||||
}
|
||||
|
||||
function changeHyphenToMinus999Main(data) {
|
||||
for( idx in data ) {
|
||||
// -(hyphen) 허용한 것을 -999로 변환한다.
|
||||
var targetItemKey = 'fieldperAvgPermeability';
|
||||
data[idx][targetItemKey] = changeHyphenToMinus999(data[idx][targetItemKey]);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function changeHyphenToMinus999Sub(data) {
|
||||
for( idx in data ) {
|
||||
// -(hyphen) 허용한 것을 -999로 변환한다.
|
||||
var targetItemKey = 'fieldperSubTotalHead';
|
||||
data[idx][targetItemKey] = changeHyphenToMinus999(data[idx][targetItemKey]);
|
||||
|
||||
targetItemKey = 'fieldperSubPermeability';
|
||||
data[idx][targetItemKey] = changeHyphenToMinus999(data[idx][targetItemKey]);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function changeHyphenToMinus999(data) {
|
||||
if( data === '-' ) {
|
||||
data = -999;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
//Data 저장.
|
||||
function fn_save(rUrl) {
|
||||
|
||||
//240103 임효주 - 현장투수시험 (평균)투수계수의 type 에러 예방. 해당 값이 숫자 또는 공백인지 확인
|
||||
let fieldData1 = kendoJQuery("#kictGrid1").data("kendoGrid")._data;
|
||||
let fieldName1 = "fieldperAvgPermeability"; // 수정됨
|
||||
let msgTest1 = "평균투수계수";
|
||||
|
||||
fieldData1 = changeHyphenToMinus999Main(fieldData1);
|
||||
if (!fn_isNumeric(fieldData1, fieldName1, msgTest1)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -256,7 +288,7 @@ function fn_save(rUrl) {
|
|||
let fieldData2 = kendoJQuery("#kictGrid2").data("kendoGrid")._data;
|
||||
let fieldName2 = "fieldperSubPermeability"; // 수정됨
|
||||
let msgTest2 = "투수계수";
|
||||
|
||||
fieldData2 = changeHyphenToMinus999Sub(fieldData2);
|
||||
if (!fn_isNumeric(fieldData2, fieldName2, msgTest2)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -339,9 +371,11 @@ function fn_save(rUrl) {
|
|||
if(fn_saveNumberCheckKendo("ROW", dataSource2, grid2, "gridCheck2", 0, rowInfo2, rowInfoItem2) == false)return false;
|
||||
|
||||
//data1
|
||||
data1 = changeHyphenToMinus999Main(data1);
|
||||
var kendoData1 = fn_kendoAllDataXml02(grid1, kendoColCount1, kendoRowCount1, 0, data1);
|
||||
|
||||
//data2
|
||||
data2 = changeHyphenToMinus999Sub(data2);
|
||||
var kendoData2 = fn_kendoAllDataXml02(grid2, kendoColCount2, kendoRowCount2, 0, data2);
|
||||
// ----------------------- kendoGrid XML 구조저장 끝 -----------------------
|
||||
|
||||
|
|
@ -887,7 +921,20 @@ function fn_grid_refresh(){
|
|||
},
|
||||
{ field: "fieldperCasingDia", title: "케이싱지름(cm)", editor: chooseEditor, width:120, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperCasingDia == null) ? '0' : fieldperCasingDia #</div>" },
|
||||
{ field: "fieldperCasingHeight", title: "케이싱길이(m)", editor: chooseEditor, width:120, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperCasingHeight == null) ? '0' : fieldperCasingHeight #</div>" },
|
||||
{ field: "fieldperAvgPermeability", title: "평균투수계수<br>(cm/sec)", editor: chooseTest, width:120, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperAvgPermeability == null) ? '0' : fieldperAvgPermeability #</div>" },
|
||||
{ field: "fieldperAvgPermeability", title: "평균투수계수<br>(cm/sec)", editor: chooseTest, width:120, attributes: { style:"text-align: right" },
|
||||
template: function(data) {
|
||||
//"<div class='td-data'>#= (fieldperAvgPermeability == null) ? '0' : fieldperAvgPermeability #</div>"
|
||||
if( data.fieldperAvgPermeability === "") {
|
||||
data.fieldperAvgPermeability = "0";
|
||||
} else if( data.fieldperAvgPermeability === null) {
|
||||
data.fieldperAvgPermeability = "0";
|
||||
} else if( data.fieldperAvgPermeability === "-999") {
|
||||
data.fieldperAvgPermeability = "-";
|
||||
}
|
||||
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.fieldperAvgPermeability + "</div>";
|
||||
return url;
|
||||
}
|
||||
},
|
||||
{ field: "fieldperInspectedBy", title: "조사자", width:150, attributes: { style:"text-align: left" }, template: "<div class='td-data'>#= (fieldperInspectedBy == null) ? '-' : fieldperInspectedBy #</div>" },
|
||||
{ field: "fieldperCheckedBy", title: "검수자", width:150, attributes: { style:"text-align: left" }, template: "<div class='td-data'>#= (fieldperCheckedBy == null) ? '-' : fieldperCheckedBy #</div>" },
|
||||
{ field: "fieldperRemark", title: "비고", width:120, attributes: { style:"text-align: left" }, template: "<div class='td-data'>#= (fieldperRemark == null) ? '-' : fieldperRemark #</div>" },
|
||||
|
|
@ -962,7 +1009,7 @@ function fn_grid_refresh(){
|
|||
oldFieldperCode: { type: "string" },
|
||||
fieldperOrder: { type: "number", editable: false },
|
||||
fieldperSubTime: { type: "number" },
|
||||
fieldperSubTotalHead: { type: "number" },
|
||||
fieldperSubTotalHead: { type: "string" },
|
||||
fieldperSubFallingHead: { type: "number" },
|
||||
fieldperSubWaterLoose: { type: "number" },
|
||||
fieldperSubQuantity: { type: "number" },
|
||||
|
|
@ -977,11 +1024,37 @@ function fn_grid_refresh(){
|
|||
columns: [
|
||||
{ field: "fieldperOrder", title: "시험<br>순서", width:60, attributes: { style:"text-align: center" } },
|
||||
{ field: "fieldperSubTime", title: "시간(sec)<br/>(값 중복 허용 안 함)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubTime == null) ? '0' : fieldperSubTime #</div>" },
|
||||
{ field: "fieldperSubTotalHead", title: "총수두(cm)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubTotalHead == null) ? '0' : fieldperSubTotalHead #</div>" },
|
||||
{ field: "fieldperSubTotalHead", title: "총수두(cm)", editor: chooseEditorAllowHyphen, attributes: { style:"text-align: right" },
|
||||
template: function(data) {
|
||||
//"<div class='td-data'>#= (fieldperSubTotalHead == null) ? '0' : fieldperSubTotalHead #</div>"
|
||||
if( data.fieldperSubTotalHead === "") {
|
||||
data.fieldperSubTotalHead = "0";
|
||||
} else if( data.fieldperSubTotalHead === null) {
|
||||
data.fieldperSubTotalHead = "0";
|
||||
} else if( data.fieldperSubTotalHead === "-999") {
|
||||
data.fieldperSubTotalHead = "-";
|
||||
}
|
||||
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.fieldperSubTotalHead + "</div>";
|
||||
return url;
|
||||
}
|
||||
},
|
||||
{ field: "fieldperSubFallingHead", title: "수두차(cm)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubFallingHead == null) ? '0' : fieldperSubFallingHead #</div>" },
|
||||
{ field: "fieldperSubWaterLoose", title: "유출수량(㎤)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubWaterLoose == null) ? '0' : fieldperSubWaterLoose #</div>" },
|
||||
{ field: "fieldperSubQuantity", title: "수량(㎤)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubQuantity == null) ? '0' : fieldperSubQuantity #</div>" },
|
||||
{ field: "fieldperSubPermeability", title: "투수계수(K,cm/sec)", editor: chooseTest, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (fieldperSubPermeability == null) ? '0' : fieldperSubPermeability #</div>" },
|
||||
{ field: "fieldperSubPermeability", title: "투수계수(K,cm/sec)", editor: chooseTest, attributes: { style:"text-align: right" },
|
||||
template: function(data) {
|
||||
//"<div class='td-data'>#= (fieldperSubPermeability == null) ? '0' : fieldperSubPermeability #</div>"
|
||||
if( data.fieldperSubPermeability === "") {
|
||||
data.fieldperSubPermeability = "0";
|
||||
} else if( data.fieldperSubPermeability === null) {
|
||||
data.fieldperSubPermeability = "0";
|
||||
} else if( data.fieldperSubPermeability === "-999") {
|
||||
data.fieldperSubPermeability = "-";
|
||||
}
|
||||
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.fieldperSubPermeability + "</div>";
|
||||
return url;
|
||||
}
|
||||
},
|
||||
{ field: "seq", hidden: true },
|
||||
{ field: "newFieldperCode", hidden: true },
|
||||
{ field: "oldFieldperCode", hidden: true },
|
||||
|
|
@ -1040,6 +1113,14 @@ function fn_grid_refresh(){
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function chooseEditorAllowHyphen(container, options) {
|
||||
switch (options.model.COLUMN) {
|
||||
default:
|
||||
numericEditorAllowHyphen(container, options);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function chooseTest(container, options) {
|
||||
|
||||
|
|
|
|||
|
|
@ -383,6 +383,58 @@ var autoCircle = false;
|
|||
|
||||
var circleDraw = false;
|
||||
|
||||
var MINE_POPUP = null; // 광산 팝업 객체를 저장할 변수
|
||||
var mineDragControl = null; // 광산 팝업의 드래그 컨트롤을 저장할 변수
|
||||
var geologyLayers = {
|
||||
"지질도_5만_지질도": "L_50K_Geology_Map",
|
||||
"지질도_25만_지질도": "L_250K_Geology_Map",
|
||||
"지질도_100만_지질도": "L_1M_Geology_Map",
|
||||
"5만_지질도_도곽": "l_50k_geology_frame_latest",
|
||||
"지구물리이상도_부게중력이상도": "Bouguer_Gravity_Raster_2018",
|
||||
"지구물리이상도_지각평형중력이상도": "Isostatic_Gravity_Raster_2018",
|
||||
"지구물리이상도_자력이상도": "Magnetic_Raster_2018",
|
||||
"지화학도_전기전도도": "L_geochemMP_SW_EC",
|
||||
"지화학도_수소이온농도도": "L_geochemMP_SW_PH",
|
||||
"지화학도_니켈": "L_geochemMP_NI",
|
||||
"지화학도_루비듐": "L_geochemMP_RB",
|
||||
"지화학도_리튬": "L_geochemMP_LI",
|
||||
"지화학도_마그네슘": "L_geochemMP_MGO",
|
||||
"지화학도_망간": "L_geochemMP_MNO",
|
||||
"지화학도_바나듐": "L_geochemMP_V",
|
||||
"지화학도_바륨": "L_geochemMP_BA",
|
||||
"지화학도_스트론튬": "L_geochemMP_SR",
|
||||
"지화학도_아연": "L_geochemMP_V",
|
||||
"지화학도_지르코늄": "L_geochemMP_V",
|
||||
"지화학도_철": "L_geochemMP_V",
|
||||
"지화학도_칼륨": "L_geochemMP_V",
|
||||
"지화학도_칼슘": "L_geochemMP_V",
|
||||
"지화학도_코발트": "L_geochemMP_V",
|
||||
"지화학도_크롬": "L_geochemMP_V",
|
||||
"지화학도_티탄": "L_geochemMP_V",
|
||||
"지화학도_납": "L_geochemMP_V",
|
||||
"지화학도_구리": "L_geochemMP_V",
|
||||
"탄전지질도_1만_탄전지질도": "L_10k_coalfield_geologic_map",
|
||||
"탄전지질도_2.5만_탄전지질도": "L_25k_coalfield_geologic_map",
|
||||
"해저지질도_탐사항적도": "Marine_geology_prospect",
|
||||
"해저지질도_해저지형도": "M_geology_topography",
|
||||
"해저지질도_시료채취위치도": "M_geology_sample_location",
|
||||
"해저지질도_표층퇴적물평균입도분포도": "M_geology_deposits_mean_particle",
|
||||
"해저지질도_표층퇴적물유형분포도": "M_geology_deposits_type",
|
||||
"해저지질도_유기탄소함량분포도": "M_geology_organic_carbon",
|
||||
"해저지질도_해저퇴적물등층후도": "M_geology_deposits_isopach",
|
||||
"해저지질도_자력특성분포도": "M_geology_magnetic",
|
||||
"해저지질도_중력특성분포도": "M_geology_gravity",
|
||||
"해저지질도_탐사파단면해석도": "M_geology_seismic_sections",
|
||||
"동위원소_연대지도_심성암_동위원소": "L_1M_isotope_plutonic",
|
||||
"동위원소_연대지도_화산암_동위원소": "L_1M_isotope_volcanic",
|
||||
"동위원소_연대지도_변성암_동위원소": "L_1M_isotope_plutonic",
|
||||
"동위원소_연대지도_광상_동위원소": "L_1M_isotope_plutonic",
|
||||
"지체구조도": "G_tectonic",
|
||||
"한국의_지질노두": "outcrop_korea",
|
||||
"메디컬_점토": "medical_clay"
|
||||
};
|
||||
var geologyLayersKey = null; // 지질 광산 layer명
|
||||
|
||||
function initApp(param){
|
||||
// ---------------------
|
||||
// 지도 생성
|
||||
|
|
@ -703,16 +755,19 @@ function initApp(param){
|
|||
|
||||
BASE_MAP.addLayer(HOLE_LAYER);
|
||||
|
||||
|
||||
|
||||
|
||||
geologyLayersKey = "지질도_25만_지질도";
|
||||
// ▼▼▼ 지질도 WMS 레이어 생성 (초기에는 보이지 않도록 설정) ▼▼▼
|
||||
// 1. 고정 파라미터를 포함한 기본 URL을 문자열로 정의합니다.
|
||||
var geologyBaseUrl = "https://data.kigam.re.kr/openapi/wms" +
|
||||
var geologyBaseUrl = "https://sgeoinfo.kict.re.kr/wms_cache/openapi/wms" +
|
||||
"?SERVICE=WMS" +
|
||||
"&VERSION=1.3.0" + // 정상 동작하는 요청의 버전
|
||||
"&REQUEST=GetMap" +
|
||||
"&FORMAT=image/png" +
|
||||
"&TRANSPARENT=true" +
|
||||
"&key=1v1mp2XH6yPhiYdLCo6MFQJQ53970A" + // 소문자 'key'
|
||||
"&LAYERS=L_250K_Geology_Map" +
|
||||
"&LAYERS=" + geologyLayers[geologyLayersKey] //https://data.kigam.re.kr/map/openapimanual/openapiLayerList.html
|
||||
"&TILED=true" +
|
||||
"&CRS=EPSG:3857" + // 1.3.0 버전에 맞는 CRS
|
||||
"&STYLES=";
|
||||
|
|
@ -5012,6 +5067,8 @@ function showSichuInfo2(){
|
|||
}
|
||||
|
||||
|
||||
//기존 geologyMode 함수를 지우고 아래의 코드로 교체하세요.
|
||||
|
||||
function geologyMode() {
|
||||
initControl(); // 다른 컨트롤 상태 초기화
|
||||
|
||||
|
|
@ -5024,26 +5081,146 @@ function geologyMode() {
|
|||
// 현재 레이어의 표시 상태를 가져옵니다.
|
||||
var isVisible = GEOLOGY_LAYER.getVisibility();
|
||||
|
||||
if (isVisible) {
|
||||
if (isVisible && geologyLayersKey === "지질도_25만_지질도" ) {
|
||||
// 레이어가 현재 보이고 있다면, 숨깁니다.
|
||||
GEOLOGY_LAYER.setVisibility(false);
|
||||
CTL_INFO.setText("지질 Off");
|
||||
CTL_INFO.deactivate(); // 정보창도 비활성화
|
||||
} else {
|
||||
// 레이어가 현재 숨겨져 있다면, 보이게 합니다.
|
||||
GEOLOGY_LAYER.setVisibility(true);
|
||||
CTL_INFO.setText("지질 On");
|
||||
CTL_INFO.activate();
|
||||
$("#CTL_INFO").css("bottom", "65px");
|
||||
$("#CTL_INFO").css("left", "20px");
|
||||
// 레이어가 현재 숨겨져 있다면,
|
||||
// 1. 표시할 기본 지질도 키를 설정합니다.
|
||||
geologyLayersKey = "지질도_25만_지질도";
|
||||
var wmsLayerName = geologyLayers[geologyLayersKey];
|
||||
|
||||
if (wmsLayerName) {
|
||||
// 2. 정규표현식을 사용하여 URL에서 'LAYERS=' 파라미터의 값만 교체합니다.
|
||||
// (광산 뷰에서 다른 레이어로 변경되었을 수 있으므로 항상 기본값으로 재설정)
|
||||
var newUrl = GEOLOGY_LAYER.url.replace(/(LAYERS=)([^&]*)/, '$1' + wmsLayerName);
|
||||
|
||||
// 3. 레이어 객체의 url 속성을 직접 변경합니다.
|
||||
GEOLOGY_LAYER.url = newUrl;
|
||||
|
||||
// 4. 레이어를 보이게 설정하고 강제로 다시 그립니다.
|
||||
GEOLOGY_LAYER.setVisibility(true);
|
||||
GEOLOGY_LAYER.redraw(true);
|
||||
|
||||
// 5. 정보창 텍스트를 업데이트합니다.
|
||||
CTL_INFO.setText("지질 On");
|
||||
CTL_INFO.activate();
|
||||
$("#CTL_INFO").css("bottom", "65px");
|
||||
$("#CTL_INFO").css("left", "20px");
|
||||
} else {
|
||||
console.error("기본 지질도 레이어를 찾을 수 없습니다:", geologyLayersKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function geologyMine(){
|
||||
initControl();
|
||||
CTL_INFO.setText("광산 On");
|
||||
CTL_INFO.activate();
|
||||
$("#CTL_INFO").css("bottom","65px");
|
||||
$("#CTL_INFO").css("left","20px");
|
||||
}
|
||||
|
||||
function geologyMine() {
|
||||
initControl(); // 다른 컨트롤 상태 초기화
|
||||
|
||||
// 이전에 생성된 팝업과 관련 이벤트 리스너를 확실하게 제거합니다.
|
||||
$(document).off('mousemove.minePopup').off('mouseup.minePopup');
|
||||
if ($('#geologyMinePopup').length > 0) {
|
||||
$('#geologyMinePopup').remove();
|
||||
}
|
||||
|
||||
// 1. 팝업에 표시할 목록 데이터를 배열로 정의합니다.
|
||||
var mineLayerList = [
|
||||
"지화학도_전기전도도", "지화학도_수소이온농도도", "지화학도_니켈",
|
||||
"지화학도_루비듐", "지화학도_리튬", "지화학도_마그네슘", "지화학도_망간",
|
||||
"지화학도_바나듐", "지화학도_바륨", "지화학도_스트론튬", "지화학도_아연",
|
||||
"지화학도_지르코늄", "지화학도_철", "지화학도_칼륨", "지화학도_칼슘",
|
||||
"지화학도_코발트", "지화학도_크롬", "지화학도_티탄", "지화학도_납", "지화학도_구리"
|
||||
].reverse();
|
||||
|
||||
// 2. 팝업창의 HTML 구조를 만듭니다.
|
||||
var popupHtml =
|
||||
'<div id="geologyMinePopup" style="position: absolute; width: 300px; z-index: 10000; box-shadow: 0 5px 15px rgba(0,0,0,0.5); font-family: \'Malgun Gothic\', sans-serif; visibility: hidden;">' +
|
||||
' <div class="popup-header" style="background-color: #004e99; color: white; font-size: 16px; font-weight: bold; padding: 8px 10px; cursor: move; display: flex; justify-content: space-between; align-items: center;">' +
|
||||
' <span>광산 레이어 선택</span>' +
|
||||
' <button id="closeMinePopupBtn" style="background: none; border: none; font-size: 20px; color: white; cursor: pointer; line-height: 1;">×</button>' +
|
||||
' </div>' +
|
||||
' <ul id="mineLayerListContainer" style="list-style: none; padding: 0; margin: 0; max-height: 400px; overflow-y: auto; border: 1px solid #ddd; background-color: #fff;">';
|
||||
|
||||
for (var i = 0; i < mineLayerList.length; i++) {
|
||||
popupHtml += '<li class="mine-layer-item" style="padding: 10px; border-bottom: 1px solid #eee; cursor: pointer;">' + mineLayerList[i].replace('지화학도_', '') + '</li>';
|
||||
}
|
||||
popupHtml += '</ul></div>';
|
||||
|
||||
// 3. 생성된 HTML을 <body>에 추가하고 위치를 계산합니다.
|
||||
$('body').append(popupHtml);
|
||||
var popup = $('#geologyMinePopup');
|
||||
var popupWidth = popup.outerWidth();
|
||||
var popupHeight = popup.outerHeight();
|
||||
var initialTop = $(window).height() - popupHeight - 20;
|
||||
var initialLeft = $(window).width() - popupWidth - 80;
|
||||
popup.css({
|
||||
top: initialTop + 'px',
|
||||
left: initialLeft + 'px',
|
||||
visibility: 'visible'
|
||||
});
|
||||
|
||||
// 4. 드래그 기능 구현
|
||||
var isDragging = false;
|
||||
var offset = { x: 0, y: 0 };
|
||||
var header = popup.find('.popup-header');
|
||||
|
||||
header.on('mousedown', function(e) {
|
||||
isDragging = true;
|
||||
var popupPos = popup.offset();
|
||||
offset.x = e.pageX - popupPos.left;
|
||||
offset.y = e.pageY - popupPos.top;
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$(document).on('mousemove.minePopup', function(e) {
|
||||
if (isDragging) {
|
||||
popup.offset({
|
||||
top: e.pageY - offset.y,
|
||||
left: e.pageX - offset.x
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('mouseup.minePopup', function() {
|
||||
isDragging = false;
|
||||
});
|
||||
|
||||
// 5. 팝업 내 요소들에 이벤트 바인딩
|
||||
$('#closeMinePopupBtn').on('click', function() {
|
||||
$(document).off('mousemove.minePopup').off('mouseup.minePopup');
|
||||
popup.remove();
|
||||
});
|
||||
|
||||
$('.mine-layer-item').hover(
|
||||
function() { $(this).css('background-color', '#e9efff'); },
|
||||
function() { $(this).css('background-color', '#fff'); }
|
||||
).click(function() {
|
||||
var selectedItemText = $(this).text();
|
||||
geologyLayersKey = "지화학도_" + selectedItemText;
|
||||
var wmsLayerName = geologyLayers[geologyLayersKey];
|
||||
|
||||
if (GEOLOGY_LAYER && wmsLayerName) {
|
||||
var newUrl = GEOLOGY_LAYER.url.replace(/(LAYERS=)([^&]*)/, '$1' + wmsLayerName);
|
||||
|
||||
// ▼▼▼ 핵심 수정 부분 ▼▼▼
|
||||
// 레이어 객체의 url 속성을 직접 변경하는 대신, setUrl() 메소드를 사용합니다.
|
||||
GEOLOGY_LAYER.setUrl(newUrl);
|
||||
// ▲▲▲ 핵심 수정 부분 ▲▲▲
|
||||
|
||||
GEOLOGY_LAYER.setVisibility(true);
|
||||
GEOLOGY_LAYER.redraw(true);
|
||||
|
||||
CTL_INFO.setText("광산: " + selectedItemText);
|
||||
CTL_INFO.activate();
|
||||
$("#CTL_INFO").css("bottom", "65px");
|
||||
$("#CTL_INFO").css("left", "20px");
|
||||
} else {
|
||||
console.error("선택한 항목에 대한 레이어를 찾을 수 없습니다:", geologyLayersKey);
|
||||
}
|
||||
|
||||
$(document).off('mousemove.minePopup').off('mouseup.minePopup');
|
||||
popup.remove();
|
||||
});
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue