app.controller('JiedaoHegelvCtrl', ['$scope', 'YPJBXXGL', '$uibModal', '$sessionStorage', '$state', '$http', '$filter', 'mainUrl', 'wyOdataNodeService', 'stConfig', '$timeout', function ($scope, YPJBXXGL, $uibModal, $sessionStorage, $state, $http, $filter, mainUrl, wyOdataNodeService, stConfig, $timeout, $uibModalInstance, item) { // 定义分数区间和对应颜色 $scope.scoreIntervals = [ {min: -1, max: 24, color: '#93c5fd'}, {min: 24, max: 50, color: '#60a5fa'}, {min: 50, max: 75, color: '#3b82f6'}, {min: 75, max: 100, color: '#2563eb'} ]; // 定义颜色映射 $scope.colorMap = { '七宝镇': 38, '万祥镇': 90, '三星镇': 77, '三林镇': 97, '堡镇': 97, '庙镇': 97, '上实现代农业园区': 11, '上海市奉贤区海湾旅游区': 1, '上海海港综合经济开发区': 10, '上钢新村街道': 60, '东平林场': 50, '东平镇': 2, '东明路街道': 74, '中兴镇': 75, '中山街道': 96, '临汾路街道': 13, '九亭镇': 5, '书院镇': 68, '五角场街道': 16, '五角场镇': 39, '五里桥街道': 61, '亭林镇': 17, '仙霞新村街道': 66, '真如镇': 66, '佘山镇': 42, '共和新路街道': 9, '凉城新村街道': 67, '凌云路街道': 88, '前卫农场': 89, '北新泾街道': 70, '北站街道': 45, '北蔡镇': 29, '半淞园路街道': 63, '华亭镇': 21, '华新镇': 17, '华泾镇': 58, '华漕镇': 15, '华阳路街道': 97, '南京东路街道': 79, '南京西路街道': 80, '南桥镇': 1, '西渡街道': 53, '南汇新城镇': 67, '南码头路街道': 23, '南翔镇': 96, '友谊路街道': 53, '古美街道': 5, '叶榭镇': 93, '合庆镇': 49, '向化镇': 64, '吕巷镇': 18, '吴泾镇': 19, '吴淞街道': 33, '周家桥街道': 87, '周家渡街道': 38, '周浦镇': 73, '嘉兴路街道': 20, '嘉定工业区': 18, '嘉定镇街道': 57, '四团镇': 44, '四川北路街道': 1, '四平路街道': 91, '城桥镇': 26, '塘桥街道': 54, '夏阳街道': 83, '外冈镇': 45, '外滩街道': 61, '外高桥保税区': 49, '大团镇': 33, '大场镇': 56, '大宁路街道': 49, '大桥街道': 90, '天山路街道': 37, '天平路街道': 73, '天目西路街道': 37, '奉城镇': 69, '奉浦社区': 96, '安亭镇': 24, '定海路街道': 22, '宜川路街道': 32, '宝山城市工业园区': 49, '宝山路街道': 33, '宣桥镇': 31, '小东门街道': 25, '小昆山镇': 57, '山阳镇': 59, '岳阳街道': 97, '川沙新镇': 78, '平凉路街道': 69, '广中路街道': 58, '庄行镇': 30, '庙行镇': 95, '康健新村街道': 94, '康桥镇': 88, '廊下镇': 55, '延吉新村街道': 54, '建设镇': 92, '张堰镇': 48, '张庙街道': 47, '张江镇': 7, '张江高科技园区': 60, '彭浦新村街道': 3, '彭浦镇': 5, '徐家汇街道': 62, '徐泾镇': 34, '徐行镇': 70, '惠南镇': 94, '打浦桥街道': 23, '控江路街道': 87, '提篮桥街道': 52, '斜土路街道': 44, '新华路街道': 19, '新场镇': 77, '新成路街道': 18, '新村乡': 96, '新桥镇': 20, '新江湾城街道': 63, '新河镇': 33, '新泾镇': 69, '新浜镇': 87, '新海镇': 92, '新虹街道': 32, '方松街道': 76, '曲阳路街道': 93, '曹家渡街道': 4, '曹杨新村街道': 29, '曹路镇': 48, '月浦镇': 82, '朱家角镇': 67, '朱泾镇': 35, '杨行镇': 22, '松江工业区': 74, '枫林路街道': 57, '枫泾镇': 20, '柘林镇': 72, '桃浦镇': 29, '梅陇镇': 93, '横沙乡': 13, '欧阳路街道': 34, '殷行街道': 53, '永丰街道': 30, '江宁路街道': 25, '江川路街道': 68, '江桥镇': 79, '江浦路街道': 65, '江湾镇街道': 85, '江苏路街道': 52, '沪东新村街道': 90, '泖港镇': 3, '泗泾镇': 85, '泥城镇': 40, '洋泾街道': 86, '洞泾镇': 8, '浦兴路街道': 18, '浦江镇': 47, '海湾镇': 92, '淞南镇': 80, '淮海中路街道': 49, '港沿镇': 54, '港西镇': 98, '湖南路街道': 92, '漕河泾新兴技术开发区': 11, '漕河泾街道': 91, '漕泾镇': 96, '潍坊新村街道': 78, '瑞金二路街道': 85, '甘泉路街道': 42, '田林街道': 96, '白鹤镇': 85, '盈浦街道': 74, '真新街道': 31, '石化街道': 56, '石泉路街道': 3, '石湖荡镇': 31, '石门二路街道': 88, '祝桥镇': 61, '程家桥街道': 16, '竖新镇': 98, '练塘镇': 84, '绿华镇': 77, '罗店镇': 48, '罗泾镇': 10, '老港镇': 5, '老西门街道': 79, '航头镇': 32, '花木街道': 54, '芷江西路街道': 15, '莘庄工业区': 90, '莘庄镇': 92, '菊园新区': 91, '虹桥街道': 93, '虹桥镇': 24, '虹梅路街道': 9, '豫园街道': 97, '赵巷镇': 69, '重固镇': 7, '金山卫镇': 34, '金山工业区': 64, '金杨新村街道': 57, '金桥经济技术开发区': 17, '金桥镇': 84, '金汇镇': 8, '金泽镇': 47, '金海社区': 16, '长兴镇': 15, '长寿路街道': 16, '长征镇': 89, '长桥街道': 76, '长白新村街道': 30, '长风新村街道': 38, '陆家嘴街道': 53, '陈家镇': 49, '青村镇': 39, '静安寺街道': 43, '顾村镇': 4, '颛桥镇': 21, '香花桥街道': 89, '马桥镇': 26, '马陆镇': 66, '高东镇': 88, '高境镇': 12, '高桥镇': 72, '车墩镇': 72, '高行镇': 76, '唐镇': 76, '龙华街道': 49 }; // 如果需要一次性生成整个对象,可以使用以下方法 const allAreas = [ "外滩街道", "豫园街道", "五里桥街道", "半淞园路街道", "打浦桥街道", "瑞金二路街道", "南京东路街道", "淮海中路街道", "小东门街道", "老西门街道", "漕河泾街道", "田林街道", "长桥街道", "虹梅路街道", "华泾镇", "枫林路街道", "湖南路街道", "天平路街道", "斜土路街道", "徐家汇街道", "康健新村街道", "龙华街道", "漕河泾新兴技术开发区", "凌云路街道", "华阳路街道", "新华路街道", "北新泾街道", "江苏路街道", "程家桥街道", "周家桥街道", "新泾镇", "虹桥街道", "天山路街道", "仙霞新村街道", "彭浦镇", "共和新路街道", "北站街道", "静安寺街道", "大宁路街道", "石门二路街道", "天目西路街道", "临汾路街道", "芷江西路街道", "南京西路街道", "宝山路街道", "江宁路街道", "曹家渡街道", "彭浦新村街道", "宜川路街道", "桃浦镇", "长征镇", "长寿路街道", "甘泉路街道", "石泉路街道", "曹杨新村街道", "长风新村街道", "四川北路街道", "广中路街道", "江湾镇街道", "提篮桥街道", "凉城新村街道", "嘉兴路街道", "曲阳路街道", "欧阳路街道", "殷行街道", "五角场镇", "平凉路街道", "五角场街道", "定海路街道", "四平路街道", "大桥街道", "新江湾城街道", "江浦路街道", "长白新村街道", "控江路街道", "延吉新村街道", "梅陇镇", "七宝镇", "颛桥镇", "莘庄镇", "华漕镇", "吴泾镇", "浦江镇", "马桥镇", "莘庄工业区", "虹桥镇", "江川路街道", "新虹街道", "古美街道", "庙行镇", "高境镇", "吴淞街道", "张庙街道", "大场镇", "月浦镇", "宝山城市工业园区", "淞南镇", "友谊路街道", "杨行镇", "顾村镇", "罗泾镇", "罗店镇", "真新街道", "菊园新区", "嘉定工业区", "嘉定镇街道", "新成路街道", "徐行镇", "江桥镇", "马陆镇", "华亭镇", "南翔镇", "外冈镇", "安亭镇", "大团镇", "潍坊新村街道", "洋泾街道", "浦兴路街道", "万祥镇", "书院镇", "北蔡镇", "张江镇", "新场镇", "曹路镇", "泥城镇", "老港镇", "金桥镇", "东明路街道", "塘桥街道", "上钢新村街道", "金杨新村街道", "南汇新城镇", "周家渡街道", "高东镇", "合庆镇", "外高桥保税区", "沪东新村街道", "金桥经济技术开发区", "三林镇", "周浦镇", "陆家嘴街道", "花木街道", "康桥镇", "航头镇", "高桥镇", "高行镇", "张江高科技园区", "惠南镇", "祝桥镇", "宣桥镇", "川沙新镇", "南码头路街道", "亭林镇", "金山卫镇", "金山工业区", "枫泾镇", "山阳镇", "朱泾镇", "廊下镇", "张堰镇", "漕泾镇", "石化街道", "吕巷镇", "九亭镇", "佘山镇", "新桥镇", "石湖荡镇", "松江工业区", "新浜镇", "泖港镇", "泗泾镇", "洞泾镇", "永丰街道", "小昆山镇", "岳阳街道", "中山街道", "方松街道", "叶榭镇", "练塘镇", "夏阳街道", "盈浦街道", "香花桥街道", "徐泾镇", "白鹤镇", "赵巷镇", "重固镇", "金泽镇", "朱家角镇", "华新镇", "南桥镇", "金海社区", "上海市奉贤区海湾旅游区", "庄行镇", "柘林镇", "青村镇", "上海海港综合经济开发区", "奉浦社区", "海湾镇", "金汇镇", "四团镇", "奉城镇", "绿华镇", "新河镇", "三星镇", "竖新镇", "新海镇", "中兴镇", "城桥镇", "前卫农场", "陈家镇", "东平林场", "港西镇", "新村乡", "港沿镇", "向化镇", "上实现代农业园区", "建设镇", "东平镇", "长兴镇", "横沙乡" ]; // 根据分数获取颜色 $scope.getColorByScore = function (score) { for (let range of $scope.scoreIntervals) { if (score >= range.min && score <= range.max) { return range.color; } } return '#FFFFFF'; // 默认颜色 }; // 封装一个方法来构建请求参数 function buildParams(paramsObj) { var params = {}; for (var key in paramsObj) { if (paramsObj.hasOwnProperty(key) && paramsObj[key] !== undefined && paramsObj[key] !== null && paramsObj[key] !== '') { params[key] = paramsObj[key]; } } return params; } $scope.getData = function () { // 使用封装的方法构建请求参数 var params = buildParams({ year: $scope.year, hj: $scope.hj, szqx: $scope.szqx, month: $scope.month }); $http.get('./XZCF/GetChufaSumByJieDao', {params: params}) .success(function (res) { var data = res.data; data.forEach(function (item) { if ($scope.colorMap.hasOwnProperty(item.street_name)) { $scope.colorMap[item.street_name] = item.punish_sum; } }); // 计算百分位数对应的索引 function getPercentileValue(arr, percentile) { if (arr.length === 0) return null; var index = (percentile / 100) * (arr.length - 1); var lower = Math.floor(index); var upper = lower + 1; var weight = index % 1; if (upper >= arr.length) return arr[lower]; return arr[lower] * (1 - weight) + arr[upper] * weight; } // 对数组进行排序 let map = data.sort(function (a, b) { return a.punish_sum - b.punish_sum; }).map(value => { let punishSum = value.punish_sum; return punishSum; }); // 获取第90%的值 var percentile90 = getPercentileValue(data.map(value => value.punish_sum), 90); // 获取第75%的值 var percentile75 = getPercentileValue(data.map(value => value.punish_sum), 75); // 获取第50%的值 var percentile50 = getPercentileValue(data.map(value => value.punish_sum), 50); $scope.scoreIntervals = [ {min: -1, max: percentile50, color: '#93c5fd'}, {min: percentile50, max: percentile75, color: '#60a5fa'}, {min: percentile75, max: percentile90, color: '#3b82f6'}, {min: percentile90, max: 100, color: '#2563eb'} ]; // 调用初始化方法 $scope.initChart(); }) }; // 初始化 ECharts $scope.initChart = function () { fetch('json/shanghaiJiedao2.geojson') .then(response => response.json()).then(geojsonData => { // 注册地图 echarts.registerMap('JiedaoMap', geojsonData); // 初始化 ECharts 实例 var myChart = echarts.init(document.getElementById('main')); // 准备数据 let data = Object.keys($scope.colorMap).map(key => ({ name: key, value: $scope.colorMap[key] })); // 配置项 var option = { backgroundColor: "#051b4a", visualMap: { pieces: $scope.scoreIntervals.map(interval => ({ gte: interval.min, lte: interval.max, color: interval.color })), show: true, // inRange: ['red','blue'], textStyle: { color: "#fff", }, //定位区间 // left: '60%', // 距离容器左侧 10% // top: '13%', // 垂直居中 }, series: [ { type: 'map', mapType: 'JiedaoMap', // 使用注册的地图名称 roam: true, label: { show: true, textStyle: { fontSize: 10, // 设置字体大小 color: '#1e1e1e' // 设置字体颜色 } }, itemStyle: { areaColor: '#eee', borderColor: '#444' }, data: data } ], geo: { show: true, map: "shanghaishi", roam: true, zoom: 1, label: { //@ts-ignore emphasis: {show: false} }, select: { label: { show: false, }, itemStyle: { color: "", }, }, itemStyle: { borderColor: "rgba(147, 235, 248, 1)", borderWidth: 1, shadowColor: "rgba(128, 217, 248, 1)", shadowOffsetX: -2, shadowOffsetY: 2, shadowBlur: 10, emphasis: { areaColor: "#389BB7", borderWidth: 0, }, }, }, tooltip: { show: true, trigger: "item", formatter: function (params) { return params.name + '
' + '处罚数量: ' + params.value; } }, }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); } ) ; }; $scope.getData(); } ]) ;