var markerList = []; var markerLayers = null; var marker141List = []; var marker141Layers = null; var keepChartNum = null; const API_ENDPOINT = 'https://141.ir/api'; const MAP_ENDPOINT = 'https://testmap.141.ir'; const MAP_MIN_ZOOM = 3; const MAP_MAX_ZOOM = 15; // IRAN bounds, by this order: // [North, East] // [South, West] var bounds = [ [42.9130026312, 75.6166317076], [20.5782370061, 30.5092252948] ]; // Create leaflet map client var map = L.map('map', { maxBounds: bounds, minZoom: MAP_MIN_ZOOM, //maxZoom: MAP_MAX_ZOOM, zoomControl: false }).setView([32.62, 53.25], 6); // Create map tile layer L.tileLayer(MAP_ENDPOINT + '/141map/{z}/{x}/{y}.png', {}).addTo(map); fisheyeMenu({ growRatio: 1.7, verticalLimit: 10, horizontalLimit: 1.8 }); function fisheyeMenu(options) { // get all items from fisheye-menu var items = Array.prototype.slice.call(document.querySelectorAll('.fisheye-menu button.layerButton')); var item = items[0]; //get horizontal center point of each item var itemsMiddle = items.map(function (item) { return item.offsetLeft + (item.offsetWidth / 2); }); //get vertical center point of each item var itemsVertMiddle = items.map(function (item) { return item.offsetTop + (item.offsetHeight / 2); }); var itemWidth = item.offsetWidth; // vertical limits of function running var topLimit = item.offsetParent.offsetTop - (options.verticalLimit || 10); var bottomLimit = item.offsetParent.offsetTop + item.offsetHeight + (options.verticalLimit || 10); // ratio of new size to default var growRatio = options.growRatio || 1.8; // horizontal limit of grow reaction for single item var limit = item.offsetWidth * (options.horizontalLimit || 1.5); var sizeDiff = Math.round(itemWidth * (growRatio - 1)); var removeGoDown = function (evt) { evt.target.parentNode.classList.remove('go-down'); }; var setListeners = function () { items.forEach(function (itm, index) { itm.addEventListener("transitionend", removeGoDown); }); }(); var makeItemBigger = function (x, y) { var verticallyCorrect = (y > topLimit && y < bottomLimit) ? true : false; // if mouse out from vertically cirrect area make items small with transition if (!verticallyCorrect && !item.parentNode.classList.contains('go-down')) { item.parentNode.classList.add('go-down'); } // if (verticallyCorrect) { // let menuWidth = $('.menu_vertical').css('width'); // $('.menu_vertical').css('width', 'calc(' + menuWidth + ' + 50px') // } items.forEach(function (item, index) { var middlePoint = itemsMiddle[index]; // horizontal distance from center point to cursor var dist = Math.abs(x - middlePoint); // if distance is bigger than limit in any direction // ratio is equal to 1 (item size not changed) var ratio = (dist > limit) ? 1 : (dist / limit); ratio = verticallyCorrect ? ratio : 1; var newSize = itemWidth + ((1 - ratio) * sizeDiff); // add negative top margin to item equal to half size difference // to stay item vertical centered var newMarginTop = -((1 - ratio) * (sizeDiff / 2)); item.style.width = newSize + 'px'; item.style.height = newSize + 'px'; item.style.marginTop = newMarginTop + 'px'; }); }; document.body.addEventListener('mousemove', function (e) { // position of cursor var pointerX = e.pageX; var pointerY = e.pageY; makeItemBigger(pointerX, pointerY); }); }; $('.right-menu-toggle').on('click', function () { if ($(this).css('right') == '0px') { $('.right-menu-charts').css('right', '-60px'); $(this).css('right', '60px'); $(this).addClass('hide-menu-toggle'); $(this).find('i').addClass('fa-arrow-alt-circle-left').removeClass('fa-arrow-alt-circle-right'); } else { $('.right-menu-charts').css('right', '30px'); $(this).css('right', '0px'); $(this).removeClass('hide-menu-toggle'); $(this).find('i').addClass('fa-arrow-alt-circle-right').removeClass('fa-arrow-alt-circle-left'); } }); $('.item-menu-chart').on('click', function () { let num = parseInt($(this).attr('chartId')); keepChartNum = num; if (!$(this).hasClass('item-menu-chart-disabled')) { if ($(this).hasClass('item-menu-active')) { handleChartButtonClick(0); removeFeaturesFromMap(); } else { remove141Layer(); if ($('.item-menu-chart.item-menu-active').length > 0) { handleChartButtonClick(0, this); removeFeaturesFromMap(); setTimeout(function () { updateChartBox(num); handleChartButtonClick(1); addFeaturesToMap(); addTopFeatureToStat(); }, 500); } else { updateChartBox(num); handleChartButtonClick(1, this); addFeaturesToMap(); addTopFeatureToStat(); } } } }); $('.menu-map-toggle').on('click', function () { if ($(this).parent().css('width') == '500px') { $(this).parent().animate({ width: "50", height: "50" }, 500, function () { $(this).find('.map-svg-box').removeClass('map-svg-box-open'); $(this).css('z-index', '12'); $('.left-menu-141').css('left', '30px'); $(this).find('.menu-map-close').hide(); }); } else { $(this).parent().css('z-index', '15'); $('.left-menu-141').css('left', '-80px'); $(this).parent().animate({ width: "500", height: "480" }, 500, function () { $(this).find('.map-svg-box').addClass('map-svg-box-open'); $(this).find('.menu-map-close').show(); }); } }); $('.left-menu-map > .menu-map-close').on('click', function () { if ($(this).parent().css('width') == '500px') { $(this).parent().animate({ width: "50", height: "50" }, 500, function () { $(this).find('.map-svg-box').removeClass('map-svg-box-open'); $(this).css('z-index', '12'); $('.left-menu-141').css('left', '30px'); $(this).find('.menu-map-close').hide(); }); } }); $('.left-menu-view-chart .chart-tools-item.chart-sync-icon').on('click', function () { handleChartButtonClick(0, $('.item-menu-chart.item-menu-active')); removeFeaturesFromMap(); setTimeout(function () { updateChartBox(keepChartNum); handleChartButtonClick(1); addFeaturesToMap(); addTopFeatureToStat(); }, 500); }); $('.left-menu-view-chart .chart-tools-item.chart-filter-icon').on('click', function () { $('.left-menu-view-chart > .chart-filter-box input[name=chartFilterToDate]').prop('disabled', 'disabled'); $('.left-menu-view-chart > .chart-view-box').fadeOut(300, function () { $('.left-menu-view-chart > .chart-filter-box').fadeIn(300); }); let fromDate, toDate; fromDate = $('.left-menu-view-chart > .chart-filter-box input[name=chartFilterFromDate]').persianDatepicker({ format: 'YYYY/MM/DD', autoClose: true, onSelect: function (unix) { fromDate.touched = true; $('.left-menu-view-chart > .chart-filter-box input[name=chartFilterToDate]').prop('disabled', ''); if (fromDate.getState().selected.unixDate >= toDate.getState().selected.unixDate) { toDate.setDate(fromDate.getState().selected.unixDate); } if (toDate && toDate.options && toDate.options.minDate != unix) { let cachedValue = toDate.getState().selected.unixDate; toDate.options = { minDate: unix }; if (toDate.touched) { toDate.setDate(cachedValue); } } } }); toDate = $('.left-menu-view-chart > .chart-filter-box input[name=chartFilterToDate]').persianDatepicker({ format: 'YYYY/MM/DD', autoClose: true, onSelect: function (unix) { toDate.touched = true; /*if (fromDate && fromDate.options && fromDate.options.maxDate != unix) { let cachedValue = fromDate.getState().selected.unixDate; fromDate.options = { maxDate: unix }; if (fromDate.touched) { fromDate.setDate(cachedValue); } }*/ } }); }); $('.left-menu-view-chart .filter-box-submit > .submit-cancel').on('click', function () { $('.left-menu-view-chart > .chart-filter-box').fadeOut(300, function () { $('.left-menu-view-chart > .chart-view-box').fadeIn(300); }); }); $('.left-menu-view-chart .filter-box-submit > .submit-send').on('click', function () { handleChartButtonClick(0, $('.item-menu-chart.item-menu-active')); removeFeaturesFromMap(); setTimeout(function () { updateChartBox(keepChartNum); handleChartButtonClick(1); addFeaturesToMap(); addTopFeatureToStat(); }, 500); }); $('.left-menu-view-chart .chart-tools-item.chart-close-icon').on('click', function () { handleChartButtonClick(0); removeFeaturesFromMap(); }); $('.right-menu-stat-chart > .menu-stat-close').on('click', function () { handleChartButtonClick(0); removeFeaturesFromMap(); $('.item-menu-141.item-141-active').removeClass('item-141-active'); setAbrarProcess = 0; setBokhorProcess = 0; }); function handleChartButtonClick(openChart = 1, element = null) { if (setAbrarProcess || setBokhorProcess) { $('.right-menu-stat-chart').css('top', '-858px'); $('.left-menu-stat-chart-info').css('top', '-308px'); $('.item-menu-141.item-141-active').removeClass('item-141-active'); removeFeaturesFromMap(); setTimeout(function () { setAbrarProcess = 0; setBokhorProcess = 0; $('.menu-stat-list > .stat-list').empty(); handleChartButtonClickAfterAbrar(openChart, element); }, 500); } else { handleChartButtonClickAfterAbrar(openChart, element); } } function handleChartButtonClickAfterAbrar(openChart = 1, element = null) { if (openChart) { if ($('.left-menu-map').css('width') == '500px') { $('.left-menu-map').animate({ width: "50", height: "50" }, 500, function () { $(this).find('.map-svg-box').removeClass('map-svg-box-open'); $(this).css('z-index', '12'); $('.left-menu-141').css('left', '30px'); $(this).find('.menu-map-close').hide(); if (element) { $('.left-menu-view-chart').css('left', '30px'); $('.right-menu-stat-chart').css('top', '88px'); $('.left-menu-view-chart').css('z-index', '16'); $('.left-menu-map').css('left', '-80px'); $('.left-menu-141').css('left', '-80px'); $(element).addClass('item-menu-active'); } else { $('.left-menu-view-chart').css('left', '30px'); $('.right-menu-stat-chart').css('top', '88px'); } }); } else { if (element) { $('.left-menu-view-chart').css('left', '30px'); $('.right-menu-stat-chart').css('top', '88px'); $('.left-menu-view-chart').css('z-index', '16'); $('.left-menu-map').css('left', '-80px'); $('.left-menu-141').css('left', '-80px'); $(element).addClass('item-menu-active'); } else { $('.left-menu-view-chart').css('left', '30px'); $('.right-menu-stat-chart').css('top', '88px'); } } } else { if (element) { $('.left-menu-view-chart').css('left', '-530px'); $('.right-menu-stat-chart').css('top', '-858px'); $('.left-menu-stat-chart-info').css('top', '-308px'); emptyStatItems(); $('.item-menu-chart.item-menu-active').removeClass('item-menu-active'); $(element).addClass('item-menu-active'); } else { remove141Layer(); removeCityFeaturesFromMap(); removeFeaturesFromMap(); keepMapFeatureColor = null; map.flyTo([32.62, 53.25], 6); $('.left-menu-view-chart').css('left', '-530px'); $('.left-menu-map').css('left', '30px'); $('.left-menu-141').css('left', '30px'); $('.left-menu-view-chart').css('z-index', '12'); $('.right-menu-stat-chart').css('top', '-858px'); $('.left-menu-stat-chart-info').css('top', '-308px'); emptyStatItems(); $('.item-menu-chart.item-menu-active').removeClass('item-menu-active'); } setTimeout(function () { $('.left-menu-view-chart > .chart-filter-box').hide(); $('.left-menu-view-chart > .chart-view-box').show(); }, 500); } } function emptyStatItems() { setTimeout(function () { $('.menu-stat-list > .stat-list').empty(); }, 500); } $('.left-menu-141 > .item-menu-141').on('click', function () { let get141Id = parseInt($(this).attr('id141')); if (get141Id < 13) { if (!$(this).hasClass('item-141-active')) { $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); $(this).addClass('item-141-active'); if (setAbrarProcess) { setAbrarProcess = 0; hideAbrarChartStat(); setTimeout(function () { show141Layer(get141Id); }, 500); } else if (setBokhorProcess) { setBokhorProcess = 0; hideBokhorChartStat(); setTimeout(function () { show141Layer(get141Id); }, 500); } else { show141Layer(get141Id); } } else { $(this).removeClass('item-141-active'); remove141Layer(); } } else if (get141Id === 13) { if (!$(this).hasClass('item-141-active')) { $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); $(this).addClass('item-141-active'); if (setAbrarProcess) { setAbrarProcess = 0; hideAbrarChartStat(); setTimeout(function () { showRoadAccidentLayer(); }, 500); } else if (setBokhorProcess) { setBokhorProcess = 0; hideBokhorChartStat(); setTimeout(function () { showRoadAccidentLayer(); }, 500); } else { showRoadAccidentLayer(); } } else { $(this).removeClass('item-141-active'); remove141Layer(); } } else if (get141Id === 14) { if (!$(this).hasClass('item-141-active')) { $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); $(this).addClass('item-141-active'); setAbrarProcess = 1; removeFeaturesFromMap(); if (setBokhorProcess) { setBokhorProcess = 0; hideBokhorChartStat(); setTimeout(function () { showAbrarChartStat(); }, 500); } else { showAbrarChartStat(); } } else { setAbrarProcess = 0; $(this).removeClass('item-141-active'); hideAbrarChartStat(); } } else if (get141Id === 15) { if (!$(this).hasClass('item-141-active')) { $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); $(this).addClass('item-141-active'); setBokhorProcess = 1; removeFeaturesFromMap(); if (setAbrarProcess) { setAbrarProcess = 0; hideAbrarChartStat(); setTimeout(function () { showBokhorChartStat(); }, 500); } else { showBokhorChartStat(); } } else { setBokhorProcess = 0; $(this).removeClass('item-141-active'); hideBokhorChartStat(); } } else if (get141Id === 16) { if (!$(this).hasClass('item-141-active')) { $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); $(this).addClass('item-141-active'); fullCityGeoJSONTemp.type = "FeatureCollection"; fullCityGeoJSONTemp.features = fullCityGeoJSON.features; if (setAbrarProcess) { setAbrarProcess = 0; hideAbrarChartStat(); setTimeout(function () { addCityFeaturesToMap(); }, 500); } else if (setBokhorProcess) { setBokhorProcess = 0; hideBokhorChartStat(); setTimeout(function () { addCityFeaturesToMap(); }, 500); } else { addCityFeaturesToMap(); } } else { $(this).removeClass('item-141-active'); removeCityFeaturesFromMap(); } } else { // } }); function showRoadAccidentLayer() { if (marker141Layers != null) { marker141List = []; map.removeLayer(marker141Layers); } showLoaderScreen(); $.post(API_ENDPOINT + '/roadaccidentvillage', function (data) { let roadAccidentPoints = JSON.parse(data); marker141Layers = L.markerClusterGroup(); for (let i = 0; i < roadAccidentPoints.length; i++) { try { let marker = L.marker( [roadAccidentPoints[i].lat, roadAccidentPoints[i].lng], { icon: blueIcon } ).bindPopup('نقطه پرحاثه: ' + roadAccidentPoints[i].axisName); marker141List.push(marker); } catch (e) { // } } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); } $('.chart-province-item').on('click', function () { let provinceId = $(this).attr('provinceId'); showProvinceChartBox(this, provinceId); }); function handleTopMenuClick(num) { switch (num) { case 1: { window.open('rmto', '_self'); break; } case 2: { $('#reportModal').modal('show'); break; } case 3: { window.open('rmtobi', '_self'); break; } case 4: { window.open('rmto', '_self'); break; } } } // -------------------------------------------------------------- Chart.defaults.global.defaultFontFamily = 'IRANSansFaNum'; var chartItemCanvas = $('#myChart'); var chartItem = null; var chartProvinceItemsCanvas = []; var chartProvinceItems = []; var chartColors = [ 'rgba(255, 99, 132, 0.6)', 'rgba(54, 162, 235, 0.6)', 'rgba(255, 206, 86, 0.6)', 'rgba(75, 192, 192, 0.6)', 'rgba(153, 102, 255, 0.6)', 'rgba(255, 159, 64, 0.6)', 'rgba(255, 64, 159, 0.6)', 'rgba(159, 255, 64, 0.6)', 'rgba(255, 64, 255, 0.6)', 'rgba(159, 159, 64, 0.6)', ]; function randomScalingFactor() { return Math.round(Math.random() * 100); }; function changeChartBoxTitle(str, area = 'کل کشور', changeTitle = 1) { if (changeTitle) { $('.chart-title').text(str + ' (' + area + ')'); } else { let boxTitle = $('.chart-title').text(); boxTitle = boxTitle.substr(0, boxTitle.indexOf('(')); $('.chart-title').text(boxTitle + '(' + area + ')'); } } function makeConfigChart(num, showDetails) { let config = null; switch (num) { case 1: { config = { type: 'pie', data: { datasets: [{ data: [ randomScalingFactor(), randomScalingFactor() ], backgroundColor: [ chartColors[0], chartColors[1], ], label: 'Dataset 1' }], labels: [ 'احداث', 'نگه داری' ] }, options: { responsive: true, legend: { display: showDetails }, title: { display: showDetails, text: 'تفکیک پروژه های راه روستایی', position: 'bottom' }, tooltips: { enabled: showDetails } } }; changeChartBoxTitle('تفکیک پروژه های راه روستایی'); break; } case 2: { config = { data: { datasets: [{ data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ], backgroundColor: [ chartColors[0], chartColors[1], chartColors[2], chartColors[3], chartColors[4], ], label: 'تفکیک پروژه های راه روستایی' }], labels: [ 'شریانی', 'غیرشریانی', 'فرعی', 'اصلی', 'شریانی-اصلی' ] }, options: { responsive: true, legend: { display: showDetails, position: 'right', }, title: { display: showDetails, text: 'تفکیک پروژه های راه روستایی', position: 'bottom' }, scale: { ticks: { display: showDetails, beginAtZero: true }, reverse: false }, animation: { animateRotate: false, animateScale: true }, tooltips: { enabled: showDetails } } }; changeChartBoxTitle('تفکیک پروژه های راه روستایی'); break; } case 3: { config = { type: 'doughnut', data: { datasets: [{ data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ], backgroundColor: [ chartColors[0], chartColors[1], chartColors[2], chartColors[3], chartColors[4], chartColors[5], chartColors[6], chartColors[7] ], label: 'تفکیک پروژه های راهداری' }], labels: [ 'پاکسازی', 'علایم', 'رنگ آمیزی', 'حریم', 'ایمن سازی', 'راهدار خانه', 'اضطراری', 'شستشو' ] }, options: { responsive: true, legend: { display: showDetails, position: 'left', }, title: { display: showDetails, text: 'تفکیک پروژه های راهداری', position: 'bottom' }, tooltips: { enabled: showDetails } } }; changeChartBoxTitle('تفکیک پروژه های راهداری'); break; } case 4: { config = { type: 'line', data: { labels: ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور'], datasets: [{ label: 'پیشرفت فیزیکی', backgroundColor: chartColors[0], borderColor: chartColors[0], data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ], fill: false, }, { label: 'پیشرفت ریالی', fill: false, backgroundColor: chartColors[1], borderColor: chartColors[1], data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ], }] }, options: { responsive: true, legend: { display: showDetails, }, title: { display: showDetails, text: 'نسبت پیشرفت فیزیکی به ریالی', position: 'bottom' }, tooltips: { enabled: showDetails, mode: 'index', intersect: false, }, hover: { mode: 'nearest', intersect: true }, scales: { xAxes: [{ display: showDetails, scaleLabel: { display: showDetails, labelString: 'ماه' } }], yAxes: [{ display: showDetails, scaleLabel: { display: showDetails, labelString: 'مقدار' } }] } } }; changeChartBoxTitle('نسبت پیشرفت فیزیکی به ریالی'); break; } case 5: { config = { type: 'bar', data: { labels: ['مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'], datasets: [{ label: 'راه روستایی', backgroundColor: chartColors[0], borderColor: chartColors[0], borderWidth: 1, data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ] }, { label: 'راهداری', backgroundColor: chartColors[1], borderColor: chartColors[1], borderWidth: 1, data: [ randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor() ] }] }, options: { responsive: true, legend: { display: showDetails, position: 'top', }, title: { display: showDetails, text: 'تفکیک پروژه های انجام شده تاکنون', position: 'bottom' }, scales: { xAxes: [{ display: showDetails, }], yAxes: [{ display: showDetails, }] }, tooltips: { enabled: showDetails } } }; changeChartBoxTitle('تفکیک پروژه های انجام شده تاکنون'); break; } case 6: { break; } case 7: { break; } case 8: { break; } case 9: { break; } case 10: { break; } } return config; } function updateChartBox(num) { if (chartItem) { chartItem.destroy(); } if (num == 2) { chartItem = new Chart.PolarArea(chartItemCanvas, makeConfigChart(num, true)); } else { chartItem = new Chart(chartItemCanvas, makeConfigChart(num, true)); } for (let i = 1; i <= 36; i++) { if (chartProvinceItems[i]) { chartProvinceItems[i].destroy(); } if (num == 2) { chartProvinceItems[i] = new Chart.PolarArea(chartProvinceItemsCanvas[i], makeConfigChart(num, false)); } else { chartProvinceItems[i] = new Chart(chartProvinceItemsCanvas[i], makeConfigChart(num, false)); } } } function showProvinceChartBox(element, id) { let mainChartDataLength = chartItem.data.datasets[0].data.length; let provinceChartData = chartProvinceItems[id].data; let countDataset = 0; for (let i = 0; i < mainChartDataLength; i++) { chartRemoveData(chartItem); } provinceChartData.datasets.forEach((dataset) => { for (let i = 0; i < dataset.data.length; i++) { chartAddData(chartItem, countDataset, dataset.data[i]); } countDataset++; }); changeChartBoxTitle('', $(element).find('.chart-province-item-title').text(), 0); } function chartAddData(chart, count, data, label) { //chart.data.labels.push(label); chart.data.datasets[count].data.push(data); chart.update(); } function chartRemoveData(chart) { //chart.data.labels.pop(); chart.data.datasets.forEach((dataset) => { dataset.data.pop(); }); chart.update(); } $(document).ready(function () { for (let i = 1; i <= 36; i++) { chartProvinceItemsCanvas[i] = $('#myChart' + i); } initIranGeoJson(); initCityGeoJson(); abrarProvinceNameArray.sort(function (itemA, itemB) { return itemB.process - itemA.process; }); bokhorProvinceNameArray.sort(function (itemA, itemB) { return itemB.process - itemA.process; }); }); // ----------------------------------------- var iranGeoJSON = null; var fullCityGeoJSON = null; var fullCityGeoJSONTemp = new Object; var iranMapGeo = null; var iranCityMapGeo = null; var setAbrarProcess = 0; var setBokhorProcess = 0; var iranNameArray = []; var abrarProvinceNameArray = [ { row: 1, feature: 0, name: 'آذربايجان شرقی', process: 25 }, { row: 2, feature: 1, name: 'آذربايجان غربی', process: 28 }, { row: 3, feature: 2, name: 'اردبيل', process: 29.9 }, { row: 4, feature: 3, name: 'اصفهان', process: 14.1 }, { row: 5, feature: 4, name: 'البرز', process: 45 }, { row: 6, feature: 5, name: 'ايرانشهر', process: 7.4 }, { row: 7, feature: 6, name: 'ايلام', process: 42.1 }, { row: 8, feature: 7, name: 'بوشهر', process: 12.4 }, { row: 9, feature: 8, name: 'تهران', process: 18.1 }, { row: 10, feature: 9, name: 'چهار محال و بختياری', process: 57.8 }, { row: 11, feature: 10, name: 'خراسان جنوبی', process: 20.8 }, { row: 12, feature: 11, name: 'خراسان رضوی', process: 9.4 }, { row: 13, feature: 12, name: 'خراسان شمالی', process: 19.5 }, { row: 14, feature: 13, name: 'خوزستان', process: 33.6 }, { row: 15, feature: 14, name: 'زنجان', process: 41 }, { row: 16, feature: 34, name: 'سمنان شرق', process: 32.7 }, { row: 17, feature: 33, name: 'سمنان غرب', process: 18.3 }, { row: 18, feature: 18, name: 'سيستان و بلوچستان', process: 25.5 }, { row: 19, feature: 16, name: 'فارس', process: 45 }, { row: 20, feature: 17, name: 'قزوين', process: 45.5 }, { row: 21, feature: 18, name: 'قم', process: 4.7 }, { row: 22, feature: 19, name: 'كرمان جنوب', process: 45 }, { row: 23, feature: 20, name: 'كردستان', process: 43.3 }, { row: 24, feature: 21, name: 'كرمان', process: 59.5 }, { row: 25, feature: 22, name: 'كرمانشاه', process: 41.1 }, { row: 26, feature: 23, name: 'كهگيلويه و بويراحمد', process: 61.4 }, { row: 27, feature: 24, name: 'گلستان', process: 16.5 }, { row: 28, feature: 25, name: 'گيلان', process: 18.4 }, { row: 29, feature: 26, name: 'لارستان', process: 70.2 }, { row: 30, feature: 27, name: 'لرستان', process: 40 }, { row: 31, feature: 28, name: 'مازندران', process: 13.4 }, { row: 32, feature: 29, name: 'مركزی', process: 45.8 }, { row: 33, feature: 30, name: 'هرمزگان', process: 23.9 }, { row: 34, feature: 31, name: 'همدان', process: 36.1 }, { row: 35, feature: 32, name: 'يزد', process: 33 } ]; var bokhorProvinceNameArray = [ { row: 1, feature: 0, name: 'آذربايجان شرقی', process: 56 }, { row: 2, feature: 1, name: 'آذربايجان غربی', process: 51 }, { row: 3, feature: 2, name: 'اردبيل', process: 56 }, { row: 4, feature: 3, name: 'اصفهان', process: 74 }, { row: 5, feature: 4, name: 'البرز', process: 74 }, { row: 6, feature: 5, name: 'ايرانشهر', process: 30 }, { row: 7, feature: 6, name: 'ايلام', process: 78 }, { row: 8, feature: 7, name: 'بوشهر', process: 87 }, { row: 9, feature: 8, name: 'تهران', process: 83 }, { row: 10, feature: 9, name: 'چهار محال و بختياری', process: 65 }, { row: 11, feature: 10, name: 'خراسان جنوبی', process: 49 }, { row: 12, feature: 11, name: 'خراسان رضوی', process: 55 }, { row: 13, feature: 12, name: 'خراسان شمالی', process: 42 }, { row: 14, feature: 13, name: 'خوزستان', process: 64 }, { row: 15, feature: 14, name: 'زنجان', process: 69 }, { row: 16, feature: 34, name: 'سمنان شرق', process: 54 }, { row: 17, feature: 33, name: 'سمنان غرب', process: 68 }, { row: 18, feature: 15, name: 'سيستان و بلوچستان', process: 32 }, { row: 19, feature: 16, name: 'فارس', process: 57 }, { row: 20, feature: 17, name: 'قزوين', process: 51 }, { row: 21, feature: 18, name: 'قم', process: 62 }, { row: 22, feature: 19, name: 'كرمان جنوب', process: 32 }, { row: 23, feature: 20, name: 'كردستان', process: 46 }, { row: 24, feature: 21, name: 'کرمان', process: 42 }, { row: 25, feature: 22, name: 'كرمانشاه', process: 67 }, { row: 26, feature: 23, name: 'كهگيلويه و بويراحمد', process: 49 }, { row: 27, feature: 24, name: 'گلستان', process: 68 }, { row: 28, feature: 25, name: 'گيلان', process: 55 }, { row: 29, feature: 26, name: 'لارستان', process: 65 }, { row: 30, feature: 27, name: 'لرستان', process: 52 }, { row: 31, feature: 28, name: 'مازندران', process: 55 }, { row: 32, feature: 29, name: 'مركزی', process: 72 }, { row: 33, feature: 30, name: 'هرمزگان', process: 45 }, { row: 34, feature: 31, name: 'همدان', process: 81 }, { row: 35, feature: 32, name: 'يزد', process: 38 } ]; var iranArrayCount = 0; var keepMapFeatureColor = null; function getRandomFeatureColor() { if (keepMapFeatureColor) { return { num: -1, color: keepMapFeatureColor }; } else { let randomNum = Math.floor(Math.random() * 101); return randomNum >= 83 ? { num: randomNum, color: '#a366ff' } : randomNum >= 67 ? { num: randomNum, color: '#80b3ff' } : randomNum >= 50 ? { num: randomNum, color: '#66cc66' } : randomNum >= 31 ? { num: randomNum, color: '#ffeda0' } : { num: randomNum, color: '#ff704d' }; } } function getForArrayFeatureColor(arrayNum) { if (keepMapFeatureColor) { return { num: -1, color: keepMapFeatureColor }; } else { return arrayNum >= 83 ? { num: arrayNum, color: '#a366ff' } : arrayNum >= 67 ? { num: arrayNum, color: '#80b3ff' } : arrayNum >= 50 ? { num: arrayNum, color: '#66cc66' } : arrayNum >= 31 ? { num: arrayNum, color: '#ffeda0' } : { num: arrayNum, color: '#ff704d' }; } } function initStyleMapFeatures(feature) { let getRandom = null; if (setAbrarProcess) { getRandom = getForArrayFeatureColor((findFeatureInAbrarItems(iranArrayCount)).process); } else if (setBokhorProcess) { getRandom = getForArrayFeatureColor((findFeatureInBokhorItems(iranArrayCount)).process); } else { getRandom = getRandomFeatureColor(); } let makeStyle = { fillColor: getRandom.color, weight: 2, opacity: 1, color: 'white', fillOpacity: 0.5 }; if (getRandom.num != -1) { if (iranArrayCount == 35) { iranArrayCount = 0; } iranNameArray[iranArrayCount] = { name: feature.properties.province_name, feature: feature.properties.feature_id, random: getRandom.num }; iranNameArray.sort(function (itemA, itemB) { return itemB.random - itemA.random; }); iranArrayCount++; } return makeStyle; } function initStyleCityMapFeatures(feature) { let getRandom = getRandomFeatureColor(); let makeStyle = { fillColor: getRandom.color, weight: 2, opacity: 1, color: 'white', fillOpacity: 0.5 }; return makeStyle; } function highlightMapFeature(e) { let featureLayer = null; if (e.target) { featureLayer = e.target; } else { featureLayer = e; } keepMapFeatureColor = featureLayer.options.fillColor; featureLayer.setStyle({ weight: 4, color: '#666', fillOpacity: 0.8 }); if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) { featureLayer.bringToFront(); } } function resetMapFeatureHighlight(e) { let featureLayer = null; if (e.target) { featureLayer = e.target; } else { featureLayer = e; } iranMapGeo.resetStyle(featureLayer); keepMapFeatureColor = null; } function zoomMapToFeature(e) { let featureLayer = null; let featuresLayerCity = []; if (e.target) { featureLayer = e.target; } else { featureLayer = e; } map.flyToBounds(featureLayer.getBounds()); showLoaderScreen(); removeFeaturesFromMap(); removeCityFeaturesFromMap(); fullCityGeoJSONTemp.type = "FeatureCollection"; $.each(fullCityGeoJSON.features, function (key, value) { if (value && (featureLayer.feature.properties.province_id === value.properties.province_id)) { featuresLayerCity.push(value); } else { //console.log('Not Push'); } }); setTimeout(function () { //console.log(featuresLayerCity); fullCityGeoJSONTemp.features = featuresLayerCity; addCityFeaturesToMap(); }, 1000); setTimeout(function () { hideLoaderScreen(); }, 1500); } function onEachFeature(feature, featureLayer) { featureLayer.on({ mouseover: highlightMapFeature, mouseout: resetMapFeatureHighlight, click: zoomMapToFeature }); } function onEachCityFeature(feature, featureLayer) { featureLayer.on({ mouseover: highlightMapFeature, mouseout: resetMapFeatureHighlight, //click: zoomMapToFeature }); } function addTopFeatureToStat() { let statItem = null; let statMenu = $('.menu-stat-list > .stat-list'); $('.right-menu-stat-chart > .menu-stat-title').text('رتبه‌بندی استانی'); if (!setAbrarProcess && !setBokhorProcess && iranNameArray.length > 0) { for (let i = 0; i < 35; i++) { let statItemList = $('
  • '); statItem = $('
    '); // statItem.append('' + (i + 1) + ''); statItem.append('' + iranNameArray[i].name + ''); statItem.append('' + iranNameArray[i].random + '٪' + ''); if (iranNameArray[i].random >= 83) { statItem.addClass('stat-item-top-1'); } else if (iranNameArray[i].random >= 67) { statItem.addClass('stat-item-top-2'); } else if (iranNameArray[i].random >= 50) { statItem.addClass('stat-item-top-3'); } else if (iranNameArray[i].random >= 31) { statItem.addClass('stat-item-top-4'); } else { statItem.addClass('stat-item-top-5'); } statItem.css('width', iranNameArray[i].random + '%'); statMenu.append(statItemList.append(statItem)); } $(".stat-list-li").on({ mouseenter: function () { showItemProvinceInfo(parseInt($(this).attr('indexid')), 1); }, mouseleave: function () { showItemProvinceInfo(parseInt($(this).attr('indexid')), 0); } }); $(".stat-list-li").on('click', function () { zoomItemProvinceInfo(parseInt($(this).attr('indexid'))); }); } else { setTimeout(function () { for (let i = 0; i < 35; i++) { statItemList = $('
  • '); statItem = $('
    '); // statItem.append('' + (i + 1) + ''); statItem.append('' + iranNameArray[i].name + ''); statItem.append('' + iranNameArray[i].random + '٪' + ''); if (iranNameArray[i].random >= 83) { statItem.addClass('stat-item-top-1'); } else if (iranNameArray[i].random >= 67) { statItem.addClass('stat-item-top-2'); } else if (iranNameArray[i].random >= 50) { statItem.addClass('stat-item-top-3'); } else if (iranNameArray[i].random >= 31) { statItem.addClass('stat-item-top-4'); } else { statItem.addClass('stat-item-top-5'); } statItem.css('width', iranNameArray[i].random + '%'); statMenu.append(statItemList.append(statItem)); } $(".stat-list-li").on({ mouseenter: function () { showItemProvinceInfo(parseInt($(this).attr('indexid')), 1); }, mouseleave: function () { showItemProvinceInfo(parseInt($(this).attr('indexid')), 0); } }); $(".stat-list-li").on('click', function () { zoomItemProvinceInfo(parseInt($(this).attr('indexid'))); }); }, 500); } } function addFeaturesToMap() { removeCityFeaturesFromMap(); removeFeaturesFromMap(); remove141Layer(); keepMapFeatureColor = null; if (!setAbrarProcess && !setBokhorProcess && iranGeoJSON) { iranMapGeo = L.geoJson(iranGeoJSON, { style: initStyleMapFeatures, onEachFeature: onEachFeature }); iranMapGeo.addTo(map); } else { setTimeout(function () { iranMapGeo = L.geoJson(iranGeoJSON, { style: initStyleMapFeatures, onEachFeature: onEachFeature }); iranMapGeo.addTo(map); }, 500); } map.flyTo([32.62, 53.25], 6); } function removeFeaturesFromMap() { if (iranMapGeo) { map.removeLayer(iranMapGeo); //iranMapGeo = null; } } function addCityFeaturesToMap() { remove141Layer(); removeCityFeaturesFromMap(); removeFeaturesFromMap(); keepMapFeatureColor = null; if (fullCityGeoJSONTemp) { iranCityMapGeo = L.geoJson(fullCityGeoJSONTemp, { style: initStyleCityMapFeatures, onEachFeature: onEachCityFeature }); iranCityMapGeo.addTo(map); } } function removeCityFeaturesFromMap() { if (iranCityMapGeo) { map.removeLayer(iranCityMapGeo); //iranCityMapGeo = null; } } function loadIranGeoJson(callback) { showLoaderScreen(); var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open('GET', 'https://141.ir/api/provinces35geojson', true); xobj.onreadystatechange = function () { if (xobj.readyState == 4 && xobj.status == "200") { //hideLoaderScreen(); callback(xobj.responseText); } }; xobj.send(null); } function loadCityGeoJson(callback) { //showLoaderScreen(); var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open('GET', 'https://141.ir/api/cities430geojson', true); xobj.onreadystatechange = function () { if (xobj.readyState == 4 && xobj.status == "200") { hideLoaderScreen(); callback(xobj.responseText); } }; xobj.send(null); } function initIranGeoJson() { loadIranGeoJson(function (response) { iranGeoJSON = JSON.parse(response); }); } function initCityGeoJson() { loadCityGeoJson(function (response) { fullCityGeoJSON = JSON.parse(response); }); } // ------------- Ali ------------------------ var provinces = [ { id: 1, name: 'آذربایجان شرقی', lat: 37.9211202, lng: 46.6821517 }, { id: 2, name: 'آذربایجان غربی', lat: 37.7416484, lng: 45.0207638 }, { id: 3, name: 'اردبیل', lat: 38.4583983, lng: 47.9313001 }, { id: 4, name: 'اصفهان', lat: 33.196733, lng: 50.7884216, projectCoordinates: [ { id: 1, type: 1, lat: 33.096733, lng: 50.7884216, }, { id: 2, type: 1, lat: 33.396733, lng: 50.7884216 }, { id: 3, type: 2, lat: 33.196733, lng: 50.4884216 }, { id: 4, type: 2, lat: 33.196733, lng: 50.8884216 }, { id: 5, type: 3, lat: 33.196733, lng: 51.1884216 }, { id: 6, type: 4, lat: 33.496733, lng: 50.9884216 }, { id: 7, type: 2, lat: 33.696733, lng: 50.1884216 }, { id: 8, type: 3, lat: 33.296733, lng: 51.4884216 }, ] }, { id: 32, name: 'البرز', lat: 35.9960, lng: 50.9289 }, { id: 5, name: 'ایلام', lat: 33.1545696, lng: 46.7576343 }, { id: 6, name: 'بوشهر', lat: 28.8936645, lng: 51.3204877 }, { id: 7, name: 'تهران', lat: 35.5021945, lng: 51.3269098 }, { id: 8, name: 'چهارمحال و بختیاری', lat: 32.0163307, lng: 50.685709 }, { id: 29, name: 'خراسان جنوبی', lat: 33.0006776, lng: 58.3262335 }, { id: 30, name: 'خراسان رضوی', lat: 35.756361, lng: 59.1280992, projectCoordinates: [ { id: 1, type: 1, lat: 35.756361, lng: 59.1280992 }, { id: 2, type: 1, lat: 36.756361, lng: 59.3280992 }, { id: 3, type: 1, lat: 35.456361, lng: 60.1280992 }, { id: 4, type: 2, lat: 35.956361, lng: 60.5280992 }, { id: 5, type: 3, lat: 34.156361, lng: 60.5280992 }, { id: 6, type: 4, lat: 34.756361, lng: 59.6280992 }, { id: 7, type: 1, lat: 34.156361, lng: 58.6280992 }, { id: 8, type: 2, lat: 35.156361, lng: 58.4280992 }, { id: 9, type: 2, lat: 36.056361, lng: 58.1280992 }, ] }, { id: 31, name: 'خراسان شمالی', lat: 37.5378855, lng: 56.9526137 }, { id: 10, name: 'خوزستان', lat: 31.5535141, lng: 49.0077168 }, { id: 11, name: 'زنجان', lat: 36.515854, lng: 48.4777616, projectCoordinates: [ { id: 1, type: 1, lat: 36.515854, lng: 48.4777616 }, { id: 2, type: 1, lat: 35.415854, lng: 47.5777616 }, { id: 3, type: 2, lat: 37.315854, lng: 48.3777616 }, { id: 4, type: 4, lat: 36.915854, lng: 48.5777616 }, { id: 5, type: 2, lat: 37.115854, lng: 49.4777616 }, ] }, { id: 12, name: 'سمنان', lat: 35.4380386, lng: 54.8626294 }, { id: 13, name: 'سیستان و بلوچستان', lat: 28.1292481, lng: 60.8236848, projectCoordinates: [ { id: 1, type: 1, lat: 29.1292481, lng: 60.8236848 }, { id: 2, type: 1, lat: 28.1292481, lng: 61.8236848 }, { id: 3, type: 1, lat: 27.1292481, lng: 61.8236848 }, { id: 4, type: 2, lat: 28.1292481, lng: 59.8236848 }, { id: 5, type: 3, lat: 30.1292481, lng: 60.4236848 }, { id: 6, type: 4, lat: 31.1292481, lng: 61.4236848 }, { id: 7, type: 4, lat: 27.7292481, lng: 60.8236848 }, { id: 8, type: 2, lat: 27.1292481, lng: 59.2236848 }, ] }, { id: 14, name: 'فارس', lat: 29.299051, lng: 53.218456 }, { id: 28, name: 'قزوین', lat: 36.0156291, lng: 49.8398161 }, { id: 26, name: 'قم', lat: 34.7191915, lng: 51.0122844 }, { id: 16, name: 'کردستان', lat: 35.672803, lng: 47.0124376 }, { id: 15, name: 'کرمان', lat: 29.571858, lng: 57.301047 }, { id: 17, name: 'کرمانشاه', lat: 34.3789744, lng: 46.7010122 }, { id: 18, name: 'کهگیلویه و بویراحمد', lat: 30.8143476, lng: 50.8661454 }, { id: 27, name: 'گلستان', lat: 37.1984436, lng: 55.070672 }, { id: 19, name: 'گیلان', lat: 37.5115476, lng: 49.3554429 }, { id: 20, name: 'لرستان', lat: 33.5372643, lng: 48.2435197 }, { id: 21, name: 'مازندران', lat: 36.3159159, lng: 51.8968597 }, { id: 22, name: 'مرکزی', lat: 34.5302705, lng: 49.7864561 }, { id: 23, name: 'هرمزگان', lat: 27.7198095, lng: 56.335807 }, { id: 24, name: 'همدان', lat: 34.973321, lng: 48.6555779 }, { id: 25, name: 'یزد', lat: 32.2452686, lng: 55.105172, projectCoordinates: [ { id: 1, type: 1, lat: 32.1452686, lng: 55.205172, }, { id: 2, type: 1, lat: 31.8452686, lng: 55.205172, }, { id: 3, type: 1, lat: 31.8452686, lng: 55.405172, }, { id: 4, type: 2, lat: 31.6452686, lng: 55.605172, }, { id: 5, type: 2, lat: 32.3452686, lng: 55.205172, }, { id: 6, type: 3, lat: 32.9452686, lng: 55.105172, }, { id: 7, type: 3, lat: 33.2452686, lng: 55.905172, }, ] }, ]; $('svg #iran polygon').on('click', function () { if ($('.left-menu-map').css('width') == '500px') { let selectedProvince = provinces.find(entry => entry.id == parseInt(this.id.substring(3))); // areaChart = new Chart(areaChartCanvas, { // type: 'line', // data: areaChartData2, // options: areaChartOptions // }); // let numberOfProjects = $('.numberOfProjects'); // let numberOfActiveProjects = $('#numberOfActiveProjects'); // let numberOfOpenedProjects = $('#numberOfOpenedProjects'); // let numberOfFinishedProjects = $('#numberOfFinishedProjects'); // let numberOfStoppedProjects = $('#numberOfStoppedProjects'); // jQuery({ Counter: 0 }).animate({ Counter: Math.floor(Math.random() * 100) + 700 }, { // duration: 1000, // easing: 'swing', // step: function () { // numberOfProjects.text(Math.ceil(this.Counter)); // } // }); // jQuery({ Counter: 0 }).animate({ Counter: Math.floor(Math.random() * 100) + 400 }, { // duration: 1000, // easing: 'swing', // step: function () { // numberOfActiveProjects.text(Math.ceil(this.Counter)); // } // }); // jQuery({ Counter: 0 }).animate({ Counter: Math.floor(Math.random() * 100) + 250 }, { // duration: 1000, // easing: 'swing', // step: function () { // numberOfOpenedProjects.text(Math.ceil(this.Counter)); // } // }); // jQuery({ Counter: 0 }).animate({ Counter: Math.floor(Math.random() * 100) + 100 }, { // duration: 1000, // easing: 'swing', // step: function () { // numberOfFinishedProjects.text(Math.ceil(this.Counter)); // } // }); // jQuery({ Counter: 0 }).animate({ Counter: Math.floor(Math.random() * 50) }, { // duration: 1000, // easing: 'swing', // step: function () { // numberOfStoppedProjects.text(Math.ceil(this.Counter)); // } // }); map.removeLayer(markerLayers); map.flyTo([selectedProvince.lat, selectedProvince.lng], 9); for (let index = 0; index < selectedProvince.projectCoordinates.length; index++) { switch (selectedProvince.projectCoordinates[index].type) { case 1: { L.marker( [selectedProvince.projectCoordinates[index].lat, selectedProvince.projectCoordinates[index].lng], { icon: blueIcon } ).bindPopup(getCustomPopupContent(selectedProvince.name, 2), { 'className': 'customPopupStyle' }) .addTo(map); break; } case 2: { L.marker( [selectedProvince.projectCoordinates[index].lat, selectedProvince.projectCoordinates[index].lng], { icon: greenIcon } ).bindPopup(getCustomPopupContent(selectedProvince.name, 2), { 'className': 'customPopupStyle' }) .addTo(map); break; } case 3: { L.marker( [selectedProvince.projectCoordinates[index].lat, selectedProvince.projectCoordinates[index].lng], { icon: yellowIcon } ).bindPopup(getCustomPopupContent(selectedProvince.name, 2), { 'className': 'customPopupStyle' }) .addTo(map); break; } case 4: { L.marker( [selectedProvince.projectCoordinates[index].lat, selectedProvince.projectCoordinates[index].lng], { icon: redIcon } ).bindPopup(getCustomPopupContent(selectedProvince.name, 2), { 'className': 'customPopupStyle' }) .addTo(map); break; } } } } }); // Project icons var blueIcon = L.divIcon({ className: 'custom-div-icon', html: "", iconSize: [30, 42], // iconAnchor: [15, 42] }); var greenIcon = L.divIcon({ className: 'custom-div-icon', html: "", iconSize: [30, 42], // iconAnchor: [15, 42] }); var yellowIcon = L.divIcon({ className: 'custom-div-icon', html: "", iconSize: [30, 42], // iconAnchor: [15, 42] }); var redIcon = L.divIcon({ className: 'custom-div-icon', html: "", iconSize: [30, 42], // iconAnchor: [15, 42] }); function getPopupContent(type) { // switch (type) { // case 1: { // // Active // break; // } // case 2: { // // Opened // break; // } // case 3: { // // Finished // break; // } // case 4: { // // Stopped // break; // } // } return "\
    \
    \ \"\"\ پهنه بندی جاده های روستایی\
    \
    \
    نوع عملیات
    "+ operationType + "
    \
    وضعیت فعلی پروژه
    "+ getProjectStatus(type) + "
    \
    اداره کل
    " + selectedProvince + "
    \
    درصد پیشرفت فیزیکی
    " + getProjectProgress() + "%
    \
    "; } function getProjectStatus(type) { switch (type) { case 1: return 'فعال'; case 2: return 'افتتاح شده'; case 3: return 'خاتمه یافته'; case 4: return 'متوقف شده'; } } function getProjectProgress() { let percentage = Math.floor(Math.random() * 100) + 1; // returns a random integer from 0 to 99 + 1 return percentage; } function getParameterByName(name) { let url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } if (getParameterByName('operationType')) { var operationType = getParameterByName('operationType'); var projectStatus = getParameterByName('projectStatus'); var selectedProvince = getParameterByName('selectedProvince'); var selectedTown = getParameterByName('selectedTown'); var sourceLat = getParameterByName('sourceLat'); var sourceLng = getParameterByName('sourceLng'); L.marker( [sourceLat, sourceLng], { icon: greenIcon } ).bindPopup(getPopupContent(returnOperationType(projectStatus)), { 'className': 'customPopupStyle' }) .addTo(map); } function returnOperationType(status) { switch (status) { case 'فعال': { return 1; } case 'متوقف': { return 4; } case 'خاتمه‌یافته': { return 3; } } } function getCustomPopupContent(data, type) { if (type == 1) { return "\
    \
    \ \"\"\ پهنه بندی جاده های روستایی\
    \
    \
    نوع عملیات
    "+ generateRandom(1) + "
    \
    وضعیت فعلی پروژه
    "+ generateRandom(2) + "
    \
    اداره کل
    " + returnProvinceString(data.ProvinceID) + "
    \
    درصد پیشرفت فیزیکی
    " + getProjectProgress() + "%
    \
    "; } else { return "\
    \
    \ \"\"\ پهنه بندی جاده های روستایی\
    \
    \
    نوع عملیات
    "+ generateRandom(1) + "
    \
    وضعیت فعلی پروژه
    "+ generateRandom(2) + "
    \
    اداره کل
    " + data + "
    \
    درصد پیشرفت فیزیکی
    " + getProjectProgress() + "%
    \
    "; } } function generateRandom(index) { switch (index) { case 1: { // Operation Type let randomNumber = Math.floor(Math.random() * 2) + 1; // 1 or 2 if (randomNumber == 1) return 'احداث' else return 'نگهداری'; } case 2: { // Project Status let randomNumber = Math.floor(Math.random() * 3) + 1; // 1, 2, or 3 switch (randomNumber) { case 1: return 'فعال'; case 2: return 'متوقف'; case 3: return 'خاتمه یافته'; } } } } function returnProvinceString(provinceId) { switch (provinceId) { case '1': return 'مازندران'; case '2': return 'تهران'; case '3': return 'فارس'; case '4': return 'خراسان رضوی'; case '5': return 'آذربایجان غربی'; case '6': return 'آذربایجان شرقی'; case '7': return 'اردبیل'; case '8': return 'گیلان'; case '9': return 'زنجان'; case '10': return 'کردستان'; case '11': return 'کرمانشاه'; case '12': return 'همدان'; case '13': return 'قزوین'; case '14': return 'البرز'; case '15': return 'گلستان'; case '16': return 'خراسان شمالی'; case '17': return 'سمنان'; case '18': return 'قم'; case '19': return 'مرکزی'; case '20': return 'لرستان'; case '21': return 'ایلام'; case '22': return 'اصفهان'; case '23': return 'یزد'; case '24': return 'خراسان جنوبی'; case '25': return 'چهارمحال و بختیاری'; case '26': return 'خوزستان'; case '27': return 'کهگیلویه و بویر احمد'; case '28': return 'بوشهر'; case '29': return 'کرمان'; case '30': return 'سیستان و بلوچستان'; case '31': return 'هرمزگان'; } } function showLayer(index) { if (markerLayers != null) { map.removeLayer(markerLayers); } switch (index) { case 0: { $.post('https://141.ir/api/camera', function (data) { markerLayers = L.markerClusterGroup(); for (let index = 0; index < data.length; index++) { let marker = L.marker( [data[index].lat, data[index].lng], { icon: blueIcon } ).bindPopup(getCustomPopupContent(data[index], 1), { 'className': 'customPopupStyle' }); markerList.push(marker); } markerLayers.addLayers(markerList); map.addLayer(markerLayers); }); break; } case 1: { $.post('https://141.ir/api/roadoperation', function (data) { markerLayers = L.markerClusterGroup({ disableClusteringAtZoom: 5 }); for (let index = 0; index < data.length; index++) { let marker = L.marker( [data[index].lat, data[index].lng], { icon: blueIcon } ).bindPopup(getCustomPopupContent(data[index], 1), { 'className': 'customPopupStyle' }); markerList.push(marker); } markerLayers.addLayers(markerList); map.addLayer(markerLayers); }); break; } case 2: { $.post('https://141.ir/api/roadaccident', function (data) { markerLayers = L.markerClusterGroup({ disableClusteringAtZoom: 5 }); for (let index = 0; index < data.length; index++) { let marker = L.marker( [data[index].lat, data[index].lng], { icon: blueIcon } ).bindPopup(getCustomPopupContent(data[index], 1), { 'className': 'customPopupStyle' }); markerList.push(marker); } markerLayers.addLayers(markerList); map.addLayer(markerLayers); }); break; } case 3: { $.post('https://141.ir/api/weather', function (data) { markerLayers = L.markerClusterGroup(); for (let index = 0; index < data.length; index++) { let marker = L.marker( [data[index].lat, data[index].lng], { icon: blueIcon } ).bindPopup(getCustomPopupContent(data[index], 1), { 'className': 'customPopupStyle' }); markerList.push(marker); } markerLayers.addLayers(markerList); map.addLayer(markerLayers); }); } } } // ------------- Ali End ------------------------ function showLoaderScreen() { $('.starter-loader-container').css('display', 'flex').hide().fadeIn(); } function hideLoaderScreen() { $('.starter-loader-container').fadeOut(); } function show141Layer(index) { if (marker141Layers != null) { marker141List = []; map.removeLayer(marker141Layers); } showLoaderScreen(); switch (index) { case 0: { $.post(API_ENDPOINT + '/camera', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('دوربین: ' + data[i].Title); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 1: { $.post(API_ENDPOINT + '/otfapi', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('ترددشمار: ' + data[i].m_n); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 2: { $.post(API_ENDPOINT + '/roadoperation', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('کارگاه: ' + data[i].OperationName); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 3: { $.post(API_ENDPOINT + '/roadblock', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('انسداد: ' + data[i].Title); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 4: { $.post(API_ENDPOINT + '/emdad', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.ikco.length; i++) { let marker = L.marker( [data.ikco[i].lat, data.ikco[i].lng], { icon: blueIcon } ).bindPopup('امداد فنی: ' + data.ikco[i].onvan); marker141List.push(marker); } for (let i = 0; i < data.saipa.length; i++) { let marker = L.marker( [data.saipa[i].lat, data.saipa[i].lng], { icon: blueIcon } ).bindPopup('امداد فنی'); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 5: { $.post(API_ENDPOINT + '/weather', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('آب و هوا: ' + data[i].Station_Name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 6: { $.post(API_ENDPOINT + '/gasstation', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('جایگاه سوخت: ' + data[i].station_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 7: { $.post(API_ENDPOINT + '/complex', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('خدمات رفاهی: ' + data[i].complex_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 8: { $.post(API_ENDPOINT + '/mosque', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('نمازخانه: ' + data[i].mosque_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 9: { $.post(API_ENDPOINT + '/roadaccident', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('تصادفات: ' + data[i].CollisionTypeTitle); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 10: { $.post(API_ENDPOINT + '/tollhouse', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('راهدارخانه: ' + data[i].toll_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 11: { $.post(API_ENDPOINT + '/hospital', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('خدمات درمانی: ' + data[i].hos_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } case 12: { $.post(API_ENDPOINT + '/repair', function (data) { marker141Layers = L.markerClusterGroup(); for (let i = 0; i < data.length; i++) { let marker = L.marker( [data[i].lat, data[i].lng], { icon: blueIcon } ).bindPopup('تعمیرگاه: ' + data[i].repair_name); marker141List.push(marker); } marker141Layers.addLayers(marker141List); map.addLayer(marker141Layers); hideLoaderScreen(); }); break; } } } function remove141Layer() { if (marker141Layers != null) { marker141List = []; map.removeLayer(marker141Layers); $('.left-menu-141 > .item-menu-141.item-141-active').removeClass('item-141-active'); } } function showAbrarChartStat() { let statItem = null; let statMenu = $('.menu-stat-list > .stat-list'); $('.right-menu-stat-chart > .menu-stat-title').text('پیشرفت فیزیکی پروژه‌های طرح ابرار'); for (let i = 0; i < 35; i++) { let statItemList = $('
  • '); statItem = $('
    '); statItem.append('' + abrarProvinceNameArray[i].name + ''); statItem.append('' + abrarProvinceNameArray[i].process + '٪' + ''); if (abrarProvinceNameArray[i].process >= 83) { statItem.addClass('stat-item-top-1'); } else if (abrarProvinceNameArray[i].process >= 67) { statItem.addClass('stat-item-top-2'); } else if (abrarProvinceNameArray[i].process >= 50) { statItem.addClass('stat-item-top-3'); } else if (abrarProvinceNameArray[i].process >= 31) { statItem.addClass('stat-item-top-4'); } else { statItem.addClass('stat-item-top-5'); } statItem.css('width', abrarProvinceNameArray[i].process + '%'); statMenu.append(statItemList.append(statItem)); } $(".stat-list-li").on({ mouseenter: function () { showAbrarProvinceInfo(parseInt($(this).attr('indexid')), 1); }, mouseleave: function () { showAbrarProvinceInfo(parseInt($(this).attr('indexid')), 0); } }); $(".stat-list-li").on('click', function () { zoomAbrarProvinceInfo(parseInt($(this).attr('indexid'))); }); handleAbrarButtonClick(1); addFeaturesToMap(); } function hideAbrarChartStat() { handleAbrarButtonClick(0); } function handleAbrarButtonClick(openStat = 1) { if (openStat) { $('.right-menu-stat-chart').css('top', '88px'); $('.left-menu-stat-chart-info').css('top', '88px'); } else { $('.right-menu-stat-chart').css('top', '-858px'); $('.left-menu-stat-chart-info').css('top', '-308px'); emptyStatItems(); removeFeaturesFromMap(); } } function findFeatureInAbrarItems(featureRow) { for (let i = 0; i < 35; i++) { if (abrarProvinceNameArray[i].feature == featureRow) { return abrarProvinceNameArray[i]; } } return -1; } // ----------------------------------------------------------------------- function showBokhorChartStat() { let statItem = null; let statMenu = $('.menu-stat-list > .stat-list'); $('.right-menu-stat-chart > .menu-stat-title').text('برخورداری راه‌های روستایی آسفالته کشور'); for (let i = 0; i < 35; i++) { let statItemList = $('
  • '); statItem = $('
    '); statItem.append('' + bokhorProvinceNameArray[i].name + ''); statItem.append('' + bokhorProvinceNameArray[i].process + '٪' + ''); if (bokhorProvinceNameArray[i].process >= 83) { statItem.addClass('stat-item-top-1'); } else if (bokhorProvinceNameArray[i].process >= 67) { statItem.addClass('stat-item-top-2'); } else if (bokhorProvinceNameArray[i].process >= 50) { statItem.addClass('stat-item-top-3'); } else if (bokhorProvinceNameArray[i].process >= 31) { statItem.addClass('stat-item-top-4'); } else { statItem.addClass('stat-item-top-5'); } statItem.css('width', bokhorProvinceNameArray[i].process + '%'); statMenu.append(statItemList.append(statItem)); } $(".stat-list-li").on({ mouseenter: function () { showBokhorProvinceInfo(parseInt($(this).attr('indexid')), 1); }, mouseleave: function () { showBokhorProvinceInfo(parseInt($(this).attr('indexid')), 0); } }); $(".stat-list-li").on('click', function () { zoomBokhorProvinceInfo(parseInt($(this).attr('indexid'))); }); handleBokhorButtonClick(1); addFeaturesToMap(); } function hideBokhorChartStat() { handleBokhorButtonClick(0); } function handleBokhorButtonClick(openStat = 1) { if (openStat) { $('.right-menu-stat-chart').css('top', '88px'); $('.left-menu-stat-chart-info').css('top', '88px'); } else { $('.right-menu-stat-chart').css('top', '-858px'); $('.left-menu-stat-chart-info').css('top', '-308px'); emptyStatItems(); removeFeaturesFromMap(); } } function findFeatureInBokhorItems(featureRow) { for (let i = 0; i < 35; i++) { if (bokhorProvinceNameArray[i].feature == featureRow) { return bokhorProvinceNameArray[i]; } } return -1; } function showItemProvinceInfo(index, show) { let featureItem = null; if (iranNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[iranNameArray[index].feature]]; } if (show) { if (featureItem) { highlightMapFeature(featureItem); } } else { if (featureItem) { resetMapFeatureHighlight(featureItem); } } } function showAbrarProvinceInfo(index, show) { let featureItem = null; if (abrarProvinceNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[abrarProvinceNameArray[index].feature]]; } if (show) { $('.menu-stat-info-title').text(abrarProvinceNameArray[index].name); $('.menu-stat-info-content').empty(); $('.menu-stat-info-content').text(abrarProvinceNameArray[index].process); if (featureItem) { highlightMapFeature(featureItem); } } else { $('.menu-stat-info-title').text('اطلاعات بیشتر'); $('.menu-stat-info-content').empty().append('برای نمایش اطلاعات هر بخش بر روی نقشه یا نمودار آماری آن حرکت کنید.'); if (featureItem) { resetMapFeatureHighlight(featureItem); } } } function showBokhorProvinceInfo(index, show) { let featureItem = null; if (bokhorProvinceNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[bokhorProvinceNameArray[index].feature]]; } if (show) { $('.menu-stat-info-title').text(bokhorProvinceNameArray[index].name); $('.menu-stat-info-content').empty(); $('.menu-stat-info-content').text(bokhorProvinceNameArray[index].process); if (featureItem) { highlightMapFeature(featureItem); } } else { $('.menu-stat-info-title').text('اطلاعات بیشتر'); $('.menu-stat-info-content').empty().append('برای نمایش اطلاعات هر بخش بر روی نقشه یا نمودار آماری آن حرکت کنید.'); if (featureItem) { resetMapFeatureHighlight(featureItem); } } } function zoomItemProvinceInfo(index) { let featureItem = null; if (iranNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[iranNameArray[index].feature]]; } zoomMapToFeature(featureItem); } function zoomAbrarProvinceInfo(index) { let featureItem = null; if (abrarProvinceNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[abrarProvinceNameArray[index].feature]]; } zoomMapToFeature(featureItem); } function zoomBokhorProvinceInfo(index) { let featureItem = null; if (bokhorProvinceNameArray[index].feature !== -1 && iranMapGeo) { featureItem = iranMapGeo._layers[Object.keys(iranMapGeo._layers)[bokhorProvinceNameArray[index].feature]]; } zoomMapToFeature(featureItem); }