// 지도 전역 변수 var map; //아으아아아 // 지도 배경 레이어 정의 var vworldBaseLayer; var vworldSatelliteLayer; var imageryLayer; var tblHeader; var sursetLayer; var cotrolLayer; var drawLayer; var drawAreaLayer; var demLayerSource; var demLayer; var demBaseLayer; var vectorDrawSource; var selectedHole; var selectedSaup; var selectedArea; var select; var selectFeatures; var draw; var selectAreaClick; var featuresToAdd; var isFirstLoad = true; var surSetisFirstLoad = true; var verIncisFirstLoad = true; var setExtisFirstLoad = true; var watPreisFirstLoad = true; var watLevisFirstLoad = true; //거리측정, 면적측정 var sketch; var helpTooltipElement; // 도움말 도구 설명 요소 var helpTooltip; // 도움말 메시지 표시 var measureTooltipElement; // 측정 툴팁 요소 var measureTooltip; // 측정값 표시 var LineStringOnOff = "off"; var PolygonOnOff = "off"; var mapDemSearchOnOff = "off"; var holeInfoPopup; var verIncInfoPopup; var verIncInfoPopupData; var setExtInfoPopup; var setExtInfoPopupData; var holeInfoPopupData; var saupInfoPopup; var saupInfoPopupData; var instrumentationInfoPopup; var instrumentationInfoPopupData; var instrumentationGraphInfoPopup; var instrumentationGraphInfoPopupData; var predictionGraphInfoPopup; var predictionGraphInfoPopupData; //var url = 'http://210.120.6.116:9999'; //var GEOSERVER_URL = 'https://geoserver.smart.dbnt.co.kr'; var GEOSERVER_URL = '/wms'; //현재 도메인을 가져옵니다. var currentDomain = window.location.hostname; //현재 도메인이 'localhost' 또는 '127.0.0.1'을 포함하는지 확인합니다. if (currentDomain.includes('localhost') || currentDomain.includes('127.0.0.1')) { GEOSERVER_URL = 'http://10.dbnt.co.kr:9000'; } $(document).ready(function(){ // 지도 서비스 실행 init(); }); //------------------------------------------- // 실행시 첫 화면 및 전체 함수 통제 //------------------------------------------- function init() { // 좌표계 설정 initProj(); // ol view 설정 var olView = new ol.View({ center: [14337592,4173705], // 초기 지도 위치 좌표,[54300000, 4300000], zoom: 14, // 초기 지도 위치 줌레벨 minZoom: 7, maxZoom: 19 }); // map 생성 map = new ol.Map({ target: 'map', // Map 생성할 div id (지도를 생성할 element 객체의 id 값) view: olView }); // 배경지도 설정(등록) addBaseLayer(); // 배경지도 변경 및 범례 조회 initBaseLayerSelect(); // 우측메뉴 기능 menutoolsEvent(); // Feature 선택기능 selectFeature(); // Mouseover hoverMode(); holeInfoPopup = $("#holeInfoPopup"); holeInfoPopup.kendoWindow({ animation: false, width: 700, minWidth: 700, height: 650, minHeight: 650, modal: true, scrollable: true, resizable: true, pinned: true, title: "상세 정보조회" }); holeInfoPopupData = holeInfoPopup.data("kendoWindow"); verIncInfoPopup = $("#verIncInfoPopup"); verIncInfoPopup.kendoWindow({ animation: false, width: 1100, minWidth: 1100, height: 800, minHeight: 800, modal: true, scrollable: false, resizable: false, pinned: true, title: "지중경사계 상세 정보조회" }); verIncInfoPopupData = verIncInfoPopup.data("kendoWindow"); setExtInfoPopup = $("#setExtInfoPopup"); setExtInfoPopup.kendoWindow({ animation: false, width: 1100, minWidth: 1100, height: 800, minHeight: 800, modal: true, scrollable: false, resizable: false, pinned: true, title: "층별침하계 상세 정보조회" }); setExtInfoPopupData = setExtInfoPopup.data("kendoWindow"); watPreInfoPopup = $("#watPreInfoPopup"); watPreInfoPopup.kendoWindow({ animation: false, width: 1100, minWidth: 1100, height: 800, minHeight: 800, modal: true, scrollable: false, resizable: false, pinned: true, title: "간극수압계 상세 정보조회" }); watPreInfoPopupData = watPreInfoPopup.data("kendoWindow"); watLevInfoPopup = $("#watLevInfoPopup"); watLevInfoPopup.kendoWindow({ animation: false, width: 1100, minWidth: 1100, height: 800, minHeight: 800, modal: true, scrollable: false, resizable: false, pinned: true, title: "지하수위계 상세 정보조회" }); watLevInfoPopupData = watLevInfoPopup.data("kendoWindow"); $("#searchInfo").kendoButton({ click: function() { selectFeatureInfo(); // 정보 조회 } }); $("#holeInfoPopupClose").kendoButton({ click: function() { holeInfoPopupData.close(); } }); $("#verIncInfoPopupClose").kendoButton({ click: function() { verIncInfoPopupData.close(); } }); $("#setExtInfoPopupClose").kendoButton({ click: function() { setExtInfoPopupData.close(); } }); $("#watPreInfoPopupClose").kendoButton({ click: function() { watPreInfoPopupData.close(); } }); $("watLevInfoPopupClose").kendoButton({ click: function() { watLevInfoPopupData.close(); } }); saupInfoPopup = $("#saupInfoPopup"); saupInfoPopup.kendoWindow({ animation: false, width: 700, minWidth: 700, height: 650, minHeight: 650, modal: true, scrollable: true, resizable: true, pinned: true, title: "상세 정보조회" }); saupInfoPopupData = saupInfoPopup.data("kendoWindow"); $("#saupInfoPopupClose").kendoButton({ click: function() { saupInfoPopupData.close(); } }); instrumentationInfoPopup = $("#instrumentationInfoPopup"); instrumentationInfoPopup.kendoWindow({ animation: false, width: 1100, minWidth: 1100, height: 800, minHeight: 800, modal: true, scrollable: false, resizable: false, pinned: true, title: "계측정보조회", }); instrumentationInfoPopupData = instrumentationInfoPopup.data("kendoWindow"); $("#instrumentationInfoPopupClose").kendoButton({ click: function() { instrumentationInfoPopupData.close(); } }); instrumentationGraphInfoPopup = $("#instrumentationGraphInfoPopup"); instrumentationGraphInfoPopup.kendoWindow({ animation: false, width: 850, height: 525, modal: true, scrollable: true, resizable: true, pinned: true, title: "계측정보조회" }); instrumentationGraphInfoPopupData = instrumentationGraphInfoPopup.data("kendoWindow"); $("#instrumentationGraphInfoPopupClose").kendoButton({ click: function() { instrumentationGraphInfoPopupData.close(); } }); predictionInfoPopup = $("#predictionInfoPopup"); predictionInfoPopup.kendoWindow({ animation: false, width: 1000, minWidth: 1000, height: 800, minHeight: 800, modal: true, scrollable: true, resizable: true, pinned: true, title: "예측정보조회" }); predictionInfoPopupData = predictionInfoPopup.data("kendoWindow"); $("#predictionInfoPopupClose").kendoButton({ click: function() { predictionInfoPopupData.close(); } }); predictionGraphInfoPopup = $("#predictionGraphInfoPopup"); predictionGraphInfoPopup.kendoWindow({ animation: false, width: 1100, height: 800, modal: true, scrollable: true, resizable: true, pinned: true, title: "예측정보조회" }); predictionGraphInfoPopupData = predictionGraphInfoPopup.data("kendoWindow"); $("#predictionGraphInfoPopupClose").kendoButton({ click: function() { predictionGraphInfoPopupData.close(); } }); } //------------------------------------------- // 좌표계 설정 //------------------------------------------- function initProj() { // google 좌표계 proj4.defs('EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs'); // UTM-K 좌표계 proj4.defs('EPSG:5179', '+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'); // 중부원점(GRS80) [200,000 600,000] proj4.defs("EPSG:5186", "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs" ); } //------------------------------------------- // 배경지도 설정(등록) //------------------------------------------- function addBaseLayer() { // 배경지도 레이어_vworld Base map vworldBaseLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ projection : 'EPSG:3857', // EPSG 3857 좌표계로 변환 url : 'https://xdworld.vworld.kr/2d/Base/service/{z}/{x}/{y}.png', crossOrigin: 'anonymous' }), visible: true }); map.addLayer(vworldBaseLayer); // 배경지도 레이어_vworld satellite map vworldSatelliteLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ projection : 'EPSG:3857', url : 'https://xdworld.vworld.kr/2d/Satellite/service/{z}/{x}/{y}.jpeg', crossOrigin: 'anonymous' }), /*zIndex: 0,*/ visible: false }); map.addLayer(vworldSatelliteLayer); var vectorSource = new ol.source.Vector(); selectedArea = new ol.source.Vector(); // 시추공 데이터_WFS버전 vectorSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_hole01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); // WFS 요청 보내기 fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if (isFirstLoad) { tblHeader.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); isFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); tblHeader = new ol.layer.Vector({ className: 'holeLayer', source: vectorSource, visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#ffcc33', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), /*zIndex: 2*/ }); map.addLayer(tblHeader); var sursetSource = new ol.source.Vector(); // 지표침하판 데이터_WFS버전 sursetSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_surset01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if (surSetisFirstLoad) { sursetLayer.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); surSetisFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); sursetLayer = new ol.layer.Vector({ className: 'sursetLayer', source: sursetSource, /*zIndex: 2,*/ visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#EF0000', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), }); map.addLayer(sursetLayer); var verIncSource = new ol.source.Vector(); // 지중경사계 데이터_WFS버전 verIncSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_verinc01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); // WFS 요청 보내기 fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if (verIncisFirstLoad) { verIncLayer.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); verIncisFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); verIncLayer = new ol.layer.Vector({ className: 'verIncLayer', source: verIncSource, /*zIndex: 2,*/ visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#B8860B', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), }); map.addLayer(verIncLayer); var setExtSource = new ol.source.Vector(); // 지중경사계 데이터_WFS버전 setExtSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_setext01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); // WFS 요청 보내기 fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if (setExtisFirstLoad) { setExtLayer.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); setExtisFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); setExtLayer = new ol.layer.Vector({ className: 'setExtLayer', source: setExtSource, /*zIndex: 2,*/ visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#99FFFF', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), }); map.addLayer(setExtLayer); var watPreSource = new ol.source.Vector(); // 지중경사계 데이터_WFS버전 watPreSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_watpre01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); // WFS 요청 보내기 fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if (watPreisFirstLoad) { watPreLayer.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); watPreisFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); watPreLayer = new ol.layer.Vector({ className: 'watPreLayer', source: watPreSource, // zIndex: 2, visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#FEBC87', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), }); map.addLayer(watPreLayer); var watLevSource = new ol.source.Vector(); // 지중경사계 데이터_WFS버전 watLevSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), loader: function (extent, resolution, projection) { var url = GEOSERVER_URL + '/geoserver/sgis/ows?service=WFS&' + 'version=1.0.0&request=GetFeature&' + 'typeName=sgis%3Aapptb_watlev01&' + 'outputFormat=application%2Fjson&' + 'srsname=' + projection.getCode() + '&bbox=' + extent.join(',') + ',' + projection.getCode(); // WFS 요청 보내기 fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { // 최초로 한 번만 실행 if ( watLevisFirstLoad) { watLevLayer.getSource().addFeatures(new ol.format.GeoJSON().readFeatures(json)); watLevisFirstLoad = false; // 두 번째 이후에는 무시 } }); }, strategy: ol.loadingstrategy.bbox, }); watLevLayer = new ol.layer.Vector({ className: 'watLevLayer', source: watLevSource, /*zIndex: 2,*/ visible: true, style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: '#FE6969', }), stroke: new ol.style.Stroke({ color: 'black', width: 1 }), radius: 6 }), }), }); map.addLayer(watLevLayer); vectorDrawSource = new ol.source.Vector(); drawLayer = new ol.layer.Vector({ source: vectorDrawSource, visible: true, style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.7)' }), stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2, }), image: new ol.style.Circle({ radius: 7, fill: new ol.style.Fill({ color: '#ffcc33', }), }), }), }); map.addLayer(drawLayer); drawAreaLayer = new ol.layer.Vector({ source: selectedArea, /*zIndex: 2,*/ visible: true, style :[ new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.6)', }), stroke: new ol.style.Stroke({ color: 'rgba(255, 255, 255, 0.7)', width: 2, }), }), new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: "#ffcc33" }), stroke: new ol.style.Stroke({ color: 'rgba(255, 255, 255, 0.7)', width: 2, }), radius: 6 }) }), new ol.style.Style({ image: new ol.style.Icon({ /*src: '../com/img/map-service/icon/icon_map_check.png'*/ opacity: 0.5, src: "data:image/svg+xml;utf8," + svg, scale: 0.5 }), }) ], }); map.addLayer(drawAreaLayer); // Control //map.addControl(new ol.control.ScaleLine()); } function changeOpacity(){ let opacity = $("#opacity").val(); $("#output").text(opacity); let setOpacity = (100 - opacity) / 100; if(demLayer != undefined){ demLayer.setOpacity(setOpacity); } } //------------------------------------------- //layer on/off 설정 //------------------------------------------- function initBaseLayerSelect() { // 지도 레이어 on/off 설정 $('input[name="mapOptions"]').change(function(){ if($(this).val() == 1) { vworldBaseLayer.setVisible(true); vworldSatelliteLayer.setVisible(false); }else if($(this).val() == 2){ vworldBaseLayer.setVisible(false); vworldSatelliteLayer.setVisible(true); } }); // 지형높이, 투명도 레이어 on/off $('#mapDemSearch').click(function() { if(mapDemSearchOnOff == "off"){ mapDemSearchOnOff = "on"; }else{ $("#demDate").val("1").prop("selected", true); mapDemSearchOnOff = "off"; map.removeLayer(demLayer); } }); $("select[class='custom-select-calendar']").change(function(){ var selectDate = $("select[class='custom-select-calendar'] option:selected").text(); selectDate = selectDate.replaceAll(".",""); map.removeLayer(demLayer); map.removeLayer(demBaseLayer); //demBaseLayerInit(); demLayerSource = new ol.source.ImageWMS({ url : GEOSERVER_URL + '/geoserver/sgis_dem/wms?service=WMS', // 1. 레이어 URL params : { 'VERSION' : '1.1.0', // 2. 버전 'LAYERS' : 'sgis_dem:' + selectDate, // 3. 작업공간:레이어 명 'SRS' : 'EPSG:3857', // SRID }, serverType : 'geoserver', crossOrigin: 'anonymous', }); demLayer = new ol.layer.Image({ title: "demLayer", className : "demLayer", source : demLayerSource, /*zIndex: 1,*/ }); map.addLayer(demLayer); // 맵 객체에 레이어를 추가함 }); // 범례 제공 및 레이어 On/Off - 전체 선택 $('#holeLegend').click(function() { if(!$(this).is(':checked')) { tblHeader.setVisible(false); sursetLayer.setVisible(false); verIncLayer.setVisible(false); setExtLayer.setVisible(false); watPreLayer.setVisible(false); watLevLayer.setVisible(false); }else{ tblHeader.setVisible(true); sursetLayer.setVisible(true); verIncLayer.setVisible(true); setExtLayer.setVisible(true); watPreLayer.setVisible(true); watLevLayer.setVisible(true); } }); // 범례 제공 및 레이어 On/Off - 부분 선택 $('input[name="holeCheck"]').change(function(){ if($(this).val() =="hole1"){ // 시추공 if(!$(this).is(':checked')) { tblHeader.setVisible(false); hole1OnOff = "off"; }else{ tblHeader.setVisible(true); hole1OnOff = "on"; } }else if($(this).val() =="hole2"){ if(!$(this).is(':checked')) { sursetLayer.setVisible(false); hole2OnOff = "off"; }else{ sursetLayer.setVisible(true); hole2OnOff = "on"; } }else if($(this).val() =="hole4"){ if(!$(this).is(':checked')) { verIncLayer.setVisible(false); hole4OnOff = "off"; }else{ verIncLayer.setVisible(true); hole4OnOff = "on"; } }else if($(this).val() =="hole5"){ if(!$(this).is(':checked')) { setExtLayer.setVisible(false); hole5OnOff = "off"; }else{ setExtLayer.setVisible(true); hole5onOff = "on"; } }else if($(this).val() =="hole6"){ if(!$(this).is(':checked')) { watPreLayer.setVisible(false); hole6OnOff = "off"; }else{ watPreLayer.setVisible(true); hole6OnOff = "on"; } }else if($(this).val() =="hole7"){ if(!$(this).is(':checked')) { watLevLayer.setVisible(false); hole7OnOff = "off"; }else{ watLevLayer.setVisible(true); hole7OnOff = "on"; } } }); } //------------------------------------------- //범례 체크박스 전체선택 //------------------------------------------- function SelectAll(holeSelectAll) { const checkboxes = document.getElementsByName('holeCheck'); checkboxes.forEach((checkbox) => { checkbox.checked = holeSelectAll.checked; }) } //------------------------------------------- //우측메뉴 기능 //------------------------------------------- function menutoolsEvent() { // Home으로 이동 $('#home').on('click', function() { var center = [14337592,4173705] map.getView().setCenter(center) map.getView().setZoom(14); setTimeout(function(){ map.updateSize();     }, 200); }); // 지도 확대 $('#zoom-in').on('click', function() { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom + 1); setTimeout(function(){ map.updateSize();     }, 200); }); // 지도 축소 $('#zoom-out').on('click', function () { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom - 1); tblHeader.getSource().clear(); setTimeout(function(){ map.updateSize(); }, 200); }); /*var wheelTimeout; map.on('wheel', function(event) { if (event.originalEvent.deltaY > 0) { // 확대할 때만 피처 추가 clearTimeout(wheelTimeout); wheelTimeout = setTimeout(function () { tblHeader.getSource().clear(); }, 200); // 200ms 동안 다른 휠 이벤트가 발생하지 않으면 피처를 지움 } });*/ } //거리 측정 단위 변경 및 output 제공 //------------------------------------------- var formatLength = function(line) { var length; length = Math.round(line.getLength() * 100) / 100; var output; if (length > 100) { output = (Math.round(length / 1000 * 100) / 100) + ' ' + 'km'; } else { output = (Math.round(length * 100) / 100) + ' ' + 'm'; } return output; }; //------------------------------------------- //면적 측정 단위 변경 및 output 제공 //------------------------------------------- var formatArea = function (polygon) { var area; area = polygon.getArea(); var output; if (area > 10000) { output = (Math.round(area / 1000000 * 100) / 100) + ' ' + 'km2'; } else { output = (Math.round(area * 100) / 100) + ' ' + 'm2'; } return output; }; //------------------------------------------- //사업의 시추공 선택 및 해지(개별선택, 사업선택, 영역선택) //------------------------------------------- var svg =''; function selectFeature() { selectClick = new ol.interaction.Select({ condition: ol.events.condition.click, style: [ new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: "#ffcc33" }), stroke: new ol.style.Stroke({ color: 'rgba(255, 255, 255, 0.7)', width: 2, }), radius: 6 }) }), new ol.style.Style({ image: new ol.style.Icon({ /*src: '../com/img/map-service/icon/icon_map_check.png'*/ opacity: 0.5, src: "data:image/svg+xml;utf8," + svg, scale: 0.5 }), }) ] }); } function changeInteraction(type){ if (type == 'click') { if(selectedArea != undefined){ selectedArea.clear(); } if(select != null){ select.getFeatures().clear(); map.removeInteraction(select); select = null; } if(selectedSaup != undefined){ map.removeLayer(selectedSaup); } if(drawArea != null){ map.removeInteraction(drawArea); } document.mapForm.searchType.value = 'EachSelect'; select = selectClick; selectEvent(); } else if (type == 'areaClick') { if(selectedArea != undefined){ selectedArea.clear(); } if(select != null){ select.getFeatures().clear(); map.removeInteraction(select); select = null; } if(selectedSaup != undefined){ map.removeLayer(selectedSaup); } document.mapForm.searchType.value = 'areaSearch'; selectAreaEvent(); } else { if(selectedArea != undefined){ selectedArea.clear(); } if(drawArea != null){ map.removeInteraction(drawArea); } if(select != null){ select.getFeatures().clear(); map.removeInteraction(select); select = null; } selectedSaup.setVisible(false) select = null; } if (select != null) { select.on('select', function (evt) { console.log("test"); }); } } //------------------------------------------- //select 이벤트 //------------------------------------------- function selectEvent(){ map.on('click', function(evt) { selectFeature = map.forEachFeatureAtPixel(evt.pixel,function(selectFeature) { selectedHole = selectFeature; return selectFeature; }); if(selectFeature){ document.mapForm.businessCode.value = selectFeature.getProperties().business_code; document.mapForm.holeCode.value = selectFeature.getProperties().hole_code; document.mapForm.consCode.value = selectFeature.getProperties().cons_code; document.mapForm.surSetCode.value = selectFeature.getProperties().sur_set_code; document.mapForm.verIncCode.value = selectFeature.getProperties().ver_inc_code; document.mapForm.setExtCode.value = selectFeature.getProperties().set_ext_code; document.mapForm.watPreCode.value = selectFeature.getProperties().wat_pre_code; document.mapForm.watLevCode.value = selectFeature.getProperties().wat_lev_code; } }); map.addInteraction(select); } function selectAreaEvent(){ if(select != undefined){ map.removeInteraction(select); } addInteraction2(); } var drawArea; function addInteraction2(){ drawArea = new ol.interaction.Draw({ source: selectedArea, type: "Polygon", style: [ new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.4)', }), stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 0, 0.5)', lineDash: [10, 10], width: 2 }) }), ] }); map.addInteraction(drawArea); drawArea.on('drawstart', function(e) { selectedArea.clear(); }); drawArea.on('drawend', function(e){ var polygonGeometry = e.feature.getGeometry(); //시추공정보 var holeFeatures = tblHeader.getSource().getFeatures(); //지표침하판정보 var sursetFeatures = sursetLayer.getSource().getFeatures(); //지중경사계정보 var verIncFeatures = verIncLayer.getSource().getFeatures(); //층별침하계정보 var setExtFeatures = setExtLayer.getSource().getFeatures(); //간극수압계정보 var watPreFeatures = watPreLayer.getSource().getFeatures(); //지중경사계정보 var watLevFeatures = watLevLayer.getSource().getFeatures(); var select = new ol.interaction.Select(); selectFeatures = select.getFeatures(); // 시추공 selectFeatures sursetSelectFeatures = select.getFeatures(); // 지표침하판 selectFeatures verIncSelectFeatures = select.getFeatures(); setExtSelectFeatures = select.getFeatures(); watPreSelectFeatures = select.getFeatures(); watLevSelectFeatures = select.getFeatures(); for (var i = 0 ; i < holeFeatures.length; i++){ if(polygonGeometry.intersectsExtent( holeFeatures[i].getGeometry().getExtent() )){ selectFeatures.push(holeFeatures[i]); selectedArea.addFeature(holeFeatures[i]); } } for (var i = 0 ; i < sursetFeatures.length; i++){ if(polygonGeometry.intersectsExtent( sursetFeatures[i].getGeometry().getExtent() )){ sursetSelectFeatures.push(sursetFeatures[i]); selectedArea.addFeature(sursetFeatures[i]); } } for (var i = 0 ; i < verIncFeatures.length; i++){ if(polygonGeometry.intersectsExtent( verIncFeatures[i].getGeometry().getExtent() )){ verIncSelectFeatures.push(verIncFeatures[i]); selectedArea.addFeature(verIncFeatures[i]); } } for (var i = 0 ; i < setExtFeatures.length; i++){ if(polygonGeometry.intersectsExtent( setExtFeatures[i].getGeometry().getExtent() )){ setExtSelectFeatures.push(setExtFeatures[i]); selectedArea.addFeature(setExtFeatures[i]); } } for (var i = 0 ; i < watPreFeatures.length; i++){ if(polygonGeometry.intersectsExtent( watPreFeatures[i].getGeometry().getExtent() )){ watPreSelectFeatures.push(watPreFeatures[i]); selectedArea.addFeature(watPreFeatures[i]); } } for (var i = 0 ; i < watLevFeatures.length; i++){ if(polygonGeometry.intersectsExtent( watLevFeatures[i].getGeometry().getExtent() )){ watLevSelectFeatures.push(watLevFeatures[i]); selectedArea.addFeature(watLevFeatures[i]); } } }); } function selectFeatureInfo(){ debugger; //thkim var businessCode = document.mapForm.businessCode.value; var holeCode = document.mapForm.holeCode.value; var consCode = document.mapForm.consCode.value; var searchType = document.mapForm.searchType.value; var surSetCode = document.mapForm.surSetCode.value; var verIncCode = document.mapForm.verIncCode.value; var setExtCode = document.mapForm.setExtCode.value; var watPreCode = document.mapForm.watPreCode.value; var watLevCode = document.mapForm.watLevCode.value; var resultData; var resultArea = []; var holeData; var msg; if(document.mapForm.searchType.value == "EachSelect"){ if(selectFeature != undefined > 0){ if(consCode == "undefined"){ msg = "시추공"; $.ajax({ url : "/map/holeInfo.do", type: "POST", data : { businessCode : businessCode, holeCode : holeCode, }, success : function(data){ resultData = $.parseJSON(data); holeData = resultData.dataList1; document.getElementById("busCod").innerHTML = undefinedCheck(holeData[0].businessCode); document.getElementById("busProcod").innerHTML = undefinedCheck(holeData[0].businessProcessName); document.getElementById("holCod").innerHTML = undefinedCheck(holeData[0].holeCode); document.getElementById("holNam").innerHTML = undefinedCheck(holeData[0].holeName); document.getElementById("holLocsd").innerHTML = undefinedCheck(holeData[0].sdName); document.getElementById("holLocsgg").innerHTML = undefinedCheck(holeData[0].sggName); document.getElementById("holLocemd").innerHTML = undefinedCheck(holeData[0].emdName); document.getElementById("holLocdet").innerHTML = undefinedCheck(holeData[0].businessAddressDetail); document.getElementById("holcoordi").innerHTML = "EPSG:" + undefinedCheck(holeData[0].holeCoordinate); document.getElementById("holX").innerHTML = undefinedCheck(holeData[0].holeX); document.getElementById("holY").innerHTML = undefinedCheck(holeData[0].holeY); document.getElementById("holeBoringName").innerHTML = undefinedCheck(holeData[0].holeBoringName); document.getElementById("holeProspecterName").innerHTML = undefinedCheck(holeData[0].holeProspecterName); document.getElementById("holeStartDate").innerHTML = undefinedCheck(holeData[0].holeStartDate); document.getElementById("holeEndDate").innerHTML = undefinedCheck(holeData[0].holeEndDate); document.getElementById("holeElevation").innerHTML = undefinedCheck(holeData[0].holeElevation); document.getElementById("holeWaterLevel").innerHTML = undefinedCheck(holeData[0].holeWaterLevel); document.getElementById("holeDrillingDepth").innerHTML = undefinedCheck(holeData[0].holeDrillingDepth); document.getElementById("holeCasingDepth").innerHTML = undefinedCheck(holeData[0].holeCasingDepth); document.getElementById("stratumCount").innerHTML = undefinedCheck(holeData[0].stratumCount); document.getElementById("holeDia").innerHTML = undefinedCheck(holeData[0].holeDia); document.getElementById("holeBoringMachine").innerHTML = undefinedCheck(holeData[0].holeBoringMachine); document.getElementById("holeBoringMethod").innerHTML = undefinedCheck(holeData[0].holeBoringMethod); document.getElementById("holeBoringDirection").innerHTML = undefinedCheck(holeData[0].holeBoringDirection); document.getElementById("userNm").innerHTML = undefinedCheck(holeData[0].userNm); document.getElementById("sysRegDt").innerHTML = undefinedCheck(holeData[0].sysRegDt); document.getElementById("holeRemark").innerHTML = undefinedCheck(holeData[0].holeRemark); }, complete : function(data) { holeInfoPopupData.center(); holeInfoPopupData.open(); } }); }else if(document.mapForm.surSetCode.value != 'undefined'){ msg = "지표침하판"; $.ajax({ url : "/map/instrumentationInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchInstrPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchInstrPopupSubKendoGrid(resultData.dataList2,consCode, businessCode); instrumentationInfoPopupData.center(); instrumentationInfoPopupData.open(); } }); }else if(document.mapForm.verIncCode.value != 'undefined'){ msg = "지중경사계"; $.ajax({ url : "/map/verIncInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchVerIncPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchVerIncPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); verIncInfoPopupData.center(); verIncInfoPopupData.open(); } }); }else if(document.mapForm.setExtCode.value != 'undefined'){ msg = "층별침하계"; $.ajax({ url : "/map/setExtInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchSetExtPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchSetExtPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); setExtInfoPopupData.center(); setExtInfoPopupData.open(); } }); }else if(document.mapForm.watPreCode.value != 'undefined'){ msg = "간극수압계"; $.ajax({ url : "/map/watPreInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchWatPrePopupKendoGrid(resultData.dataList1, consCode, businessCode); searchWatPrePopupSubKendoGrid(resultData.subDataList,consCode, businessCode); watPreInfoPopupData.center(); watPreInfoPopupData.open(); } }); }else if(document.mapForm.watLevCode.value != 'undefined'){ msg = "지하수위계"; $.ajax({ url : "/map/watLevInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchWatLevPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchWatLevPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); watLevInfoPopupData.center(); watLevInfoPopupData.open(); } }); }else{ alert("정보를 선택해주세요."); } }else{ alert( msg + "을 선택해주세요."); return false; } }else if(searchType == "areaSearch"){ $("#areaInfoPopupGrid").find("table").prepend("테이블 요약"); resultData = selectFeatures.getArray(); for(var i =0; i테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { dataList = resultData.dataList1; surSetdataList = resultData.dataList2; verIncdataList = resultData.dataList3; setExtdataList = resultData.dataList4; watPredataList = resultData.dataList5; watLevdataList = resultData.dataList6; dataList = dataList .concat(surSetdataList) .concat(verIncdataList) .concat(setExtdataList) .concat(watPredataList) .concat(watLevdataList); // 그리드 데이터 로드 searchSaupPopupKendoGrid(dataList); saupInfoPopupData.center(); saupInfoPopupData.open(); } }); } } function undefinedCheck(val) { var data = ""; if(val != undefined) { data = val; } return data } function createPopover(){ coordElement = document.getElementById('olPopup'); olPopup = new ol.Overlay({ element: document.getElementById('olPopup') }); map.addOverlay(olPopup); } //------------------------------------------- //hover 기능 //------------------------------------------- function hoverMode() { createPopover(); map.on('pointermove', function(evt) { if (evt.dragging) { $(coordElement).popover('destroy'); return; } var pixel = map.getEventPixel(evt.originalEvent); var hit = map.hasFeatureAtPixel(pixel); // 마커 위로 이동 시 마우스 커서 변경 map.getViewport().style.cursor = hit ? 'pointer' : ''; if(mapDemSearchOnOff == "on"){ map.forEachLayerAtPixel(evt.pixel, function(layer, pixel) { if(layer.get('title') == "demLayer"){ const data = demLayer.getData(evt.pixel); //let height = 0.2126*pixel[0] + 0.7152*pixel[1] + 0.0722*pixel[2]; let r = data[0]; let g = data[1]; let b = data[2]; var hexCode = ConvertRGBtoHex(r,g,b); let height; //console.log(" R: " + data[0] + " G : " + data[1] + " B : " + data[2]); if(hexCode == "#00009b" ){ height = 0; }else{ height = 0.1126*r + 0.0126*g + 0.0252*b; } //var height = ol.ext.getElevationFromPixel(pixel); document.getElementById("demInfo").innerHTML = height.toFixed(2); } }), { layerFilter: function(l) { return l===demLayer; } }; } var hoverFeatureId; var hoverFeature = map.forEachFeatureAtPixel(evt.pixel,function( hoverFeature) { hoverFeatureId = hoverFeature.getId() == undefined ? null : hoverFeature.getId(); return hoverFeature; }); if(hoverFeatureId){ var coordinate = evt.coordinate; var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(coordinate, 'EPSG:3857', 'EPSG:4326')) // toStringHDMS : 반구, 도, 분 및 초를 사용하여 지리 좌표의 형식을 지정 var businessName = hoverFeature.getProperties().business_name if(hoverFeatureId.toLowerCase().includes('hole')){ var holeName = hoverFeature.getProperties().hole_name; $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '


시추공명 : ' + holeName + ' ' }) }else if(hoverFeatureId.toLowerCase().includes('surset')){ let zoneCode = hoverFeature.getProperties().zone_code; let testName; let testCode; var consCode; if(hoverFeatureId.includes('surset')){ testName = "지표침하판코드"; testCode = hoverFeature.getProperties().sur_set_code; consCode = hoverFeature.getProperties().cons_code; } $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '

구역코드 : ' + zoneCode + '

' + testName + ' : ' + testCode + ' ' }) }else if(hoverFeatureId.toLowerCase().includes('verinc')){ let zoneCode = hoverFeature.getProperties().zone_code; let testName; let testCode; var consCode; if(hoverFeatureId.includes('verinc')){ testName = "지중경사계코드"; testCode = hoverFeature.getProperties().ver_inc_code; consCode = hoverFeature.getProperties().cons_code; } $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '

구역코드 : ' + zoneCode + '

' + testName + ' : ' + testCode + ' ' }) }else if(hoverFeatureId.toLowerCase().includes('setext')){ let zoneCode = hoverFeature.getProperties().zone_code; let testName; let testCode; var consCode; if(hoverFeatureId.includes('setext')){ testName = "층별침하계코드"; testCode = hoverFeature.getProperties().set_ext_code; consCode = hoverFeature.getProperties().cons_code; } $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '

구역코드 : ' + zoneCode + '

' + testName + ' : ' + testCode + ' ' }) }else if(hoverFeatureId.toLowerCase().includes('watpre')){ let zoneCode = hoverFeature.getProperties().zone_code; let testName; let testCode; var consCode; if(hoverFeatureId.includes('watpre')){ testName = "간극수압계코드"; testCode = hoverFeature.getProperties().wat_pre_code; consCode = hoverFeature.getProperties().cons_code; } $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '

구역코드 : ' + zoneCode + '

' + testName + ' : ' + testCode + ' ' }) }else if(hoverFeatureId.toLowerCase().includes('watlev')){ let zoneCode = hoverFeature.getProperties().zone_code; let testName; let testCode; var consCode; if(hoverFeatureId.includes('watlev')){ testName = "지하수위계코드"; testCode = hoverFeature.getProperties().wat_lev_code; consCode = hoverFeature.getProperties().cons_code; } $(coordElement).popover('destroy'); olPopup.setPosition(coordinate); $(coordElement).popover({ 'placement': 'top', 'animation': false, 'html': true, 'content': '

사업명 : ' + businessName + '

구역코드 : ' + zoneCode + '

' + testName + ' : ' + testCode + ' ' }) } $(coordElement).popover('show'); }else{ $(coordElement).popover('destroy'); } }); } //------------------------------------------- //거리 측정 및 면적 측정 기능 구현 //------------------------------------------- function drawFn(typeSelect) { drawInit(); if($("#"+typeSelect).hasClass("active")) { createHelpTooltip(); var helpMsg; var pointerMoveHandler = function (evt) { if (sketch) { var geom = (sketch.getGeometry()); if (geom instanceof ol.geom.Polygon) { helpMsg = '더블클릭 시 측정이 종료됩니다.'; } else if (geom instanceof ol.geom.LineString) { helpMsg = '더블클릭 시 측정이 종료됩니다.'; } }else{ helpMsg = '클릭하여 측정을 시작해 주세요.'; } helpTooltipElement.innerHTML = helpMsg; helpTooltip.setPosition(evt.coordinate); helpTooltipElement.classList.remove('hidden'); }; map.on('pointermove', pointerMoveHandler); map.getViewport().addEventListener('mouseout', function() { helpTooltipElement.classList.add('hidden'); }); createMeasureTooltip(); draw = new ol.interaction.Draw({ source: vectorDrawSource, type: (typeSelect), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.4)', }), stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 0, 0.5)', lineDash: [10, 10], width: 2 }) }), }); map.addInteraction(draw); var listener; draw.on('drawstart', function(evt) { // set sketch sketch = evt.feature; /** @type {import("../src/ol/coordinate.js").Coordinate|undefined} */ var tooltipCoord = evt.coordinate; // listener 버튼 형식으로 변경하기 listener = sketch.getGeometry().on('change', function(evt) { var geom = evt.target; var output; if (geom instanceof ol.geom.Polygon) { output = formatArea(geom); tooltipCoord = geom.getInteriorPoint().getCoordinates(); } else if (geom instanceof ol.geom.LineString) { output = formatLength(geom); tooltipCoord = geom.getLastCoordinate(); } measureTooltipElement.innerHTML = output; measureTooltip.setPosition(tooltipCoord); }); }, this); draw.on('drawend', function () { measureTooltipElement.className = 'tooltip tooltip-static'; measureTooltip.setOffset([0, -7]); //sketch = null; measureTooltipElement = null; createMeasureTooltip(); sketch = null; //map.removeOverlay(helpTooltip); ol.Observable.unByKey(listener); }, this); }else{ //alert("측정모드 종료"); } } //------------------------------------------- //도움말 툴팁 제공 //------------------------------------------- function createHelpTooltip() { if (helpTooltipElement) { helpTooltipElement.parentNode.removeChild(helpTooltipElement); } helpTooltipElement = document.createElement('div'); helpTooltipElement.className = 'tooltip hidden'; helpTooltip = new ol.Overlay({ element: helpTooltipElement, offset: [15, 0], positioning: 'center-left', }); map.addOverlay(helpTooltip); } //------------------------------------------- //측정 결과값 툴팁 제공 //------------------------------------------- function createMeasureTooltip() { if (measureTooltipElement) { measureTooltipElement.parentNode.removeChild(measureTooltipElement); } measureTooltipElement = document.createElement('div'); measureTooltipElement.className = 'tooltip tooltip-measure'; measureTooltip = new ol.Overlay({ element: measureTooltipElement, offset: [0, -15], positioning: 'bottom-center' }); map.addOverlay(measureTooltip); } function drawInit(){ drawLayer.getSource().clear(); map.removeInteraction(draw); map.removeOverlay(helpTooltip); map.removeOverlay(measureTooltip); $('.tooltip-static').remove(); } function demBaseLayerInit(){ demBaseLayer = new ol.layer.Tile ({ title: "demBaseLayer", displayInLayerSwitcher: false, minResolution: 0, maxResolution: 197231.79878968254, source: new ol.source.TileWMS({ url: 'https://wxs.ign.fr/altimetrie/geoportail/r/wms', projection: 'EPSG:3857', attributions: [ 'Geoservices-IGN' ], crossOrigin: 'anonymous', params: { LAYERS: 'ELEVATION.ELEVATIONGRIDCOVERAGE.SRTM3', FORMAT: 'image/x-bil;bits=32', VERSION: '1.3.0' } }), /*zIndex: 1*/ }); map.addLayer(demBaseLayer); // Tile load function to convert elevation var alti = ol.ext.imageLoader.elevationMap(); demBaseLayer.getSource().setTileLoadFunction(alti); // Hide the layer (but keep it on the map) var hide = new ol.filter.CSS({ display: false }); demBaseLayer.addFilter(hide); // Prevent layer smoothing demBaseLayer.once('prerender', function(evt) { evt.context.imageSmoothingEnabled = false; evt.context.webkitImageSmoothingEnabled = false; evt.context.mozImageSmoothingEnabled = false; evt.context.msImageSmoothingEnabled = false; }); } function ColorToHex(color) { var hexadecimal = color.toString(16); return hexadecimal.length == 1 ? "0" + hexadecimal : hexadecimal; } function ConvertRGBtoHex(red, green, blue) { return "#" + ColorToHex(red) + ColorToHex(green) + ColorToHex(blue); } //GRID 에 JSON 데이터 조회 function searchGridInit() { var form = $("#searchProjForm")[0]; var formData = new FormData(form); var resultData; $.ajax({ url: '/app/proj/projList_jsondata.do', type: "POST", beforeSend : function(xhr){ loading("#searchGrid", "true"); }, dataType : 'json', cache : false, contentType : false, processData : false, traditional: true, data : formData, success:function(data){ // 필독!!! - kendoGrid의 웹접근성 충족하려면 꼭 넣어서 확인 $("#searchGrid").find("table").prepend("테이블 요약"); loading("#searchGrid","false"); resultData = data; }, complete: function(data) { dataList = resultData.dataList1; // 그리드 데이터 로드 searchKendoGrid(dataList); } }); } function searchKendoGrid(dataList) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { projectName: { type: "string" }, } }, }, pageSize: 10, }); $("#searchGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "projectName", title: "항만명", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.projectName); return "

" + dataResult + "
"; } }, { field: "projectCode", title: "조회", width: "50px", template: function(dataItem){ var projectCode = dataItem.projectCode; var addButton = ""; return "
"+addButton+"
"; }, sortable: false, }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchAreaPopupKendoGrid(dataList) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { business_name: { type: "string" }, hole_name: { type: "string" }, } }, }, pageSize: 10, }); $("#saupInfoPopupGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "business_name", title: "사업명", width: "200px", template: function(dataItem){ var dataResult = dataItem.business_name; return "
" + dataResult + "
"; } }, { field: "hole_name", title: "구분", width: "120px", template: function(dataItem){ if(dataItem.hole_name != undefined){ var dataResult = "시추공"; }else if(dataItem.sur_set_code != undefined){ var dataResult = "지표침하판"; }else if(dataItem.ver_inc_code != undefined){ var dataResult = "지중경사계"; }else if(dataItem.set_ext_code != undefined){ var dataResult = "층별침하계"; }else if(dataItem.wat_pre_code != undefined){ var dataResult = "간극수압계"; }else if(dataItem.wat_lev_code != undefined){ var dataResult = "지하수위계"; } return "
" + dataResult + "
"; } }, { field: "business_code", title: "상세정보", width: "50px", template: function(dataItem){ let businessCode = dataItem.business_code; let holeCode = dataItem.hole_code; var consCode = dataItem.cons_code; if(dataItem.hole_name != undefined){ var addButton = ""; }else if(dataItem.sur_set_code != undefined){ var addButton = ""; }else if(dataItem.ver_inc_code != undefined){ var addButton = ""; }else if(dataItem.set_ext_code != undefined){ var addButton = ""; }else if(dataItem.wat_pre_code != undefined){ var addButton = ""; }else if(dataItem.wat_lev_code != undefined){ var addButton = ""; } return "
"+addButton+"
"; }, sortable: false, }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } //======================================================== //kendoUI Grid 설정 //========================================================= function onDataBound(e) { var grid = $("#"+e.sender.element[0].id).data("kendoGrid"); var rows = this.items(); // 순번 $(rows).each(function () { var noIndex = $(this).index() + 1 + (grid.dataSource.pageSize() * (grid.dataSource.page() - 1)); var rowLabel = $(this).find(".row-number"); $(rowLabel).html(noIndex); }); } function onChange(e) { // 그리드가 change때마다 불러오는 함수 //console.log("e :", e); var grid = e.sender; var items = e.sender.items(); items.each(function(e) { var dataItem = grid.dataItem(this); }); } function undefinedCheck(val) { var data = ""; if(val != undefined) { data = val; } return data } function displayLoading(target) { var element = $(target); kendo.ui.progress(element, true); } function completeLoading(target) { var element = $(target); kendo.ui.progress(element, false); } function viewProjInfo(code){ //프로젝트 상세정보 displayLoading(document.body); var projInfoPopupData = $("#projInfo").data("kendoWindow"); if(typeof(projInfoPopupData) != "undefined"){ projInfoPopupData.destroy(); } $("#projDetailPopup").empty(); $("#projDetailPopup").load("/map/mapProjDetailInfo.do?projectCode="+ code, function(){ completeLoading(document.body); }); } //GRID 에 JSON 데이터 조회 function searchSaupGridInit() { var form = $("#searchSaupForm")[0]; var formData = new FormData(form); var resultData; $.ajax({ url: '/app/saup/saupList_jsondata.do', type: "POST", beforeSend : function(xhr){ loading("#searchSaupGrid", "true"); }, dataType : 'json', cache : false, contentType : false, processData : false, traditional: true, data : formData, success:function(data){ // 필독!!! - kendoGrid의 웹접근성 충족하려면 꼭 넣어서 확인 $("#searchSaupGrid").find("table").prepend("테이블 요약"); loading("#searchSaupGrid","false"); resultData = data; }, complete: function(data) { dataList = resultData.dataList1; // 그리드 데이터 로드 searchSaupKendoGrid(dataList); } }); } function searchSaupKendoGrid(dataList) { var searchSaupGrid = $("#searchSaupGrid").data("kendoGrid"); if(searchSaupGrid){ $("#searchSaupGrid").data("kendoGrid").destroy(); } var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { businessName: { type: "string" }, } }, }, pageSize: 10, }); $("#searchSaupGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "businessName", title: "사업명", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.businessName); return "
" + dataResult + "
"; } }, { field: "businessCode", title: "위치이동", width: "50px", template: function(dataItem){ var businessCode = dataItem.businessCode; var addButton = ""; return "
"+addButton+"
"; }, sortable: false, }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function selectComboList(class_name, data, selected_data){ var form_class = $("#"+class_name).kendoDropDownList({ dataSource: data, dataTextField: "label", dataValueField: "code", animation: false, autoBind: true, suggest: true, optionLabel: "=선택=", }); var dropdownlist = $("#"+class_name).data("kendoDropDownList"); dropdownlist.select(function(dataItem){ return dataItem.code === selected_data; }); } function viewHoleInfo(businessCode, holeCode){ //영역검색 상세 정보조회 $.ajax({ url : "/map/holeInfo.do", type: "POST", data : { businessCode : businessCode, holeCode : holeCode, }, success : function(data){ resultData = $.parseJSON(data); holeData = resultData.dataList1; document.getElementById("busCod").innerHTML = undefinedCheck(holeData[0].businessCode); document.getElementById("busProcod").innerHTML = undefinedCheck(holeData[0].businessProcessName); document.getElementById("holCod").innerHTML = undefinedCheck(holeData[0].holeCode); document.getElementById("holNam").innerHTML = undefinedCheck(holeData[0].holeName); document.getElementById("holLocsd").innerHTML = undefinedCheck(holeData[0].sdName); document.getElementById("holLocsgg").innerHTML = undefinedCheck(holeData[0].sggName); document.getElementById("holLocemd").innerHTML = undefinedCheck(holeData[0].emdName); document.getElementById("holLocdet").innerHTML = undefinedCheck(holeData[0].businessAddressDetail); document.getElementById("holcoordi").innerHTML = "EPSG:" + undefinedCheck(holeData[0].holeCoordinate); document.getElementById("holX").innerHTML = undefinedCheck(holeData[0].holeX); document.getElementById("holY").innerHTML = undefinedCheck(holeData[0].holeY); document.getElementById("holeBoringName").innerHTML = undefinedCheck(holeData[0].holeBoringName); document.getElementById("holeProspecterName").innerHTML = undefinedCheck(holeData[0].holeProspecterName); document.getElementById("holeStartDate").innerHTML = undefinedCheck(holeData[0].holeStartDate); document.getElementById("holeEndDate").innerHTML = undefinedCheck(holeData[0].holeEndDate); document.getElementById("holeElevation").innerHTML = undefinedCheck(holeData[0].holeElevation); document.getElementById("holeWaterLevel").innerHTML = undefinedCheck(holeData[0].holeWaterLevel); document.getElementById("holeDrillingDepth").innerHTML = undefinedCheck(holeData[0].holeDrillingDepth); document.getElementById("holeCasingDepth").innerHTML = undefinedCheck(holeData[0].holeCasingDepth); document.getElementById("stratumCount").innerHTML = undefinedCheck(holeData[0].stratumCount); document.getElementById("holeDia").innerHTML = undefinedCheck(holeData[0].holeDia); document.getElementById("holeBoringMachine").innerHTML = undefinedCheck(holeData[0].holeBoringMachine); document.getElementById("holeBoringMethod").innerHTML = undefinedCheck(holeData[0].holeBoringMethod); document.getElementById("holeBoringDirection").innerHTML = undefinedCheck(holeData[0].holeBoringDirection); document.getElementById("userNm").innerHTML = undefinedCheck(holeData[0].userNm); document.getElementById("sysRegDt").innerHTML = undefinedCheck(holeData[0].sysRegDt); document.getElementById("holeRemark").innerHTML = undefinedCheck(holeData[0].holeRemark); }, complete : function(data) { holeInfoPopupData.center(); holeInfoPopupData.open(); } }); } function viewSurSetInfo(businessCode, consCode){ $.ajax({ url : "/map/instrumentationInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchInstrPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchInstrPopupSubKendoGrid(resultData.dataList2, consCode, businessCode); instrumentationInfoPopupData.center(); instrumentationInfoPopupData.open(); } }); } function viewVerIncInfo(businessCode, consCode){ $.ajax({ url : "/map/verIncInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchVerIncPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchVerIncPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); verIncInfoPopupData.center(); verIncInfoPopupData.open(); } }); } function viewSetExtInfo(businessCode, consCode){ $.ajax({ url : "/map/setExtInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchSetExtPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchSetExtPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); setExtInfoPopupData.center(); setExtInfoPopupData.open(); } }); } function viewWatPreInfo(businessCode, consCode){ $.ajax({ url : "/map/watPreInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchWatPrePopupKendoGrid(resultData.dataList1, consCode, businessCode); searchWatPrePopupSubKendoGrid(resultData.subDataList,consCode, businessCode); watPreInfoPopupData.center(); watPreInfoPopupData.open(); } }); } function viewWatLevInfo(businessCode, consCode){ $.ajax({ url : "/map/watLevInfo.do", type: "POST", data : { businessCode : businessCode, /*searchType : searchType, 계측정보에서 지표침하판이 아닌 다른 정보를 가져올때 주석해제 할 것*/ consCode : consCode }, success : function(data){ $("#instrMainGrid").find("table").prepend("테이블 요약"); resultData = $.parseJSON(data); }, complete : function(data) { searchWatLevPopupKendoGrid(resultData.dataList1, consCode, businessCode); searchWatLevPopupSubKendoGrid(resultData.subDataList,consCode, businessCode); watLevInfoPopupData.center(); watLevInfoPopupData.open(); } }); } function viewSaupInfo(code){ //사업상세정보 //초기화 map.removeLayer(selectedSaup); $.ajax({ url: '/map/mapSaupHolelist.do', type: "POST", data : { businessCode : code }, success:function(data){ resultData = $.parseJSON(data); holeResultData = resultData.dataList1; surSetResultData = resultData.dataList2; verIncResultData = resultData.dataList3; setExtResultData = resultData.dataList4; watPreResultData = resultData.dataList5; watLevResultData = resultData.dataList6; var format = new ol.format.WKT(); var features = []; for(var i=0; i < holeResultData.length; i++) { var row = holeResultData[i]; var feature = format.readFeature(row.holePoint); feature.getGeometry().transform('EPSG:4326', 'EPSG:3857'); feature.setId('selected_hole_' + row.businessCode + '_' + row.holeCode); feature.setProperties({'businessCode': row.businessCode}); feature.setProperties({'business_name': row.businessName}); feature.setProperties({'holeCode': row.holeCode}); feature.setProperties({'hole_name': row.holeName}); features.push(feature); } for(var i=0; i < surSetResultData.length; i++) { var row = surSetResultData[i]; var feature = format.readFeature(row.sursetPoint); feature.getGeometry().transform('EPSG:4326', 'EPSG:3857'); feature.setId('selected_hole_' + row.businessCode + '_' + row.zoneCode); feature.setProperties({'businessCode': row.businessCode}); feature.setProperties({'business_name': row.businessName}); feature.setProperties({'zone_code': row.zoneCode}); feature.setProperties({'sur_set_code': row.surSetCode}); features.push(feature); } var selectedVector = new ol.source.Vector({ features: features //add an array of features }); selectedSaup = new ol.layer.Vector({ source: selectedVector, style: [ new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: "#ffcc33" }), stroke: new ol.style.Stroke({ color: 'rgba(255, 255, 255, 0.7)', width: 2, }), radius: 7 }) }), new ol.style.Style({ image: new ol.style.Icon({ src: '../com/img/map-service/icon/icon_map_check.png', opacity: 0.5, src: "data:image/svg+xml;utf8," + svg, scale: 0.5 }), }) ] }) map.addLayer(selectedSaup); var dataExtent = selectedVector.getExtent(); map.getView().fit(dataExtent, map.getSize()); map.getView().setZoom(map.getView().getZoom()-1); document.mapForm.searchType.value = 'saupSearch'; document.mapForm.businessCode.value = code; }, complete: function(data) { dataList = resultData.dataList1; } }); } function searchSaupPopupKendoGrid(dataList) { var saupInfoPopupGrid = $("#saupInfoPopupGrid").data("kendoGrid"); if(saupInfoPopupGrid){ $("#saupInfoPopupGrid").data("kendoGrid").destroy(); } var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { businessName: { type: "string" }, holeName: { type: "string" }, } }, }, pageSize: 10, }); $("#saupInfoPopupGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "businessName", title: "사업명", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.businessName); return "
" + dataResult + "
"; } }, { field: "holeName", title: "구분", width: "120px", template: function(dataItem){ if(dataItem.holeName != undefined){ var dataResult = "시추공"; }else if(dataItem.surSetCode != undefined){ var dataResult = "지표침하판"; }else if(dataItem.verIncCode != undefined){ var dataResult = "지중경사계"; }else if(dataItem.setExtCode != undefined){ var dataResult = "층별침하계"; }else if(dataItem.watPreCode != undefined){ var dataResult = "간극수압계"; }else if(dataItem.watLevCode != undefined){ var dataResult = "지하수위계"; } return "
" + dataResult + "
"; } }, { field: "businessCode", title: "상세정보", width: "50px", template: function(dataItem){ let businessCode = dataItem.businessCode; let holeCode = dataItem.holeCode; var consCode = dataItem.consCode; if(dataItem.holeName != undefined){ var addButton = ""; }else if(dataItem.surSetCode != undefined){ var addButton = ""; }else if(dataItem.verIncCode != undefined){ var addButton = ""; }else if(dataItem.setExtCode != undefined){ var addButton = ""; }else if(dataItem.watPreCode != undefined){ var addButton = ""; }else if(dataItem.watLevCode != undefined){ var addButton = ""; } return "
"+addButton+"
"; }, sortable: false, }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "600px", pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchInstrPopupKendoGrid(dataList, searchType, businessCode, consCode) { $("#instrSubGrid").empty().append("
"); var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { zoneCode: { type: "string" }, surSetCode: { type: "string" }, epsgCodeType: { type: "string" }, pointX: { type: "string" }, pointY: { type: "string" }, } }, }, pageSize: 10, }); $("#instrMainGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "zoneCode", title: "구역코드", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.zoneCode); return "
" + dataResult + "
"; } }, { field: "surSetCode", title: "지표침하판코드", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.surSetCode); return "
" + dataResult + "
"; } }, { field: "epsgCodeType", title: "좌표계", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.epsgCodeType); return "
EPSG:" + dataResult + "
"; } }, { field: "pointX", title: "계측 좌표 X", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointX); return "
" + dataResult + "
"; } }, { field: "pointY", title: "계측 좌표 Y", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointY); return "
" + dataResult + "
"; } }, { title: "계측조회", width: "75px", template: function(dataItem) { var consCode = dataItem.consCode; var addButton = ""; return "
"+addButton+"
"; } }, { title: "예측조회", width: "75px", template: function(dataItem) { var consCode = dataItem.consCode; var addButton = ""; return "
"+addButton+"
"; } }, ], sortable: true, resizable: true, filterable: false, scrollable: false, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, buttonCount: 0, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchInstrPopupSubKendoGrid(dataList, searchType) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { measureDt: {type: "date"}, nod: {type: "number"}, nodPer: {type: "number"}, measuringRod: {type: "number"}, subByPeriod: {type: "number"}, subByPeriodForCm: {type: "number"}, amountCumSub: {type: "number"}, groundHeight: {type: "number"}, groundHeightForCm: {type: "number"}, fillHeight: {type: "number"}, fillHeightForCm: {type: "number"}, realFillHeight: {type: "number"}, realFillHeightForCm : {type: "number"}, connSetRod: {type: "number"}, } }, }, pageSize: 10, }); $("#instrSubGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "measureDt", title: "측정일자", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (measureDt == null) ? '0' : kendo.toString(measureDt, 'yyyy-MM-dd') #
", }, { field: "nod", title: "경과일수(일)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (nod == null) ? '0' : nod #
", }, { field: "nodPer", title: "기간일수(일)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (nodPer == null) ? '0' : nodPer #
", }, { field: "measuringRod", title: "측정봉Top(DL.m)(+)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (measuringRod == null) ? '0' : measuringRod #
", }, { field: "subByPeriodForCm", title: "기간별침하량(cm)(+,-)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (subByPeriodForCm == null) ? '0' : subByPeriodForCm #
", }, { field: "amountCumSub", title: "누적침하량(cm)(-)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (amountCumSub == null) ? '0' : kendo.toString(amountCumSub, 'n2') #
", }, { field: "groundHeightForCm", title: "지반고(DL.cm)(+)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (groundHeightForCm == null) ? '0' : groundHeightForCm #
", }, { field: "fillHeightForCm", title: "성토고(cm)(+)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (fillHeightForCm == null) ? '0' : fillHeightForCm #
", }, { field: "realFillHeightForCm", title: "실제성토고(DL.cm)(+)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (realFillHeightForCm == null) ? '0' : realFillHeightForCm #
", }, { field: "connSetRod", title: "침하봉연결(m)(+)", editor: chooseEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (connSetRod == null) ? '0' : connSetRod #
", }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: true, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchVerIncPopupKendoGrid(dataList, searchType, businessCode, consCode) { $("#verIncSubGrid").empty().append("
"); var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { zoneCode: { type: "string" }, verIncCode: { type: "string" }, epsgCodeType: { type: "string" }, pointX: { type: "string" }, pointY: { type: "string" }, } }, }, pageSize: 10, }); $("#verIncMainGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "zoneCode", title: "구역코드", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.zoneCode); return "
" + dataResult + "
"; } }, { field: "verIncCode", title: "지중경사계코드", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.verIncCode); return "
" + dataResult + "
"; } }, { field: "epsgCodeType", title: "좌표계", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.epsgCodeType); return "
EPSG:" + dataResult + "
"; } }, { field: "pointX", title: "계측 좌표 X", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointX); return "
" + dataResult + "
"; } }, { field: "pointY", title: "계측 좌표 Y", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointY); return "
" + dataResult + "
"; } }, ], sortable: true, resizable: true, filterable: false, scrollable: false, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, buttonCount: 0, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchVerIncPopupSubKendoGrid(dataList, searchType) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { measureDt: {type: "date"}, depth: {type: "number"}, horizonScale: {type: "number"}, } }, }, pageSize: 10, }); $("#verIncSubGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "measureDt", title: "측정일자", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (measureDt == null) ? '0' : kendo.toString(measureDt, 'yyyy-MM-dd') #
", }, { field: "depth", title: "심도(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (depth == null) ? '0' : depth #
", }, { field: "horizonScale", title: "수평변위(mm)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (horizonScale == null) ? '0' : horizonScale #
", }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: true, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchSetExtPopupKendoGrid(dataList, searchType, businessCode, consCode) { $("#setExtSubGrid").empty().append("
"); var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { zoneCode: { type: "string" }, setExtCode: { type: "string" }, epsgCodeType: { type: "string" }, pointX: { type: "string" }, pointY: { type: "string" }, } }, }, pageSize: 10, }); $("#setExtMainGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "zoneCode", title: "구역코드", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.zoneCode); return "
" + dataResult + "
"; } }, { field: "setExtCode", title: "층별침하계코드", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.setExtCode); return "
" + dataResult + "
"; } }, { field: "epsgCodeType", title: "좌표계", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.epsgCodeType); return "
EPSG:" + dataResult + "
"; } }, { field: "pointX", title: "계측 좌표 X", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointX); return "
" + dataResult + "
"; } }, { field: "pointY", title: "계측 좌표 Y", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointY); return "
" + dataResult + "
"; } }, ], sortable: true, resizable: true, filterable: false, scrollable: false, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, buttonCount: 0, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchSetExtPopupSubKendoGrid(dataList, searchType) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { nod: {type: "number"}, depthByLayer: {type: "number"}, displacement: {type: "number"}, fillHeight: {type: "number"}, } }, }, pageSize: 10, }); $("#setExtSubGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "nod", title: "경과일수(일)", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (nod == null) ? '' :nod #
", }, { field: "depthByLayer", title: "층별깊이(DL(-).m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (depthByLayer == null) ? '' : depthByLayer #
", }, { field: "displacement", title: "변위량(m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (displacement == null) ? '' : displacement #
", }, { field: "fillHeight", title: "성토고(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (fillHeight == null) ? '' : fillHeight #
", }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: true, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchWatPrePopupKendoGrid(dataList, searchType, businessCode, consCode) { $("#watPreSubGrid").empty().append("
"); var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { zoneCode: { type: "string" }, watPreCode: { type: "string" }, epsgCodeType: { type: "string" }, pointX: { type: "string" }, pointY: { type: "string" }, } }, }, pageSize: 10, }); $("#watPreMainGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "zoneCode", title: "구역코드", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.zoneCode); return "
" + dataResult + "
"; } }, { field: "watPreCode", title: "간극수압계코드", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.watPreCode); return "
" + dataResult + "
"; } }, { field: "epsgCodeType", title: "좌표계", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.epsgCodeType); return "
EPSG:" + dataResult + "
"; } }, { field: "pointX", title: "계측 좌표 X", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointX); return "
" + dataResult + "
"; } }, { field: "pointY", title: "계측 좌표 Y", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointY); return "
" + dataResult + "
"; } }, ], sortable: true, resizable: true, filterable: false, scrollable: false, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, buttonCount: 0, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchWatPrePopupSubKendoGrid(dataList, searchType) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { nod: {type: "number"}, sensorInstallDepth: {type: "number"}, temperature: {type: "number"}, watPre: {type: "number"}, overWatPre: {type: "number"}, hydPre: {type: "number"}, watPreSen: {type: "number"}, subsidence: {type: "number"}, } }, }, pageSize: 10, }); $("#watPreSubGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "nod", title: "경과일수(일)", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (nod == null) ? '' :nod #
", }, { field: "sensorInstallDepth", title: "센서설치심도", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (sensorInstallDepth == null) ? '' : sensorInstallDepth #
", }, { field: "temperature", title: "온도(℃)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (temperature == null) ? '' : temperature #
", }, { field: "watPre", title: "간극수압(tf/㎡)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (watPre == null) ? '' : watPre #
", }, { field: "overWatPre", title: "과잉간극수압(tf/㎡)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (overWatPre == null) ? '' : overWatPre #
", }, { field: "hydPre", title: "정수압(tf/㎡)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (hydPre == null) ? '' : hydPre #
", }, { field: "watPreSen", title: "간극수압계센서(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (watPreSen == null) ? '' : watPreSen #
", }, { field: "subsidence", title: "침하량(m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (subsidence == null) ? '' : subsidence #
", }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: true, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchWatLevPopupKendoGrid(dataList, searchType, businessCode, consCode) { $("#watLevSubGrid").empty().append("
"); var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { zoneCode: { type: "string" }, watLevCode: { type: "string" }, epsgCodeType: { type: "string" }, pointX: { type: "string" }, pointY: { type: "string" }, } }, }, pageSize: 10, }); $("#watLevMainGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "zoneCode", title: "구역코드", width: "200px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.zoneCode); return "
" + dataResult + "
"; } }, { field: "watLevCode", title: "지하수위계코드", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.watLevCode); return "
" + dataResult + "
"; } }, { field: "epsgCodeType", title: "좌표계", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.epsgCodeType); return "
EPSG:" + dataResult + "
"; } }, { field: "pointX", title: "계측 좌표 X", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointX); return "
" + dataResult + "
"; } }, { field: "pointY", title: "계측 좌표 Y", width: "120px", template: function(dataItem){ var dataResult = undefinedCheck(dataItem.pointY); return "
" + dataResult + "
"; } }, ], sortable: true, resizable: true, filterable: false, scrollable: false, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) pageable: { pageSizes: false, pageSize: 10, input: false, refresh: false, numeric: false, buttonCount: 0, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function searchWatLevPopupSubKendoGrid(dataList, searchType) { var dataSource = new kendo.data.DataSource ({ data: dataList, autoBind: true, schema: { model: { fields: { measureDt: {type: "date"}, nod: {type: "number"}, measurement: {type: "number"}, watLev: {type: "number"}, topHeight: {type: "number"}, fillHeight: {type: "number"} } }, }, pageSize: 10, }); $("#watLevSubGrid").kendoGrid({ dataSource : dataList, columns: [ { field: "measureDt", title: "측정일자", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (measureDt == null) ? '0' : kendo.toString(measureDt, 'yyyy-MM-dd') #
", }, { field: "nod", title: "경과일수(일)", editor: dateEditor, width: "33%", attributes: { style:"text-align: right" }, template: "
#= (nod == null) ? '' :nod #
", }, { field: "measurement", title: "측정치(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (measurement == null) ? '' : measurement #
", }, { field: "watLev", title: "지하수위(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (watLev == null) ? '' : watLev #
", }, { field: "topHeight", title: "상단고(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (topHeight == null) ? '' : topHeight #
", }, { field: "fillHeight", title: "성토고(DL.m)", editor: chooseEditor, width: "25%", attributes: { style:"text-align: right" }, template: "
#= (fillHeight == null) ? '' : fillHeight #
", }, ], sortable: true, resizable: true, filterable: false, scrollable: true, // 페이징이 없는 스크롤만 있는 그리드만 사용(사용시 pageable를 false로 지정) height: "475px", pageable: { pageSizes: false, pageSize: 10, input: true, refresh: false, numeric: false, }, noRecords: { template: "
" }, dataBound: onDataBound, change: onChange, }); } function clearOldData(dataObject) { // 이전 데이터 초기화 로직... // 전달받은 데이터 객체의 필드 초기화 for (var fieldName in dataObject) { if (dataObject.hasOwnProperty(fieldName)) { // 필드 초기화 예시 (원하시는 초기값으로 변경) dataObject[fieldName] = null; } } } //입력 type 선택 function chooseEditor(container, options) { switch (options.model.COLUMN) { default: numericEditor(container, options); break; } } function dateEditor(container, options) { $('') .appendTo(container) .kendoDatePicker({ culture: "ko-KR", format : "yyyy-MM-dd", change : function(e) { selectedValue = this.value(); selectedValue = selectedValue.getFullYear() + "-" + (new String((selectedValue.getMonth()+1)).length == 1 ? "0" + (selectedValue.getMonth()+1) : selectedValue.getMonth()+1) + "-" + (new String(selectedValue.getDate()).length == 1 ? "0" + selectedValue.getDate() : selectedValue.getDate()); console.log(selectedValue); }, }); } function instrumentationInfo(consCode, businessCode){ var searchType = document.mapForm.searchType.value; var resultData; let graphData; $.ajax({ url : "/map/instrumentationGraphInfo.do", type: "POST", data : { businessCode : businessCode, consCode : consCode }, success : function(data){ resultData = $.parseJSON(data); graphData = resultData.dataList1; if(graphData.length > 0){ fn_fillingDataSel(graphData); var chart; am4core.ready(function() { chart = am4core.createFromConfig({ "type": "XYChart", "legend": { "position": "right" }, "data": arrFillingData, "xAxes": [{ "type": "ValueAxis", "renderer": { "grid": { "template": { "type": "Grid", "location": 0 } }, "minGridDistance": 75 }, "title":{ "text" : "기간일수(일)", "fontWeight" : "bold" } }], "yAxes": [{ "type": "ValueAxis", "renderer": { "maxLabelPosition": 0.98 }, "title":{ "text" : "침하량(cm) / 성토고(cm)", "fontWeight" : "bold" } }], "mouseWheelBehavior" : "zoomX" , "series":[ /* { "type": "LineSeries", "name": "성토고", "bullets": { "values": [{ "type": "CircleBullet", "tooltipText": "{name}\n: {valueY}cm\n 기간일수\n: {valueX}일" }], "template": { "type": "Bullet" } }, "dataFields": { "valueY": "fillHeightForCm", "valueX": "nod" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 },*/ { "type": "LineSeries", "name": "성토고", "fill" : "black", "fillOpacity": 0, "dataFields": { "valueY": "fillHeightForCm", "valueX": "nod" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100, "tooltip": { "numberFormatter": { "numberFormat": "#,###" } } }, { "type": "ColumnSeries", "name": "침하량", "stroke": "rgba(128, 128, 128, 0.5)", "column": { "column.cornerRadiusTopLeft": 10, "column.cornerRadiusTopRight": 10, "fillOpacity": 0 // 막대의 색상 투명도 조절 }, "bullets": { "values": [{ "type": "CircleBullet", "fillOpacity": 0, "tooltipText": "{name}\n: {valueY}cm\n 기간일수\n: {valueX}일" }], "template": { "type": "Bullet" } }, "dataFields": { "valueY": "amountCumSub", "valueX": "nod" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, ], "legend": { "type": "Legend", "position": "right" }, }, document.getElementById('fillingLineChart') ); chart.cursor = new am4charts.XYCursor(); }); } }, complete : function(data) { if(graphData.length > 0){ instrumentationGraphInfoPopupData.center(); instrumentationGraphInfoPopupData.open(); }else{ alert("등록된 계측데이터가 없습니다."); } } }); } function predictionInfo(consCode, businessCode){ var searchType = document.mapForm.searchType.value; var resultData; let graphData; $.ajax({ url : "/map/predictionGraphInfo.do", type : "POST", data : { businessCode : businessCode, consCode : consCode }, success : function(data){ resultData = $.parseJSON(data); graphData = resultData.dataList1; graphData2 = resultData.dataList2; predictList = resultData.predictList; document.getElementById("surSetCode").innerHTML = undefinedCheck(predictList[0].surSetCode); document.getElementById("location").innerHTML = undefinedCheck(predictList[0].businessName); document.getElementById("pointXY").innerHTML = undefinedCheck(predictList[0].pointX) + ', ' + undefinedCheck(predictList[0].pointY); document.getElementById("resiSet").innerHTML = undefinedCheck(predictList[0].targetSettlement); document.getElementById("exBankingDate").innerHTML = undefinedCheck(predictList[0].extraBankingDate); document.getElementById("lastInstrument").innerHTML = undefinedCheck(predictList[0].nod); let chart; if(graphData.length > 0){ fn_predictDataSel(graphData); fn_fillingDataSel(graphData2); var arr1 = new Array(); arr1 = arrFillingData.concat(arrPredictData); am4core.ready(function() { chart = am4core.createFromConfig({ "type": "XYChart", "legend": { "position": "right" }, "data": arr1, "xAxes": [{ "type": "ValueAxis", "renderer": { "grid": { "template": { "type": "Grid", "location": 0 } }, "minGridDistance": 75 }, "title":{ "text" : "기간일수(일)", "fontWeight" : "bold" } }], "yAxes": [{ "type": "ValueAxis", "renderer": { "maxLabelPosition": 0.98 }, "title":{ "text" : "침하량(cm) / 성토고(cm)", "fontWeight" : "bold" } }], "mouseWheelBehavior" : "zoomX" , "series":[ { "type": "LineSeries", "name": "성토고", "fill" : "black", "fillOpacity": 0, "dataFields": { "valueY": "fillHeightForCm", "valueX": "nod" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100, "tooltip": { "numberFormatter": { "numberFormat": "#,###" } } }, { "type": "ColumnSeries", "name": "침하량", "stroke": "rgba(128, 128, 128, 0.5)", "fillOpacity": 0, "bullets": { "values": [{ "type": "CircleBullet", "fillOpacity": 0, // 막대의 색상 투명도 조절 "tooltipText": "{name}\n: {valueY}cm\n 기간일수\n: {valueX}일" }], "template": { "type": "Bullet", "fillOpacity": 0 // 막대의 색상 투명도 조절 } }, "dataFields": { "valueY": "amountCumSub", "valueX": "nod" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, { "type": "LineSeries", "name": "쌍곡선법", "stroke" : "blue", "fill" : "blue", "fillOpacity": 0, "dataFields": { "valueY": "predictSettlement1", "valueX": "sumDays" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, { "type": "LineSeries", "name": "비선형 쌍곡선법", "stroke" : "green", "fill" : "green", "fillOpacity": 0, "dataFields": { "valueY": "predictSettlement2", "valueX": "sumDays" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, { "type": "LineSeries", "name": "가중 비선형 쌍곡선법", "stroke" : "black", "fill" : "black", "fillOpacity": 0, "dataFields": { "valueY": "predictSettlement3", "valueX": "sumDays" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, { "type": "LineSeries", "name": "아사오카법", "stroke" : "purple", "fill" : "purple", "fillOpacity": 0, "dataFields": { "valueY": "predictSettlement4", "valueX": "sumDays" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, { "type": "LineSeries", "name": "단계성토 고려법", "stroke" : "orange", "fill" : "orange", "fillOpacity": 0, "dataFields": { "valueY": "predictSettlement5", "valueX": "sumDays" }, "sequencedInterpolation": true, "sequencedInterpolationDelay": 100 }, ], "legend": { "type": "Legend", "position": "right" }, }, document.getElementById('predictLineChart') ); chart.cursor = new am4charts.XYCursor(); }); } }, complete : function(data) { if(graphData.length > 0){ predictionGraphInfoPopupData.center(); predictionGraphInfoPopupData.open(); }else{ alert("등록된 예측데이터가 없습니다."); } } }); } var arrFillingData = new Array(); function fn_fillingDataSel(data){ //arrFillingData 초기화 arrFillingData = []; for(i=0; i