let lang = 'null'; var map; $( document ).ready(function() { $('.scrollable').bind('mousewheel', function() { return false }); $('.scrollable2').bind('mousewheel DOMMouseScroll', function(e) { var scrollTo = null; if (e.type == 'mousewheel') { scrollTo = (e.originalEvent.wheelDelta * -1); } else if (e.type == 'DOMMouseScroll') { scrollTo = 40 * e.originalEvent.detail; } if (scrollTo) { e.preventDefault(); $(this).scrollTop(scrollTo + $(this).scrollTop()); } return false; }); /*------------------------------ OL OBJECT -----------------------------*/ /** * 공통 스타일 */ var olStyle = { whiteStroke: new ol.style.Style({ stroke: new ol.style.Stroke({ color: [255,255,255,1], width: 1 }) }), blackStroke: new ol.style.Style({ stroke: new ol.style.Stroke({ color: [0,0,0,1], width: 1 }) }), selectHover: new ol.style.Style({ stroke: new ol.style.Stroke({ color: [255,255,255,1], width: 4 }) }), selectClick: new ol.style.Style({ stroke: new ol.style.Stroke({ color: [0,0,0,1], width: 2 }) }) }; /*------------------------------ LAYERS --------------------------------*/ /** * 시도경계 레이어 추가 * raster * vector */ var sidoRaster = new ol.layer.Tile({ title: '시도 경계', visible: false, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:tl_scco_ctprvn_201904', tiled: 'true' } }) }); /** * 시도 레이어(부산) */ sidoVectorBs = new ol.layer.Vector({ title: '시도 영역', renderMode : 'vector', visible: true, opacity: 0, zIndex: 99, source : new ol.source.Vector({ url : PROXY_URL + GISSERVER_URL + '?service=WFS&version=1.1.0&request=GetFeature&outputFormat=application/json' + '&typeName=pinogio:tl_scco_ctprvn_201904_s', format : new ol.format.GeoJSON() }), style: olStyle.blackStroke }); /** * 시도 레이어(세종) */ sidoVectorSj = new ol.layer.Vector({ title: '시도 영역', renderMode : 'vector', visible: true, opacity: 0, zIndex: 99, source : new ol.source.Vector({ url : PROXY_URL + GISSERVER_URL + '?service=WFS&version=1.1.0&request=GetFeature&outputFormat=application/json' + '&typeName=pinogio:tl_scco_ctprvn_201904_s', format : new ol.format.GeoJSON() }), style: olStyle.blackStroke }); /** * 시도 레이어(Grid Map) */ sidoVectorGrid = new ol.layer.Vector({ title: '시도 영역', renderMode : 'vector', visible: true, opacity: 0, zIndex: 99, source : new ol.source.Vector({ url : PROXY_URL + GISSERVER_URL + '?service=WFS&version=1.1.0&request=GetFeature&outputFormat=application/json' + '&typeName=pinogio:tl_scco_ctprvn_201904_s', format : new ol.format.GeoJSON() }), style: olStyle.blackStroke }); /** * 격자기반 인구 2040년 레이어 추가 */ var popGridRaster = new ol.layer.Tile({ id: 'pop_grid_total', title: '격자기반 인구현황(2040년)', visible: true, opacity: .8, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_grid_total', tiled: 'true', STYLES: 'pop40_grid_total'//, //cql_filter: 'category <> -999' } }) }); var popGridRaster_bs = new ol.layer.Tile({ id: 'pop_grid_total_bs', title: '격자기반 인구현황(2040년)', visible: true, opacity: .7, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_grid_total', tiled: 'true', STYLES: 'pop_grid_rate'//, //cql_filter: 'sido_cd == 26' } }) }); var popGridRaster_sj = new ol.layer.Tile({ id: 'pop_grid_total_sj', title: '격자기반 인구현황(2040년)', visible: true, opacity: .7, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_grid_total', tiled: 'true', STYLES: 'pop_grid_rate'//, // cql_filter: 'sido_cd == 36' } }) }); var popGridRaster_grid = new ol.layer.Tile({ id: 'pop_grid_total_grid', title: '격자기반 인구현황(2040년)', visible: true, opacity: .7, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_grid_total', tiled: 'true', STYLES: 'pop40_grid_total' } }) }); /** * 시군구기반 인구 2040년 레이어 추가 */ var popSigunguRaster = new ol.layer.Tile({ id: 'pop_sigungu_total', title: '시군구기반 인구현황(2040년)', visible: true, opacity: .8, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_sigungu_total', tiled: 'true', STYLES: 'pop40_sigungu_total' } }) }); var popSigunguRateRaster = new ol.layer.Tile({ id: 'pop_sigungu_total', title: '2040년 인구증감율', visible: true, opacity: .8, source: new ol.source.TileWMS({ url: GISSERVER_URL, params: { VERSION: '1.3.0', FORMAT: 'image/png', TRANSPARENT: 'true', LAYERS: 'pinogio:pop_sigungu_total', tiled: 'true', STYLES: 'pop_sigungu_rate' } }) }); var boundaryVector = new ol.layer.Vector({ title: '시도 영역', renderMode : 'image', source : new ol.source.Vector({ url : PROXY_URL + GISSERVER_URL + '?service=WFS&version=1.0.0&request=GetFeature&typeName=pinogio:tl_scco_sig_201904_s&outputFormat=application/json', format : new ol.format.GeoJSON() }) }); var boundarySelect = new ol.interaction.Select({ condition: ol.events.condition.pointerMove, layers: [boundaryVector] }); var analysisVector = new ol.layer.Vector({ visible: true, renderMode : 'vector', opacity: 1, zIndex: 99, style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: '#000000', width: 2 }), fill: new ol.style.Fill({ color: '#756bb1' }) }), source: new ol.source.Vector({ format: new ol.format.GeoJSON() }) }); var overlay = { identify: new ol.Overlay({ element: document.getElementById("pg-identify-popup"), autoPan: true, autoPanAnimation: { duration: 250 } }) }; var defaultView = new ol.View({ center : ol.proj.transform([ 128.0292, 36.6332 ], 'EPSG:4326', 'EPSG:3857'), zoom : 7, enableRotation: false }); var bs_View = new ol.View({ center : ol.proj.transform([ 129.0525, 35.2111 ], 'EPSG:4326', 'EPSG:3857'), zoom : 10, enableRotation: false }); var map_bs = new ol.Map({ target : 'pg-mapview-busan', layers : [ BASEMAP_GROUP, sidoVectorBs ], controls: ol.control.defaults({attribution: false}).extend([ new ol.control.Attribution({ collapsible: false }) ]), interactions: ol.interaction.defaults({ doubleClickZoom: false, mouseWheelZoom: true, dragPan: true, pinchZoom: true }).extend([ ]), view : bs_View }); map_bs.addLayer(popGridRaster_bs); //sidoVectorBs.setVisible(true); var sj_View = new ol.View({ center : ol.proj.transform([ 127.2697, 36.5704 ], 'EPSG:4326', 'EPSG:3857'), zoom : 10, enableRotation: false }); var map_sj = new ol.Map({ target : 'pg-mapview-sejong', layers : [ BASEMAP_GROUP, sidoVectorSj ], controls: ol.control.defaults({attribution: false}).extend([ new ol.control.Attribution({ collapsible: false }) ]), interactions: ol.interaction.defaults({ doubleClickZoom: false, mouseWheelZoom: false, dragPan: true, pinchZoom: true }).extend([ ]), view : sj_View }); map_sj.addLayer(popGridRaster_sj); var map_sig = new ol.Map({ target : 'pg-mapview-sig', layers : [ BASEMAP_GROUP, boundaryVector ], controls: ol.control.defaults({attribution: false}).extend([ new ol.control.Attribution({ collapsible: false }) ]), interactions: ol.interaction.defaults({ doubleClickZoom: false, mouseWheelZoom: true, dragPan: true, pinchZoom: true }).extend([ boundarySelect ]), view : defaultView }); map_sig.addLayer(popSigunguRaster); map_sig.on('click', boundarySelectEvt); var sigunguHighlightOverlay = new ol.layer.Vector({ style: olStyle.selectHover, source: new ol.source.Vector({ format: new ol.format.GeoJSON() }), map: map_sig }); function boundarySelectEvt(e) { var features = boundarySelect.getFeatures().getArray(); var sigCd; if (features.length > 0) { GetFunctionLog('ftp', '2040년 대한민국 인구 트렌드', '2040년 장래인구 분포 조회', ''); sigCd = features[0].getProperties().sig_cd; var view = map_sig.getView(); var viewResolution = defaultView.getResolution(); var source = popSigunguRaster.getSource(); var url = source.getGetFeatureInfoUrl( e.coordinate, viewResolution, view.getProjection(), {'INFO_FORMAT': 'application/json'}); $.ajax({ url: PROXY_URL + url }).done(function (jsonData) { if (jsonData.features.length > 0) { var feature = new ol.format.GeoJSON().readFeature(jsonData.features[0]); sigunguHighlightOverlay.getSource().clear(); sigunguHighlightOverlay.getSource().addFeature(feature); var sidoCd = feature.getProperties().sig_cd.substring(0,2); $("#pg-btn-grid-sido-select").val(sidoCd).prop("selected", true); $("#pg-btn-grid-sido-select").change(); } else { sigunguHighlightOverlay.getSource().clear(); } }); } else { sigunguHighlightOverlay.getSource().clear(); } getSigStackChart(sigCd); getSigPieChart(sigCd); } var gridView = new ol.View({ center : ol.proj.transform([ 128.0292, 36.6332 ], 'EPSG:4326', 'EPSG:3857'), zoom : 7, enableRotation: false }); var map_grid = new ol.Map({ target : 'pg-mapview-grid', layers : [ BASEMAP_GROUP, sidoVectorGrid, analysisVector ], controls: ol.control.defaults({attribution: false}).extend([ new ol.control.Attribution({ collapsible: false }) ]), interactions: ol.interaction.defaults({ doubleClickZoom: false, mouseWheelZoom: true, dragPan: true, pinchZoom: true }).extend([ ]), view : gridView }); map_grid.addLayer(popGridRaster_grid); map_grid.addOverlay(overlay.identify); map_grid.on('click', handleIdentifyPOIInfo); var gridHighlightStyle = new ol.style.Style({ stroke: new ol.style.Stroke({ color: [33,138,4,1], width: 4 }) }); var gridHighlightOverlay = new ol.layer.Vector({ style: gridHighlightStyle, source: new ol.source.Vector({ format: new ol.format.GeoJSON() }), map: map_grid }); /* Grid Map Identify */ function handleIdentifyPOIInfo(evt) { var gridFeatureInfoURL = popGridRaster_grid.getSource().getGetFeatureInfoUrl( evt.coordinate, map_grid.getView().getResolution(), map_grid.getView().getProjection(), { 'INFO_FORMAT': 'application/json', 'STYLES': '', 'LAYERS': 'pop_grid_total', 'QUERY_LAYERS': 'pop_grid_total' } ); $.ajax({ url: PROXY_URL + gridFeatureInfoURL, async: true }).done(function (jsonData) { if (jsonData.features.length > 0) { var feature = new ol.format.GeoJSON().readFeature(jsonData.features[0]); analysisVector.getSource().clear(); if (feature != null) { analysisVector.getSource().addFeature(feature); var element = overlay.identify.getElement(); var coordinate = [feature.getGeometry().getExtent()[2], feature.getGeometry().getExtent()[3]]; var content = document.getElementById('pg-identify-popup-content'); $('#pg-identify-popup-closer').click(); var prop = feature.getProperties(); var showValue; var cr4020m = prop.cr_4020_m; if(cr4020m >= 0){ showValue = ' ' + cr4020m + '%'; } else { showValue = ' ' + cr4020m + '%'; } var result = '' + ''; content.innerHTML = result; overlay.identify.setPosition(coordinate); } else { analysisVector.getSource().clear(); $('#pg-identify-popup-closer').click(); } } else { analysisVector.getSource().clear(); $('#pg-identify-popup-closer').click(); } }); } /** * 팝업창 닫기 이벤트 */ $('#pg-identify-popup-closer').on('click', function(e){ overlay.identify.setPosition(undefined); document.getElementById("pg-identify-popup-closer").blur(); $('#pg-identify-popup').css('left', '-50px'); $('#pg-identify-popup').css('top', 'unset'); return false; }); /* 초기 시도 ComboBox 셋팅*/ var reqSidoList = function() { $.ajax({ url: CONTEXT_PATH + '/api/ctprvnList.json', success:function(res) { try { for (i = 0; i < res.data.length; i++) { $('#pg-btn-busan-sido-select').append( '' ); $('#pg-btn-sejong-sido-select').append( '' ); $('#pg-btn-grid-sido-select').append( '' ); } $("#pg-btn-busan-sido-select option").each(function(idx, item){ if (item.value == '26') { $('#pg-btn-busan-sido-select').find("option:eq("+idx+")").prop("selected", true); $("#pg-btn-busan-sido-select").change(); } }); $(".pg-map-busan-sido-tools").hide(); $("#pg-btn-sejong-sido-select option").each(function(idx, item){ if (item.value == '36') { $('#pg-btn-sejong-sido-select').find("option:eq("+idx+")").prop("selected", true); $("#pg-btn-sejong-sido-select").change(); } }); $(".pg-map-sejong-sido-tools").hide(); //$(".pg-map-grid-sido-tools").hide(); } catch (e) { alert('동기화되지 못한 데이터가 있습니다.') } } }); } reqSidoList(); /** * 부산광역시 시도 선택박스 변경 이벤트 */ $("#pg-btn-busan-sido-select").on('change', function(e) { var sidoCd = e.currentTarget.value; var sidoNm = $("#pg-btn-busan-sido-select :selected").text(); var filter; if(sidoCd == ''){ filter = null; map_bs.getView().fit( sidoVectorBs.getSource().getExtent(), map_bs.getSize() ); }else{ filter = 'sido_cd == ' + sidoCd; var features = sidoVectorBs.getSource().getFeatures(); for (i = 0; i < features.length; i++) { if (features[i].getProperties().ctprvn_cd == sidoCd) { map_bs.getView().fit(features[i].getGeometry().getExtent(), map_bs.getSize()); } } } popGridRaster_bs.getSource().updateParams({ 'CQL_FILTER': filter }); }); /** * 세종특별시 시도 선택박스 변경 이벤트 */ $("#pg-btn-sejong-sido-select").on('change', function(e) { var sidoCd = e.currentTarget.value; var sidoNm = $("#pg-btn-sejong-sido-select :selected").text(); var filter; if(sidoCd == ''){ filter = null; map_sj.getView().fit( sidoVectorSj.getSource().getExtent(), map_sj.getSize() ); }else{ filter = 'sido_cd == ' + sidoCd; var features = sidoVectorSj.getSource().getFeatures(); for (i = 0; i < features.length; i++) { if (features[i].getProperties().ctprvn_cd == sidoCd) { map_sj.getView().fit(features[i].getGeometry().getExtent(), map_sj.getSize()); } } } popGridRaster_sj.getSource().updateParams({ 'CQL_FILTER': filter }); }); /** * GridMap 시도 선택박스 변경 이벤트 */ $("#pg-btn-grid-sido-select").on('change', function(e) { GetFunctionLog('ftp', '2040년 대한민국 인구 트렌드', '시도별 장래인구 분포 조회', ''); var sidoCd = e.currentTarget.value; var sidoNm = $("#pg-btn-grid-sido-select :selected").text(); if (gridHighlightOverlay != null) { if (gridHighlightOverlay.getSource().getFeatures().length > 0) { gridHighlightOverlay.getSource().clear(); } } var filter; if(sidoCd == ''){ filter = null; map_grid.getView().fit( sidoVectorGrid.getSource().getExtent(), map_grid.getSize() ); }else{ filter = 'sido_cd == ' + sidoCd; var features = sidoVectorGrid.getSource().getFeatures(); for (i = 0; i < features.length; i++) { if (features[i].getProperties().ctprvn_cd == sidoCd) { gridHighlightOverlay.getSource().addFeature(features[i]); map_grid.getView().fit(features[i].getGeometry().getExtent(), map_grid.getSize()); } } } popGridRaster_grid.getSource().updateParams({ 'CQL_FILTER': filter }); }); //1000 단위 컴마 function numberWithCommas(x) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } //만단위로 숫자 변경 function numberWithMil(x) { var n; n = x / 10000; return n.toFixed(2); } /** * 우측문자열채우기 * @params * - str : 원 문자열 * - padLen : 최대 채우고자 하는 길이 * - padStr : 채우고자하는 문자(char) */ function rpad(str, padLen, padStr) { if (padStr.length > padLen) { console.log("오류 : 채우고자 하는 문자열이 요청 길이보다 큽니다"); return str + ""; } str += ""; // 문자로 padStr += ""; // 문자로 while (str.length < padLen) str += padStr; str = str.length >= padLen ? str.substring(0, padLen) : str; return str; } /* 기본 chart 생성 */ function getStackChart(){ var barOptions_stacked = { tooltips: { enabled: false }, hover :{ animationDuration:0 }, title: { display: true, text: '2040년 인구 증감 지역 비율', fontFamily: "'KoPub Dotum'", fontColor: '#024b80', fontSize: 15 }, layout: { padding: { left: 0, right: 15, top: 5, bottom: 5 } }, scales: { xAxes: [{ ticks: { fontFamily: "'KoPub Dotum'" }, scaleLabel:{ display:true }, stacked: true, display: false }], yAxes: [{ gridLines: { display:true, color: "#fff", }, ticks: { fontFamily: "'KoPub Dotum'", fontSize:11 }, stacked: true }] }, legend:{ display:true, position: 'bottom', fontColor: '#024b80' }, animation: { onComplete: function () { var chartInstance = this.chart; var ctx = chartInstance.ctx; ctx.textAlign = "center"; ctx.font = "15px KoPub Dotum"; ctx.fillStyle = "#fff"; Chart.helpers.each(this.data.datasets.forEach(function (dataset, i) { var meta = chartInstance.controller.getDatasetMeta(i); Chart.helpers.each(meta.data.forEach(function (bar, index) { data = dataset.data[index]; if(i==0){ ctx.fillText(data + '%', 50, bar._model.y+4); } else { ctx.fillText(data + '%', bar._model.x-25, bar._model.y+4); } }),this) }),this); } }, pointLabelFontFamily : "KoPub Dotum", scaleFontFamily : "KoPub Dotum", }; var chartData = { labels: '', datasets: [{ label: '인구감소', data: [81], backgroundColor: "#99CCFF", hoverBackgroundColor: "rgba(46,185,235,1)" },{ label: '인구증가', data: [19], backgroundColor: "#FF9999", hoverBackgroundColor: "rgba(140,85,100,1)" }] }; if (window.myStackChart != undefined) { window.myStackChart.destroy(); } var ctx = document.getElementById('stackChart').getContext('2d'); window.myStackChart = new Chart(ctx, { type: 'horizontalBar', data: chartData, options: barOptions_stacked }); } getStackChart(); function getScatterChart(){ $.ajax({ url: CONTEXT_PATH + '/api/futurepop/sigPopInfoForScatter.json', dataType: 'json', success:function(res) { //console.log(res); try { var labels = res.data.LABEL; var popInfos = res.data.POPINFO; var popDatasets = []; for(var i = 0; i < labels.length; i++){ var data = []; for(var j = 0; j < popInfos.length; j++){ if(labels[i].sd_cd == popInfos[j].sd_cd){ data.push({x: parseFloat(popInfos[j].pop40), y: parseFloat(popInfos[j].p40_oldr), id: j}); } } var borderColor; var backgroundColor; if(labels[i].sd_cd == 11){//서울 borderColor = '#339999'; backgroundColor = '#339999'; }else if(labels[i].sd_cd == 26){//부산 borderColor = '#FFCC66'; backgroundColor = '#FFCC66'; }else if(labels[i].sd_cd == 27){//대구 borderColor = '#66CC66'; backgroundColor = '#66CC66'; }else if(labels[i].sd_cd == 28){//인천 borderColor = '#FF9999'; backgroundColor = '#FF9999'; }else if(labels[i].sd_cd == 29){//광주 borderColor = '#669933'; backgroundColor = '#669933'; }else if(labels[i].sd_cd == 30){//대전 borderColor = '#CC9933'; backgroundColor = '#CC9933'; }else if(labels[i].sd_cd == 31){//울산 borderColor = '#CC3333'; backgroundColor = '#CC3333'; }else if(labels[i].sd_cd == 36){//세종 borderColor = '#669999'; backgroundColor = '#669999'; }else if(labels[i].sd_cd == 41){//경기 borderColor = '#99CCFF'; backgroundColor = '#99CCFF'; }else if(labels[i].sd_cd == 42){//강원 borderColor = '#336699'; backgroundColor = '#336699'; }else if(labels[i].sd_cd == 43){//충북 borderColor = '#996699'; backgroundColor = '#996699'; }else if(labels[i].sd_cd == 44){//충남 borderColor = '#FFCCCC'; backgroundColor = '#FFCCCC'; }else if(labels[i].sd_cd == 45){//전북 borderColor = '#999999'; backgroundColor = '#999999'; }else if(labels[i].sd_cd == 46){//전남 borderColor = '#666666'; backgroundColor = '#666666'; }else if(labels[i].sd_cd == 47){//경북 borderColor = '#FF9966'; backgroundColor = '#FF9966'; }else if(labels[i].sd_cd == 48){//경남 borderColor = '#CC6600'; backgroundColor = '#CC6600'; }else if(labels[i].sd_cd == 50){//제주 borderColor = '#CC6699'; backgroundColor = '#CC6699'; } var pointStyle; if(labels[i].sd_type == '수도권'){ pointStyle = 'star'; } else { pointStyle = 'circle'; } popDatasets.push({ label: labels[i].sd, data: data, pointRadius: 4, pointStyle: pointStyle, borderColor: borderColor, backgroundColor: backgroundColor}); } var options = { responsive: true, maintainAspectRatio: false, legend: { position: "right", align: "middle", fontFamily: "'KoPub Dotum'", fontColor: '#024b80' }, title: { display: true, text: '2040년 장래인구 추계와 고령인구 비율 분포(시군구)', fontFamily: "'KoPub Dotum'", fontColor: '#024b80', fontSize: 15 }, scales: { yAxes: [{ scaleLabel: { display: true, labelString: '2040년 고령인구비율 전망(65세이상 인구, %)', fontFamily: "'KoPub Dotum'", fontColor: '#024b80' } }], xAxes: [{ scaleLabel: { display: true, labelString: '2040년 장래인구추계(시군구 단위 인구전망)', fontFamily: "'KoPub Dotum'", fontColor: '#024b80' } }], }, tooltips: { displayColors: false, callbacks: { label: function(tooltipItems, data) { //var output = ""; var index = tooltipItems.index; var datasetIndex = tooltipItems.datasetIndex; var dataset = data.datasets[datasetIndex]; var datasetItem = dataset.data[index]; var popInfo = popInfos[datasetItem.id]; var output = ["·지자체: " + popInfo.sdsgg]; output.push("·2040년 고령인구비율: " + popInfo.p40_oldr + "%"); output.push("·2040년 장래인구전망: " + numberWithCommas(popInfo.pop40) + "명"); return output; } } } }; var ctx = document.getElementById('scatterChart').getContext('2d'); window.myScatterChart = new Chart(ctx, { type: 'scatter', data: { datasets: popDatasets }, options: options }); } catch (e) { } } }); } getScatterChart(); var rankData; function handleClick(evt) { var activeElement = mySigStackChart.getElementAtEvent(evt); if(activeElement.length > 0){ var selBar = activeElement[0]; var selBarIdx = selBar._chart.active[0]._index; var sig_cd = rankData[selBarIdx].sig_cd; var features = boundaryVector.getSource().getFeatures(); if(features.length > 0){ var feature; for(var i = 0; i < features.length; i++){ if(features[i].getProperties().sig_cd == sig_cd){ feature = features[i]; break; } } if(feature != null && feature != undefined){ sigunguHighlightOverlay.getSource().clear(); sigunguHighlightOverlay.getSource().addFeature(feature); var sidoCd = sig_cd.substring(0,2); $("#pg-btn-grid-sido-select").val(sidoCd).prop("selected", true); $("#pg-btn-grid-sido-select").change(); getSigStackChart(sig_cd); getSigPieChart(sig_cd); } } } } var selSigStackChartSigCd = ''; function getSigStackChart(sig_cd){ selSigStackChartSigCd = sig_cd; $.ajax({ url: CONTEXT_PATH + '/api/futurepop/sigPopInfoForBarScatter.json', dataType: 'json', data: { sigCd: sig_cd }, success:function(res) { console.log(res); try { var popTitle; var popLabels = []; var popDatasets = []; var popColors; rankData = res.data; if(selSigStackChartSigCd == '' || selSigStackChartSigCd == undefined){ popTitle = '2040년 인구 전망'; popColors = '#024b80'; for(var i = 0; i < res.data.length; i++){ popLabels.push('[' + res.data[i].rank + '] ' + res.data[i].sdsgg); popDatasets.push(numberWithMil(res.data[i].pop40)); } } else { //popTitle = '2040년 장래인구 추계(' + res.data[0].sig_kor_nm + ')'; popTitle = '2040년 인구 구조와 변화'; var colors = []; for(var i = 0; i < res.data.length; i++){ popLabels.push('[' + res.data[i].rank + '] ' + res.data[i].sdsgg); popDatasets.push(numberWithMil(res.data[i].pop40)); if(i == 0) colors.push('#ff0080'); else colors.push('#024b80'); } popColors = colors; } $('#popOldMainTitle').html(popTitle); var chartData = { labels: popLabels, datasets: [{ data: popDatasets, backgroundColor: popColors, hoverBackgroundColor: "rgba(46,185,235,1)" }] }; var barOptions_stacked = { title: { display: false, text: popTitle, fontSize: 18 }, tooltips: { enabled: false }, hover :{ animationDuration:0 }, scales: { xAxes: [{ ticks: { beginAtZero:true, display: false }, gridLines: { display:false }, scaleLabel:{ display:false }, stacked: true }], yAxes: [{ display: true, position: 'left', gridLines: { display:false }, ticks: { mirror: true, padding: 200 }, scaleLabel:{ display:false }, stacked: true }] }, layout: { padding: { left : 200 } }, legend:{ display:false }, animation: { onComplete: function () { var chartInstance = this.chart; var ctx = chartInstance.ctx; ctx.textAlign = "left"; ctx.font = "12px KoPub Dotum"; //ctx.fillStyle = "#fff"; Chart.helpers.each(this.data.datasets.forEach(function (dataset, i) { var meta = chartInstance.controller.getDatasetMeta(i); Chart.helpers.each(meta.data.forEach(function (bar, index) { data = dataset.data[index]; if(i==0){ ctx.fillText(data, 175, bar._model.y+4); } else { ctx.fillText(data, bar._model.x-25, bar._model.y+4); } }),this) }),this); } }, onClick: handleClick //pointLabelFontFamily : "Quadon Extra Bold", //scaleFontFamily : "Quadon Extra Bold", }; if (window.mySigStackChart != undefined) { window.mySigStackChart.destroy(); } var ctx = document.getElementById('sigStackChart').getContext('2d'); window.mySigStackChart = new Chart(ctx, { type: 'horizontalBar', data: chartData, options: barOptions_stacked }); } catch (e) { } } }); } getSigStackChart(); function getSigPieChart(sig_cd){ $.ajax({ url: CONTEXT_PATH + '/api/futurepop/sigPopInfoForDoughnut.json', dataType: 'json', data: { sigCd: sig_cd }, success:function(res) { //console.log(res); try { if(res.data == null){ $('#popOldNoInfo').show(); $('#popOldInfo').hide(); $('#popOldTitle').html('2040년 인구 구조와 변화'); return; } else { $('#popOldNoInfo').hide(); $('#popOldInfo').show(); $('#popOldTitle').html("2040년 " + res.data.sig_kor_nm + " 인구 구조와 변화"); } $('#popChangeOld').html(res.data.change_old + '%'); $('#pop40').html(numberWithCommas(res.data.pop40) + '명'); $('#popCr4020m').html(res.data.cr_4020_m + '%'); if(res.data.cr_4020_m > 0){ // $('#upPopIcon').show(); // $('#downPopIcon').hide(); $("#upPopIcon").css("display", ""); $("#downPopIcon").css("display", "none"); } else { // $('#upPopIcon').hide(); // $('#downPopIcon').show(); $("#upPopIcon").css("display", "none"); $("#downPopIcon").css("display", ""); } var datas = { labels: ["유소년인구 비율", "생산가능인구 비율", "고령인구 비율",], datasets: [{ data: [res.data.p40_014r, res.data.p40_1564r, res.data.p40_oldr], borderColor: ['#999966', '#006699', '#003366'], backgroundColor: ['#999966', '#006699', '#003366'], borderWidth: 1 }]}; if (window.mySigPieChart != undefined) { //window.mySigPieChart.destroy(); window.mySigPieChart.data = datas; window.mySigPieChart.update(); } else { var ctx = document.getElementById('sigPieChart').getContext('2d'); window.mySigPieChart = new Chart(ctx, { type: 'doughnut', data: datas, options: { legend:{ display:false }, cutoutPercentage: 20, responsive: true, plugins: { // labels: { //// render: function (args) { //// return args.label + ', ' + args.value + '%'; //// }, //// arc: true, //// fontColor: '#fff', //// fontFamily: '"KoPub Dotum"' // // } labels: [ { render: 'label', position: 'outside', arc: true }, { render: function (args) { return args.value + '%'; }, fontColor: '#fff' } ] } } }); } } catch (e) { } } }); } getSigPieChart(''); /** * 시군구 지도 탭 버튼 클릭시 이벤트 */ $('.pg-btn-tabmenuitem').on('click', function(e) { $('.pg-btn-tabmenuitem').removeClass('btn-info'); if ($(this).data('id') == 'current') { $(this).addClass('btn-info'); $(this).css("background-color", "#1282b0"); $("#btnIncrease").css("background-color", ""); popSigunguRaster.getSource().updateParams({ 'STYLES': 'pop40_sigungu_total' }); getSigLegend('장래인구현황', 'pop40_sigungu_total'); } else if ($(this).data('id') == 'increase') { $(this).addClass('btn-info'); $(this).css("background-color", "#1282b0"); $("#btnCurrent").css("background-color", ""); popSigunguRaster.getSource().updateParams({ 'STYLES': 'pop_sigungu_rate' }); getSigLegend('장래인구증감 (시군구, %)', 'pop_sigungu_rate'); } }); /** * GRID 지도 탭 버튼 클릭시 이벤트 */ $('.pg-btn-grid-tabmenuitem').on('click', function(e) { $('.pg-btn-grid-tabmenuitem').removeClass('btn-info'); if ($(this).data('id') == 'gridCurrent') { $(this).addClass('btn-info'); $(this).css("background-color", "#1282b0"); $("#btnGridIncrease").css("background-color", ""); popGridRaster_grid.getSource().updateParams({ 'STYLES': 'pop40_grid_total' }); getGridLegend('장래인구추계(500m 격자, 명)', 'pop40_grid_total'); } else if ($(this).data('id') == 'gridIncrease') { $(this).addClass('btn-info'); $(this).css("background-color", "#1282b0"); $("#btnGridCurrent").css("background-color", ""); popGridRaster_grid.getSource().updateParams({ 'STYLES': 'pop_grid_rate' }); getGridLegend('장래인구증감 (500m 격자, %)', 'pop_grid_rate'); } }); //부산 맵 확대 이벤트 $('#btnExpandBS').on('click', function(e) { $('#pg-mapview-busan').toggleClass('fullscreen'); if($('#pg-mapview-busan').hasClass("fullscreen")){ $(".prev-slide").hide(); $(".next-slide").hide(); $(".dot").hide(); $(".pg-map-busan-sido-tools").show(); $('#expandArrowsBS').removeClass('fa-expand-arrows-alt'); $('#expandArrowsBS').addClass('fa-compress-arrows-alt'); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".prev-slide").show(); $(".next-slide").show(); $(".dot").show(); $(".pg-map-busan-sido-tools").hide(); $('#expandArrowsBS').removeClass('fa-compress-arrows-alt'); $('#expandArrowsBS').addClass('fa-expand-arrows-alt'); $("#btnGoHome").show(); $("#btnExplainReport").show(); } map_bs.updateSize(); }); //세종 맵 확대 이벤트 $('#btnExpandSJ').on('click', function(e) { $('#pg-mapview-sejong').toggleClass('fullscreen'); if($('#pg-mapview-sejong').hasClass("fullscreen")){ $(".prev-slide").hide(); $(".next-slide").hide(); $(".dot").hide(); $(".pg-map-sejong-sido-tools").show(); $('#expandArrowsSJ').removeClass('fa-expand-arrows-alt'); $('#expandArrowsSJ').addClass('fa-compress-arrows-alt'); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".prev-slide").show(); $(".next-slide").show(); $(".dot").show(); $(".pg-map-sejong-sido-tools").hide(); $('#expandArrowsSJ').removeClass('fa-compress-arrows-alt'); $('#expandArrowsSJ').addClass('fa-expand-arrows-alt'); $("#btnGoHome").show(); $("#btnExplainReport").show(); } map_sj.updateSize(); }); //Scatter Graph 확대 이벤트 $('#btnExpandScatter').on('click', function(e) { $('#scatterContanier').toggleClass('fullscreen'); if($('#scatterContanier').hasClass("fullscreen")){ $(".prev-slide").hide(); $(".next-slide").hide(); $(".dot").hide(); $('#expandScatter').removeClass('fa-expand-arrows-alt'); $('#expandScatter').addClass('fa-compress-arrows-alt'); $('#scatterContanier').css("position", ""); $('#scatterContanier').css("height", "100%"); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".prev-slide").show(); $(".next-slide").show(); $(".dot").show(); $('#expandScatter').removeClass('fa-compress-arrows-alt'); $('#expandScatter').addClass('fa-expand-arrows-alt'); $('#scatterContanier').css("position", "relative"); $('#scatterContanier').css("height", "75%"); $("#btnGoHome").show(); $("#btnExplainReport").show(); } }); //시군구 맵 확대 이벤트 $('#btnExpandSig').on('click', function(e) { $('#pg-mapview-sig').toggleClass('fullscreen'); if($('#pg-mapview-sig').hasClass("fullscreen")){ $(".prev-slide").hide(); $(".next-slide").hide(); $(".dot").hide(); $('#expandArrowsSig').removeClass('fa-expand-arrows-alt'); $('#expandArrowsSig').addClass('fa-compress-arrows-alt'); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".prev-slide").show(); $(".next-slide").show(); $(".dot").show(); $('#expandArrowsSig').removeClass('fa-compress-arrows-alt'); $('#expandArrowsSig').addClass('fa-expand-arrows-alt'); $("#btnGoHome").show(); $("#btnExplainReport").show(); } map_sig.updateSize(); }); //GRID 맵 확대 이벤트 $('#btnExpandGrid').on('click', function(e) { $('#pg-mapview-grid').toggleClass('fullscreen'); if($('#pg-mapview-grid').hasClass("fullscreen")){ //$('html, body').stop().animate({scrollTop: 0}, 10); $(".prev-slide").hide(); $(".next-slide").hide(); $(".dot").hide(); $('#expandArrowsGrid').removeClass('fa-expand-arrows-alt'); $('#expandArrowsGrid').addClass('fa-compress-arrows-alt'); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".prev-slide").show(); $(".next-slide").show(); $(".dot").show(); $('#expandArrowsGrid').removeClass('fa-compress-arrows-alt'); $('#expandArrowsGrid').addClass('fa-expand-arrows-alt'); $("#btnGoHome").show(); $("#btnExplainReport").show(); } map_grid.updateSize(); }); //Horizontal Scatter Bar Graph 확대 이벤트 $('#btnExpandBar').on('click', function(e) { $('#barContanier').toggleClass('fullscreen'); if($('#barContanier').hasClass("fullscreen")){ $(".dot").hide(); $('#expandArrowsBar').removeClass('fa-expand-arrows-alt'); $('#expandArrowsBar').addClass('fa-compress-arrows-alt'); $('#barContanier').css("position", ""); $('#barContanier').css("height", "100%"); //$('#sigStackChart').setAttribute("height", '1000'); $("#btnGoHome").hide(); $("#btnExplainReport").hide(); } else { $(".dot").show(); $('#expandArrowsBar').removeClass('fa-compress-arrows-alt'); $('#expandArrowsBar').addClass('fa-expand-arrows-alt'); $('#barContanier').css("position", "relative"); $('#barContanier').css("height", "50vh"); $("#btnGoHome").show(); $("#btnExplainReport").show(); } }); //Doughnut Graph 확대 이벤트 $('#btnExpandDoughnut').on('click', function(e) { $('#doughnutContanier').toggleClass('fullscreen'); if($('#doughnutContanier').hasClass("fullscreen")){ $(".dot").hide(); $('#expandArrowsDoughnut').removeClass('fa-expand-arrows-alt'); $('#expandArrowsDoughnut').addClass('fa-compress-arrows-alt'); $('#doughnutContanier').css("position", ""); $('#doughnutContanier').css("height", "100%"); $('#sigPieChart').css("height", ""); $("#btnGoHome").hide(); $('#popOldTitle').css("font-size", "24px"); $('#doughnutTbl1').css("font-size", "20px"); $('#doughnutTbl2').css("font-size", "20px"); $('.font-weight-bold').css("font-size", "30px"); $('#upPopIcon').css("width", "25px"); $('#upPopIcon').css("height", "30px"); $('#downPopIcon').css("width", "25px"); $('#downPopIcon').css("height", "30px"); $('#upOldPopIcon').css("font-size", "30px"); $('#doughnutSubTitle').css("font-size", "20px"); $('#doughnutSubTitle2').css("font-size", "20px"); $('#imgOldPop').css("width", "60px"); $('#imgOldPop').css("height", "60px"); $("#btnExplainReport").hide(); } else { $(".dot").show(); $('#expandArrowsDoughnut').removeClass('fa-compress-arrows-alt'); $('#expandArrowsDoughnut').addClass('fa-expand-arrows-alt'); $('#doughnutContanier').css("position", "relative"); $('#doughnutContanier').css("height", "30vh"); $('#sigPieChart').css("height", "100%"); $("#btnGoHome").show(); $('#popOldTitle').css("font-size", "17px"); $('#doughnutTbl1').css("font-size", "10px"); $('#doughnutTbl2').css("font-size", "10px"); $('.font-weight-bold').css("font-size", "1rem"); $('#upPopIcon').css("width", "25px"); $('#upPopIcon').css("height", "30px"); $('#downPopIcon').css("width", "25px"); $('#downPopIcon').css("height", "30px"); $('#upOldPopIcon').css("font-size", "1rem"); $('#doughnutSubTitle').css("font-size", "10px"); $('#doughnutSubTitle2').css("font-size", "10px"); $('#imgOldPop').css("width", "30px"); $('#imgOldPop').css("height", "40px"); $("#btnExplainReport").show(); } }); function getBSLegend(){ $('#pg-busan-legend > .card-body').empty(); $('#pg-busan-legend > .card-body').append('

장래인구증감 (500m 격자, %)

' + ''); $('#pg-busan-legend').show(); } $('#pg-busan-legend .expand').on('click', function(e) { $('#pg-busan-legend .card-body').toggle(); }); getBSLegend(); function getSJLegend(){ $('#pg-sejong-legend > .card-body').empty(); $('#pg-sejong-legend > .card-body').append('

장래인구증감 (500m 격자, %)<

' + ''); $('#pg-sejong-legend').show(); } $('#pg-sejong-legend .expand').on('click', function(e) { $('#pg-sejong-legend .card-body').toggle(); }); getSJLegend(); function getSigLegend(title, style){ $('#pg-sig-legend > .card-body').empty(); $('#pg-sig-legend > .card-body').append('

' + title + '

' + ''); $('#pg-sig-legend').show(); } $('#pg-sig-legend .expand').on('click', function(e) { $('#pg-sig-legend .card-body').toggle(); }); getSigLegend('2040년 장래인구 밀도(명/km²)', 'pop40_sigungu_total'); function getGridLegend(title, style){ $('#pg-grid-legend > .card-body').empty(); $('#pg-grid-legend > .card-body').append('

' + title + '

' + ''); $('#pg-grid-legend').show(); } $('#pg-grid-legend .expand').on('click', function(e) { $('#pg-grid-legend .card-body').toggle(); }); getGridLegend('장래인구추계(500m 격자, 명)', 'pop40_grid_total'); $('#btnExpandBS').on('click', function(e) { }); $('#btnExplainReport').on('click', function(e) { $('#explainReport').show(); $(".dot").hide(); $('#expandArrowsBar').removeClass('fa-expand-arrows-alt'); $('#expandArrowsBar').addClass('fa-compress-arrows-alt'); }); $('#btnExplainReport2').on('click', function(e) { $('#explainReport').show(); $(".dot").hide(); $('#expandArrowsBar').removeClass('fa-expand-arrows-alt'); $('#expandArrowsBar').addClass('fa-compress-arrows-alt'); }); $('#btnCloseBtn').on('click', function(e) { $('#explainReport').hide(); $(".dot").show(); $('#expandArrowsBar').removeClass('fa-compress-arrows-alt'); $('#expandArrowsBar').addClass('fa-expand-arrows-alt'); }); });