let lang = 'null';
var owsLayer, owsStyle = '';
var dataVector;
var defaultFeature;
var seismicStatusChart;
var layer_info = {
grid_pop_stats_1: {
'layer': 'final_attribute', 'style': 'a_0_200', 'title': '격자기반 인구통계 - 인구구조',
'owsType': 'WMS'
},
grid_pop_stats_2: {
'layer': 'final_attribute', 'style': 'pop_old_r', 'title': '격자기반 인구통계 - 고령 인구 비율',
'owsType': 'WMS'
},
grid_pop_stats_3: {
'layer': 'final_attribute', 'style': 'pop_chng', 'title': '격자기반 인구통계 - 인구 변화율',
'owsType': 'WMS'
},
grid_bldg_stats_1: {
'layer': 'final_attribute', 'style': 'bld_old_r', 'title': '격자기반 건물통계 - 노후 건축물 비율',
'owsType': 'WMS'
},
grid_bldg_stats_2: {
'layer': 'final_attribute', 'style': 'avg_arch_a', 'title': '격자기반 건물통계 - 평균 건물 면적',
'owsType': 'WMS'
},
grid_bldg_stats_3: {
'layer': 'final_attribute', 'style': 'resi_rate', 'title': '격자기반 건물통계 - 주거용 건물 비율',
'owsType': 'WMS'
},
demographic_diagnosis: {
'layer': 'final_demographic', 'style': 'demographic_diagnosis', 'title': '인구 쇠퇴 정도',
'owsType': 'WMS'
},
physical_diagnosis: {
'layer': 'final_physical', 'style': 'physical_diagnosis', 'title': '물리적 노후 정도',
'owsType': 'WMS'
},
declined_diagnosis: {
'layer': 'final_declined', 'style': 'declined_diagnosis', 'title': '쇠퇴지역의 산출',
'owsType': 'WMS'
},
regeneration_newdeal_area: {
'layer': 'regeneration_newdeal_area', 'style': '', 'title': '현행 도시재생뉴딜 시범사업지구와의 비교',
'owsType': 'WFS'
},
earthquake_bldg: {
'layer': 'eq_buld_grid', 'style': 'eq_buld_grid', 'title': '내진설계 건축물 비율',
'owsType': 'WMS'
}
};
var boundaryRaster = new ol.layer.Tile({
title: '시도 경계',
visible: false,
source: new ol.source.TileWMS({
url: GISSERVER_URL,
params: {
format: 'image/png',
version: '1.3.0',
tiled: true,
//layers: 'pinogio:bnd_sido_pg_2016',
layers: 'pinogio:tl_scco_ctprvn_201904'//,
//styles: 'bnd_sido_pg_2016'
}
})
});
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:bnd_sido_pg_2016&maxFeatures=50&outputFormat=application%2Fjson',
url : PROXY_URL + GISSERVER_URL + '?service=WFS&version=1.0.0&request=GetFeature&typeName=pinogio:tl_scco_ctprvn_201904_s&outputFormat=application/json',
format : new ol.format.GeoJSON()
})
});
var boundarySelect = new ol.interaction.Select({
condition: ol.events.condition.pointerMove,
layers: [boundaryVector]
});
var tiledWMS = new ol.layer.Tile({
title: '격자기반 인구통계',
visible: false,
opacity: .7,
source: new ol.source.TileWMS({
url: GISSERVER_URL,
params: {
format: 'image/png',
version: '1.3.0',
tiled: true
//layers: 'pinogio:final_attribute',
//styles: 'a_0_200',
//_t: new Date().getTime()
}
})
});
var map = new ol.Map({
target : 'map',
layers : [
BASEMAP_GROUP,
boundaryVector,
boundaryRaster,
tiledWMS
],
controls: ol.control.defaults({attribution: false}).extend([
new ol.control.Attribution({
collapsible: false
})
//, new ol.control.LayerSwitcher()
]),
interactions: ol.interaction.defaults({
doubleClickZoom: false,
mouseWheelZoom: true,
dragPan: true,
pinchZoom: true
}).extend([
boundarySelect
]),
view : new ol.View({
center : ol.proj.transform([ 128.0292, 36.6332 ], 'EPSG:4326', 'EPSG:3857'),
zoom : 7,
enableRotation: false
})
});
function basemapSwitcher(id) {
var array = map.getLayerGroup().getLayers().getArray();
for (var i in array) {
if (array[i].get('id') == 'baseGroup') {
array = array[i].getLayers().getArray();
for (var j in array) {
if (array[j].get('id') == id) {
array[j].setVisible(true);
} else {
array[j].setVisible(false);
}
}
break;
}
}
}
$('.pg-basemap-item').on('click', function(e) {
basemapSwitcher(e.currentTarget.value);
});
//$('#map').data('map', map);
//var map = $('#map').data('map');
// 버튼 새로고침
function reload() {
window.location.reload();
}
/**
* 경계데이터 선택 이벤트
* @param e
* @returns
*/
function boundarySelectEvt(e) {
var features = boundarySelect.getFeatures().getArray();
if (features.length > 0) {
var sidoCd = features[0].getProperties().ctprvn_cd;
//var sidoCd = features[0].getProperties().sido_cd;
$("#mapBndSidoSelect").val(sidoCd).prop("selected", true);
$("#mapBndSidoSelect").change();
}
}
function boundarySelectOn() {
map.on('click', boundarySelectEvt);
}
function boundarySelectUn() {
map.un('click', boundarySelectEvt);
}
$.ajax({
url: CONTEXT_PATH + '/api/bndSidoList.json',
success:function(res) {
try {
for (i = 0; i < res.data.length; i++) {
$('#mapBndSidoSelect').append(
''
);
}
} catch (e) {
}
}
});
// 메뉴 변경시 이벤트
var onSelectedMenuFnc = function(e) {
// if (overlay != null) {
// overlay.setPosition(undefined);
// closer.blur();
// }
if (e == undefined) {
e = $('#dmr-menubar button[data-menutype=' + storyType + ']');
}
$('.dmr-menubar button').removeClass('btn-info');
$('.dmr-menubar button').addClass('btn-outline-light');
e.removeClass('btn-outline-light');
e.addClass('btn-info');
var selectedMenu = e.data('menutype');
var pageURL = '';
var owsLayerInfo = null;
//현행 도시재생뉴딜시범사업지구와의 비교에서 쇠퇴지역 격자를 보기 위한 레이어 정
var declinedInfo = null;
if (highlightOverlay != null) {
highlightOverlay.getSource().clear();
}
$('#mapIdentifyContentView').html('
격자를 선택하여 정보를 확인하세요.');
$('.mapIdentifyContentArea').hide();
if (selectedMenu == 'grid_pop_stats') {
pageURL = CONTEXT_PATH + '/declined/sub/gridPopStatsPage';
owsLayerInfo = layer_info.grid_pop_stats_1;
storyType = 'grid_pop_stats';
storyTypeSub = 'grid_pop_stats_1';
} else if (selectedMenu == 'grid_bldg_stats') {
pageURL = CONTEXT_PATH + '/declined/sub/gridBldgStatsPage';
owsLayerInfo = layer_info.grid_bldg_stats_1;
storyType = 'grid_bldg_stats';
storyTypeSub = 'grid_bldg_stats_1';
} else if (selectedMenu == 'demographic_diagnosis') {
pageURL = CONTEXT_PATH + '/declined/sub/demographicDiagnosisPage';
owsLayerInfo = layer_info.demographic_diagnosis;
storyType = 'demographic_diagnosis';
} else if (selectedMenu == 'physical_diagnosis') {
pageURL = CONTEXT_PATH + '/declined/sub/physicalDiagnosisPage';
owsLayerInfo = layer_info.physical_diagnosis;
storyType = 'physical_diagnosis';
} else if (selectedMenu == 'declined_diagnosis') {
pageURL = CONTEXT_PATH + '/declined/sub/declinedDiagnosisPage';
owsLayerInfo = layer_info.declined_diagnosis;
storyType = 'declined_diagnosis';
} else if (selectedMenu == 'regeneration_newdeal_area') {
pageURL = CONTEXT_PATH + '/declined/sub/regenerationNewdealAreaPage';
owsLayerInfo = layer_info.regeneration_newdeal_area;
storyType = 'regeneration_newdeal_area';
declinedInfo = layer_info.declined_diagnosis;
} //else if (selectedMenu == 'earthquake_bldg') {
//pageURL = CONTEXT_PATH + '/declined/sub/regenerationNewdealAreaPage';
//owsLayerInfo = layer_info.regeneration_newdeal_area;
//storyType = 'earthquake_bldg';
//}
if (pageURL == '') {
return;
} else {
window.history.pushState('', '', CONTEXT_PATH + '/declined/report?story_type=' + selectedMenu);
}
$.ajax({
url: pageURL,
success:function(data) {
try {
$('#content').html(data);
if (owsLayerInfo.owsType == 'WMS') {
tiledWMS.set('title', owsLayerInfo.title);
tiledWMS.getSource().updateParams({
'LAYERS': owsLayerInfo.layer, 'STYLES': owsLayerInfo.style
});
sidoNm == '' ? tiledWMS.setVisible(false) : tiledWMS.setVisible(true);
sidoNm == '' ? boundaryVector.setVisible(true) : boundaryVector.setVisible(false);
if (dataVector != undefined) {
dataVector.setVisible(false);
}
$('.mapLegend > .card-body').empty();
$('.mapLegend > .card-body').append('
');
$('.mapLegend').show();
} else if (owsLayerInfo.owsType == 'WFS') {
$('.mapLegend > .card-body').empty();
$('.mapLegend').hide();
boundaryVector.setVisible(false);
tiledWMS.setVisible(false);
//현행 도시재생뉴딜 시범사업지구와의 비교에서 쇠퇴지역 격자 표현을 위하여 추가
if(owsLayerInfo.layer == 'regeneration_newdeal_area'){
tiledWMS.set('title', declinedInfo.title);
tiledWMS.getSource().updateParams({
'LAYERS': declinedInfo.layer, 'STYLES': declinedInfo.style
});
sidoNm == '' ? tiledWMS.setVisible(false) : tiledWMS.setVisible(true);
sidoNm == '' ? boundaryVector.setVisible(true) : boundaryVector.setVisible(false);
//if (dataVector != undefined) {
// dataVector.setVisible(false);
//}
$('.mapLegend > .card-body').empty();
$('.mapLegend > .card-body').append('
');
$('.mapLegend').show();
}
}
} catch (e) {
console.log(e);
alert('문제가 발생하였습니다. 페이지를 다시 로드해주세요.')
}
}
});
}
// 리포트 메뉴 클릭시 이벤트
$('.dmr-menubar button').on('click', function(e) {
onSelectedMenuFnc($(this));
});
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
// 시도 선택시 위치 이동
$('#mapBndSidoSelect').on('change', function(e) {
GetFunctionLog('sei', '우리 동네 내진설계 건물현황', '시도별 내진설계 정보 조회', '총 건축물 수,내진설계 건축물 비율,내진설계 건축물 수,내진설계 미대상 건축물 수,내진설계 판정불가 건축물 수,총 인구 수');
sidoCd = e.target.value;
sidoNm = $('#mapBndSidoSelect :selected').text();
if (highlightOverlay != null) {
if (highlightOverlay.getSource().getFeatures().length > 0) {
highlightOverlay.getSource().clear();
}
}
if (sidoNm == '전국') {
boundarySelectOn();
gridIdentifyUn();
map.getView().fit(boundaryVector.getSource().getExtent(), map.getSize());
tiledWMS.setVisible(false);
boundaryVector.setVisible(true);
boundaryRaster.getSource().updateParams({
'cql_filter': null
});
boundaryRaster.setVisible(false);
} else {
boundarySelectUn();
gridIdentifyOn();
var features = boundaryVector.getSource().getFeatures();
for (i = 0; i < features.length; i++) {
//if (features[i].getProperties().sido_nm == sidoNm) {
if (features[i].getProperties().ctp_kor_nm == sidoNm) {
map.getView().fit(features[i].getGeometry().getExtent(), map.getSize());
boundaryVector.setVisible(false);
boundaryRaster.getSource().updateParams({
'cql_filter': "ctp_kor_nm = '"+ sidoNm +"'"
});
boundaryRaster.setVisible(true);
tiledWMS.setVisible(true);
if (storyType != 'earthquake_bldg') {
tiledWMS.getSource().updateParams({
'cql_filter': "sido_nm = '"+ sidoNm +"'"
});
} else {
tiledWMS.getSource().updateParams({
'cql_filter': "sd_kor_nmf = '"+ sidoNm +"'"
});
}
break;
}
}
}
if (storyType == 'regeneration_newdeal_area') {
//현행 도시재생뉴딜 시범사업지구와의 비교에서 쇠퇴지역 격자 표현을 위하여 주석처리
//boundaryVector.setVisible(false);
//tiledWMS.setVisible(false);
}
// if (overlay != null) {
// overlay.setPosition(undefined);
// closer.blur();
// }
if (storyType == 'grid_pop_stats') {
if (storyTypeSub == 'grid_pop_stats_1') {
if ( $('#myChart1').length > 0 ) {
chart.destroy();
}
if (sidoNm == '전국') {
makePopChart();
} else {
makePopChart(sidoNm);
}
} else if (storyTypeSub == 'grid_pop_stats_2') {
showChart('', sidoNm, [], ['popChng', 'popOldR'], ['인구변화율', '고령인구비율'], '인구통계', true);
} else if (storyTypeSub == 'grid_pop_stats_3') {
showChart('', sidoNm, [], ['popChng', 'popOldR'], ['인구변화율', '고령인구비율'], '인구통계', true);
}
} else if (storyType == 'grid_bldg_stats') {
showChart('', sidoNm, [], ['resiRate', 'avgArchA', 'bldOldR'],
['주거용건물비율', '평균건물면적', '노후건축물비율'], '건물통계', true);
if (storyTypeSub == 'grid_bldg_stats_1') {
} else if (storyTypeSub == 'grid_bldg_stats_2') {
} else if (storyTypeSub == 'grid_bldg_stats_3') {
}
} else if (storyType == 'demographic_diagnosis') {
showChart2('demographicArea.json', '인구 쇠퇴 지역 면적 비율', 'demographic_per');
showChart('', sidoNm, [], ['popChng', 'popOldR'], ['인구변화율', '고령인구비율'], '인구통계', true);
} else if (storyType == 'physical_diagnosis') {
showChart2('physicalArea.json', '건물 노후 지역 면적 비율', 'physical_per');
showChart('', sidoNm, [], ['avgArchA', 'bldOldR'],
['평균건물면적', '노후건축물비율'], '건물 노후 지역 통계', true);
} else if (storyType == 'declined_diagnosis') {
showDeclinedChart(sidoNm);
} else if (storyType == 'regeneration_newdeal_area') {
} else if (storyType == 'earthquake_bldg') { //시도별 내진설계 건축물 비율 통계
$('#seismicGridStatus').hide();
if(sidoNm == '전국'){
$('#seismicSidoStatus .currentSidoName').html('-');
var tbody = $('#seismicSidoStatus .resultSidoStats');
tbody.empty();
$('#seismicSidoStatus').hide();
$('#seismicChartStatus').hide();
return;
}
// 선택 시군구 통계
$.ajax({
url: CONTEXT_PATH + '/api/seismic/sidoStats.json',
method: 'get',
data: {
sidoNm: sidoNm
},
success:function(res) {
try {
if(res.data.length < 1)
return;
var seismicStat;
var seismicTotalStat;
for(var i = 0; i < res.data.length; i++){
if(res.data[i].sd_kor_nmf == '전국')
seismicTotalStat = res.data[i];
else
seismicStat = res.data[i];
}
$('#seismicSidoStatus .currentSidoName').html(seismicStat.sd_kor_nmf);
$('#seismicSidoStatus .resultSidoStats').empty();
var tbody = $('#seismicSidoStatus .resultSidoStats');
tbody.empty();
tbody.append(
''+
'| 총 건축물 수 | '+
''+ numberWithCommas(seismicStat.arc_all) +' | '+
'
'+
''+
'내진설계 건축물 비율  | '+
''+ numeral(seismicStat.seism_arr2).format('0.00') +'% | '+
'
'+
''+
'내진설계 건축물 수  | '+
''+ numberWithCommas(seismicStat.seism_arc) +' | '+
'
'+
''+
'내진설계 미대상 건축물 수 | '+
''+ numberWithCommas(seismicStat.seism_n) +' | '+
'
'+
''+
'내진설계 판정불가 건축물 수 | '+
''+ numberWithCommas(seismicStat.seism_null) +' | '+
'
'+
''+
'| 총 인구 수 | '+
''+ numberWithCommas(seismicStat.population) +' | '+
'
'
);
$('#seismicSidoStatus').show();
//내진설계 건축물 차트
var chartData = {
datasets: [{
data: [
seismicTotalStat.seism_arr2
],
backgroundColor: [
window.chartColors.green, '#f8f9fa'
],
hoverBackgroundColor: [
window.chartColors.green, '#f8f9fa'
]
}, {
data: [
seismicStat.seism_arr2
],
backgroundColor: [
window.chartColors.blue, '#f8f9fa'
],
hoverBackgroundColor: [
window.chartColors.blue, '#f8f9fa'
]
}]
};
if (seismicStatusChart != null) {
seismicStatusChart.destroy();
}
seismicStatusChart = new Chart(document.getElementById("seismicChartStatus.chart"), {
type: 'horizontalBar',
data: chartData,
options: {
title: {
display: true
},
legend: {
display: false
},
tooltips: {
enabled: true,
callbacks: {
label: function(item, data) {
if (item.index == 0) {
if (item.datasetIndex == 0) {
return '전국비율 : ' + numeral(data.datasets[item.datasetIndex].data[item.index]).format('0.00') + '%';
} else if (item.datasetIndex == 1) {
return '시도비율 : ' + numeral(data.datasets[item.datasetIndex].data[item.index]).format('0.00') + '%';
} else if (item.datasetIndex == 2) {
return '선택격자비율 : ' + numeral(data.datasets[item.datasetIndex].data[item.index]).format('0.00') + '%';
} else {
return;
}
} else {
return;
}
}
}
},
layout: {
padding: {
left: 0, right: 0, top: 0, bottom: 0
}
},
animation: {
animateRotate: true,
animateScale: false
}
}
});
$('#seismicChartStatus').show();
$('#seismicChartStatus .legend-grid').hide();
} catch(e) {
}
}
});
}
});
$('#mapIdentifyBtn').on('click', function(e){
$('.mapIdentifyContentArea').toggle();
});
// 페이지 최초 로딩시 이벤트
onSelectedMenuFnc();
boundarySelectOn();
//------------------------------
var chart;
var chart2;
var chart3;
var parser = new ol.format.GeoJSON();
//var container = document.getElementById('popup');
//var content = document.getElementById('popup-content');
//var closer = document.getElementById('popup-closer');
//var overlay = new ol.Overlay({
// element: container,
// autoPan: true,
// autoPanAnimation: {
// duration: 250
// }
//});
//map.addOverlay(overlay);
var highlightStyle = new ol.style.Style({
stroke: new ol.style.Stroke({
color: '#000000',
width: 2
}),
fill: new ol.style.Fill({
color: '#756bb1'
})
});
var highlightOverlay = new ol.layer.Vector({
style: highlightStyle,
source: new ol.source.Vector({
format: new ol.format.GeoJSON()
}),
map: map
});
var makePopChart = function(sidoNm) {
var url = '';
var chartTitle = '';
if (sidoNm != undefined && sidoNm != '' && sidoNm != null && sidoNm != '전국') {
url = CONTEXT_PATH + '/api/cmpstnPopulation.json?sido_nm=' + sidoNm;
chartTitle = sidoNm + ' 인구구조 그래프';
} else {
url = CONTEXT_PATH + '/api/cmpstnPopulation.json';
chartTitle = '시도별 인구구조 그래프';
}
if (chart != null) {
if (chart.canvas != null) {
chart.destroy();
}
}
$.ajax({
url: url
}).done(function (jsonData) {
var jsonData = jsonData.data;
$('#myChart1')[0].getContext('2d').canvas.height = (jsonData.length*15) + 100;
var datasets = [];
var color = Chart.helpers.color;
var colorNames = Object.keys(window.chartColors);
var sido = [];
var a014per = [];
var a1564per = [];
var a65200per = [];
var a0200sum = [];
jsonData.forEach(function (d, i) {
var colorName = colorNames[i % colorNames.length];;
var dsColor = window.chartColors[colorName];
if (sidoNm != undefined && sidoNm != '' && sidoNm != null) {
sido.push(d.sgg_nm);
} else {
sido.push(d.sido_nm);
}
a014per.push(numeral(d.a_0_14_per).format('0.00'));
a1564per.push(numeral(d.a_15_64_per).format('0.00'));
a65200per.push(numeral(d.a_65_200_per).format('0.00'));
a0200sum.push(numeral(d.a_0_200_sum).format('0.00'));
});
for (i=0; i<3; i++) {
var colorName = colorNames[i % colorNames.length];;
var dsColor = window.chartColors[colorName];
var label = '유소년인구비율';
var tempData = a014per;
if (i == 1) {
label = '생산가능인구비율';
tempData = a1564per;
} else if (i == 2) {
label = '고령인구비율';
tempData = a65200per;
}
datasets.push({
label: label,
backgroundColor: color(dsColor).alpha(0.5).rgbString(),
borderColor: dsColor,
data: tempData
});
}
var ctx = document.getElementById('myChart1').getContext('2d');
chart = new Chart(ctx, {
// The type of chart we want to create
type: 'horizontalBar',
// The data for our dataset
data: {
labels: sido,
datasets: datasets
},
// Configuration options go here
options: {
title:{
display:true,
text: chartTitle
},
tooltips: {
mode: 'index',
intersect: false
},
responsive: false,
maintainAspectRatio: false,
scales: {
xAxes: [{
stacked: true,
ticks: {
min: 0,
max: 100,
stepSize: 10
},
}],
yAxes: [{
stacked: true
}]
},
legend: {
position: 'bottom'
}
}
});
});
};
var showChart = function (code, sidoNm, yValue, subject, labels, title, isDestroy) {
if (sidoNm == '') {
sidoNm = '전국';
}
$.ajax({
url: CONTEXT_PATH + '/api/attributeStats.json'
}).done(function (jsonData) {
jsonData = jsonData.data;
if (isDestroy && chart != null) {
if (chart.canvas != null) {
chart.destroy();
var canvas = $('#myChart1');
canvas[0].getContext('2d').canvas.height = 250;
}
}
if (chart != null && chart.canvas != null) {
updateChart(sidoNm, code, yValue);
} else {
var datasets = [];
var color = Chart.helpers.color;
var colorNames = Object.keys(window.chartColors);
jsonData.forEach(function (d, i) {
if (d.sidoNm == '전국' || d.sidoNm == sidoNm) {
var colorName = colorNames[i % colorNames.length];
if (d.sidoNm != '전국' && colorName == 'red') {
colorName = colorNames[(i+1) % colorNames.length];
}
var dsColor = window.chartColors[colorName];
var tempData = [];
subject.forEach(function (sub, index) {
//tempData.push(d[sub]);
tempData.push(numeral(d[sub]).format('0.00'));
});
datasets.push({
label: d.sidoNm,
backgroundColor: color(dsColor).alpha(0.5).rgbString(),
borderColor: dsColor,
data: tempData
});
} else return;
});
var colorName = colorNames[datasets.length % colorNames.length];
var dsColor = window.chartColors[colorName];
if (datasets.length > 1) {
if (datasets[1].borderColor == dsColor) {
colorName = colorNames[(datasets.length+1) % colorNames.length];
dsColor = window.chartColors[colorName];
}
}
if (code != undefined && code != '' && code != null) {
datasets.push({
label: '격자(' + code + ')',
backgroundColor: color(dsColor).alpha(0.5).rgbString(),
borderColor: dsColor,
data: yValue
});
}
var ctx = document.getElementById('myChart1').getContext('2d');
chart = new Chart(ctx, {
// The type of chart we want to create
type: 'horizontalBar',
// The data for our dataset
data: {
labels: labels,
datasets: datasets
},
// Configuration options go here
options: {
title: {
display: true,
text: title
},
legend: {
position: 'bottom'
}
}
});
}
});
if (highlightOverlay.getSource().getFeatures().length != 0) {
var highlightGird = highlightOverlay.getSource().getFeatures()[0];
selectGrid(highlightGird);
}
};
var updateChart = function (sidoNm, label, data) {
var updateData = data;
data.forEach(function(d, i) {
if (d == -9999 || d == 9999 || d == -100) {
if (chart.data.labels[i] == '인구변화율') {
updateData[i] = 0;
}
} else if ( d == -1 ) {
if (chart.data.labels[i] == '고령인구비율' ||
chart.data.labels[i] == '주거용건물비율' ||
chart.data.labels[i] == '노후건축물비율') {
updateData[i] = 0;
}
}
});
//현재 차트에 전국단위만 표시
if (chart.data.datasets.length == 1) {
} else if (chart.data.datasets.length == 2) { //전국, 시도단위
var color = Chart.helpers.color;
var colorNames = Object.keys(window.chartColors);
var colorName = colorNames[chart.data.datasets.length % colorNames.length];
var dsColor = window.chartColors[colorName];
if (chart.data.datasets[1].borderColor == dsColor) {
colorName = colorNames[(chart.data.datasets.length+1) % colorNames.length];
dsColor = window.chartColors[colorName];
}
chart.data.datasets.push({
label: '격자(' + label + ')',
backgroundColor: color(dsColor).alpha(0.5).rgbString(),
borderColor: dsColor,
data: updateData
});
} else {
var temp = '';
for (let i=0; i 0) {
var color = Chart.helpers.color;
var colorNames = Object.keys(window.chartColors);
var colorName = colorNames[chart.data.datasets.length % colorNames.length];;
var dsColor = window.chartColors[colorName];
if (chart.data.datasets[1].borderColor == dsColor) {
colorName = colorNames[(chart.data.datasets.length+1) % colorNames.length];
dsColor = window.chartColors[colorName];
}
chart.data.datasets.push({
label: '격자(' + label + ')',
backgroundColor: color(dsColor).alpha(0.5).rgbString(),
borderColor: dsColor,
data: updateData
});
}
}
}
}
chart.update();
};
var showChart2 = function(optionUrl, title, subject) {
var url = CONTEXT_PATH + '/api/' + optionUrl;
var area = 'sido_nm';
var chartTitle = '';
if (sidoNm != '전국' && sidoNm != '') {
url += '?sido_nm=' + sidoNm;
area = 'sgg_nm';
chartTitle = sidoNm + ' ' + title;
} else {
chartTitle = '전국 시도별 ' + title;
}
if (chart2 != null) {
if (chart2.canvas != null) {
chart2.destroy();
$('#myChart2')[0].getContext('2d').canvas.height = 250;
}
}
$.ajax({
url: url
}).done(function (jsonData) {
jsonData = jsonData.data;
var labels = [];
var data = [];
var color = Chart.helpers.color;
jsonData.forEach(function (d, i) {
labels.push(d[area]);
data.push(numeral(d[subject]).format('0.00'));
});
$('#myChart2')[0].getContext('2d').canvas.height = (jsonData.length*15) + 100;
var barChartData = {
labels: labels,
datasets: [{
label: '면적 비율',
backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
borderColor: window.chartColors.blue,
borderWidth: 1,
data: data
}]
};
var ctx = document.getElementById("myChart2").getContext("2d");
chart2 = new Chart(ctx, {
type: 'horizontalBar',
data: barChartData,
options: {
responsive: false,
maintainAspectRatio: false,
legend: {
display: false,
},
title: {
display: true,
text: chartTitle
},
scales: {
xAxes: [{
ticks: {
autoSkip: false,
minRotation: 90
}
}]
}
}
});
});
}
var showDeclinedChart = function(sidoNm) {
var url = CONTEXT_PATH + '/api/declinedArea.json';
var subject = 'sido_nm';
var title = '시도별 쇠퇴지역 비율';
if (sidoNm != '' && sidoNm != '전국') {
url = url + '?sido_nm=' + sidoNm;
subject = 'sgg_nm';
title = sidoNm + ' 쇠퇴지역 비율';
}
if (chart2 != null) {
if (chart2.canvas != null) {
chart2.destroy();
$('#myChart2')[0].getContext('2d').canvas.height = 250;
}
} else {
$('#myChart2')[0].getContext('2d').canvas.height = 250;
}
$.ajax({
url: url
}).done(function (jsonData) {
jsonData = jsonData.data;
var labels = [];
var data = [];
var color = Chart.helpers.color;
var maxValue = 0;
jsonData.forEach(function (d, i) {
labels.push(d[subject]);
data.push(numeral(d.declined_per).format('0.00'));
maxValue = d.declined_per > maxValue ? d.declined_per : maxValue;
});
$('#myChart2')[0].getContext('2d').canvas.height = (jsonData.length*15) + 100;
var barChartData = {
labels: labels,
datasets: [{
label: '면적 비율',
backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
borderColor: window.chartColors.blue,
borderWidth: 1,
data: data
}]
};
var ctx = document.getElementById("myChart2").getContext("2d");
chart2 = new Chart(ctx, {
type: 'horizontalBar',
data: barChartData,
options: {
responsive: false,
maintainAspectRatio: false,
legend: {
display: false,
},
title: {
display: true,
text: title
},
scales: {
xAxes: [{
ticks: {
autoSkip: false,
minRotation: 90
}
}],
yAxes: [{
stacked: true,
ticks: {
min: 0,
max: Math.round(maxValue) + 1,
stepSize: 1
},
}]
}
}
});
});
}
/**
* 격자 정보보기 클릭 이벤트
*/
var identifyEvt = function(evt) {
var view = map.getView();
var viewResolution = view.getResolution();
var source = tiledWMS.getSource();
var url = source.getGetFeatureInfoUrl(
evt.coordinate, viewResolution, view.getProjection(),
{'INFO_FORMAT': 'application/json'});
$.ajax({
url: PROXY_URL + url
}).done(function (jsonData) {
if (jsonData.features.length > 0) {
if (sidoNm != '전국' && sidoNm != '') {
var feature = jsonData.features[0].properties;
updateGridChart(feature);
selectGrid(parser.readFeature(jsonData.features[0]));
//var coordinate = evt.coordinate;
//시도별 내진설계 건축물 비율 통계 중 격자별 정보 가져오기
if(storyType == 'earthquake_bldg'){
$('#seismicGridStatus .currentGridName').html(feature.sd_kor_nmf + ' ' + feature.sig_kor_nm + '(' + feature.grid_id + ')');
$('#seismicGridStatus .resultGridStats').empty();
var tbody = $('#seismicGridStatus .resultGridStats');
tbody.empty();
tbody.append(
''+
'| 총 건축물 수 | '+
''+ numberWithCommas(numeral(feature.arc_all).format('0,0')) +' | '+
'
'+
''+
'내진설계 건축물 비율  | '+
''+ numeral(feature.seism_arr2).format('0.00') +'% | '+
'
'+
''+
'내진설계 건축물 수  | '+
''+ numberWithCommas(numeral(feature.seism_arc).format('0,0')) +' | '+
'
'+
''+
'내진설계 미대상 건축물 수 | '+
''+ numberWithCommas(numeral(feature.seism_n).format('0,0')) +' | '+
'
'+
''+
'내진설계 판정불가 건축물 수 | '+
''+ numberWithCommas(numeral(feature.seism_null).format('0,0')) +' | '+
'
'+
''+
'| 총 인구 수 | '+
''+ numberWithCommas(numeral(feature.population).format('0,0')) +' | '+
'
'
);
$('#seismicGridStatus').show();
if (seismicStatusChart != null) {
// GRID가 추가되어 있는지 확인 후 제거
if (seismicStatusChart.data.datasets.length > 2) {
seismicStatusChart.data.datasets.pop();
}
var gridDataset = {
data: [
feature.seism_arr2
],
backgroundColor: [
window.chartColors.orange, window.chartColors.gray
],
hoverBackgroundColor: [
window.chartColors.orange, window.chartColors.gray
]
};
seismicStatusChart.data.datasets.push(gridDataset);
seismicStatusChart.update();
}
$('#seismicChartStatus').show();
$('#seismicChartStatus .legend-grid').show();
}
else{
updatePopup(feature);
$('.mapIdentifyContentArea').show();
}
//overlay.setPosition(coordinate);
}
} else {
//updateGridChart(null);
selectGrid(null);
if(storyType == 'earthquake_bldg'){
$('#seismicGridStatus').hide();
//$('#seismicChartStatus').hide();
if (seismicStatusChart != null) {
// GRID가 추가되어 있는지 확인 후 제거
if (seismicStatusChart.data.datasets.length > 2) {
seismicStatusChart.data.datasets.pop();
seismicStatusChart.update();
$('#seismicChartStatus .legend-grid').hide();
}
}
}
else{
$('#mapIdentifyContentView').html('정보를 확인할 수 없습니다.');
$('.mapIdentifyContentArea').hide();
}
}
});
};
function gridIdentifyOn() {
map.on('click', identifyEvt);
}
function gridIdentifyUn() {
map.un('click', identifyEvt);
}
var updatePopup = function(feature) {
if (feature.pop_chng == -9999 || feature.pop_chng == 9999 || feature.pop_chng == -100) {
feature.pop_chng = '인구 없음';
} else {
feature.pop_chng = numeral(feature.pop_chng).format('0.00');
}
if (feature.pop_old_r == -1) {
feature.pop_old_r = '인구 없음';
} else {
feature.pop_old_r = numeral(feature.pop_old_r).format('0.00');
}
if (feature.resi_rate == -1) {
feature.resi_rate = '건물 없음';
} else {
feature.resi_rate = numeral(feature.resi_rate).format('0.00');
}
if (feature.bld_old_r == -1) {
feature.bld_old_r = '건물 없음';
} else {
feature.bld_old_r = numeral(feature.bld_old_r).format('0.00');
}
if (feature.res_buld_r == -1) {
feature.res_buld_r = '건축물 없음';
} else {
feature.res_buld_r = numeral(feature.res_buld_r).format('0.00');
}
if (feature.nres_bld_r == -1) {
feature.nres_bld_r = '건축물 없음';
} else {
feature.nres_bld_r = numeral(feature.nres_bld_r).format('0.00');
}
if (feature.res_null_r == -1) {
feature.res_null_r = '건축물 없음';
} else {
feature.res_null_r = numeral(feature.res_null_r).format('0.00');
}
if (feature.o_hous_r == -1) {
feature.o_hous_r = '건축물 없음';
} else {
feature.o_hous_r = numeral(feature.o_hous_r).format('0.00');
}
var table = ''
+ ''
+ '| '+ feature.spo_no_cd + ' (' + feature.sido_nm + ' ' + feature.sgg_nm + ') |
'
+ ''
+ '| 전체 인구 (2017) | '
+ '' + numeral(feature.a_0_200).format('0,0') + ' | '
+ '
'
+ '| 0-14세 인구 (2017) | '
+ '' + numeral(feature.a_0_14).format('0,0') + ' | '
+ '
'
+ '| 15-64세 인구 (2017) | '
+ '' + numeral(feature.a_15_64).format('0,0') + ' | '
+ '
'
+ '| 65-200세 인구 (2017) | '
+ '' + numeral(feature.a_65_200).format('0,0') + ' | '
+ '
'
+ '| 노령인구 비율 (2017) | '
+ '' + numeral(feature.pop_old_r).format('0.00') + ' | '
+ '
'
+ '| 전체 건물 수 | '
+ '' + numeral(feature.tot_cnt).format('0,0') + ' | '
+ '
'
+ '| 노후 건물 수 | '
+ '' + numeral(feature.o_cnt).format('0,0') + ' | '
+ '
'
+ '| 노후 건축물 비율 | '
+ '' + numeral(feature.bld_old_r).format('0.00') + ' | '
+ '
'
+ '| 평균 건물면적 | '
+ '' + numeral(feature.avg_arch_a).format('0.00') + ' | '
+ '
'
+ '| 전체 인구 (2015) | '
+ '' + numeral(feature.tot_pop).format('0,0') + ' | '
+ '
'
+ '| 인구 변화율 (2015-2017) | '
+ '' + numeral(feature.pop_chng).format('0.00') + ' | '
+ '
'
+ '| 주거용 건물 수 | '
+ '' + numeral(feature.resi_bld).format('0,0') + ' | '
+ '
'
+ '| 비 주거용 건물 수 | '
+ '' + numeral(feature.non_r_bld).format('0,0') + ' | '
+ '
'
+ '| 주거용 건물 비율 | '
+ '' + numeral(feature.resi_rate).format('0.00') + ' | '
+ '
'
+ ''
+ '
';
if (storyType == 'earthquake_bldg') {
table = ''
+ ''
+ '| '+ feature.grid_id + ' (' + feature.sd_kor_nmf + ' ' + feature.sig_kor_nm + ') |
'
+ ''
+ '| 내진설계 건축물 수 | '
+ '' + numeral(feature.res_buld).format('0,0') + ' | '
+ '
'
+ '| 내진설계 미대상 건축물 수 | '
+ '' + numeral(feature.nres_buld).format('0,0') + ' | '
+ '
'
+ '| 내진설계 건축물 비율 | '
+ '' + numeral(feature.res_buld_r).format('0.00') + ' | '
+ '
'
+ '| 내진설계 미대상 건축물 비율 | '
+ '' + numeral(feature.nres_bld_r).format('0.00') + ' | '
+ '
'
+ '| 내진설계 판정불가 건축물 수 | '
+ '' + numeral(feature.res_null).format('0,0') + ' | '
+ '
'
+ '| 내진설계 판정불가 건축물 비율 | '
+ '' + numeral(feature.res_null_r).format('0.00') + ' | '
+ '
'
+ '| 전체 주택 수 | '
+ '' + numeral(feature.tot_hous).format('0,0') + ' | '
+ '
'
+ '| 노후 주택 수 | '
+ '' + numeral(feature.old_hous).format('0,0') + ' | '
+ '
'
+ '| 노후 주택 비율 | '
+ '' + numeral(feature.o_hous_r).format('0.00') + ' | '
+ '
'
+ ''
+ '
';
}
$('#mapIdentifyContentView').html(table);
};
var selectGrid = function(feature) {
highlightOverlay.getSource().clear();
if (feature != null) {
highlightOverlay.getSource().addFeature(feature);
}
};
/**
* 격자 클릭 시 실행
*/
var updateGridChart = function(feature) {
var spo = feature.spo_no_cd;
var spoSido = feature.sido_nm;
var yValue = [];
if (storyType == 'grid_pop_stats') {
yValue = [numeral(feature.pop_chng).format('0.00'), numeral(feature.pop_old_r).format('0.00')];
if (storyTypeSub == 'grid_pop_stats_1') {
} else if (storyTypeSub == 'grid_pop_stats_2') {
updateChart(spoSido, spo, yValue);
} else if (storyTypeSub == 'grid_pop_stats_3') {
updateChart(spoSido, spo, yValue);
}
} else if (storyType == 'grid_bldg_stats') {
//showChart('', sidoNm, [], ['resiRate', 'avgArchA', 'bldOldR'],
// ['주거용건물비율', '평균건물면적', '노후건축물비율'], '건물통계', true);
yValue = [numeral(feature.resi_rate).format('0.00'),
numeral(feature.avg_arch_a).format('0.00'), numeral(feature.bld_old_r).format('0.00')];
if (storyTypeSub == 'grid_bldg_stats_1') {
updateChart(spoSido, spo, yValue);
} else if (storyTypeSub == 'grid_bldg_stats_2') {
updateChart(spoSido, spo, yValue);
} else if (storyTypeSub == 'grid_bldg_stats_3') {
updateChart(spoSido, spo, yValue);
}
} else if (storyType == 'demographic_diagnosis') {
//차트 업데이트 및 통계 테이블 업데이트
yValue = [numeral(feature.pop_chng).format('0.00'), numeral(feature.pop_old_r).format('0.00')];
updateChart(spoSido, spo, yValue);
updateTable(feature);
} else if (storyType == 'physical_diagnosis') {
//차트 업데이트 및 통계 테이블 업데이트
yValue = [numeral(feature.avg_arch_a).format('0.00'), numeral(feature.bld_old_r).format('0.00')];
updateChart(spoSido, spo, yValue);
updateTable(feature);
} else if (storyType == 'declined_diagnosis') {
updateTable(feature);
} else if (storyType == 'regeneration_newdeal_area') {
} else if (storyType == 'earthquake_bldg') {
}
}
var updateTable = function(feature) {
var spo = feature.spo_no_cd;
var bldOldR = numeral(feature.bld_old_r).format('0.00');
var avgArchA = numeral(feature.avg_arch_a).format('0.00');
var popOldR = numeral(feature.pop_old_r).format('0.00');
var popChng = numeral(feature.pop_chng).format('0.00');
$('#table-spo').html(spo);
$('#table-bldOldR').html(bldOldR);
$('#table-avgArchA').html(avgArchA);
$('#table-popOldR').html(popOldR);
$('#table-popChng').html(popChng);
};
//closer.onclick = function() {
// overlay.setPosition(undefined);
// closer.blur();
// return false;
//};