2025-06-27 10:04:22 +08:00

473 lines
19 KiB
JavaScript

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 + '<br/>' + '处罚数量: ' + params.value;
}
},
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
)
;
};
$scope.getData();
}
])
;