├── 3d
├── .babelrc
├── .gitignore
├── .prettierrc
├── package.json
└── src
│ ├── TimeSeries.js
│ ├── app.js
│ ├── constants.js
│ ├── index.html
│ ├── styles
│ └── main.css
│ ├── translate.js
│ └── utils
│ └── index.js
├── Dashboard
├── .browserslistrc
├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── babel.config.js
├── deploy.sh
├── package.json
├── public
│ ├── index.html
│ ├── robots.txt
│ └── static
│ │ ├── Chart
│ │ ├── css
│ │ │ └── index.css
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── js
│ │ │ ├── 4add81f750.js
│ │ │ ├── data.js
│ │ │ ├── index.js
│ │ │ ├── react-dom.development.js
│ │ │ ├── react.development.js
│ │ │ ├── translate.js
│ │ │ └── utils.js
│ │ ├── China
│ │ ├── README.md
│ │ ├── _config.yml
│ │ ├── getOnsInfo.json
│ │ ├── index.html
│ │ ├── js
│ │ │ ├── echarts.min.js
│ │ │ └── map
│ │ │ │ ├── china.js
│ │ │ │ └── province
│ │ │ │ ├── anhui.js
│ │ │ │ ├── aomen.js
│ │ │ │ ├── beijing.js
│ │ │ │ ├── chongqing.js
│ │ │ │ ├── fujian.js
│ │ │ │ ├── gansu.js
│ │ │ │ ├── guangdong.js
│ │ │ │ ├── guangxi.js
│ │ │ │ ├── guizhou.js
│ │ │ │ ├── hainan.js
│ │ │ │ ├── hebei.js
│ │ │ │ ├── heilongjiang.js
│ │ │ │ ├── henan.js
│ │ │ │ ├── hubei.js
│ │ │ │ ├── hunan.js
│ │ │ │ ├── jiangsu.js
│ │ │ │ ├── jiangxi.js
│ │ │ │ ├── jilin.js
│ │ │ │ ├── liaoning.js
│ │ │ │ ├── neimenggu.js
│ │ │ │ ├── ningxia.js
│ │ │ │ ├── qinghai.js
│ │ │ │ ├── shandong.js
│ │ │ │ ├── shanghai.js
│ │ │ │ ├── shanxi.js
│ │ │ │ ├── shanxi1.js
│ │ │ │ ├── sichuan.js
│ │ │ │ ├── taiwan.js
│ │ │ │ ├── tianjin.js
│ │ │ │ ├── xianggang.js
│ │ │ │ ├── xinjiang.js
│ │ │ │ ├── xizang.js
│ │ │ │ ├── yunnan.js
│ │ │ │ └── zhejiang.js
│ │ ├── libs
│ │ │ └── axios.min.js
│ │ └── province.json
│ │ └── Ranking
│ │ ├── color_ranges.js
│ │ ├── config.js
│ │ ├── imgs.js
│ │ ├── index.html
│ │ ├── nCov_china_0319.csv
│ │ ├── nCov_world_0516.csv
│ │ ├── nCov_wuhan_0319.csv
│ │ ├── stylesheet.css
│ │ ├── university.csv
│ │ ├── university_ranking.csv
│ │ └── visual.js
├── src
│ ├── API.js
│ ├── App.vue
│ ├── Home.vue
│ ├── Scraper.js
│ ├── assets
│ │ ├── logo.png
│ │ └── logo.svg
│ ├── components
│ │ ├── Chart.vue
│ │ ├── DailyReport.vue
│ │ ├── FatalityRateByAge.vue
│ │ ├── FatalityRateByComorbidity.vue
│ │ ├── FatalityRateBySex.vue
│ │ ├── MainlandChina.vue
│ │ ├── Map.vue
│ │ ├── Ranking.vue
│ │ ├── RecoveredChart.vue
│ │ ├── Reference.vue
│ │ ├── SearchDialog.vue
│ │ ├── Timeline.vue
│ │ ├── TotalCases.vue
│ │ ├── TweetDialog.vue
│ │ ├── Tweets.vue
│ │ └── WHO.vue
│ ├── helpers
│ │ └── index.js
│ ├── main.js
│ ├── plugins
│ │ ├── vue2-filters.js
│ │ ├── vue2-perfect-scrollbar.js
│ │ └── vuetify.js
│ ├── registerServiceWorker.js
│ └── store
│ │ └── index.js
└── vue.config.js
├── LICENSE
├── README.md
└── img
└── home.png
/3d/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["@babel/plugin-transform-runtime"]
3 | }
4 |
--------------------------------------------------------------------------------
/3d/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 | .cache
3 | node_modules
4 | package-lock.json
5 | **/.DS_Store
--------------------------------------------------------------------------------
/3d/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "semi": true
4 | }
--------------------------------------------------------------------------------
/3d/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "covid3d",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "parcel src/index.html",
8 | "build": "parcel build src/index.html --public-url /COVID-19-Dashboard/3d/"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "devDependencies": {
14 | "@babel/core": "^7.9.0",
15 | "@babel/plugin-transform-runtime": "^7.9.0",
16 | "parcel-bundler": "^1.12.4"
17 | },
18 | "dependencies": {
19 | "csvtojson": "^2.0.10",
20 | "d3": "^5.15.0",
21 | "dayjs": "^1.8.23",
22 | "globe.gl": "^2.8.5"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/3d/src/TimeSeries.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 | const csv = require('csvtojson');
3 | const fs = require('fs');
4 |
5 | class TimeSeries {
6 | constructor() {
7 | this.timeSeriesURL =
8 | 'https://raw.githubusercontent.com/bumbeishvili/covid19-daily-data/master';
9 | this.countryRenameMapper = {
10 | USA: 'United States of America',
11 | UAE: 'United Arab Emirates',
12 | UK: 'United Kingdom',
13 | "Cote d'Ivoire": 'Ivory Coast',
14 | DRC: 'Democratic Republic of the Congo',
15 | Bahamas: 'The Bahamas',
16 | };
17 | }
18 |
19 | async fetchTimeSeries() {
20 | const roundOffCoord = (coord) => parseFloat(coord.trim()).toFixed(5);
21 |
22 | let countryMapper = {};
23 |
24 | // Load confirmed cases
25 | const confirmedRows = await this.getConfirmedCases();
26 | const headers = Object.keys(confirmedRows[0]);
27 |
28 | // Load recovered sheet
29 | const recoveredRows = await this.getRecovered();
30 |
31 | // Load recovered sheet
32 | const deathRows = await this.getDeaths();
33 |
34 | confirmedRows.forEach((row) => {
35 | headers.slice(4).forEach((header) => {
36 | // Check if there's matching row in recovered csv
37 | const recoveries = recoveredRows.find(
38 | (i) =>
39 | roundOffCoord(i.Lat) === roundOffCoord(row.Lat) &&
40 | roundOffCoord(i.Long) === roundOffCoord(row.Long)
41 | );
42 |
43 | // Check if there's matching row in death csv
44 | const deaths = deathRows.find(
45 | (i) =>
46 | roundOffCoord(i.Lat) === roundOffCoord(row.Lat) &&
47 | roundOffCoord(i.Long) === roundOffCoord(row.Long)
48 | );
49 |
50 | const countryName = this.countryRenameMapper[row['Country/Region']]
51 | ? this.countryRenameMapper[row['Country/Region']]
52 | : row['Country/Region'];
53 |
54 | if (countryMapper[countryName]) {
55 | countryMapper[countryName][header] = {
56 | confirmed: Math.round(+row[header]) || 0,
57 | recoveries: recoveries ? Math.round(+recoveries[header]) : 0,
58 | deaths: deaths ? Math.round(+deaths[header]) : 0,
59 | };
60 | } else {
61 | countryMapper[countryName] = {
62 | [header]: {
63 | confirmed: Math.round(+row[header]) || 0,
64 | recoveries: recoveries ? Math.round(+recoveries[header]) : 0,
65 | deaths: deaths ? Math.round(+deaths[header]) : 0,
66 | },
67 | };
68 | }
69 | });
70 | });
71 |
72 | return countryMapper;
73 | }
74 |
75 | parseCSV(url) {
76 | return new Promise((resolve, reject) => {
77 | const rows = [];
78 | csv()
79 | .fromStream(request.get(url))
80 | .subscribe(
81 | (json) => {
82 | rows.push(json);
83 | },
84 | () => {
85 | reject();
86 | },
87 | () => {
88 | resolve(rows);
89 | }
90 | );
91 | });
92 | }
93 |
94 | getConfirmedCases() {
95 | return this.parseCSV(
96 | `${this.timeSeriesURL}/time_series_19-covid-Confirmed.csv`
97 | );
98 | }
99 |
100 | getRecovered() {
101 | return this.parseCSV(
102 | `${this.timeSeriesURL}/time_series_19-covid-Recovered.csv`
103 | );
104 | }
105 |
106 | getDeaths() {
107 | return this.parseCSV(
108 | `${this.timeSeriesURL}/time_series_19-covid-Deaths.csv`
109 | );
110 | }
111 | }
112 |
113 | module.exports = new TimeSeries();
114 |
--------------------------------------------------------------------------------
/3d/src/app.js:
--------------------------------------------------------------------------------
1 | import Globe from 'globe.gl';
2 | import { request, getCoordinates, numberWithCommas, formatDate } from './utils';
3 | const TimeSeries = require('./TimeSeries');
4 | import {
5 | GLOBE_IMAGE_URL,
6 | BACKGROUND_IMAGE_URL,
7 | GEOJSON_URL,
8 | CASES_API,
9 | WORLD_COUNTRIES,
10 | } from './constants';
11 | import * as d3 from 'd3';
12 |
13 | // Globe container
14 | const globeContainer = document.getElementById('globeViz');
15 |
16 | const colorScale = d3.scaleSequentialPow(d3.interpolateYlOrRd).exponent(1 / 4);
17 | const getVal = (feat) => {
18 | return feat.covidData.confirmed / feat.properties.POP_EST;
19 | };
20 |
21 | let world;
22 |
23 | const flagEndpoint = 'https://corona.lmao.ninja/assets/img/flags';
24 |
25 | init();
26 |
27 | function init() {
28 | world = Globe()(globeContainer)
29 | .globeImageUrl(GLOBE_IMAGE_URL)
30 | .backgroundImageUrl(BACKGROUND_IMAGE_URL)
31 | .showGraticules(false)
32 | .polygonAltitude(0.06)
33 | .polygonCapColor((feat) => colorScale(getVal(feat)))
34 | .polygonSideColor(() => 'rgba(0, 100, 0, 0.05)')
35 | .polygonStrokeColor(() => '#111')
36 | .polygonLabel(
37 | ({ properties: d, covidData: c }) => `
38 |
39 |
}.png)
40 |
41 |
${d.CNNAME}
42 |
43 |
44 |
45 |
确诊: ${numberWithCommas(c.confirmed)}
46 |
死亡: ${numberWithCommas(c.deaths)}
47 |
治愈: ${numberWithCommas(
48 | c.recoveries
49 | )}
50 |
总人口: ${d3.format('.3s')(d.POP_EST)}
51 |
52 |
53 | `
54 | )
55 | .onPolygonHover((hoverD) =>world
56 | .polygonAltitude((d) => (d === hoverD ? 0.12 : 0.06))
57 | .polygonCapColor((d) =>
58 | d === hoverD ? 'steelblue' : colorScale(getVal(d))
59 | )
60 | )
61 | .polygonsTransitionDuration(200);
62 |
63 | getCases();
64 | }
65 |
66 | let dates = [];
67 | let countries = [];
68 | let featureCollection = [];
69 |
70 | // Play button
71 | const playButton = document.querySelector('.play-button');
72 | // Slider
73 | const slider = document.querySelector('.slider');
74 | // Slider date
75 | const sliderDate = document.querySelector('.slider-date');
76 |
77 | var CN_COUNTRIES={};
78 | WORLD_COUNTRIES.forEach(element => {
79 | CN_COUNTRIES[element.name.toUpperCase()]=element.translation;
80 | });
81 | function toChina(name)
82 | {
83 | var uname=name.toUpperCase();
84 | if(CN_COUNTRIES.hasOwnProperty(uname))
85 | {
86 | return CN_COUNTRIES[uname];
87 | }
88 | else{
89 | return name;
90 | }
91 | }
92 |
93 | async function getCases() {
94 | //countries = await request(CASES_API);
95 | countries = await TimeSeries.fetchTimeSeries();
96 | console.log(countries)
97 | featureCollection = (await request(GEOJSON_URL)).features;
98 | document.querySelector('.title-desc').innerHTML =
99 | '选中国家查看具体疫情数据.';
100 |
101 | dates = Object.keys(countries.China);
102 |
103 | // Set slider values
104 | slider.max = dates.length - 1;
105 | slider.value = dates.length - 1;
106 |
107 | slider.disabled = false;
108 | playButton.disabled = false;
109 |
110 | updateCounters();
111 | updatePolygonsData();
112 |
113 | updatePointOfView();
114 | featureCollection.forEach(element => {
115 | element.properties.CNNAME=toChina(element.properties.NAME);
116 | });
117 | }
118 |
119 | const infectedEl = document.querySelector('#infected');
120 | const deathsEl = document.querySelector('#deaths');
121 | const recoveriesEl = document.querySelector('#recovered');
122 | const updatedEl = document.querySelector('.updated');
123 |
124 | function updateCounters() {
125 | sliderDate.innerHTML = dates[slider.value];
126 |
127 | let totalConfirmed = 0;
128 | let totalDeaths = 0;
129 | let totalRecoveries = 0;
130 |
131 | Object.keys(countries).forEach((item) => {
132 | if (countries[item][dates[slider.value]]) {
133 | const countryDate = countries[item][dates[slider.value]];
134 | totalConfirmed += +countryDate.confirmed;
135 | totalDeaths += +countryDate.deaths;
136 | totalRecoveries += countryDate.recoveries ? +countryDate.recoveries : 0;
137 | }
138 | });
139 |
140 | infectedEl.innerHTML = numberWithCommas(totalConfirmed);
141 | deathsEl.innerHTML = numberWithCommas(totalDeaths);
142 | recoveriesEl.innerHTML = numberWithCommas(totalRecoveries);
143 |
144 | updatedEl.innerHTML = `(as of ${formatDate(dates[slider.value])})`;
145 | }
146 |
147 | function updatePolygonsData() {
148 | for (let x = 0; x < featureCollection.length; x++) {
149 | const country = featureCollection[x].properties.NAME;
150 | if (countries[country]) {
151 | featureCollection[x].covidData = {
152 | confirmed: countries[country][dates[slider.value]].confirmed,
153 | deaths: countries[country][dates[slider.value]].deaths,
154 | recoveries: countries[country][dates[slider.value]].recoveries,
155 | };
156 | } else {
157 | featureCollection[x].covidData = {
158 | confirmed: 0,
159 | deaths: 0,
160 | recoveries: 0,
161 | };
162 | }
163 | }
164 |
165 | const maxVal = Math.max(...featureCollection.map(getVal));
166 | colorScale.domain([0, maxVal]);
167 | world.polygonsData(featureCollection);
168 | }
169 |
170 | async function updatePointOfView() {
171 | // Get coordinates
172 | try {
173 | const { latitude, longitude } = await getCoordinates();
174 |
175 | world.pointOfView(
176 | {
177 | lat: latitude,
178 | lng: longitude,
179 | },
180 | 1000
181 | );
182 | } catch (e) {
183 | console.log('Unable to set point of view.');
184 | }
185 | }
186 |
187 | let interval;
188 |
189 | playButton.addEventListener('click', () => {
190 | if (playButton.innerText === '播放') {
191 | playButton.innerText = '暂停';
192 | } else {
193 | playButton.innerText = '播放';
194 | world.controls().autoRotate=false;
195 | clearInterval(interval);
196 | return;
197 | }
198 |
199 | // Check if slider position is max
200 | if (+slider.value === dates.length - 1) {
201 | slider.value = 0;
202 | }
203 |
204 | sliderDate.innerHTML = dates[slider.value];
205 | world.controls().autoRotate=true;
206 | world.controls().autoRotateSpeed=4;
207 | interval = setInterval(() => {
208 | slider.value++;
209 | sliderDate.innerHTML = dates[slider.value];
210 | updateCounters();
211 | updatePolygonsData();
212 |
213 | if (+slider.value === dates.length - 1) {
214 | playButton.innerHTML = '播放';
215 | world.controls().autoRotate=false;
216 | //world.controls().autoRotateSpeed=5;
217 | clearInterval(interval);
218 | }
219 | }, 200);
220 | });
221 |
222 | if ('oninput' in slider) {
223 | slider.addEventListener(
224 | 'input',
225 | function () {
226 | updateCounters();
227 | updatePolygonsData();
228 | },
229 | false
230 | );
231 | }
232 |
233 | // Responsive globe
234 | window.addEventListener('resize', (event) => {
235 | world.width([event.target.innerWidth]);
236 | world.height([event.target.innerHeight]);
237 | });
238 |
--------------------------------------------------------------------------------
/3d/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
15 |
16 | 3D-展示
17 |
18 |
19 |
20 |
21 |
22 |
3D-展示
23 |
24 | 加载中 ...
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
42 |
46 |
47 |
48 |
49 | 总计
50 |
51 |
52 | 确诊: 0 • 死亡:
53 | 0 • 治愈: 0
54 |
55 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/3d/src/styles/main.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
6 | body {
7 | font-family: 'Space Mono', monospace;
8 | overflow: hidden;
9 | background: black;
10 | }
11 |
12 | .top-info-container {
13 | z-index: 1;
14 | top: 20px;
15 | position: absolute;
16 | color: white;
17 | text-align: center;
18 | width: 100%;
19 | }
20 |
21 | .bottom-info-container {
22 | z-index: 1;
23 | bottom: 20px;
24 | position: absolute;
25 | color: white;
26 | text-align: center;
27 | width: 100%;
28 | }
29 |
30 | .title {
31 | font-size: 35px;
32 | color: #e6f1ff;
33 | }
34 |
35 | .title-desc {
36 | margin-top: 5px;
37 | color: #ccd6f6;
38 | padding: 0 5px;
39 | }
40 |
41 | #infected {
42 | color: goldenrod;
43 | }
44 |
45 | #deaths {
46 | color: #ff4848;
47 | }
48 |
49 | #recovered {
50 | color: #1ae021;
51 | }
52 |
53 | .card {
54 | font-family: 'Space Mono', monospace;
55 | transition: 0.3s;
56 | background-color: black;
57 | width: 190px;
58 | border: 2px solid steelblue;
59 | border-radius: 10px;
60 | z-index: 2;
61 | }
62 |
63 | .container {
64 | /* padding: 3px 16px; */
65 | padding-top: 1px;
66 | padding-bottom: 8px;
67 | padding-left: 12px;
68 | padding-right: 12px;
69 | text-align: left;
70 | }
71 |
72 | .card-img {
73 | object-fit: contain;
74 | width: 100%;
75 | border-top-left-radius: 10px;
76 | border-top-right-radius: 10px;
77 | }
78 |
79 | .card-title {
80 | font-weight: bold;
81 | }
82 |
83 | .card-spacer {
84 | height: 5px;
85 | }
86 |
87 | .bottom-info {
88 | display: flex;
89 | flex-direction: column;
90 | font-size: 11px;
91 | }
92 |
93 | .scene-tooltip {
94 | z-index: 2;
95 | }
96 |
97 | .timeline-container {
98 | z-index: 1;
99 | position: absolute;
100 | display: flex;
101 | color: #fff;
102 | width: 60%;
103 | align-items: center;
104 | }
105 |
106 | @media only screen and (max-width: 768px) {
107 | .timeline-container {
108 | width: 90%;
109 | }
110 | }
111 |
112 | .slider {
113 | -webkit-appearance: none;
114 | height: 2px;
115 | width: 100%;
116 | margin-right: 10px;
117 | border-radius: 5px;
118 | background: #ccd6f6;
119 | outline: none;
120 | opacity: 0.7;
121 | -webkit-transition: 0.2s;
122 | transition: opacity 0.2s;
123 | }
124 |
125 | .slider:hover {
126 | opacity: 1;
127 | }
128 |
129 | .slider::-webkit-slider-thumb {
130 | -webkit-appearance: none;
131 | appearance: none;
132 | width: 25px;
133 | height: 25px;
134 | border-radius: 50%;
135 | background: #000;
136 | cursor: pointer;
137 | border: 2px solid #ccd6f6;
138 | }
139 |
140 | .slider::-moz-range-thumb {
141 | width: 25px;
142 | height: 25px;
143 | border-radius: 50%;
144 | background: #000;
145 | cursor: pointer;
146 | border: 2px solid #ccd6f6;
147 | }
148 |
149 | .play-button {
150 | border-radius: 5px;
151 | padding: 5px;
152 | font-size: 14px;
153 | cursor: pointer;
154 | background-color: rgba(1, 1, 1, 0);
155 | border: 1px solid #ccd6f6;
156 | color: #ccd6f6;
157 | outline: none;
158 | width: 5em;
159 | }
160 |
--------------------------------------------------------------------------------
/3d/src/translate.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | export function toChina(name)
4 | {
5 | var CN_COUNTRIES={};
6 | WORLD_COUNTRIES.forEach(element => {
7 | CN_COUNTRIES[element.name]=element.translation;
8 | });
9 | name=toUpperCase(name);
10 | console.log(name);
11 | if(CN_COUNTRIES.hasOwnProperty(name))
12 | {
13 | return CN_COUNTRIES[name];
14 | }
15 | else{
16 | return name;
17 | }
18 | }
19 |
20 |
21 |
--------------------------------------------------------------------------------
/3d/src/utils/index.js:
--------------------------------------------------------------------------------
1 | import dayjs from 'dayjs';
2 |
3 | export async function request(url) {
4 | try {
5 | const res = await fetch(url);
6 | const data = await res.json();
7 | return data;
8 | } catch (e) {
9 | throw e;
10 | }
11 | }
12 |
13 | export async function getCoordinates() {
14 | try {
15 | const { latitude, longitude } = await request(
16 | 'https://geolocation-db.com/json/'
17 | );
18 |
19 | return {
20 | latitude,
21 | longitude,
22 | };
23 | } catch (e) {
24 | throw e;
25 | }
26 | }
27 |
28 | export function numberWithCommas(x) {
29 | return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
30 | }
31 |
32 | export function formatDate(date, format = 'MMMM D, YYYY') {
33 | return dayjs(date).format(format);
34 | }
35 |
36 | export const isMobile = (function (a) {
37 | return (
38 | /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
39 | a
40 | ) ||
41 | /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
42 | a.substr(0, 4)
43 | )
44 | );
45 | // @ts-ignore
46 | })(navigator.userAgent || navigator.vendor || window.opera);
47 |
--------------------------------------------------------------------------------
/Dashboard/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 |
--------------------------------------------------------------------------------
/Dashboard/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.{js,jsx,ts,tsx,vue}]
2 | indent_style = space
3 | indent_size = 2
4 | end_of_line = lf
5 | trim_trailing_whitespace = true
6 | insert_final_newline = true
7 | max_line_length = 100
8 |
--------------------------------------------------------------------------------
/Dashboard/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | extends: ['plugin:vue/essential', '@vue/airbnb', 'prettier'],
7 | plugins: ['prettier'],
8 | rules: {
9 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
10 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
11 | 'prettier/prettier': ['error'],
12 | 'camelcase': "off",
13 | 'no-unused-vars':"off",
14 | 'vars-on-top':'off'
15 | },
16 | parserOptions: {
17 | parser: 'babel-eslint'
18 | }
19 | };
20 |
--------------------------------------------------------------------------------
/Dashboard/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 | # Editor directories and files
14 | .idea
15 | .vscode
16 | *.suo
17 | *.ntvs*
18 | *.njsproj
19 | *.sln
20 | *.sw?
21 |
22 | package-lock.json
--------------------------------------------------------------------------------
/Dashboard/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "singleQuote": true
4 | }
--------------------------------------------------------------------------------
/Dashboard/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset']
3 | };
4 |
--------------------------------------------------------------------------------
/Dashboard/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | # abort on errors
4 | set -e
5 |
6 | # build
7 | npm run build
8 |
9 | # navigate into the build output directory
10 | cd dist
11 |
12 | # if you are deploying to a custom domain
13 | # echo 'www.example.com' > CNAME
14 |
15 | git init
16 | git add -A
17 | git commit -m 'deploy'
18 |
19 | # if you are deploying to https://.github.io
20 | # git push -f git@github.com:/.github.io.git master
21 |
22 | # if you are deploying to https://.github.io/
23 | git push -f git@github.com:TjFish/COVID-19-Dashboard.git master:gh-pages
24 |
25 | cd -
--------------------------------------------------------------------------------
/Dashboard/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "2019-ncov-frontend",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "@mdi/font": "^5.0.45",
12 | "animated-number-vue": "^1.0.0",
13 | "apexcharts": "^3.15.3",
14 | "axios": "^0.19.2",
15 | "cheerio": "^1.0.0-rc.3",
16 | "core-js": "^3.4.4",
17 | "countup.js": "^2.0.4",
18 | "csvtojson": "^2.0.10",
19 | "d3": "^5.16.0",
20 | "jquery": "^3.5.1",
21 | "leaflet": "^1.6.0",
22 | "moment": "^2.24.0",
23 | "register-service-worker": "^1.6.2",
24 | "remove": "^0.1.5",
25 | "request": "^2.88.2",
26 | "vue": "^2.6.10",
27 | "vue-apexcharts": "^1.5.2",
28 | "vue-countup-v2": "^4.0.0",
29 | "vue-router": "^3.3.2",
30 | "vue2-filters": "^0.9.1",
31 | "vue2-leaflet": "^2.4.2",
32 | "vue2-perfect-scrollbar": "^1.3.0",
33 | "vuetify": "^2.2.17",
34 | "vuex": "^3.1.2",
35 | "vuex-persistedstate": "^2.7.1"
36 | },
37 | "devDependencies": {
38 | "@vue/cli-plugin-babel": "^4.2.2",
39 | "@vue/cli-plugin-eslint": "^4.2.2",
40 | "@vue/cli-plugin-pwa": "^4.2.2",
41 | "@vue/cli-service": "^4.2.2",
42 | "@vue/eslint-config-airbnb": "^5.0.2",
43 | "babel-eslint": "^10.0.3",
44 | "eslint": "^6.7.2",
45 | "eslint-config-prettier": "^6.10.0",
46 | "eslint-plugin-import": "^2.20.1",
47 | "eslint-plugin-prettier": "^3.1.2",
48 | "eslint-plugin-vue": "^6.1.2",
49 | "prettier": "^1.19.1",
50 | "sass": "^1.19.0",
51 | "sass-loader": "^8.0.0",
52 | "vue-cli-plugin-vuetify": "^2.0.4",
53 | "vue-template-compiler": "^2.6.10",
54 | "vuetify-loader": "^1.3.0"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Dashboard/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
14 |
18 |
19 |
20 |
24 |
25 | COVID-19 Dashboard
26 |
30 |
31 |
32 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/Dashboard/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/Dashboard/public/static/Chart/css/index.css:
--------------------------------------------------------------------------------
1 | .covid-data-table-wrapper {
2 | overflow-y: auto;
3 | height: 350px;
4 | }
5 |
6 | .covid-data-table-wrapper > table > thead th {
7 | position: sticky;
8 | top: 0;
9 | box-shadow: 0 0 0 1px #343a40;
10 | }
11 |
12 | .covid-data-table-wrapper > table > thead th[sortable] {
13 | cursor: pointer;
14 | white-space: nowrap;
15 | }
16 |
17 | #CovidChart {
18 | width: 49%;
19 | height: 350px;
20 | float: left;
21 | }
22 |
23 | #RegionsTable{
24 | width: 49%;
25 | float: right;
26 | }
27 | #TableFilters{
28 | width: 49%;
29 | float: right;
30 |
31 | }
--------------------------------------------------------------------------------
/Dashboard/public/static/Chart/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TjFish/COVID-19-Dashboard/7eb23976176e7a1545c27bc05707581d06f40f80/Dashboard/public/static/Chart/favicon.ico
--------------------------------------------------------------------------------
/Dashboard/public/static/Chart/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
13 |
14 |
15 | COVID-19 Dashboard
16 |
17 |
18 |
19 |
20 |
26 |
31 |
32 |
33 |
34 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
53 |
58 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/Dashboard/public/static/Chart/js/4add81f750.js:
--------------------------------------------------------------------------------
1 | window.FontAwesomeKitConfig = {"asyncLoading":{"enabled":true},"autoA11y":{"enabled":true},"baseUrl":"https://kit-free.fontawesome.com","license":"free","method":"css","minify":{"enabled":true},"v4shim":{"enabled":true},"version":"latest"};
2 | !function(){!function(){if(!(void 0===window.Element||"classList"in document.documentElement)){var e,t,n,i=Array.prototype,o=i.push,a=i.splice,s=i.join;r.prototype={add:function(e){this.contains(e)||(o.call(this,e),this.el.className=this.toString())},contains:function(e){return-1!=this.el.className.indexOf(e)},item:function(e){return this[e]||null},remove:function(e){if(this.contains(e)){for(var t=0;t fetch(dataType.dataSourceUrl)
120 | ))
121 | .then(responses => Promise.all(
122 | responses.map(response => response.text())
123 | ))
124 | .then(dataTypesTicks => {
125 | return dataTypesTicks.reduce(
126 | (dataContainer, dataTypeTicksCSV, dataTypeIndex) => {
127 | const dataType = Object.keys(covidDataTypes)[dataTypeIndex];
128 | const dataTypeTicks = Papa.parse(dataTypeTicksCSV).data;
129 | dataContainer.labels = dataTypeTicks.shift();
130 | dataContainer.ticks[dataType] = dataTypeTicks
131 | .filter(regionTicks => {
132 | return regionTicks.length === dataContainer.labels.length;
133 | })
134 | .map(regionTicks => {
135 | return regionTicks.map((regionTick, tickIndex) => {
136 | if (tickIndex < covidSchema.dateStartColumn) {
137 | return regionTick;
138 | }
139 | if (!regionTick) {
140 | return 0;
141 | }
142 | return parseInt(regionTick, 10);
143 | });
144 | })
145 | .sort((regionTicksA, regionTicksB) => {
146 | const regionNameA = getRegionKey(regionTicksA);
147 | const regionNameB = getRegionKey(regionTicksB);
148 | if (regionNameA > regionNameB) {
149 | return 1;
150 | } else if (regionNameA < regionNameB) {
151 | return -1;
152 | }
153 | return 0;
154 | });
155 | return dataContainer;
156 | },
157 | defaultDataContainer
158 | );
159 | });
160 | }
161 |
162 | function getRegionKey(regionTicks) {
163 | if (!regionTicks || !regionTicks.length) {
164 | return null;
165 | }
166 | const country = regionTicks[covidSchema.countryColumn];
167 | const state = regionTicks[covidSchema.stateColumn];
168 | return state ? `${country} - ${state}` : `${country}`;
169 | }
170 |
171 | function getRegionIndexByKey(covidData, dataTypeKey, regionKey) {
172 | return covidData.ticks[dataTypeKey].findIndex(
173 | regionTicks => getRegionKey(regionTicks) === regionKey
174 | );
175 | }
176 |
177 | function getRegionByKey(covidData, dataTypeKey, regionKey) {
178 | const regionIndex = getRegionIndexByKey(covidData, dataTypeKey, regionKey);
179 | return covidData.ticks[dataTypeKey][regionIndex];
180 | }
181 |
182 | function getGlobalTicks(covidData, dataTypeKey) {
183 | const totalTicks = covidData.ticks[dataTypeKey][0].length;
184 | const globalTicks = new Array(totalTicks).fill(0);
185 | globalTicks[covidSchema.stateColumn] = '';
186 | globalTicks[covidSchema.countryColumn] = covidCountries.all.title;
187 | globalTicks[covidSchema.latColumn] = '';
188 | globalTicks[covidSchema.lonColumn] = '';
189 | covidData.ticks[dataTypeKey].forEach(regionTicks => {
190 | regionTicks.forEach((regionTick, tickIndex) => {
191 | if (tickIndex < covidSchema.dateStartColumn) {
192 | return;
193 | }
194 | globalTicks[tickIndex] += regionTick;
195 | });
196 | });
197 | return globalTicks;
198 | }
199 |
200 | function getTotalCount(covidData, dataTypeKey, regionKeys) {
201 | if (regionKeys.includes(covidCountries.all.key)) {
202 | const globalTicks = getGlobalTicks(covidData, dataTypeKey);
203 | return globalTicks[globalTicks.length - 1];
204 | }
205 | return regionKeys.reduce((total, regionKey) => {
206 | const regionTicks = getRegionByKey(covidData, dataTypeKey, regionKey);
207 | if (!regionTicks) {
208 | return total;
209 | }
210 | total += regionTicks[regionTicks.length - 1];
211 | return total;
212 | }, 0);
213 | }
214 |
215 | function searchRegionTicks(covidData, dataTypeKey, regionKey) {
216 | if (!regionKey) {
217 | return null;
218 | }
219 | const regionsTicks = covidData.ticks[dataTypeKey];
220 | return regionsTicks.find((regionTicks) => getRegionKey(regionTicks) === regionKey);
221 | }
222 |
223 | function getCovidRegions(covidData) {
224 | return covidData.ticks[covidDataTypes.confirmed.key]
225 | .map((regionTicks, regionIndex) => {
226 | const key = getRegionKey(regionTicks);
227 | const numbers = {};
228 | Object.values(covidDataTypes).forEach((covidDataType) => {
229 | const regionTicksOfType = covidData.ticks[covidDataType.key][regionIndex];
230 | const regionKeyOfType = getRegionKey(regionTicksOfType);
231 | if (regionTicksOfType && regionTicksOfType.length === regionTicks.length && regionKeyOfType && regionKeyOfType === key) {
232 | numbers[covidDataType.key] = regionTicksOfType[regionTicksOfType.length - 1];
233 | } else {
234 | const foundRegionTicks = searchRegionTicks(covidData, covidDataType.key, key);
235 | if (foundRegionTicks && foundRegionTicks.length === regionTicks.length) {
236 | numbers[covidDataType.key] = foundRegionTicks[foundRegionTicks.length - 1];
237 | } else {
238 | numbers[covidDataType.key] = -1;
239 | }
240 | }
241 | });
242 | return {key, numbers};
243 | });
244 | }
245 |
246 | function getLastUpdatedDate(covidData) {
247 | const dateLabel = covidData.labels[covidData.labels.length - 1];
248 | return formatDateLabel(dateLabel);
249 | }
250 |
251 | function formatDateLabel(dateLabel) {
252 | const date = new Date(dateLabel);
253 | const options = {month: 'short', day: '2-digit'};
254 | return date.toLocaleDateString('en-US', options);
255 | }
256 |
257 | function groupCovidDataByCountries(covidData) {
258 | const covidDataByCountries = {
259 | labels: [],
260 | ticks: {},
261 | };
262 | covidDataByCountries.labels = [...covidData.labels];
263 | Object.values(covidDataTypes).forEach((covidDataType) => {
264 | covidDataByCountries.ticks[covidDataType.key] = Object.values(covidData.ticks[covidDataType.key]
265 | .reduce((countriesTicksMap, regionTicks) => {
266 | const countryName = regionTicks[covidSchema.countryColumn];
267 | if (!countriesTicksMap[countryName]) {
268 | countriesTicksMap[countryName] = [...regionTicks];
269 | countriesTicksMap[countryName][covidSchema.stateColumn] = '';
270 | return countriesTicksMap;
271 | }
272 | for (let columnIndex = covidSchema.dateStartColumn; columnIndex < regionTicks.length; columnIndex += 1) {
273 | countriesTicksMap[countryName][columnIndex] += regionTicks[columnIndex];
274 | }
275 | return countriesTicksMap;
276 | }, {}));
277 | });
278 | return covidDataByCountries;
279 | }
280 |
281 | function filterToUrl(filterKey, filterValue) {
282 | try {
283 | const url = new URL(document.location);
284 | url.searchParams.set(filterKey, JSON.stringify(filterValue));
285 | history.pushState(null, null, url.href);
286 | } catch (e) {
287 | console.error('Cannot send filters to URL');
288 | }
289 | }
290 |
291 | function filtersFromUrl() {
292 | const filtersInUrl = {};
293 | try {
294 | const url = new URL(document.location);
295 | Object.values(covidFilters).forEach((covidFilter) => {
296 | if (url.searchParams.has(covidFilter.key)) {
297 | filtersInUrl[covidFilter.key] = JSON.parse(
298 | url.searchParams.get(covidFilter.key)
299 | );
300 | }
301 | });
302 | } catch (e) {
303 | console.error('Cannot fetch filters from URL');
304 | }
305 | return filtersInUrl;
306 | }
307 |
308 | function deleteFiltersFromUrl() {
309 | try {
310 | const url = new URL(document.location);
311 | Object.values(covidFilters).forEach((covidFilter) => {
312 | url.searchParams.delete(covidFilter.key);
313 | });
314 | history.pushState(null, null, url.href);
315 | } catch (e) {
316 | console.error('Cannot delete filters from URL');
317 | }
318 | }
319 |
320 | function calculateMortality(confirmedNumber, deathsNumber) {
321 | if (confirmedNumber === 0) {
322 | return 0;
323 | }
324 | const mortality = deathsNumber / confirmedNumber;
325 | if (mortality < 0) {
326 | return 0;
327 | }
328 | return Math.floor(1000 * mortality) / 10;
329 | }
330 |
--------------------------------------------------------------------------------
/Dashboard/public/static/Chart/js/utils.js:
--------------------------------------------------------------------------------
1 | function useWindowSize() {
2 | const [width, setWidth] = React.useState(document.documentElement.clientWidth);
3 | const [height, setHeight] = React.useState(document.documentElement.clientHeight);
4 | React.useEffect(() => {
5 | const setSize = () => {
6 | setWidth(document.documentElement.clientWidth);
7 | setHeight(document.documentElement.clientHeight);
8 | };
9 | window.addEventListener('resize', setSize);
10 | window.addEventListener('orientationchange', setSize);
11 | return () => {
12 | window.removeEventListener('resize', setSize);
13 | window.removeEventListener('orientationchange', setSize);
14 | }
15 | }, []);
16 | return [width/3, height];
17 | }
18 |
19 | // @see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
20 | function escapeRegExp(string) {
21 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
22 | }
--------------------------------------------------------------------------------
/Dashboard/public/static/China/README.md:
--------------------------------------------------------------------------------
1 | # 中国疫情地图,支持省市两级联动
2 |
3 | - 地图数据来自 echarts 官方数据
4 |
5 | - 操作提示,点击省份能进入当前省的疫情地图,双击省份地图可以返回全国地图,或者点击右上角按钮直接返回全国地图。
6 |
7 | - echarts 地图数据(官方)在线地址为:
1. 全国:http://echarts.baidu.com/gallery/vendors/echarts/map/js/china.js
2. 省级:http://echarts.baidu.com/gallery/vendors/echarts/map/js/province/(省份拼音)
8 |
9 |
--------------------------------------------------------------------------------
/Dashboard/public/static/China/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-architect
--------------------------------------------------------------------------------
/Dashboard/public/static/China/js/map/province/aomen.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | (function (root, factory) {
21 | if (typeof define === 'function' && define.amd) {
22 | // AMD. Register as an anonymous module.
23 | define(['exports', 'echarts'], factory);
24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
25 | // CommonJS
26 | factory(exports, require('echarts'));
27 | } else {
28 | // Browser globals
29 | factory({}, root.echarts);
30 | }
31 | }(this, function (exports, echarts) {
32 | var log = function (msg) {
33 | if (typeof console !== 'undefined') {
34 | console && console.error && console.error(msg);
35 | }
36 | }
37 | if (!echarts) {
38 | log('ECharts is not Loaded');
39 | return;
40 | }
41 | if (!echarts.registerMap) {
42 | log('ECharts Map is not loaded')
43 | return;
44 | }
45 | echarts.registerMap('澳门', {"type":"FeatureCollection","features":[{"id":"820001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],"encodeOffsets":[[[116285,22746]],[[116303,22746]]]},"properties":{"cp":[113.552965,22.207882],"name":"花地玛堂区","childNum":2}},{"id":"820002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MK@CA@AAGDEB@NVFJG"],"encodeOffsets":[[116281,22734]]},"properties":{"cp":[113.549052,22.199175],"name":"花王堂区","childNum":1}},{"id":"820003","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EGOB@DNLHE@C"],"encodeOffsets":[[116285,22729]]},"properties":{"cp":[113.550252,22.193791],"name":"望德堂区","childNum":1}},{"id":"820004","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@YMVAN@BFCBBDAFHDBBFDHIJJEFDPCHHlYJQ"],"encodeOffsets":[[116313,22707]]},"properties":{"cp":[113.55374,22.188119],"name":"大堂区","childNum":1}},{"id":"820005","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JICGAECACGEBAAEDBFNXB@"],"encodeOffsets":[[116266,22728]]},"properties":{"cp":[113.54167,22.187778],"name":"风顺堂区","childNum":1}},{"id":"820006","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ ZNWRquZCBCC@AEA@@ADCDCAACEAGBQ@INEL"],"encodeOffsets":[[116265,22694]]},"properties":{"cp":[113.558783,22.154124],"name":"嘉模堂区","childNum":1}},{"id":"820007","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MOIAIEI@@GE@AAUCBdCFIFR@HAFBBDDBDCBC@@FB@BDDDA\\M"],"encodeOffsets":[[116316,22676]]},"properties":{"cp":[113.56925,22.136546],"name":"路凼填海区","childNum":1}},{"id":"820008","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKMMa_GC_COD@dVDBBF@@HJ@JFJBNPZK"],"encodeOffsets":[[116329,22670]]},"properties":{"cp":[113.559954,22.124049],"name":"圣方济各堂区","childNum":1}}],"UTF8Encoding":true});
46 | }));
--------------------------------------------------------------------------------
/Dashboard/public/static/China/js/map/province/ningxia.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | (function (root, factory) {
21 | if (typeof define === 'function' && define.amd) {
22 | // AMD. Register as an anonymous module.
23 | define(['exports', 'echarts'], factory);
24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
25 | // CommonJS
26 | factory(exports, require('echarts'));
27 | } else {
28 | // Browser globals
29 | factory({}, root.echarts);
30 | }
31 | }(this, function (exports, echarts) {
32 | var log = function (msg) {
33 | if (typeof console !== 'undefined') {
34 | console && console.error && console.error(msg);
35 | }
36 | }
37 | if (!echarts) {
38 | log('ECharts is not Loaded');
39 | return;
40 | }
41 | if (!echarts.registerMap) {
42 | log('ECharts Map is not loaded')
43 | return;
44 | }
45 | echarts.registerMap('宁夏', {"type":"FeatureCollection","features":[{"id":"640100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@CFGUKGQCMBSH[¯JSEGmUQBLYgSeHECWBUJgBGV[DAPHHBrDDAG]DG@[FBCV[VPGA[GYMYWu{sUoOWECCE_FgFDMAk¹FÅ`KY}WkMEGCJOTGJSLONW^OJja^[\\EFcTUJaDaZYLS^GJaRg^BLM@CDKAIBSBUH@H@BUJCHGF@DGLBDFB@BIFFFBDI@BFE@@BJTCD@BJBADHBzB\\FD@FCTBBBXVHRID@xIBaBA`EBw@MLADBFJDTV@B]TIP@FABQJUKA@M`GDCD@BH@BDADIB@JEFDD@DQLKFEDKVCPIJMHSFAFCFBD@HHXHHTJFH@LS^CJBHiHABGHSFDPCBKCOBIDMJIDOAEAAAMOGIGBArED]JFF@DAD[FAAEGC@WDADJJADGH@DNDADMD@DNFBDADIAAAWUICCCCKAEWUEAkRMBEHAG@GGOsLEGW}s`HRVj^xBDEJ`aJEFGJGDGLJLXFTHNBDQZ]\\K`GJIHAPIJCLBFFLV^@DGXENBVDNGJBFJHT@PL@DINCPKNCRJJ@NPPAJENBLXPJJBV@TCPIT@PFNBBVFBBDHBHADKHABAJCJOLARELAH@NDHJLNJJFFDBFCNBFFFNJV\\BBAJQ\\@FBDTLHJJDBBDL@JCNCFCDADFRFHBDKJGHAL@HDBVDFFPFLLR@BBAHBDLNDFFHVPNFFHDLTFXRHLDLLHBHN@jKZ@NAFAXUJ@PITIRI\\C^ADCBMDILGFEDANCxAJALEV@BKLCJ@`PPFJIHQBCH@VDFAZMJGLABOH@LBPLZBBAEI@CBGHGJAVBHHXENEfDRFBGKSAKnEAK@iHE^GF@JFNEP@FKMODQBEhNLPZ@NC^OALGLKXEjEr@@[EOKIbChM`GHGAgPKZY[ŅUco]oįÏ@ENOBEZEH@BCVGHCRQ^aRKYv[ZIVAhGPCRIvMfQRAZSVUbQVGKPC"],"encodeOffsets":[[109389,39080]]},"properties":{"cp":[106.278179,38.46637],"name":"银川","childNum":1}},{"id":"640200","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@J{AQWËIO¥ue_]gkEKCCQWEKWYcq{MUěYZOLBhGH_HgNaDLJFP@\\q@iFWFKLKHB]PMDY@KOgMAFCRNPELO@MFIEE@]HGF@jBLmFBLLTAHQEeCMFWFGGUAIBGHAH@DFJABYAOKKAG@APKBIHYNEBUCG@ADGRIJOE_OI@KDALU@KFIBwBQFQRCFANAD{FQJSJOJI@WVEBMBY@iLM@@@GB[CKLOVCNANHNNLZRFBZRRZNN\\NLBPATLDJ@JJTFFLBHNLNDJBLABGHGFEHFHJH@@IFFN@RJZLNDVJLPLHJL^JNFJLR\\bVP\\FNIHMRORERAHAzENGJALFNHZHPHDDBJLTDLCPKVAR@JDfCLAVGVC`BFHJLHJ@ND\\ANDJA^LfH\\FLAVDNBJBPCV@`CPEbCRGBA\\GjGHBJHBF@LJF@LBDDBALFBDFCFR@NPJBFFPFDDBDHDFFDHLNHDJHJRRXDFJHzSPKJCjEV@LBXRpTVCLBTLNDD@DIDELAV@TALIFIP[@CIO@ELQPO@GIW@SH_COUaCM@IJGFKAICK@MLKXKXQHYHa^uLkJQXUVMlMFCDAFAFBHAF@VGFBHIHABEBIDCPBLKDCLB"],"encodeOffsets":[[109535,39993]]},"properties":{"cp":[106.376173,39.01333],"name":"石嘴山","childNum":1}},{"id":"640300","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@IHKHCHIFEbI_FIAC]wUiGQt_X~FHtKHP@HBHFGNAlQFBXVBFDLDDJDXVBBJBBCACME@CNCBCMC@CHGBCIIBCXCD@FHBB\\EBC@CEE^IFCBqHAHJNPBBFBPBJCNIJCPALDDACOTEHGBAjGAGDIT]@KEGSIGGGW@GACDEBETENGJIDOLUFCLERK@CCCFE@IJABCACG@@ADCHCN_B@VLRIBA@EJO^S@ASUICAEBCNKx@FAB_bAJA@wJCGQWUAASAEDC@[EyAGABCIA@ADCIS@AF@AEJ@ACEEJE@AEAACHK@CHEDGVI@A@GVGTAJALBDCN@AKh]bQHIT]ZKbYbCVIdSFE\\[b]iPIX]PMTKHIPSDIFHlN~XLZÆ_ºEBlCNEEhF`DDXFpPtV|XvNZHZB\\HUOU\\ADE@\\CHH^CBqCGAOGCBU\\AHIhAVDXGFTfZhKRAnVFHIT°G\\ATDNHRVLEH@DQZIVER@bMQ°Q`CDLFBJALBRGJAN@DDPNDHLHFAJGTGB@FHDBF@HCPDTCJDHDBNDJLLJLDBHAHIhETADBLFD@DCRODGXQ^GFIJOPK`IbEVK`AN@XGXKFEDGPUPKLEDOBC^UPOVaFCLAjENCFCDE@EJEBAo
KYBCNK~ORR`Ff@HELMf]uÜkVMJCLID]SqG]KSggK@KDGNEDEJC@KCGDBLEBGCIG@ABCJELBF@@A@EM@YMg@{GoMIKG]DYCWCMGOMMYQOCI@mII@EBUNIBgCEKJ[zIJAA[CCgHEAomCCQK@CDGGEGCOGeBCCGA[HhsXEtNHIBGEICOCECSESEKIGESIK[UkYGC]IMMCG@SBm@ISESSg@MBCDWAIIOAKFI@GHWL[FKLILEBCJCBEDB@EDC@AFABCAAHEACDEBB@EDABKDAACBEACBA@C@CAAE@SFGBOGUCEC@C@EJGXM^URIFEJB@EFCBCE@FCD@BCBGDA@GFAACDA@EFAACDAACDEBEACDCEABEB@@AGEFCCEBAAABCEADCGCBCAE@EIE@CCCEKECC@AC@CG@BGIMKRIFADCAEFADCFEF@@CBBBABAAGFEACEHEBM@@KACEHAHDD@@AGCBKHGJE@AMFGAKDgNEAIKME@DCFA@@DC@GJCBADGBADC@CDCD@BGFCFGBADKFEFGDORUGK@UCE@KCI@KCCAGCAAEAECGACBQE@COKEACFGDGLE@IFG@IAGCCCC@SHEFGAQPGBCDIQ@ABIDCBGDGAQC@ADGFE@QFICIJQFIGDAHCBGJCCCCAIDM@UFKBODAD@HINWTKDEDGDADKDABM@SJKCAA@GKECA@CZMB@DBNADMDCUA@K@CHCBEAAE@K@CAGEACBGGAIHKLUPWCG@]XGFCCIJEBIJCFEFGDS@UNADCDEBCA@BGDCAE@@@DAEAD@DCFE@AEEC@CL@AEA@CCMEABECC@CJQDE@CKKCGIGGIDENGEIASA@KHGJCJDFCFIBKACFBHACCAMJ@NDJABIAQAKDQGGDGHGNAAKKISECGACFALAHEDCBUESIGTK@GFOFEBCAACDGEFA@GCCCBAHIFM@EJMFQFGDAFMLANQHS@EAEBC@CDEBOFGACBGNI@KHEHCBCKOECQJE@IADE@C@AHIAECEEODKGMBKFKMB[GCDEAEBOBSJCDACGG@K@EDEBMDGGAGCGCGAIDGLCFBBH@FCHDUVBDCBCDGBGFQPGPGFC@ACAIFG@GNOHMFEECAECIBELGFBHIPCDDNALIFINANCHKFEBIECCEFK@CCBIFAABC@CFGHEACDABEHLHBBHNFD@JEDELG@AAAGBECAAFEBCHE@ECAKFDE@AEAGECBAAJE\\K@ACAFGAC@GAE@GGENAJBACBCBCPIBEC@AC@CDCAEE@ECEFA@AABIE@CA@CFC@GAGEE@CEB@EAADACCDCAA@A@CBG@ECC@KCEAGK@AAJOCKD@@GFEDADEJABCBAAAEAKFECA@a^@@ACCAAIKNCHG@IL@FCBG@EKAAEBMDC@@A@EEEDICCG@YJA@AIAAG@EAABCAAIEBIHAC@GIEGEKAEEJK@AD@DCBEBCLWC@KDAC@AGACFA@CDAACBECEB[KAC@GBIHOCOHKDK@CG@@AC_SC]MKBEAEFSDEACBEBKRCBAA@I@ASGACEDI@MISDMBE@ICHG@CACEEO@QCyQ]KUBEBMTCHOBKAOGABCNUJIDCC@C@GMKC@EDQFIB]EEACG@M@UBGC@IJUBYCWOEA]RCVGNLZAJgjYLAZW\\A`y|SlHd[VU\\cXD`E\\qd[CMJOEIF@H\\XILBX_TCTKHI@AJJB@HiZAREBK@CA@I@A]QGAECEBCFEBC@IELQ^[@IIIKEDGIMOQIEKECCBKACCCSCCA@GGE[GECCO@OCOIEEACBCN@NCJKJODKAOEKGM@OAOBGJC@WQECA@ILBBDHGPCNAZ@JDHJBJD@HEXBH\\^ABGLQJOND@HEDBJAHCFETCAHBFLJJDJ@BJDFBBF@HFRJDDJDHHPDLJDD@FDDALBDADDHBBB@NHD@FDF@MNÔ]rED}@MJspIF]H[NOXKbAJFFBH@RCFEB@PADCDmAGAkPWBIA[@IBKHCLMJSDHDT@LBDBBDFB^ARDf`LFLJZZfTJLFDB@HGBCGAAA@ADCBIHCHGHUFK@OGEACAGEGACLEBEDC^WJI@IZBX@LDL@FD`BNDNJADE@CHBDBDFADBDDADKHECCBAFBFADB@DCD@@BABOJDHF@@BEFMHCAGHBDABDDGDBLED@DCB@BCD@HAHQZGH@BjNNBZHLLLBJFDNBBŌUPHPRDJBF@HGHKHKLWLU@aRWDIDoZKHADDFDRDBDBhG^@DBAHSb@BPPNFpJD@LGDCB@FDL@DBFJAZLB@ABEBBDEABDE@FFE@@DEB@DGFABA@BDIECDE@ABC@AFPDJAR@NHHALEH@HFLBLNBLDJBFDBNLNFFRFDF@FCL@FFBDFDVFLADBBBIJGFMTOHYBMHEJDBDAB@@BsrILEN@DDPJHZAHHCNAJBHFH@JALEDSFIJCB_@KDEDEBW@OCM@SHILEDE@@ABK@EAIIOKGGMKMEMAMAAAAkBABFHRN@DKRCLMH@DDDBD@JCDJPFXBb@fVTFFCXABMEUAcHW@QUGD_HGBICQDUBQDG@UKWIM@Y@qHGCUCKCS@OAaIUIEIgEgAFHHX@LrHDNDL@JAREdCNGL@tPTFNJhJNHRHXVN`DPFJFJXXLLDHFTC\\EREJCNAjBNBFXlX\\P`PVBNCHCDMXUXS\\_`YdQpG\\BPAJDPDrFRAHBPLXDH^^LFLDXJZNRNBLTf"],"encodeOffsets":[[108394,39184]]},"properties":{"cp":[106.199409,37.986165],"name":"吴忠","childNum":1}},{"id":"640400","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AKGACBBDABD@BDDDDA"],["@@AGBAC@EJBHHG"],["@@@@A@OLBPAHBBB@JKHC@AEIBI"],["@@NABFjVRPVNXNJLDNBDED@BCVCFI@O@CJGLEJIFIAIFAFCLEDGFAHK`WLKNI\\EH@LDTZPJXDXAPADBFHHDJ@TIJOLWYUKEGIDEL@LHHDJ@JCPBPFH@JCFKBMBCJEDBRNVXRHPLJ^LRRVRLCPALBJBJDDr@tEX@JC^Q^MZCR@E^AbMlQ`UlIPBHFHNDDBBHCLBFHH\\C`GHJBJJJ\\@fLFAJEVIDBBHBFJ@DALO^OH@NLLDJB^@bN`HPFZDFDFPFHpffTFBF@\\CJBDFBJNjBBJGFANBJHF@NCHBBBAVBNDNHRPX@BA@KKEAC@@RCXADEB@FBFJDLFPBBBJLDPVADDDJHHLFF@LFH@HA\\IR@PHDDAFNCHELBJFB@RSXUHAJFHGFDDAF@FCBMLMH@BDF@CFBHDHDBPS`GFCBCCIFG@CCGAKGIKCKKAC@CEK@AHAHEDG@GGCCICDE@ALKBAIBKAC@IGGBAHCXFHCLQB@FHFCJABCCEACBELEDEAECAI@MHODCBCCBUACC@CECAB@AA@DEBKEBAAA@HIDANIBKAGDI@CCAINIDCNKPIFCHCCGDAAOCAABKNOLSBGFEH@FIHADGDADIFBDHLBHCLKTGJKDAHLHCD@DBHFFJAFDD@FELBFCHDH@DJEF@PEDBBCHFF@@IDI@AD@DABCDCBEDJF@@DBDCH@JDF@DFFD@B@DGBAB]DEFBBFF@FKD@LGD@HCD@BLDTHHB@HEEAAC@GDMAIDGLCDBBRD@LGHDDHNBBB@AHAADABHDHGFSNQBG@ID@BEDAJB@CDCLGBFDDTINJ@AFIFC@DFAJMRIBABABBDCDB@BD@DED@DCBRBDD@PKBPHBBAJCFGBEDABCHCDABHDDADLDDDDCFB@CJGFXFDLQD[AB@CD@DEDBFC@@ADBDBDF@HADBAC@CJIFIBQFEFCDED@DDDAFE@CJMF@DDJBBA@CHGFKHCFACIEGDECIACFGD@BDDGBAFBCK@CDFDG@JBJDBHLFB@AAMAG@AESHEHDHPHHDAHEIG@GAABMABA@A@AAE@PMP@DU@B@FDC@FDABC@GCGDC@IDAEAGB@@DB@BM@DGAEBBBAAEMCCACC@GACBCFABBJ@CEE@@C@@AK@WECQC@GAEAM@GFCDCRAFENBAGCABOCGGGQEGKAAEDA@AKIEEK@]ACC@EDAF@JDD@FCDEDACEBGCA@BHADA@CCCDABAAHUBKFGFCJCDBTCFPDDFBHAH@FFHKBGDC@CGQGFEACEMGMDCDGDGI@CAAEBBO@IG@IHIDE@MESSA@CDIAEDA@BCECDCDI@EQIE@AA@CFGJCLATCB@BHBBHEDE@EDEAEEDCBCFE@GG@CF@BCJ[@ABBABBJD@DCAOBCTU@CJGDEDATJBADCJSEE@CBARABE@CCCICA@EFCBKAGBEDGAAEDCFBD@BSDAHBBAEABAHBBA@KECHKGB@ABKAEEAMNCAACCOBE@AWBA@DJ@HCDQJE@C@EE@CBGCSB[CKCAGBMJGBMCMBCKCBCJEDK@EAAC@ELQAAEDEEFC@EEKKKIEIBEFALABECCAED@DC@AAA@CHGAAAA@EFIE@B@JCBEAMIC@AFE@AABICWDEKGAADEJDD@DKAEGAIDE@GCAAEFAECBAFA@GDYTiVIJAJA@CCE@ABHH@BEBKCAIEG@AFK@AKF@GEBEGI@CBELCB@IAAI@CBCDOFKPCDADCX@HCBC@EECK@ICAAB@PADE@AHABG@CA@E@EFE@CAAGGC@KDO@EHK@GHCBS@KDKAWDE@AABK@QAACHEVK@IEK@GBSAECBC@AKEDC@ECA[EMCU]EEIMEAE@MG@YBGFG@ACC@CBCLDB@BQFGBETGCIGEAGDELGJIBCAI@OBAFCDCJ]AGDCJEBCA@EAKDMHG@A@IWEQCIACFKCKDABEMEMO@AFMLADCCG@EVIFEBKDGAUJCNDH@LDD@BECSESJAIIAGBGHGR]BOHEBA@ACCKSEUBAFADICG@KJIBECEBAPMAAG@KKIBACCQEGFOAAIGIMECEECCQEK@@CCAQKACEAADE@CAAAKEEKGECKGEC@IHC@GGWCKGULI@ECAEDKLQBKACIEACKIK@CBEFANABGDUAKHGNEDGBADDN@HMJGLIAIBCDAFEDIFGF@FBDBHOTITMBK@EBKLCTGHIHAHDHLHBH@FKHG\\@FANCRS@QFC@CCOAM@KBEDCHEXC@@CCACAAD@PADIDECCOEMQG[[SKK@DGAECEAKEGBCAEC@CDE@ECACHMAEI@CBCHANGN@FFFBDABMD@FFH@FABY@KXDFBHMRDJ@HEJ@F@BGBADD@BAHF@BCDE@GHDJBFCRCNAB@JDDLBHAH@BBH@DJBBLDDB@FADGHCDQBICEGBGCOCCC@ABCVCBAA@EAAE@CBEBCAA@@CYCSCSAEBAD@JKJADBBH@DFATCDG@CACEC@OLGDQBIDC@EBUA]JU@[FQBMFGFCDC@KCM@GCBGAIUBIHGSAOCMCCGCGYIOEAC@KJAdALFJADAD@NANCDSIADFHFF@DG@CJADFJEHAJELMIMCEECBOREHMH@BEF@DB@J@DD@DGFDBABGFODI@GBKJBHCBIACFBDHBJ@DD@HHNADGDCACEAGGEQF@FFPAFEDG@IAEEE@KNABE@CB@BADFPHH@BAHBDDBBD@DEJGDMBIJYEABBP@DAJJHHDJCDBBFHHDNFHJJF@BCAGAAFKBUBEH@LCFBHLLJFJDBBDFPAFEFKCEFC@GEAICAEBMPEBK@CBEHI@EAGGWHAB@PABI@C@AC@KAAC@EBADAJAFABG@@AIAIEEBCEG@CCMAECACG@@CEAOGaEMECC@CBCACSBICMDI@@CFMDG@GCKGCEGC@CFCPNVBJCJILEBWDQKC@KJE@WGKGC@GHE@IACFCBSBGFAFG`ADABGDEAKII@@PDJDXAFSLMCEBIPCtALCBEAIIA@ABANADC@IASQGGO]EEEBABKTBDVX@BKEE@CBBFDF@DEVGNAD^TLMHABBBDBLCLGHKHMHICGBKDMLCEKAQHORKZAHFFFDF@FADBENAZCFQNAFBDDDBFFFF^ANDNCjFFD@AB@BH@@PBDEFBFBBABDDAFDDBHFAFBDANFDAJ@ELCB@DFLJJFABHLJH@DBDCDLDEBD@RBDJ@FFLIDBT\\HFFBLVJ@DABBB@FIBHH@FBBCDABDJHH@DABCFEBBFCDBDABDB@FEDBHABBBDFAPfBB@FENPCBJDLNPCFQLGF@LKFBFENGPBFAF"],["@@AIAAABCHI@EB@F@F@BCBGJAFCBEAGCCEMAAA@EOK@EFI@CMIC@ABBHAFOJAADGAOACQAKCEAACBCKCCACAABELABC@EGO@AC@IA@A@IFQBCCGGE@EAMCCCO@KGCDAD@JELAT@HBJDHJF`DB@FGH@HBNHLJJ@PBFFL@NFHHJBFCRHDDBBF@FBJ@D@NHF@HANDLJFBPCFDFBTBFCBECEIMAMFIEGFI@A"]],"encodeOffsets":[[[109061,36594]],[[108620,36306]],[[108619,36271]],[[108021,37060]],[[108600,36305]]]},"properties":{"cp":[106.285241,36.004561],"name":"固原","childNum":5}},{"id":"640500","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BECCOGQ@cLG@KEE@KEGGCICCUBCOKMOAKEICAIHGDW@QD@FBLLB@@AOWGQCMAMBUAAGAMDE@IGMAEBIHAAMiAICEIA[DE@EAeSoeEGEOECYCOE_GaM]@IAKCMKG@]PKPCBI@AEAGCAUJIFEBeK[@IIAIGI_H[DGGAEDKAGCAMCEGAGJOVkR_NkBaF]Q@YD]N]RIDW@sFq@CCAIAIBKDOQKQUKQI]OKQGUWQMCAIFADANELIDG@OEOAIDI@GCKGK@CFHJLFZVKXIPSJI@GCEGCAOBWBWCOISYKCG@[FMJKL_XGLEBCHKFEDEBBJEJIJKFIH@D@PEJUDADC@CFMAKCMIWUMQOiUAEMBGJ@LEAABBJ@FEHEBADIFKDGFEZBHHHHPENGJ@HDDJJL@DDFR@LGNIJOJCFCFAPABQFU@EFMD@PABEBCDADDFG@ADC@EDAFCDBBABEBAF@DELB@X@FD@DFHINWBA@In@LFX@HCBIFGFAFED]G@IAAABIJAFBFLX@JBFCDELBLDFAJCNGPYVIJMHCHQNINC@OEECIKCAC@EDMBGAKECHEAA@CFAFEACBEFA@EAEVQDHNTJF@JHH@DBELDLAFIHGPBBHFAFONUCKXE@@B@V@BO@CBAFE@CDGACBADFFAHFJBTFJEJa`M\\@JAHBDFJFDRdTJJCP@BDAJ@DBB^@^EFB@JHJ@DBBNCP@NCRMH@RBTRHVHBHD@FI^@LCN@JCLIAOHQNKFIJCF@LGDCB@FBBF@BHeTBBBHAL@HADGB]VWVEEC@ADFFIFEEE@OOCDALGEEDUJGCGDAEEAECBEC@BC@AYLFLGBBDHCBHC\\IZTEEF@BDB@HADBJGDBDGDCRBFEHIDCDE^@ZODUAOBS@ODGBMB_LGFOFOBQJOJKEG@MMEKAAK@EDCDaNF^SHYAEHAACGA@YCEAGBUR@~ANEHEDaF]TCFHR@DAFINEDIHMDBBAB@BDBCFDD@HBDGAEH@FGNCHIB@DIHYLAB@LADIHADBfEFBDADOJ_LKLABMBO@IJCACCKCEAAFCBAFGLUJSOOAMEEKICIIMECGWMW@YGKBGEIDI@IAIJA@AAACICUBECGAMBIFCNKHGJGDShAD@PHTLPDHADFDJBHAFF@JKLBHHFPBZQH@H@JLNFBXLJNFH@N@\\VDBPCDDBHFHAXG@UIMBIFSFODIDM\\AHBFHHDFDJBTBDPJBFQH[BGDCDSDGBQEQ@GDE@KNEBqB_FUGKAGCKJGBEDADSDGICAI@EGOGOAMDgEMBQJGVOTC@KCsKIEQEIIUCGIKCiD
KYAUP@N`\\hNJ@PIJ@bLPPNHjA`HFdR~VAFHĤHâHþRîNJBv`X@lLĈNbN¢xjdDDRFJ@VD~\\nLVLNLbPTD^B`JbDbPhNR@L@^F`BZF`APDHBXC\\CfQpEHBhApBh@¨H^@JDLJhBhFFJVJbJPBT@LDVDHDrGZ@N@XJVLH@RCVARCJDHA`GHCRVX@dGVBNFBADWEEUS@eAaEWIODC@IACCC@CNGDKLQ@CQMEGBAlABBBBBNFNLNHNLHJPBJ@FAL@BF@FCJKTGN@PDX@FAFCLC`@DAJITEFCBK@IEGAGBIDMGGYBIGCO@CFMJKtq@AA@CBCAFINGZAPGNSHEJIAACAKBUEECACEEK@EDE@ECEQMEMKCAAECIAKKMKAGEG@KFGBMGQ@IBOCBED@BAF@DCJFACB@BAHE@CFA@CF@EEF@ACFBACFABAA@KBYEICAK@ECA@CDKHC@oIMEOO@ATaBGCA]@gHCACACQCEBCTMhSJCXCbQV@XKDCTOHG@GEOOQOGŋVAACMIEKAKKYGMAiM@AHGRYBG@GDC@ADA@CFCAKHCCCBAACHGDBNGFE@AE@CGPIBA@AC@CDA@BCAEBEDAFDLGBCCCCAEBCEDIF@BCMIMC_AECK@KCW@YA@JIJ]XCDAFKFBDFHBHBDHF@PELGVGHGDAJCD@BBBHBADGHA@ECIKeSYYKIKEe_QC]BEAACCAKAS@GCTCNIDKLGJA\\@JBXAlOHBnBDCBC@OFADE@QAGEEBILaPW\\M^GJEtoNI~@FC^qÓNME@ECC@MGA@AACGBCACBKCC@ECCKIOCGGICCCQIGEE@AACEAII@ICKIAEBGSDEFGDIBCAGFC@PMRIHKBA[]AGFW@GICIACG@IBYDMHOCGAAJKB@FDXRD@HIPAPBN@LHPFLBPCLIDI@MDMDAFBJFDP@PDPFD\\HHF@HDBTDDDBDALDDLFJFPRJNCHLFJJ@J]\\KRJFD@FADEFAFDLBPNJD@B@JDBL@FABQjY@GIABIJ@LGDS`SAWJK[W@GJEPFNI\\DrcF[C_dWV[\\UGcTkz{B_X[BYZKhiBIKYHMDU^QFBXPZDVAJID@AH@V@NDHFB^FJAREFCD@NL@H@DDDJCVIDMBAPHLBPADGNSFAVA^LzRRDP@FFBD@DGHJDF@NATCNJJ@FCBDTH@B@JDBNSFAFABCBO@ECC@EA@@KDEDCL@FEFABCBEHC@CNEM@QEM@@ABAJCHIAECAAIO@EEKFQASFCBADSPWJ@ADCACAGEIDGEGEDIJC@INKFEHC@CBA@BEEA@ETY@QXGNFN@JCJM@EJCJEDICAAEIE@A"],"encodeOffsets":[[108965,37396]]},"properties":{"cp":[105.189568,37.514951],"name":"中卫","childNum":1}}],"UTF8Encoding":true});
46 | }));
47 |
--------------------------------------------------------------------------------
/Dashboard/public/static/China/js/map/province/shanghai.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | !function(B,A){"function"==typeof define&&define.amd?define(["exports","echarts"],A):"object"==typeof exports&&"string"!=typeof exports.nodeName?A(exports,require("echarts")):A({},B.echarts)}(this,function(B,A){var D=function(B){"undefined"!=typeof console&&console&&console.error&&console.error(B)};A?A.registerMap?A.registerMap("上海",{type:"FeatureCollection",features:[{id:"310101",type:"Feature",geometry:{type:"Polygon",coordinates:["@@AHV@BDCPEPLENFHCJHFBNCAGBGXWFIBGCGMUKKCCcGCDGBALCPIAAPGR"],encodeOffsets:[[124373,31970]]},properties:{cp:[121.490317,31.222771],name:"黄浦区",childNum:1}},{id:"310104",type:"Feature",geometry:{type:"Polygon",coordinates:["@@CEAMMAA@C@AFA@@BC@ABC@@BD@@BH@@BB@EHDDCBECADGEEAEBFNET]CMRELQjOEGRFBAHDBAHH@@B@BDA`H@F@BC@AB@FD@DD@@@CH@DDAFDD^LEPF@DFTDPHHQBOJBDOBKHADCOGCEAE@EFOBMAEUW@GBEHILMBE@KGM"],encodeOffsets:[[124381,31859]]},properties:{cp:[121.43752,31.179973],name:"徐汇区",childNum:1}},{id:"310105",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@AACE@FO]KCCBECCG@@D@@CCmBSAcKG@EBAEGC@DC@QE@CA@@BEBMTNFAFDBA`D@BDA@AA@FFBBLD@@@IBDBABDB@@DBADB@CHA@@DC@C@@@BBABFDH@AHD@ACDA@FD@BCA@@CJCNWJ@BCHAFEF@XCV@DFH@VFBBCFD@HEFFFBB@@IDAJFBABIFK"],encodeOffsets:[[124354,31964]]},properties:{cp:[121.4222,31.218123],name:"长宁区",childNum:1}},{id:"310106",type:"Feature",geometry:{type:"Polygon",coordinates:["@@AB@PCJBNG@ABBDBB@DNBAJJ@@FB@@H@@@DF@ENB@BDD@BAT@BENDFDPB@AF@A]G@BOCKCEBA@G@KBEDCLMVQ@EACDECABCDKECGDMEKFFODOACU@BGOGUCELAJABIECBBNFHJBTLHB@BADDD@FB@@DC@BHOVUJCFIG"],encodeOffsets:[[124340,32022]]},properties:{cp:[121.448224,31.229003],name:"静安区",childNum:1}},{id:"310107",type:"Feature",geometry:{type:"Polygon",coordinates:["@@DB@DHBBCDBB@A@DF@@DFDDHGBDDALZCB@@EBA@ACQ@@DGBEFBB@FD@J@BFMBCCCDID@AODAEIDBDEBABBB@DC@AF@@AFGACBADBB@@NFADD@@BB@B@BAB@@@BBDA@HBB@AJ@@AD@@BB@AFHBDCJFHBGQAAJA@ALCBBF@@AB@@BD@@@JABDABD@@BHBBBNACEJA@ADAAA@B@ADAAAJBIQB@FCBBD@AGJ@@EJA@EHADDAB@BFANNDEVIPUAGD@@CA@@ECCBC@AGASKIAEGACA@EAEEA@EFC@DEAAUEG@CEU@WDE@EFGBADI@MV"],encodeOffsets:[[124267,31987]]},properties:{cp:[121.392499,31.241701],name:"普陀区",childNum:1}},{id:"310109",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@OHWVFBABIKK@MJCJGBKV[C@@I[AOEODCACCCLADDBCFBD@FURQT@J@F@HABDFDLAPH@BTVCLBBE"],encodeOffsets:[[124402,32064]]},properties:{cp:[121.491832,31.26097],name:"虹口区",childNum:1}},{id:"310110",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@JD@U\\ALIHID@NLLAJABUEGX@PVA@ZDDADGFX`ZKDHFAFHpSNGDCDGDM@cBGL[BKAGEGMOcY[GWA"],encodeOffsets:[[124433,31997]]},properties:{cp:[121.522797,31.270755],name:"杨浦区",childNum:1}},{id:"310112",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@EBAD@@A@E_GCB@A@AG@BGCABGEAHQPFRiFKNQ^DFSEMFAFBHFBCFDDACCFGA@@AG@@AC@@AD@BAD@@AB@BED@B@F@B@FBBNDFLCDBCBFB@DFG@CBBABDB@CDBAFCB@DABD@B@DB@BD@@B@BB@B@@FJ@DKLFB@DMDBBABBCFDB@@HB@BBABBDCBGNBDAB@@BPDBAF@@AB@@AB@@CDB@BF@DGB@@CD@FDADF@BADDDCBBDCAAC@BCFEAAB@FECABC@ADBBEB@@EGCABAB@@CAA@CAIABAAA@@ECDGD@BCBBD@BBHBFALABAFBD@@CGA@BC@BCEAA@A@@AEA@@AAA@G@DCG@CCBAAA@ADBDAEAC@ACE@BCC@BG@ACBBAEAAA@B@CECDEAEBAB@BDB@DBD@BBD@FDBGBBFCAABCBDBCEC@UBACA@AAA@ABB@CCCE@AA@ADCD@@BF@@FB@@BDB@CDB@ED@DFB@ABB@HDAADCBE@CCACC@CACIABA@@@BD@@AD@DICABCECFA@AMEO@@CC@ABA@@ABA@GCACBADCDA@@BAAAB@BICADE@@BEAABC@GHC@E@@FD@@BA@CFC@@BC@AASEKG@ACAIZBFGDYCIAKGKAU@OCGAKIMIMCOEeCWOBQHI@C@CBB\\HBPTBHJHABECM@ADBB@J@F@D@B@FBDAD@NBBBN@T@DBBADFCFDDGTDJFAFNB@DB@EFFBADD@@DFDDCDBADERCDAB@DELGAADMCEPHB@AB@@BHF@@GNQV@DEJCDC@ADD@@BCFABADA@@FCB@DCD@DABA@EJEF@BEJCLGJABCHAB@BABCFCB@BED@BA@@BABADGFAAA@@CAAKGCAKAUTC@CDDBADIHDFCF@@CDBDCHDBAHGDBDCDABCAABAFKACBDDABBF@@@BHBBDDBC@BDFFFBBDD@@AH@HB@EFC@ABC@FFCFBB@LCFBBAEGFEDABGJMJCL@XGNFH@PDBB@FHDBAAA@@D@D@@CB@DGA@BCCA@@CABACAJA@@C@AKEA@EBBB@ACC@B_CABEMENSFA@AB@@DRFD@@CHDBFFAH@dLTBjA"],encodeOffsets:[[124327,31940]]},properties:{cp:[121.375972,31.111658],name:"闵行区",childNum:1}},{id:"310113",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@JE@@BOAECMCAFS@ABC@ACA@FME@@C@@@GA@@EI@BIMA@CCA@CBAH@AMDI@OBACEEB@ABACCGB@FIB@FI@BHC@AAEDA@JRIABBCB@B@ABBCB@BIBDFMBAAGA@AC@BAACIB@@C@@AA@@BE@AAKD@BIBBBHRC@ICCCCDGABEA@@AC@@BI@@BAA@GCBAAA@ABBBCDAAEJFDB@P\\J@@FB@@DGA@FD@@DAAADCF@@ABBBCDDB@DF@CLCAEFEB@DG@@HD@DB@BB@@FHD@BADA@CFCFABDB@BED@BCDEFFBABB@ADG@GNCBFHAFA@@DCAIB@DB@@FBBEF^JBAH@AFD@A@@DA@@BFDABD@@JB@@BA@AD@DB@@FCJ@FA@C@ABAAABENDB@BCDCFG@ADDBEDDDABA@ADB@ADF@BD@BEACD@BCBJF@BABA@BBCFE@ABCLABBBAFEB@A@BCDEBADD@CBBBBAADBBD@B@BBADFADDDA@ED@ACB@FF@DFBBCB@@AC@@GF@B@AFD@@DB@@AD@@BD@\\PfK^I|]BAEGBE\\Q`W|i\\UdSXUBD@DFAEG\\UQQQY@QJONIVIEGEBCGYLW_HEBCCC@YUBAFKAUD"],encodeOffsets:[[124384,32068]]},properties:{cp:[121.489934,31.398896],name:"宝山区",childNum:1}},{id:"310114",type:"Feature",geometry:{type:"Polygon",coordinates:["@@A@A@@AC@BCME@@AABCDAHBBE@@BED@@CAABAFAACJCBFPC@BJCDCDDNAAEI@C@@EAAFEHA@CR@BDB@FA@@DAKYCBACGHCCCE@@CEB@A@CAADGA@CCAADGB@DB@ADC@@ECBBDC@BGG@CCIC@EAAOCG@OEUHK@IDINAHCBEFFHABEAKDA@EAED@EAD@BED@FGAG@@BC@@AC@@DA@@CCBEA@DGAKFOB@CG@@BAA@CGCBAEA@CA@@DEA@FCFB@ABAAABAC@AAACFGEBCABCCABCCABCAB@@CC@ADGDEEC@EDCA@BA@BDA@ACEFECABC@@BB@BDC@AJIJCAADC@CGEB@@AB@BDF@JDD@DHBABD@B@@BCHE@@BC@@DCA@DC@@DDBADA@EDFBIPCFIIBCMAE@AJ@B@FAB@DAJDB@DDB@FD@@BCBBBB@@DABAB@DCBBBAHBB@FMCKB@HF@EHIACBE@BFCBBLAH@DD@@CD@D@BFNBCDGBAFTHBEBB@DB@@AJD@ANFABBBD@ABD@@ANDBDCD@BABA@ABLDCFDBF@ABC@ABDB@BFDADJDDCCDBDCDAAABBB@BC@ABA@ABC@@HA@C@@DJ@@DFB@BD@HB@AD@ABBDFA@HA@@CA@BDABOBMFAFB@ADBDAB\\LDAHBBADBHAPFJFAFBFFD@BJHRD@FHFNHDACCLADBH@DDFABHCB@BHJF@AJ@@FAFDB@AEFE@CBIHB@AC@@AA@DEHD@BD@ADB@BDB@AKD@@DBA@@@AD@DBBDBBDBD@@FDDBA@CDAHDBBHDADB@FA@BD@DCD@BFFCJD@DA@FBBDFADC@A@BFABEAABADKBAF@DEAAB@BA@AIEDA@ADCFB@AACE@BCA@BCB@BACCFCCABCH@DEDC@ACAFMBABBBAD@B@@EDI@EA@@CBCB@@AA@@IC@BAEC@AB@@CB@C@BEG@AB]IFEAA@EA@@CJADB@CB@BEEGDAHMH@BCA@BAEAFEDC@AFC@ACABALQGC@ECCE@@GH@@CFAFEDBDKE@@CCADCAABA@@DEBCBB@CC@@EHB@CA@@EI@GMEMICFIBBBABAAA"],encodeOffsets:[[124249,32046]]},properties:{cp:[121.250333,31.383524],name:"嘉定区",childNum:1}},{id:"310115",type:"Feature",geometry:{type:"MultiPolygon",coordinates:[["@@bM²WLCļÑNI^_ÈïsJQ¶±`e`Z¡LDCsEWOWs@GBI\\wsYg|QNUBģFqAZHZB@@JHBAJFRA@BB@HABB@@J@HBDBLAJC@@BD@ABA@B@AD@FB@@BA@@BA@G@@FC@AB@DA@ABCAC@@DEA@DD@BDEF@FQJE@CAGJA@ABCAEDBDGHADWR_TYJI@G@SD@AA@@AA@IDGB@A@BQBmAA@CBOAGFELC@AAaDACS@C@@AIAABKA@BEBFDADDBCJC@@BC@@A@@ABJBBD@DDDDB@DAFCDBBGCA@BAA@CEC@@FCA@DCA@AA@@EE@@AC@CD@BBBF@DD@DAA@BBB@BDBAB@VFDADACADBBEDAAAHECC@AAC@CAA@ACA@ABBFCFFD@D@ABBFBABDA@BAHD@ADF@BDD@FBCBCA@BBBABDDH@CDH@B@BB@@FB@BB@B@FBADD@@AHB@DC@EAABKBEBGAAAC@AAADC@CHFD@@BBABJBDBB@DB@@BABAHD@FA@AFCA@BADDBEFA@BBEFADD@BBCDAACDCCABE@BCECC@@DA@CHE@@ACA@DA@@BA@@BE@ABOC@AA@CBMAAHCDAAAB@AGA@@CADEAAABCACNA@KECLC@E@@EA@A@@A@AC@@AAAA@A@C@BA@CDABEAAADCABAAA@DEH@CEADACAKDHN@LAFKNGJAF@D@DBFNLHLANEP@FBFJJJDdHDDLLNVDHAHEJWXAF@FJFHDtDXHhZNPFHBHALK\\AH@dCNCHCDMHoTUJMJIP@RRZRR"],["@@PDNAvOFGBKCeEQGEI@IBMNY\\GJELATBJ"],["@@HRHJNBX@XCRGfEFGBM@eYuGIgCIAK@KDMPIREVCXARBP"]],encodeOffsets:[[[124438,32149]],[[124808,31991]],[[124870,31965]]]},properties:{cp:[121.567706,31.245944],name:"浦东新区",childNum:3}},{id:"310116",type:"Feature",geometry:{type:"MultiPolygon",coordinates:[["@@DBBAGCBD"],["@@HADA@AGCKHBBF@"],["@@FACAAD"],["@@DB@EB@@CB@@GEQ@IEKAM@ATE@EHADF@GDCFFPD^BBED@@BD@@DPBB@@CDB@BLC@ADB@BF@@CF@@DB@BDCDA@@DCACBC@AB@HDBRTHGBCHBDB@AF@B@NACQ@@@AC@@CC@CIEE@CFCFHDBHABDN@BED@BDNA@HAF@FCBADDLD@DAAC@AB@@ANC@ANC@TDBL@DGJC^BDBDBJ@^F\\VHGPB@CD@BAF@DKDBBCA@BAC@FK@E@BD@@BNABCF@@AFB@AD@BADB@GA@@AF@BCFBDKB@@BDBB@BEDBBDF@@CFB@HD@@F@@@HA@BBA@BDC@BJADBBLB@AA@@ED@DIHA@BB@BDDBBCBA@@@BF@@CB@ABFBBCFB@BD@FCF@DBBAD@BAD@BABBBAHDJ@ABDDABDBHCBDJIBOFE@IDKJAFCBAJELAAEBCBKAA@GD@AIBEAIDOK@@EDEAABA@A@BB@@@B@B@AAD@@ADA@EJ@@CB@H@BLDBFA@@B@@GEB@EB@@CB@DETAAADA@GH@BHLAPA@ABBD@JU@ABBFCB@£«ugWOCOCgBDaAE`@HCBBFCBAJA@AFDFAFFD@FDFCFBBA@BBAFBDA@CDAAA@STCBWLAAABBBCBAACB@AABBBIFAPCHCFBBCB@HA@CAABGPIBO@ICCEDMGAILADACCBCA@CECEAKCADCBADAAKAEC@HEBCAEDQBACEAAB@BGCYDEJCB@BBFN@B@@JDbHRJL@D@FA@@CCB@DABBDEFACSDA@AAA@DDBLFHAB@BABCAIDADABCEKCABC@CDABBBC@@B@BA@BBcO[@MGDCC@DK_KFMGBCFGADEA@AGCA@@DAD@AFB@BCB@DGOCCLKR]JADEAMMABBCA@CB@BABCAACB@CEAB@CAAGBDFGFHFGBBDFHF@BDB@ABBFDADFF@DHD@DFFADDGDDDADDABDA@DDCDFFBDEBFFDCDBCBDDEBBDB@@@CDCDI@GB@BBFAB]DAHCDDH@DDBHB@DHABDB@@FG@CABJBl@FEFCFBB@LB@J@@GPDA@DD@AD@D@@CCA@BCA@CB@A@@AF@BGFAADDB@ARF"]],encodeOffsets:[[[124321,31442]],[[124337,31429]],[[124341,31419]],[[123933,31687]]]},properties:{cp:[121.330736,30.724697],name:"金山区",childNum:4}},{id:"310117",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@DLB@BFTHAFB@DABHFELFBBAH@DIHB@GB@@CB@BEDAB@LAPB@DFBADD@@BBBN@@DRB@BADALHABlH@@\\ABAFQPOLDBDBDCJBBJFA@FCJC@@DCAABDDBDKHB@CDBDEBCEINHDABFB@DDDD@F@@ABCAA@EB@@CH@B@BCBABD@DLBBCB@R@ADD@BAJ@BBBB@BA@@NG@AFELC@AB@@CBA@KJAAA@CAC@CLD@ABBBGJDBBDCFBBDCFDADBBDCABB@@BA@HHDBABFFDCBBDCB@BABB@AFEBBBED@FEDDBED@BALB@CD@DEHBBGDBBCB@BFB@@LC@@FJA@AJB@@B@@FB@@HH@@BJ@CJDDADDBB@B@BCJD@DB@AB@FC@@FC@@D@FDA@X\\ILF@CAA@ABBJ@DEXFPBI_CM@CF@NFF@BBB@BAADBLFBJABHKB@@L@BHXCAGBAF@@BB@@BCFBDDBD@BB^ENNEFEAEHCC@DBB@BB@AH@BFCD@B@ABDB@@FAF@ABXFnNHKB@BA@CDC@CDA@EB@BCBADE@AC@BCD@DCFI@CRUHM@@GE@AA@@BGAFONDBCHBFK@CBAHODICACDEC@CC@BCEAFEA@@CMABEIESCCHECEDBCAA@WAMAA@MBCAC@E@A@C@E@IAABCN@FDBAIGAGOSGAA[DAD@J@XIJ@PDDI@ODK@UD@BCAAGADSG@CAA@AABAAAA@@BECBC@IFCBC@CIG@A@AGDCABACCBAA@@@G@GCCB@AABC@ABC@ABCAE@EDC@@AEAADEABAA@@DE@@A@@ABADCAACA@@AGBCJC@@FB@@BMCBCAID@ACB@AAB@@G@@@EC@@GEA@DE@ACCAAFA@CA@AA@CLEAADE@@BB@@HCAABC@@BEA@BE@ADMB@AC@@A@FELD@ABB@ADCACLE@ABC@@DOAGH[U]EI@CACA]AIDCHK@CA@SMD@BMD@BA@@BBDCBC@CKBCDA@EBE@GMBACC@AFM@ACGBCAEGED@DFFDJD@@DD@@B@@DRMBA@E@@BCAGAADGHQSCA@GBAD@DADB@CB@DCACA@@CE@@DE@@ACA@BKD@ACA@DA@OA@CC@@AC@AF]AOCEECD@HCEGB@FSF@BBNFL@JFR@HA@@DA@@FCA"],encodeOffsets:[[123933,31687]]},properties:{cp:[121.223543,31.03047],name:"松江区",childNum:1}},{id:"310118",type:"Feature",geometry:{type:"Polygon",coordinates:["@@@GCIBA@@FADHD@BCDBJIBID@ACA@@AD@BAFDFEBDB@ACB@@ADBFCD@FFHCBCD@@DA@DBBADDBADDBAADHFDEBB@BBDBABBBAA@DE@EFB@CB@@DFBABHD@DBB@AH@@DPALEHB@CFBDA@DB@@CD@AAEAEEACD@CAACGA@A@@AEBACCDALBBEBADBBADCACHCBGCADGACDC@@DECEJGBCCADCD@VSLBDBLHBB@DB@BBFCDEBA@AB@@AFC@ADADEBA@ABADGBAHIDKJOmMWEBAE@EB@@CABAA@C@ED@ABGA@@AAA@CDDFGFBFEMM]FAAC@CAACDE@AA@@AE@ABBHWDAGK@@@LAAGIBEAAKBCABA@AAE@MEE@@DDNJ`OAWECFI@AA@BBB@DKE[J@WCB@E@CD@@ED@@EBAA@@CICADA@A@CABCCCDII@@AG@@GA@@EA@@@IA@BIB@ED@@KA@AEA@ADCAAHGACFC@@DKAABC@AFCCEFC@AFAAEF@BAAABA@CDAACDEEBACAGGB@@AA@BACDAABCECCDAADGAACAHIAABAC@@EDEB@HBBBLIB@DA@@BAD@FKBEH@@MB@@AAAAAI@ABC@BCQ@A@ADKA@CACABADA@G@@DA@@FBBAD@BE@C@CC@CEABAGCJMDFFAACDCA@LGACCCBADB@CD@DI@EEBAIIACDCACAPKROBEBA@[G@AkGBBKBC@AQA@CM@AA@AC@BCEA@COAKBA@CBAFA@@DA@@HGACJG@ABEAFKGEBA@CEAGBEUKA@CQE@BCABCEBAHE@@BB@A@@DDB@ADB@DC@C@@BCCB@OC@HM@AHC@AHF@CHBF@BC@@DB@ADBB@BNB@BB@@FDB@DC@A@CRA@CFBBAFGAADDB@HA@@DB@@D@@ADBBEJDBM@ADg@ABFFABGBCNGBC@CACBAADAAEFACK[AAAJK@AC@GBEDG@ACOFOEAD@JQ@@FBdCDEL@FCD@H@JHXBPHABDEJ@BEDCACHCFAHA@@EG@QB@BBDE@@DE@AAE@@CG@ABADA@ABCAABCDBLD@DHNJDD@HDHHHJFdDPCTD\\JnEMPDvBJHADHBBD@BD@@EHBFCBEDB@AD@HREB@FHD@DHBBGD@H@ABDBL@@AB@@AD@@CFA@BAFFD@BBB@CB@@FHDADB@@DEAADJB@DCHEAABBB@BFBAFEFADJDABIAADFB@DAB@B@BDBABCB@BE@@DD@Kz@DD@@HD@@DC@ADA@A@AFFB@HBA@BAB@FC@@AIBDBDABD@NA@BBBBABBRA@@@dFFDDHEBBHDNFFABDBDADCB@@AB@BCFO@ABCHCD@BBC@@@FDPRF@FA@DB@@AHAACFCHA@DFAACD@BBDAAABAD@BBD@@CDALBFB"],encodeOffsets:[[124062,32028]]},properties:{cp:[121.113021,31.151209],name:"青浦区",childNum:1}},{id:"310120",type:"Feature",geometry:{type:"Polygon",coordinates:["@@LBBAJB@BD@T@BDbCBBD@FKHEPBDAB@nBRA@A@BHAJCB@@BB@@BTCH@J@ZI`SXQBCHGACFCDBBAB@HIDBF@NGDA@EFEACC@@CFB@CD@DBBAB@@CBAD@@EH@B@@AB@@AA@@EBCA@B@BAC@@AD@BIAKAC@G@IA@BA@GAAB@EQBIGA@IA@GYBYrĥDEU¡_[g¤A@EDAA@BIVC@AA@BOBKBAGG@@HCBBBSBCFA@@DA@@FFA@HA@@@EBCAAKG@A@@DI@@FCB@BC@BBA@A@@@A@@A@BABBBCF@FL@CPBJAFBJC@@HBBALADBFKBIFABEDIBCL@JEFAPKJHFBFADED@JADFD@AB@BBABBBB@DBH@CTHBBBADC@@VCL@PCJTfD^JNJLJHBPDV@LBLHJBZDHCAEJYDB@BLHTFBBD@@AD@DEB@@AC@@EF@D@HGD@BAFB@AF@BCJD@ABABB@AB@DCBCDADB@HAB@BB@BAD@@DP@NF"],encodeOffsets:[[124489,31743]]},properties:{cp:[121.458472,30.912345],name:"奉贤区",childNum:1}},{type:"Feature",properties:{name:"崇明区"},geometry:{id:"310151",type:"MultiPolygon",coordinates:[["@@Æp@dG¶YIÐtuÆu¬RWWckĜyPVĆgðÕTUm
U¥c}SH¥|÷^oGĝ¬åµxbcAXor]d"],["@@MURm@kYiD[YRwRmdS^ChQv"],["@@¬QSzoMUægLShQe^sFwS_aLï{d\\ungZeNGZ"]],encodeOffsets:[[[124119,32586]],[[124716,32134]],[[124427,32249]]]}}],UTF8Encoding:!0}):D("ECharts Map is not loaded"):D("ECharts is not Loaded")});
--------------------------------------------------------------------------------
/Dashboard/public/static/China/js/map/province/tianjin.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | (function (root, factory) {
21 | if (typeof define === 'function' && define.amd) {
22 | // AMD. Register as an anonymous module.
23 | define(['exports', 'echarts'], factory);
24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
25 | // CommonJS
26 | factory(exports, require('echarts'));
27 | } else {
28 | // Browser globals
29 | factory({}, root.echarts);
30 | }
31 | }(this, function (exports, echarts) {
32 | var log = function (msg) {
33 | if (typeof console !== 'undefined') {
34 | console && console.error && console.error(msg);
35 | }
36 | }
37 | if (!echarts) {
38 | log('ECharts is not Loaded');
39 | return;
40 | }
41 | if (!echarts.registerMap) {
42 | log('ECharts Map is not loaded')
43 | return;
44 | }
45 | echarts.registerMap('天津', {"type":"FeatureCollection","features":[{"id":"120101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BhB`R@DA@CD@DCFCHBLDF@DABKFIJGQG@COEQM@@OASB"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.195907,39.118327],"name":"和平区","childNum":1}},{"id":"120102","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XFFIE@BGGA@KVBN_]CCCLgMGE@CD@AGB@AEGMEACB@BA@BFWFACKA@DA@@DA@C@CCCDGIAKMBWLGFERWT]bADCNE@DDIDEFBHTHBD@DLMPJj@ARX@"],"encodeOffsets":[[120075,40099]]},"properties":{"cp":[117.226568,39.122125],"name":"河东区","childNum":1}},{"id":"120103","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@TAPB@@RNPF@DRHPSXSFQHEXKE@CMIFUQA@DC@CCA@CDE@CEE@FOc@@D{@ch]IGFCFE`A\\"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.217536,39.101897],"name":"河西区","childNum":1}},{"id":"120104","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@C@@DCBQ@AcAmBOFaDEHEgKID]ZQTINCJEdkhHDRNCB@FD@BAFDFHB@JIDANFDECCZCBA\\B@Hd@LB@CAU"],"encodeOffsets":[[120007,40074]]},"properties":{"cp":[117.164143,39.120474],"name":"南开区","childNum":1}},{"id":"120105","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FBBAJBFDJK\\NFEFBLKBBBATP`]QOLB@AHBBEJ@DDDE@QW@BQi@OIKN@CACQECG@CFCJCCCMCGAEDCFBT@DSTQN@BFDBDCJBJAHKAIFDDXDAB"],"encodeOffsets":[[119993,40130]]},"properties":{"cp":[117.201569,39.156632],"name":"河北区","childNum":1}},{"id":"120106","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JELBBGAIDIACEC@ARMTSKAc@@G[AABYDDDCFMECBIJC@CPHZ@LHNFFNHBCDAZBB@DEJE"],"encodeOffsets":[[119980,40125]]},"properties":{"cp":[117.163301,39.175066],"name":"红桥区","childNum":1}},{"id":"120110","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CK@QOCEAEK@KAAKAKEoRECIYK{\\Af@BMb@@WAGBC@GV@KYBUkB@@OD@AEUE@IQDAGSJEDFD@CIDAAKDE@KECOKKEABMVMRGBSGE@KDCDADDN@FCHCBGAIGUKUEcB]JULINIZGD[AU@QDMDGFQR_NODiBcDBLHJDCDDF@@CB@@CLBBDXEAEB@@ADAFBHNBFA@BHC@@DHF
NKhDD^DM`UA@LHBAHF@EJWE@RCFCCI@AFGA@BKARP_^ZXZL\\JfHNHEdEAAFBBQCAFPHRGtMBEB@NB^Cb@lECFHDPD@DNBJCFE@CEG@GTCPHBF`@JFBCHJJKRCP@JGTIAQGIDAPAVH@GCEKEEBAAVEBDADPFBBCFBBHE@WHClQPCFBTARE"],"encodeOffsets":[[120391,40118]]},"properties":{"cp":[117.313967,39.087764],"name":"东丽区","childNum":1}},{"id":"120111","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CGECABC@@EDAQMGClgD]DM^c^YHCF@VrwJBBINBHAFAHBDAN@LDDGCCA@AC@AACBAAEFKA@KDCCJCJDFGF@DCBGDQJERFHGMCLEAAGAFGMMAWE@BHQLKIBAJECCCAAGQW[DAAjS@AIYXKGGT@NBFEBABOJBDMFADGG@BGH@@AACFKGCG@FMWMDABCBAACLCIGCAE@[P¥\\]N¯MNORU^]XKF`_XIIAIkDDZF@@FMDJLmTSDaHgDBJE@@DOBDH[HFJCBCGCBIMKH[L@AAAADUBACECGHWKCHTHBHaJDLF@JNF@FNLAH\\FABPD@EF@@HELCHVF@GXBB@DJBI\\PB@BN@BHK@GBAJ\\F@AACLABBAB@DFHB@FFJCDL@BA@@DF@JEBKHB@CjHBENDH@HSFBDKEAFG\\H@DE@AF@HHBANH@BQ@CBGNFT@`LFABIN@ALDBCFRHFB`D`ANANCG[DM"],"encodeOffsets":[[119940,40092]]},"properties":{"cp":[117.012247,39.139446],"name":"西青区","childNum":1}},{"id":"120112","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ZAZEVKXSPGVEnDHCJYJMVKNEPCdAZHRJJHHBDADG@ECMBCDCLCF@THHANQPWD@DBXRJ@HAJERSJAJBDCEOCAKYBQCA@GBCDSGAGBIHSNA@KCQMCF]INaCuOSGU{zm_yENH@HDELBD@BG@AHH@CHEBCNIAAPABEFMAS@HHWLJZ@BiTBB\\CRXBHDBDDIFABLJRKAGF@BXNNEHHBBBKFNDGHQEIFCRAHCDE@EHICIDDDLCB@ELBFABBD@BBDB@DDCHKCM@CBGAEBGBMAAJIAMP|@@Cd@EPF@DFF@DCB@DDD@@CRBEVNJ@D"],"encodeOffsets":[[120108,40016]]},"properties":{"cp":[117.382549,38.989577],"name":"津南区","childNum":1}},{"id":"120113","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PQFFJICABACCDAKGJGLHRMVMMERKHH`WBFFCRFJHHIBOK_MC@QLCDIBAMA@COCGCDEkFa@]DMAA@AFsNQHOGBERDAABEFBFcMGeG[IQGGCmgABAAKLEAEF[MILECKA@BA@CABAWCCCIFEFYACBADICIIGM@KMDgDO@UCWIDECABKM@AJEB_KS@MEAH@DARG@BMGA@GBEF@@C[GEHFBCLEAGTG@MCAFgGA@@DGAALIFE@@CB@@ACKIDIGQJ@DHD@@GAAH@FDPbB@BDEJ@BBAFBNBHDBCDBDHBEJFBBDCFANA@AFTFFARPBNLABARA@DD@BB@HFA@PXBBLDACRKEAJF@GPD@AN@BjHCGZFJUN@BA^F@FIAAFNDCF@B\\LONADtJTAFBDCPBDGPETBADNDFFDFCD@LHBBKJFALIA@DB@@BNFBGHBBEN@@DHD@FFBDAH@AHBBCLDBF@@HFBBGJ@BBAFfLLABCH@ADLFJENAHKLAFBDEH@AHBDJB@DB@B@AADEFCLBNCDMDER@BKGA@ADEZDBELH"],"encodeOffsets":[[120140,40274]]},"properties":{"cp":[117.13482,39.225555],"name":"北辰区","childNum":1}},{"id":"120114","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKEC^QZS^QwVMAAB@CCI@@CB@H@JCBCFEDBCFF@D@H@FALIXMBIECM@ADE@OABEPA@CBCD@HEDIGEC@AC@KJ@DCH@@DFADEDAFBFALGBMFABKGAAA@CAALEJOFAFIFEB@JKDEJBDCCAEAFI@IDIDINECABGBQBCFC@AOKIHED@EKG@JDFOH@EIEDEFOC@BCEACAACAEI@AAHUXC@GD@AMDED@BEF@BBHAKADID@BGCIBEIIGCAFOAGAEF@BHBALQ@CFCNMDKAEDCFBBC@@CIAACBGG@CFEAKBGLMBIFKEBCG@ADKBeKBEAAI@AHEA@GE@CADKAABGG@CBEA@EGC@CM@AFGAAHME@AA@@CJBBKIEALGA@KDCCEEEMCBCSAOFCHOACDEASBsIBCPM[K@ADEMCBEJB@E]EABM@IVYEDHiG@ABMC@HOE@BILFDQCBAKWA@OEB@GAAC@@CQBABKBAMQOEBSEBEB@BMDEACEAFIGAACDCCAAGAMBEAAI@CF@AaACO@EBGHB@@GC@CRICE@CBAAAKBBD@B[EBIHAL@AGM@@AOAJ[IA@CAAHWM@AHJ@G^G@AF@DA@@FEBBFcJqAEDECFFABBRCHBFEDDNAHA@@`@@CHG@AT`D@AH@@PBBCJDBFABGB@@BBAB@BIFBBDJ@@FE@DHKD@JA@@FGCCDE@AZFDM\\JBCZCRKA@FGA@JHB@FBBXFBCFB@BB@CRJ@DJ@HCTF@ADB@AHEAIFKACH@CA@CLA@FBAFB@@DH@CFE@ADIEKA@FAABIB@BCG@@CC@BAOMCJGG[C@BABG\\AAAD@FL@@DJBADHB@BA@ABOCCDC@@BC@ADB@ADA@AFL@@A\\D@FFBBEB@CLB@ELB@@BAB@DBB@DEA@DD@AFCACDBHJDALF@AFFBBCPB@DB@ABBBBBD@@DDBFB@DHBCHDBLEJNMF@DKCIFCFQCBAA@@AEBAA@@EA@DOICDGD@BB@ALDA@BYLKA@BBGGA@AMHEABCC@GNLE@NC@@DAAAFEAAJKBBBF@CB@BF@AFH@@BN@ADZF@DD@@DF@DCFBEBF@@JB@EDCPA@@FI@@BF@@DDCCTH@C@TD@BB@G^FAGPECBGG@@BSAEDALG@AJA@AHC@ABC@@FEAAHB@@DB@BDF@AHHFA@DBABD@D@CBBBCBXH@DB@AFH@EHCACFCBCFA@CFDACL@BB@AFB@BCDBBA@BBBBCFBADE@B@@BCBBBD@ABE@ABAA@BLD@BHDBEGA@AD@CABEL@CJHBEHDBEJBBPDFCBEJDDBH@@FADHBMNIHFDEFFD@AJFADBBBAF@D@AHDBRDBD@RCBBJV@@BD@BDPBFEBBCDTHL@DAHBBCDBABTDCJJBGJNBAND@ADFBHE@DED@H@@@FH@X@BCBBBCB@DFZ@DMA@CFA@GMCADGAGBCNMAAIA@KXGCODOJMD@LJJC@C@KC@BCFAFDRDBAD@CD^F@DF@BFFA@FJB@DbEPEbElMTIZGAAFA@CJ@BE@@@FHA@EJA@CHBADBGPA@BG@AFBBVGHFL@BBABD@"],"encodeOffsets":[[119960,40574]]},"properties":{"cp":[117.057959,39.376925],"name":"武清区","childNum":1}},{"id":"120115","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@GBAAE@AFC@CFBNC@@HWDGVBBJ@BFBDDBFBADD@EPCFJF@FPGCE@ILH@FFCJGPL@BEDADARAHDBMFCJCJ@JEJFBDBCDIACFILA@EFEJEBIPKFBB@DBBHBALEBANKHEBEACBCFEB@CG@CDI@@LBDD@HFCJGFC@AD@DOBAFPBF@BCN@FDAJWNKJEBG@C@E@DECAEFADIDG@ADJ@DDA@BBUNx]RYT]RFDCLJBADDBGDBDHBFJJ@TBBHB@@DH@AFKBCB@HE@@BEA@D@@ADBHC@@AA@@DCB@DB@@FJ@@FD@@HH@E\\F@ADB@ARBBBFED@BD@@BCA@HD@AJE@@ACAAHDB@BH@AHCB@EAAADGB@BE@BBK@FLEBDDADA@BDNB@DJCBBIR@DBBDBFALDX@DHL@DJFA@BH@HHKJAB@DC@GFOHED@BCBAZE@ADE@AFGACEEDA@@AGAAVJ@IVB@@DB@@DHGJB@JpFBCFBEPPBBCNFBGHBPC@EHBFFRDRA^GD@JCFDJGHBLGFECCBGHBBCFBDCFB@EFGD@@BF@@DPALEDCECDEDABED@HCHJH@FDDEFDHENCLBDDDA@ERABEN@JEDDBACEJ@AINMRBJGAIDCZEJCLAFRTJHAHJHFD@@AEKBAFBRJGF@BPAFBHEDBFHBAFO@@NFH@BEFGHAD@BFBBJID@BFDBDEB@J@AGDCL@FBNIBBFJD@HKDCNDF@DAFGFCdE@A@AICBCJC@C@AGAEFC@@MIBAABC@CKA@CBANACAGC@ARBJG@GLGHCX@LENBNE@EDAFBHHD@DCDIIMLCBGN@@AIEBANEGKLEJDDAAGIKHKCIBECIECSF@GBKGCIDC@FKAAGCBOC@OB@MKGC@CHCAAEFUB@HDLPJDBCAIFGDARDHGBC@EIKDGB@N@PHJHBLHBNARQXGFG@GIGK@IDEFEAAC@EHILCP@JCDGCEOFCBGABCKCBSEEK@ADIGO@AEOCEDDBqNAAH]MKiIAW@@CA@GA@DIMA@CGAAD_EEH@FIA@HIAAHUEDOHAFIOSKGSEcDAEI@@CBCOEC@CDCFEBKEFIMEGEA@@BIA@ERFBDQCABADQDCCAHMJBDEMEADGAUCCC@CDA@CCCICGO@BDJG@CADGK@CCGFICCBKEEDGBCAAEKDAABGFE@ACABCAAeA@HM@GBYD@BE@@NABGB@CCAW@@ACAEF_BYECII@CG"],"encodeOffsets":[[120145,40295]]},"properties":{"cp":[117.308094,39.716965],"name":"宝坻区","childNum":1}},{"id":"120116","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@LCFBLCBDJC@CEIFHTCBJRF@FXPC@@lAAVLZU@@HADBH@Xa@ANe@[BL|J\\FBpQLFLBBB@LFLFBPD@RDLpMpGBPNREHE@@dVF@BJB@BD@@DFDLBDGHGDA^c\\@@cFD@@jEBJZFLhrePFBEJGAENE@IVC@@RBLV@DPT@zJLHPFVDNECC@SACjQJBJCACIDMQhQD@tCD]LBHDBH@GLHNB@DQHBAFDHE@@DEBDFFAD@@BF@BBAB@BNFBEHCXDT@JGAGVEBEDCDB@BF@@DRC@BZ@PAP@BCFAJ@@B@BTC@DB@JEAAB@FB@ACAB@@CC@BCHOF@BADAAADCHBH@HECEB@BCHBDBBCFDBAACBAD@BBPGJF@@ABDB@BD@ABBDDAFCBC@CB@CCAKNECG@EF@@EzQBiAC@Ey@BUI@±]GaQaý¥Y_YeK]EaDqPmHcD{DKQBMMaKEUC_BOASY_YAYDXSIaa¹JgCeOQ[@RUbK¶MPGJMA¯CUSQÓgOKMWEa³OqIGFG@EBEACIGCFK]EE@@DFD@B@BG@BHCFC@@EEAIHEACBC@BFCBQCaDFKACEBECADE@SSKMIKHQKHEJ@[UGCoO@d[CFSMIAIE@AH[A@DOA@AQKOEEBARGNI@G@BSgE@AOACJSKMVC@IXF@hJAFmKCHB@PVVFAHHB@JC@CH@BABD@ABMFC@@BSB@BAAAHG@JL@BBBWABHHB@N@BMBMAEEESMA@EA@@CCE@FC@AEQ@@GCAA@AJC@BEK@AAABSGA@@FEA@BCBC@@EC@@DK@LHBD@HCDBFCBABB@F@@FB@@DFJ@HB@BLADK@HBDBCBG@@DH@@F@DCJIB@JK@AJFBCLBHH@DCBJFF@PATBHB@ABDTbB@DaCAAE@@CAACAOF@HADE@@BICAFBHEBhTBPDBJCFCªvEFeVTROJVT`OFH®_\\OF@DBJHKDBDABADCB¶n`|yHVPTvbDM^JDERNLDB@TMJGHAHBCTAD@HDBARLZDBFPCDIAGBUVOFGB"],"encodeOffsets":[[120348,39943]]},"properties":{"cp":[117.654173,39.032846],"name":"滨海新区","childNum":1}},{"id":"120117","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ABCJKD@RNDL`APGJIGQEEDAE_XGGQLNFUNQNKGIHLHCBDDABDBIJEEORFFAFDJAHC@CJLBDHJ@DJZF`AFEDB@BX@DB@DHABA@MF@@AZCHAN@@GfBBBADDB@BEFAHBBLCBFDBHAFCLFDAJDHEDDL@CHDBH@CI@AHPJDDD@DCB@DDDVDHBBCNFCFIAGNDBCDCRABDBCREAQ@FJB@AB@HFNFEJLFFADEDCD@PFAD@DJ@BFdCTFLHPTEJGBCPVFBGJB@GJB@EFG`FBCHB@DNBCJB@@HDB@@BXjJNLGZ@DBBrMACFANDBFP@JHBCL@FFATLDADHBDAPEAC@EBIFIJGNJJ@JBJJHJHFSZA@BND@@LVB@BJ@AFDBBDEDILjTABlEHHTBvWVAPDHCDFL@LHHB`MFALDNC^M^GJIEKABEGACC@IMA@AOB@EACIGAAEBAECCBDAAAAADAAEFCBDB@ACB@AAAABEBAD@AG@ADFAEB@A@GKSCCgG@AEJA@AFO@ECCQEEEOBGYG@BqGBKXBFKCYJKOIKNEASCeA_ECSBGFENEF@HDZ@FCBE`TEFB@EFHFFEECBCFDFADBDEUWCOGBAIECLG@CEIFA@CF@CGBEGACRA@GMHKG@CAAG^KDCsC@gRNRJCBDIDIAiRBD@TDDMFUCOEKGyIS@COU@AK@QD@JUF@FMHBFIEAfOgqEKIYFA@i@EC@d[@]dCBGHCHKAEC@CC@@AIA@AUE@cF@FGMQAOgFVSBEAODkRGD@XGFAADEAAOEBCACUFBBFALFDF@HUGOBCBHJBRSJIHO@QDILGIADIE_@AEOGSD@HFH@DEFID"],"encodeOffsets":[[120221,40183]]},"properties":{"cp":[117.82828,39.328886],"name":"宁河区","childNum":1}},{"id":"120118","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AHC@@FCA@DHB@JS@@DA@@H]BCTKfG@BHK@@FEAADJD@RJhNNI@@FQBBDCBQA@BBLMIBNFJADHHEBuK@IA@AKU@UDDHKI@HAGAAC]@CDCA@MSAHPGBOEMEIA@EC@@DA@MBAASB@BCB@TE@@BBBBDAHCBDFABFNGBBFKBBFC@BDB@FPC@BPCPMACEoBE@AAC@@DcB_D@ECB@A@BA@B@@DC@@CA@@IE@AAG@BDK@EBABQA@JE@@HC@ABA@@BB@ADOA@DIAACA@NxQB@FIBHXHABFKBFLIDLPDTF@DNC@CAGB@FA@BJDXmBA[@@D@@NL@BHB@H\\BTD@HRB@JF@FL@FHDNDABJDCDTD@DTA@@LF@BB@XGBADE@@B@B@DJXJ@XEDFHAFHCBBDBDJBBHTCAIGBAAGBEA@EC@BCB@@BBAC@@AB@@CD@@DB@@DJ@DDF@DAF@@CLABBF@@AB@BBJ@@IBBDBB@ACJBJDR@@HD@@GfBAFXBCLH@GTPFjKAGSGDGXLHGFDBDVABCBB@B\\KLGJNDADHDAEI\\GCGPA@CF@AIhCbGTCnSIKNC@EE@CYlCBJJJ`W~W\\M^WV]^_°VIEG_PUSPISQfUFE©uEDIDCAAOgSFAAGBEJD@AF@BC@GPEDBBB@DF@BBbD@CaACSBAA@AGBS@OEEAICDG@AGDKEABIL@@IJADI@C@EG@@CH@DACAGAL@@OA@@GEI@CA@@EE@A@BADAAEDC@GACOKB@BMEB@ESEAABECAWBAECBBCC@CIBCS@@IWD"],"encodeOffsets":[[119909,39513]]},"properties":{"cp":[116.925304,38.935671],"name":"静海区","childNum":1}},{"id":"120119","type":"Feature","geometry":{"type":"Polygon","coordinates":[],"encodeOffsets":[]},"properties":{"cp":[117.407449,40.045342],"name":"蓟州区","childNum":0}}],"UTF8Encoding":true});
46 | }));
--------------------------------------------------------------------------------
/Dashboard/public/static/China/js/map/province/xianggang.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | (function (root, factory) {
21 | if (typeof define === 'function' && define.amd) {
22 | // AMD. Register as an anonymous module.
23 | define(['exports', 'echarts'], factory);
24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
25 | // CommonJS
26 | factory(exports, require('echarts'));
27 | } else {
28 | // Browser globals
29 | factory({}, root.echarts);
30 | }
31 | }(this, function (exports, echarts) {
32 | var log = function (msg) {
33 | if (typeof console !== 'undefined') {
34 | console && console.error && console.error(msg);
35 | }
36 | }
37 | if (!echarts) {
38 | log('ECharts is not Loaded');
39 | return;
40 | }
41 | if (!echarts.registerMap) {
42 | log('ECharts Map is not loaded')
43 | return;
44 | }
45 | echarts.registerMap('香港', {"type":"FeatureCollection","features":[{"id":"810001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@D@bKBoCWKACBGCI@CJSVGFIBKCM@ABAF@LFHPFJJPFVB"],["@@ABD@@AA@"],["@@AAEAAB@DDBFC"]],"encodeOffsets":[[[116895,22829]],[[116861,22818]],[[116860,22817]]]},"properties":{"cp":[114.154334,22.281931],"name":"中西区","childNum":3}},{"id":"810002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BMHBBGD@BAHBD@HKDEF@FHDEDECCGCIAAQWCUBSBDXApREHD"],"encodeOffsets":[[116927,22822]]},"properties":{"cp":[114.18299,22.276345],"name":"湾仔区","childNum":1}},{"id":"810003","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@rWAGBEJKRO@ACCBEAIAEGEACKPA@MDICIDOBKDGAIBIABRNDHFEHADEGE@CFGLC@GAABC@AHECABAN|TTI"],"encodeOffsets":[[116967,22827]]},"properties":{"cp":[114.225965,22.279779],"name":"东区","childNum":1}},{"id":"810004","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@JBJAHBLCPAJCJDPCLOJM@IBAFBBA@CE@AAE@AAFIBQBADAFECCBEA@GFCAYBABIRC@QEGEACBEHMACECQACFE`A@GCK@AFFHADMJBBF@BB@FBHCFI@KLEBCAGWAAQDGCGJQHOPOHS`KLN@LDJAHETUDIJ@HDxCZD"],["@@ACCBFB"],["@@D@@ACCCB@CC@CFBDJA"],["@@BA@AG@@B@BF@"],["@@DABAGCADADBBDA"],["@@BAEBD@"]],"encodeOffsets":[[[116946,22787]],[[116886,22776]],[[116934,22767]],[[117006,22758]],[[116932,22748]],[[116970,22738]]]},"properties":{"cp":[114.160023,22.245811],"name":"南区","childNum":6}},{"id":"810005","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AIBINQNIHU]IsRC@AvFBHFDCLDV@"],"encodeOffsets":[[116920,22860]]},"properties":{"cp":[114.173347,22.311632],"name":"油尖旺区","childNum":1}},{"id":"810006","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@H[@EEGU@KCCDGEEABQi@AHCF@B^P@BABOFCFBFF@FDNADADHJDjB"],"encodeOffsets":[[116919,22881]]},"properties":{"cp":[114.163349,22.333775],"name":"深水埗区","childNum":1}},{"id":"810007","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DEBEFC@CJKD@DCHDLDBMEG@CFCLICETSDQSJeMGVKHGJIR@HFJBFG^FDF@"],"encodeOffsets":[[116925,22883]]},"properties":{"cp":[114.193047,22.312373],"name":"九龙城区","childNum":1}},{"id":"810008","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AC@IH_BAYCEDIAGDICGCCDC@IL@DEDAFCFNDVD@BADBBHCFDJA^D"],"encodeOffsets":[[116970,22892]]},"properties":{"cp":[114.203985,22.336112],"name":"黄大仙区","childNum":1}},{"id":"810009","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@F@HWF@DABD@IHBB@GOAENMBE@AEAGOBCFE@CqXCRSTDFKJED@DFHANFCJBFCZD"],"encodeOffsets":[[116974,22868]]},"properties":{"cp":[114.214083,22.320679],"name":"观塘区","childNum":1}},{"id":"810010","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AEDQ@WQACIKIGCQCABAHC@]I@ADC@ECICCKEGA@NuASIHyO@IEQW@CÙF~bNJFL@D@FLBBNPJJFIDAHEDBDHBDDBBTCB@AHDB^@@JHHF@DDLFJFDBHCD@PPD@L@RLLBDHVBNAHBBABGhB"],"encodeOffsets":[[116914,22950]]},"properties":{"cp":[114.121234,22.368458],"name":"荃湾区","childNum":1}},{"id":"810011","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AC@G]@CABGA@SDAACCGAACFCBGJCIEOIAMKAEHGFgFgPS@E@MEGEEGCAO@E@SLUNCH@DDH@H@JEHAJCHQFAB\\`ZHTCFKBAHFFJFJBBZ@FC^CND@AEINGXA@OL@@U@@HN@BEE@@KTA@G"],["@@BAFADAAC@AACDACGEBBHAFGFBDD@"],["@@B@B@@CA@AD"],["@@BAB@CCA@ABDD"],["@@D@CGABAFD@"],["@@@ACICABJFD"],["@@DA@ACCC@ADBFBBBC"],["@@@A@@ABB@"]],"encodeOffsets":[[[116810,22924]],[[116618,22917]],[[116612,22891]],[[116626,22888]],[[116629,22880]],[[116725,22874]],[[116708,22866]],[[116720,22861]]]},"properties":{"cp":[113.976308,22.393896],"name":"屯门区","childNum":8}},{"id":"810012","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BMDIEK@CDCAMHG@C@MCG@YBAZHZDLIJA[gAGBEHMTO@EAIKAQKK@C@OOC@GDCAIEKECCE@EE@HSB@LF@AFM@@G@@VK@@PWBMHFJ@BMC]DEDY@AAEIEIGEABELSDVHNRJPHJLHXHFBP^ZVBRB@\\CJIDEH@DDAJHDFF@DGL@FFB^CRED@JFDPJHPBHED@HFFF"],"encodeOffsets":[[116828,23059]]},"properties":{"cp":[114.032528,22.44132],"name":"元朗区","childNum":1}},{"id":"810013","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@A@@HIEK@EA@BDH@BBBD@BBBAB@MN@DH@@BEFBDFBDA@C@@VABBDAJ@B@D@D@@CC@ECGB@ACACCA@IFEBAC@CFABEHGF@BACGGB"],["@@DC@CEDAFB@BA"],["@@AABB"],["@@@AC@DB"],["@@AABB"],["@@BAAAEABDDB"],["@@@A@CEDBBD@"],["@@@AABB@"],["@@DA@CIE@JFB"],["@@@@@@@@"],["@@DCD@BNDBDIAE@I@EE@ABABOHAJDDFABC"],["@@@A@B"],["@@B@B@ECAFB@BA"],["@@AA@BB@"],["@@@@A@B@"],["@@A@B@@@"],["@@@A@B"],["@@BCAB@B"],["@@@A@B"],["@@@FBCDBDABBBBBABCB@ABDBBDB@DH@JABBDNEBE@CD@FCKKG@AEC@EBA@ACIEA@EDBB@DB@ED"],["@@A@B@"],["@@D@BCG@ADBBBA"],["@@@@@@"],["@@BAAB"],["@@A@B@"],["@@@@AABB"],["@@QCKMECAKH@FDD@FFDABAFBBHJBPZBDJ@BCD@BBHA@DF@HAAAEEDA@EF@DGF@BC@CGE@GFBLABBADBBDAH@D@@AEIBAFF@ADBDAGGAEA@EIBCLBBA@CDBBCHBBABCTKLFZHRJH@DASMQGGIOEGAGBaNM@eEK@EDKLGBCFEBAAAGGGEEEIIGAEIDU@GBK@IDUAIAEEEGCIEBEAAHM@AABC@EKCWOMEIBKJYCYGAB@ZDH@N@DGHBNCFFNEN@JBFMJBDNDFHFBHEDALDFAFD@KFAFDBFH@FHDBF@DFHAHDLABAFBBDFF@BAAA@@D@DD@@HH@LLDCJFFCJ@BABEFABBJAB@DADDH@BBB@FBDCPBFEJBFC@AFADC@IDA"]],"encodeOffsets":[[[117049,23071]],[[117017,23092]],[[117013,23092]],[[117010,23091]],[[117004,23090]],[[117009,23086]],[[117081,23081]],[[117014,23081]],[[117057,23081]],[[117015,23077]],[[117062,23071]],[[117020,23075]],[[117024,23072]],[[117021,23072]],[[117029,23071]],[[117037,23071]],[[116974,23071]],[[116957,23067]],[[117036,23065]],[[117043,23049]],[[117033,23064]],[[117035,23059]],[[117043,23052]],[[117049,23053]],[[117040,23048]],[[117054,23039]],[[116975,23082]]]},"properties":{"cp":[114.147404,22.496143],"name":"北区","childNum":27}},{"id":"810014","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@HGNA@ACGC@G@OFADCL@FDDJDBA@M"],["@@@EACUMIMGGGCE@@CACIEMCMISGG@CESIGKGEQGG@CBABALQTCDABC@GCK@EBCACAAKBAHABAB@HA@AE@@ENADBDLFBFABACGEEICG@ICQB@B@J@@GBAAEEAODERKMIGMAAUAAAUA@ACAAA[ASAAHABGAMBUAAA@D@FSPIRBJ\\hNFXPLD@FADBBN@BGFBFAHPDFHD\\BJCL@HAV@JCBFJHFJFFHHBHDBHGHALKFCL@fFN@bMLATHHJRHTN"],["@@CIEAEJBBBDBBBBHAFBEG"],["@@@CFABAAGCC@ECCEACB@HAJAB@FEDJJDBHABA@CAC"],["@@BAEBBBBA"],["@@^DLCFBBBBJFJNLH@DHN@NXJFFHPHDABABKDAFDDABGAEBCDBFFALDDBFDBDADIBIFOCCICAAAI@CDG@KJ@HEBBDJCBALDBFBBBDB@HBHHALEDE@IEG@EGA@EDIBYEGAIEEICADMFOLA@KEE@OHKHYDAC@KCECAS@CCAEBGGOK@CACIYCEAGEBLCH@JGJ@FBXCHDL@P"],["@@AEA@ABB@@FB@BA"],["@@@CABBB"],["@@BAAAABBB"],["@@BACDBA"],["@@@A@B"],["@@@DHBAEC@A@"],["@@AA@BB@"],["@@BB@CAA@D"]],"encodeOffsets":[[[117183,23086]],[[117087,23049]],[[117113,23039]],[[117114,23018]],[[117122,23021]],[[116998,22974]],[[117082,23017]],[[117084,23018]],[[117081,23013]],[[117180,23003]],[[117039,23001]],[[116966,22997]],[[117006,22983]],[[116968,22976]]]},"properties":{"cp":[114.171713,22.44573],"name":"大埔区","childNum":14}},{"id":"810015","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@B@@@C@BB@A"],["@@FIJBFCF@JDF@DDBEDBDEHACGDK@EFEFK@EGAI@CDILEBEAIG@C@EECCKBCJEFGFAJGAGDKEGDG@GCCC@CBCFC@AIGAACFEEACC@CEAGB@EC@@AID@KBC@CACCGE@ABALGLBFA@GGEAE@GJAFBFIFCJHN@JOFGFG@@DBHABCFKAAEDCACI@GBGAAFI@GJEBE@ECAEBICCCU@KJI@IGKIBAAHcDEFENAFADE@CDGDET@BCBEJGDKAIKEEEGAACBCF@DA@MHI@CACCAE@AGE@OLEHGBAA@CECCGEAEBITGDANHRGLCDG@QSEG@DEDADHPFB@BEJIJBFHPA@GA@JACCBEBGVE@ABG`@JBDB@ADBFPBPJLLBJRDAJHFFBZDFLN@HPAHBFDDT@DBDF@LBDZCLGPGF@LFB@PKNEBCJDFFBJFHAZCJ@FHB"],["@@A@@@B@"],["@@@@@@"],["@@AABB"],["@@BAC@@DBA"],["@@BAA@ABB@"],["@@@AABB@"],["@@@AABB@"],["@@B@BACEC@@DDD"],["@@A@B@"],["@@@AADBA"],["@@DC@CA@ADA@ADD@"],["@@DBFADBLC@MDEBIA@@GJAHGCCBEAA@CCA@CAEKBEBGACBEDEJAFHHAB@LABBDA@@AA@CBBB@DD@@DCDCB@JBBHA"],["@@@AAAAD@@D@"],["@@@A@B@@"],["@@HE@C@ICAA@AHAHCEEFBF@BD@FA"],["@@BACA@CC@@DFD"],["@@@AA@BB"],["@@BCFE@ACCDQCACB@FCBCLGHFFBHFDB@DE@AEBBE"],["@@@ACAAFFA"],["@@BA@@CBB@"],["@@B@C@BB@A"],["@@@AABB@"],["@@@AA@@DBB@C"],["@@ACABDB"],["@@BAAB"],["@@@@@@"],["@@BACA@BBB"],["@@A@BB@A"],["@@FADIFEAICAACC@ABI@CFBDCD@BCHFFLB"],["@@CEBEBACA@AA@KD@JBHH@@BF@BE"],["@@@@A@B@"],["@@@CE@BFB@BA"],["@@AB@FDC@AAA"],["@@DHFEDAFGACBCMBEJ@D"],["@@BADABAB@BCKBCFDB"],["@@B@B@C@"],["@@A@@BB@@A"],["@@D@C@@@"],["@@BAAB"],["@@@AA@BB"],["@@BAAB@@"],["@@@AADBA"],["@@@@@@"],["@@@A@B"],["@@AA@DBA"],["@@@A@B"],["@@@A@B"],["@@@AABB@"],["@@BAEBBBBA"],["@@@@@@"],["@@A@B@"],["@@BC@AAAEDBDD@"],["@@B@@AAB"],["@@BACKAAC@@JDDBBB@"],["@@AA@B@@B@"],["@@BCA@@D"],["@@@@@@"],["@@@A@B"],["@@@EAABAE@AAA@@JF@@FBBBA@C"],["@@@CCB@BD@"],["@@AA@GAAEAAE@@E@AJFLDDFADFF@@EEC"],["@@AFDBJBAADCDEACFEGA@EEB@FEDAH"],["@@JDB@ACDC@AA@ACB@@ADA@EC@@EAEC@E@AECAABBFIBED@F@DFHFDDAFF"]],"encodeOffsets":[[[117146,22985]],[[117119,22980]],[[117154,22972]],[[117153,22970]],[[117139,22942]],[[117137,22939]],[[117137,22938]],[[117033,22925]],[[117063,22925]],[[117066,22923]],[[117031,22921]],[[117064,22919]],[[117029,22917]],[[117054,22915]],[[117038,22915]],[[117048,22915]],[[117075,22911]],[[117036,22912]],[[117039,22911]],[[117043,22905]],[[117051,22909]],[[117044,22906]],[[117050,22906]],[[117074,22902]],[[117143,22898]],[[117036,22899]],[[117076,22898]],[[117116,22882]],[[117120,22880]],[[117102,22876]],[[117073,22876]],[[117119,22871]],[[117126,22873]],[[117085,22870]],[[117121,22865]],[[117041,22863]],[[117123,22866]],[[117118,22860]],[[117118,22859]],[[117118,22859]],[[117069,22860]],[[117077,22857]],[[117116,22856]],[[117068,22845]],[[117059,22840]],[[117059,22838]],[[117061,22837]],[[117066,22837]],[[117066,22837]],[[117061,22835]],[[117070,22834]],[[117061,22834]],[[117068,22833]],[[117064,22810]],[[117100,22804]],[[117100,22803]],[[117118,22799]],[[117120,22799]],[[117028,22798]],[[117095,22795]],[[117103,22791]],[[117097,22787]],[[117105,22856]],[[117111,22850]],[[117039,22789]]]},"properties":{"cp":[114.264813,22.314203],"name":"西贡区","childNum":65}},{"id":"810016","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PGJAVDFD@HDBJBPA@OCKDGAYHM@IDGAKBIQCAIKKOIMACEBC_CIBECGDAABC@AUCKCG@ICeAICAAGHAL@FFJCP@FDHADLBFDLJDJRB@XCRBFHBBBDB@BVBBBXBHPNJ"],"encodeOffsets":[[116956,22970]]},"properties":{"cp":[114.195126,22.379715],"name":"沙田区","childNum":1}},{"id":"810017","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AECBMBECGA@CDEPEBA]QDGBGj@@cUADF@F@DCFIFSJQTQBaASPEBGzTJvB@MHBLFDDDJ@FCD@@ZJHBBIJBBCCI@GDKEI@EBKHG"],"encodeOffsets":[[116892,22877]]},"properties":{"cp":[114.13918,22.363908],"name":"葵青区","childNum":1}},{"id":"810018","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AIIGQCQ@GE@G@ICCGAAABCBA@GBGCA@ADOAGO@KBMLC@ACAEFARSDEACSGCEACLIL@DEPCBACEAECCE@AACEIECCKCMGI@KJGJEJ@FDLIBSGUAOOSEAABE@ECG_CSBUPAHGBICEOUMGCKBC@GCGGMCABDRGDAF@HBFEHAP@JJJH@BNRFDDBHEBICAH@DPHF@DAFFFNLBRFBHNNBD@HEJJVED@DBDZD@DEPFBAFCBAI[@CFGF@~dÚE"],["@@DC@AKE@ABADDF@BCFCAAIEG@CBAB@DABAFGDBBXF"],["@@BAAAC@ADDBBA"],["@@BCAAIBA@BDBDJB@CAA"],["@@BCCGGCGBABBHFDL@"],["@@J@FC@AAKFGCIC@EDADAD@B@BCBAAEHI@AF@BB@@DT@"],["@@CEMI@ABEHHFBHBHAFDFBF@BCLBDC@AGIK@OMDKJM@CAAC@YP@AHKAGAACBGHEGC@GBMDCD@HBDFDDDBXCFBNAHEBA@@IEAGCK@CNBDLHHD@BEBDFGD@DVJBBBBBCF@BECGACLGBEAADEDADFF@DE@E"],["@@@CEA@DDDBA"],["@@FEFBD@DEC@@CCAACGF@AE@CCBAC@CCCCCBBBG@AHH@DHH@DFADABE@CD@BD@DF@BABBDDBH@DBDB@E@AEAFABAKCAA@EDA"],["@@D@ACAACD@B@BDA"],["@@BAC@BB"],["@@B@BBBA@EACGAEFA@GDBHJJFA@CB@BCAA@C"],["@@D@BCBEAECCGC@BIB@CAA@FA@@PTD"],["@@DE@KG@CBAHBDDABFB@"],["@@BB@CAB"],["@@BHBB@CAEA@"],["@@BADBDABAD@BAAABAAAABABAA@CA@ADAAAB@DABCACCC@BRHCBC"],["@@@A@ACA@DDB"],["@@DAAC@@CD@BB@"],["@@ABBA"],["@@BAC@BB"],["@@AAA@BDBA"],["@@A@B@"],["@@BBBAAAABCAA@FB"],["@@@BD@DDCDBDDBDAB@FCAAE@@EBABEE@CAI@AACAGF@DFDF@DA"],["@@@A@A@D"],["@@BACA@BBB"],["@@B@@AEABBBB"],["@@DFPFBFF@BCFCFICCDEBIQA@DA@EC@ECCEAE@FJIBABD@@DCAABBJDF"]],"encodeOffsets":[[[116799,22849]],[[116787,22826]],[[116803,22822]],[[116823,22817]],[[116799,22797]],[[116780,22791]],[[116882,22747]],[[116881,22757]],[[116774,22741]],[[116575,22748]],[[116686,22746]],[[116733,22725]],[[117001,22721]],[[117036,22720]],[[117038,22719]],[[117053,22714]],[[116651,22714]],[[117053,22714]],[[116664,22710]],[[116665,22706]],[[116984,22706]],[[116645,22704]],[[116647,22703]],[[116640,22702]],[[116646,22692]],[[116656,22693]],[[116663,22685]],[[116998,22691]],[[117001,22702]]]},"properties":{"cp":[113.946059,22.286371],"name":"离岛区","childNum":29}}],"UTF8Encoding":true});
46 | }));
--------------------------------------------------------------------------------
/Dashboard/public/static/China/libs/axios.min.js:
--------------------------------------------------------------------------------
1 | /* axios v0.19.2 | (c) 2020 by Matt Zabriskie */
2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(4),a=n(22),u=n(10),c=r(u);c.Axios=s,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===j.call(e)}function o(e){return"undefined"==typeof e}function i(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function s(e){return"[object ArrayBuffer]"===j.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){return"[object Date]"===j.call(e)}function l(e){return"[object File]"===j.call(e)}function h(e){return"[object Blob]"===j.call(e)}function m(e){return"[object Function]"===j.call(e)}function y(e){return p(e)&&m(e.pipe)}function g(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function v(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function w(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){u.headers[e]={}}),i.forEach(["post","put","patch"],function(e){u.headers[e]=i.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),i=n(5),s=n(16),a=n(19),u=n(20),c=n(14);e.exports=function(e){return new Promise(function(t,f){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password||"";d.Authorization="Basic "+btoa(h+":"+m)}var y=s(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in l?a(l.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:r,status:l.status,statusText:l.statusText,headers:n,config:e,request:l};o(t,f,i),l=null}},l.onabort=function(){l&&(f(c("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){f(c("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),f(c(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=n(21),v=(e.withCredentials||u(y))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;v&&(d[e.xsrfHeaderName]=v)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),f(e),l=null)}),void 0===p&&(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;!o||o(n.status)?e(n):t(r("Request failed with status code "+n.status,n.config,null,n.request,n))}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(17),o=n(18);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?s[t]=(s[t]?s[t]:[]).concat([n]):s[t]=s[t]?s[t]+", "+n:n}}),s):s}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),s===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){t=t||{};var n={},o=["url","method","params","data"],i=["headers","auth","proxy"],s=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];r.forEach(o,function(e){"undefined"!=typeof t[e]&&(n[e]=t[e])}),r.forEach(i,function(o){r.isObject(t[o])?n[o]=r.deepMerge(e[o],t[o]):"undefined"!=typeof t[o]?n[o]=t[o]:r.isObject(e[o])?n[o]=r.deepMerge(e[o]):"undefined"!=typeof e[o]&&(n[o]=e[o])}),r.forEach(s,function(r){"undefined"!=typeof t[r]?n[r]=t[r]:"undefined"!=typeof e[r]&&(n[r]=e[r])});var a=o.concat(i).concat(s),u=Object.keys(t).filter(function(e){return a.indexOf(e)===-1});return r.forEach(u,function(r){"undefined"!=typeof t[r]?n[r]=t[r]:"undefined"!=typeof e[r]&&(n[r]=e[r])}),n}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])});
3 | //# sourceMappingURL=axios.min.map
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/color_ranges.js:
--------------------------------------------------------------------------------
1 | config.color_ranges = {
2 | 'label1': ['#3a6073', '#3a7bd5'],
3 | 'label2': ['#11998e', '#38ef7d'],
4 | };
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/config.js:
--------------------------------------------------------------------------------
1 | const config = {
2 | // 数据源的编码方式。
3 | // 默认为UTF-8。
4 | // 如果是国内用户,且使用旧版Execl处理数据,保存的编码很可能是GBK的,如果出现乱码则将这里改成GBK。
5 | // 不建议修改这里。而是建议将自己制作完毕的csv文件的内容复制到example.csv中。因为example.csv的编码格式是所有语言都支持的。
6 | // Encoding is not recommended to be modified.
7 | // Instead, it is recommended to copy the contents of the CSV file produced by yourself to example.csv.
8 | // The encoding format of example.csv is supported by all languages.
9 | encoding: "UTF-8",
10 |
11 | // 每个时间节点最多显示的条目数。
12 | max_number: 14,
13 |
14 | // 控制是否显示顶部附加信息文字。
15 | showMessage: false,
16 |
17 | // 时间自动排序。
18 | // !!!请确保打开此项时,使用的是标准日期格式!(即:YYYY-MM-DD HH:MM)
19 | // 如果关闭,排序顺序为csv表格的时间字段自上而下的出现顺序。
20 | // 如果你的日期格式为标准的日期格式,则可以无视数据排序,达到自动按照日期顺序排序的效果。
21 | // 开启auto_sort可以实现时间的自动补间。
22 | // Auto Sort by Time
23 | // Please ensure using standard datetime format (YYYY-MM-DD HH:MM) when this term is enabled!!!
24 | auto_sort: true,
25 |
26 | // 时间格式化
27 | timeFormat: "%Y-%m-%d",
28 |
29 | // 倒序,使得最短的条位于最上方
30 | reverse: false,
31 |
32 | // 类型根据什么字段区分?如果是name,则关闭类型显示
33 | divide_by: "name",
34 |
35 | // 颜色根据什么字段区分?
36 | divide_color_by: "name",
37 |
38 | // 字段的值与其对应的颜色值
39 | color: {
40 | Chinese: "#1177CC",
41 | Japanese: "#667788"
42 | },
43 |
44 | // 颜色渐变:颜色绑定增长率
45 | changeable_color: false,
46 |
47 | // 添加功能:不同类型的增长率所用渐变色不同(暗→亮)
48 | // 如果该项为false,那么所有条目全部按照color_range变色
49 | // 如果该项为true,那么按照src/color_ranges.js中的color_ranges变色,默认色板为color_range
50 | // 一个具体的设置模板见src/_color_ranges.js,将其更名为color_ranges.js再设置即可
51 | divide_changeable_color_by_type: false,
52 | color_range: ["#ff7e5f", "#feb47b"],
53 |
54 | // 附加信息内容。
55 | // left label
56 | itemLabel: "国家",
57 |
58 | // right label
59 | typeLabel: "右侧文字",
60 |
61 | // 榜首项目信息的水平位置 。
62 | // Top item information horizontal location
63 | item_x: 250,
64 |
65 | // 时间点间隔时间。
66 | interval_time: 1,
67 |
68 | // 上方文字水平高度。
69 | text_y: 0,
70 |
71 | // 右侧文字横坐标
72 | text_x: 1000,
73 | // 偏移量
74 | offset: 350,
75 |
76 | // 长度小于display_barInfo的bar将不显示barInfo。
77 | // Hide barInfo if bar is shorter than barInfo
78 | display_barInfo: 0,
79 |
80 | // 使用计数器
81 | // 注意!使用计时器和使用类型目前不能兼容,即不能同时开启!
82 | // 计数器会出现在右上角,记录着当前榜首的持续时间。
83 | use_counter: false,
84 | // 每个时间节点对于计数器的步长。
85 | // 比如时间节点日期的间隔可能为1周(七天),那么step的值就应该为7。
86 | step: 1,
87 |
88 | //////////////////////////////////////////////////////////////////////////////
89 | // 格式化数值
90 | // 这里控制着数值的显示位数。主要靠修改中间的数字完成,如果为1则为保留一位小数。
91 | // 逗号表示每隔三位数用","分割
92 | // '.2f' means keeping two decimals.
93 | format: ",.0f",
94 |
95 | // 后缀
96 | postfix: "",
97 |
98 | // 如果看不懂这是在干什么的话,建议不要修改这里。
99 | // 反格式化函数:
100 | // 格式化操作可能会导致NaN问题。此函数将格式化后的数值反格式化为JS可以识别的数字。
101 | deformat: function(val, postfix) {
102 | return Number(val.replace(postfix, "").replace(/\,/g, ""));
103 | },
104 | //////////////////////////////////////////////////////////////////////////////
105 |
106 | // 图表左右上下间距。
107 | // 注意,left_margin不包括左侧的label,修改数值较小会导致左侧label不显示
108 | left_margin: 150,
109 | right_margin: 150,
110 | top_margin: 30,
111 | bottom_margin: 0,
112 |
113 | // 是否开启时间标签。
114 | dateLabel_switch: true,
115 | // 时间标签坐标。建议x:1000 y:-50开始尝试,默认位置为x:null,y:null
116 | dateLabel_x: 1200,
117 | dateLabel_y: 500,
118 |
119 | // 允许大于平均值的条消失时上浮。
120 | allow_up: false,
121 |
122 | // 所有条目上浮 - 用于反向排行榜等情况
123 | always_up: false,
124 |
125 | // 设置动画效果,如果为true,则新进入的条目从0开始。
126 | enter_from_0: true,
127 |
128 | // 如果所有数字都很大,导致拉不开差距则开启此项使得坐标原点变换为(最小值)*2-(最大值)
129 | big_value: true,
130 |
131 | // 如果要使用半对数坐标,则开启此项
132 | use_semilogarithmic_coordinate: false,
133 |
134 | // barinfo太长?也许可以试试这个
135 | long: false,
136 |
137 | // 延迟多少个时间节点开始
138 | wait: 0,
139 |
140 | // 单独控制交换动画速度倍率
141 | update_rate: 1,
142 |
143 | // 开启匀速动画效果
144 | // animation:'linear',
145 | showLabel: true,
146 |
147 | // label x轴位置
148 | labelx: -10,
149 |
150 | use_img: true,
151 |
152 | // 图片路径,本地图片或者网上图片。
153 | // 也可在imgs.js中配置。
154 | imgs: {
155 | item:
156 | "http://i1.hdslb.com/bfs/face/983034448f81f45f05956d0455a86fe0639d6a36.jpg",
157 | 条目:
158 | "http://i1.hdslb.com/bfs/face/983034448f81f45f05956d0455a86fe0639d6a36.jpg",
159 | 任意名称: "path/to/img"
160 | },
161 |
162 | // 全局背景颜色
163 | background_color: "#FFFFFF",
164 |
165 | // 矩形柱是否为圆角矩形
166 | rounded_rectangle: true,
167 |
168 | // 是否显示x轴轴线
169 | show_x_tick: true,
170 |
171 | // 限制bar info 展示的长度
172 | // limit bar info display length
173 | bar_name_max: 30
174 | };
175 |
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/imgs.js:
--------------------------------------------------------------------------------
1 | var external_imgs = {
2 | "label1": "img/path/for/label1",
3 | "label2": "img/path/for/label2"
4 | }
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/index.html:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 动态排名数据可视化 ver1.7 By Jannchie
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
36 |
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/stylesheet.css:
--------------------------------------------------------------------------------
1 | /**
2 | * @author Jannchie
3 | * @email jannchie@gmail.com
4 | * @create date 2018-05-03 08:44:46
5 | * @modify date 2019-04-15 15:43:32
6 | */
7 | body {
8 | margin: 0px;
9 | }
10 |
11 | input {
12 | position: absolute;
13 | top: 50%;
14 | left: 45%;
15 | }
16 |
17 | .domain {
18 | display: none;
19 | }
20 |
21 | .tick line {
22 | stroke: #C0C0BB;
23 | }
24 |
25 | .tick text {
26 | fill: #8E8883;
27 | font-size: 12pt;
28 | font-family: "Fira Code", "Source Han Sans CN"
29 | }
30 |
31 | .label {
32 | fill: #5C5C5C;
33 | font-size: 15pt;
34 | font-family: "Fira Code", "Source Han Sans CN";
35 | font-weight: bold
36 | }
37 |
38 | .dateLabel {
39 |
40 | fill: #5C5C5C;
41 | display: table-cell;
42 | font-size: 60pt;
43 | font-weight: bold;
44 | font-family: "Fira Code", "Source Han Sans CN"
45 | }
46 |
47 | .dateLabelRed {
48 |
49 | fill: #A72E2E;
50 | display: table-cell;
51 | font-size: 90pt;
52 | font-weight: bold;
53 | font-family: "Fira Code", "Source Han Sans CN"
54 | }
55 |
56 |
57 | .days {
58 | fill: #5C5C5C;
59 | font-weight: bold;
60 | font-size: 55pt;
61 | font-family: "Fira Code", "Source Han Sans CN"
62 | }
63 |
64 | .topLabel {
65 | fill: #5C5C5C;
66 | font-weight: bold;
67 | font-size: 40pt;
68 | font-family: "Fira Code", "Source Han Sans CN"
69 | }
70 |
71 | .top {
72 | fill: #5C5C5C;
73 | font-weight: bold;
74 | font-size: 62pt;
75 | font-family: "Fira Code", "Source Han Sans CN"
76 | }
77 |
78 | .value {
79 | fill: #8A2E2E;
80 | font-size: 20pt;
81 | font-weight: 400;
82 | font-family: "Fira Code", "Source Han Sans CN"
83 | }
84 |
85 | .barInfo {
86 | fill: #FFFFFF;
87 | font-weight: 800;
88 | font-size: 24pt;
89 | font-family: "Fira Code", "Source Han Sans CN"
90 | }
91 |
92 | .axis-label {
93 | fill: #635F5D;
94 | font-size: 32pt;
95 | font-family: "Fira Code", "Source Han Sans CN"
96 | }
97 |
98 | .days {
99 | fill: r#5C5C5C;
100 | font-weight: bold;
101 | font-size: 40pt;
102 | font-family: "Fira Code", "Source Han Sans CN"
103 | }
104 |
105 | .dayslabel {
106 | fill: #5C5C5C;
107 | font-weight: bold;
108 | font-size: 25pt;
109 | font-family: "Fira Code", "Source Han Sans CN"
110 | }
111 |
112 | .growth {
113 | fill: #5C5C5C;
114 | font-weight: bold;
115 | font-size: 40pt;
116 | font-family: "Fira Code", "Source Han Sans CN"
117 | }
118 |
119 | /* MIKU色 */
120 | .L {
121 | fill: #39C5BB;
122 | }
123 |
124 | /* 龙牙绿 */
125 | .M {
126 | fill: #006666
127 | }
128 |
129 | .L {
130 | fill: #66CCFF
131 | }
132 |
133 | .N {
134 | fill: #EB0000
135 | }
136 |
137 | .O {
138 | fill: #009714
139 | }
140 |
141 | .P {
142 | fill: #B11111
143 | }
144 |
145 | .Q {
146 | fill: #E24000
147 | }
148 |
149 | .R {
150 | fill: #8605D1
151 | }
152 |
153 | .S {
154 | fill: #00A5BB
155 | }
156 |
157 | .T {
158 | fill: #C21178
159 | }
160 |
161 | .U {
162 | fill: #00A048
163 | }
164 |
165 | .W {
166 | fill: #FFC012
167 | }
168 |
169 | .V {
170 | fill: #F39303
171 | }
172 |
173 | .X {
174 | fill: #933DDA
175 | }
176 |
177 | .Y {
178 | fill: #EE5677
179 | }
180 |
181 | .Z {
182 | fill: #C0620B
183 | }
184 |
185 | .H {
186 | fill: #787878
187 | }
188 |
189 | .G {
190 | fill: #CB1B45
191 | }
192 |
193 | .K {
194 | fill: #0775BE
195 | }
196 |
197 | .J {
198 | fill: #B49D33
199 | }
200 |
201 | .I {
202 | fill: #1B813E
203 | }
204 |
205 | .F {
206 | fill: #DD3287
207 | }
208 |
209 | .E {
210 | fill: #00AF89
211 | }
212 |
213 | .D {
214 | fill: #0F2540
215 | }
216 |
217 | .C {
218 | fill: #2EA9DF
219 | }
220 |
221 | .B {
222 | fill: #0A83E6
223 | }
224 |
225 | .A {
226 | fill: #CF9237
227 | }
--------------------------------------------------------------------------------
/Dashboard/public/static/Ranking/university_ranking.csv:
--------------------------------------------------------------------------------
1 | name,type,value,date
2 | 南京大学,220,220,2009
3 | 北京大学,227,227,2009
4 | 上海交通大学,233,233,2009
5 | 清华大学,251,251,2009
6 | 中国科学技术大学,286,286,2009
7 | 浙江大学,302,302,2009
8 | 复旦大学,319,319,2009
9 | 山东大学,343,343,2009
10 | 中国农业大学,410,410,2009
11 | 大连理工大学,412,412,2009
12 | 哈尔滨工业大学,421,421,2009
13 | 华中科技大学,422,422,2009
14 | 吉林大学,426,426,2009
15 | 兰州大学,432,432,2009
16 | 南开大学,440,440,2009
17 | 四川大学,452,452,2009
18 | 中山大学,455,455,2009
19 | 天津大学,458,458,2009
20 | 北京大学,167,167,2010
21 | 清华大学,178,178,2010
22 | 复旦大学,210,210,2010
23 | 南京大学,220,220,2010
24 | 上海交通大学,233,233,2010
25 | 中国科学技术大学,285,285,2010
26 | 浙江大学,300,300,2010
27 | 山东大学,342,342,2010
28 | 四川大学,343,343,2010
29 | 中山大学,347,347,2010
30 | 中国农业大学,410,410,2010
31 | 大连理工大学,413,413,2010
32 | 哈尔滨工业大学,420,420,2010
33 | 华中科技大学,421,421,2010
34 | 吉林大学,425,425,2010
35 | 兰州大学,431,431,2010
36 | 南开大学,437,437,2010
37 | 东南大学,448,448,2010
38 | 天津大学,454,454,2010
39 | 武汉大学,496,496,2010
40 | 清华大学,175,175,2011
41 | 复旦大学,209,209,2011
42 | 南京大学,217,217,2011
43 | 北京大学,224,224,2011
44 | 上海交通大学,231,231,2011
45 | 中国科学技术大学,285,285,2011
46 | 浙江大学,300,300,2011
47 | 中国农业大学,306,306,2011
48 | 华中科技大学,320,320,2011
49 | 山东大学,347,347,2011
50 | 四川大学,348,348,2011
51 | 中山大学,352,352,2011
52 | 北京师范大学,402,402,2011
53 | 北京航空航天大学,403,403,2011
54 | 大连理工大学,413,413,2011
55 | 哈尔滨工业大学,420,420,2011
56 | 吉林大学,421,421,2011
57 | 兰州大学,426,426,2011
58 | 南开大学,435,435,2011
59 | 东南大学,443,443,2011
60 | 北京大学,163,163,2012
61 | 上海交通大学,164,164,2012
62 | 清华大学,173,173,2012
63 | 浙江大学,200,200,2012
64 | 复旦大学,211,211,2012
65 | 南京大学,220,220,2012
66 | 中国科学技术大学,289,289,2012
67 | 中国农业大学,308,308,2012
68 | 华中科技大学,322,322,2012
69 | 吉林大学,328,328,2012
70 | 山东大学,348,348,2012
71 | 四川大学,349,349,2012
72 | 中山大学,353,353,2012
73 | 西安交通大学,400,400,2012
74 | 北京航空航天大学,402,402,2012
75 | 北京师范大学,403,403,2012
76 | 中南大学,409,409,2012
77 | 大连理工大学,413,413,2012
78 | 哈尔滨工业大学,416,416,2012
79 | 兰州大学,422,422,2012
80 | 复旦大学,157,157,2013
81 | 北京大学,166,166,2013
82 | 上海交通大学,167,167,2013
83 | 清华大学,173,173,2013
84 | 浙江大学,200,200,2013
85 | 南京大学,220,220,2013
86 | 中山大学,235,235,2013
87 | 中国科学技术大学,290,290,2013
88 | 北京师范大学,303,303,2013
89 | 中国农业大学,308,308,2013
90 | 哈尔滨工业大学,320,320,2013
91 | 华中科技大学,322,322,2013
92 | 吉林大学,327,327,2013
93 | 山东大学,347,347,2013
94 | 四川大学,348,348,2013
95 | 西安交通大学,400,400,2013
96 | 北京航空航天大学,402,402,2013
97 | 中南大学,409,409,2013
98 | 大连理工大学,413,413,2013
99 | 兰州大学,426,426,2013
100 | 北京大学,119,119,2014
101 | 上海交通大学,122,122,2014
102 | 清华大学,129,129,2014
103 | 复旦大学,152,152,2014
104 | 中国科学技术大学,192,192,2014
105 | 浙江大学,200,200,2014
106 | 北京师范大学,203,203,2014
107 | 哈尔滨工业大学,214,214,2014
108 | 华中科技大学,215,215,2014
109 | 南京大学,225,225,2014
110 | 中山大学,242,242,2014
111 | 西安交通大学,298,298,2014
112 | 北京航空航天大学,301,301,2014
113 | 中南大学,304,304,2014
114 | 中国农业大学,307,307,2014
115 | 大连理工大学,311,311,2014
116 | 吉林大学,330,330,2014
117 | 兰州大学,334,334,2014
118 | 南开大学,337,337,2014
119 | 山东大学,346,346,2014
120 | 北京大学,115,115,2015
121 | 上海交通大学,118,118,2015
122 | 清华大学,126,126,2015
123 | 浙江大学,150,150,2015
124 | 复旦大学,154,154,2015
125 | 中山大学,168,168,2015
126 | 中国科学技术大学,193,193,2015
127 | 北京师范大学,203,203,2015
128 | 哈尔滨工业大学,218,218,2015
129 | 华中科技大学,219,219,2015
130 | 吉林大学,221,221,2015
131 | 南京大学,232,232,2015
132 | 西安交通大学,298,298,2015
133 | 北京航空航天大学,302,302,2015
134 | 中南大学,304,304,2015
135 | 中国农业大学,307,307,2015
136 | 大连理工大学,310,310,2015
137 | 兰州大学,330,330,2015
138 | 南开大学,333,333,2015
139 | 山东大学,345,345,2015
140 | 清华大学,58,58,2016
141 | 北京大学,71,71,2016
142 | 复旦大学,108,108,2016
143 | 上海交通大学,119,119,2016
144 | 中国科学技术大学,143,143,2016
145 | 浙江大学,150,150,2016
146 | 哈尔滨工业大学,154,154,2016
147 | 中山大学,166,166,2016
148 | 西安交通大学,200,200,2016
149 | 北京师范大学,203,203,2016
150 | 华中科技大学,218,218,2016
151 | 吉林大学,222,222,2016
152 | 南京大学,233,233,2016
153 | 四川大学,242,242,2016
154 | 苏州大学,243,243,2016
155 | 华南理工大学,244,244,2016
156 | 东南大学,245,245,2016
157 | 厦门大学,298,298,2016
158 | 北京航空航天大学,302,302,2016
159 | 中南大学,305,305,2016
160 | 清华大学,49,49,2017
161 | 北京大学,72,72,2017
162 | 复旦大学,108,108,2017
163 | 上海交通大学,120,120,2017
164 | 中国科学技术大学,141,141,2017
165 | 浙江大学,150,150,2017
166 | 哈尔滨工业大学,154,154,2017
167 | 四川大学,162,162,2017
168 | 中山大学,163,163,2017
169 | 北京师范大学,202,202,2017
170 | 华中科技大学,217,217,2017
171 | 南京大学,230,230,2017
172 | 苏州大学,242,242,2017
173 | 华南理工大学,243,243,2017
174 | 东南大学,244,244,2017
175 | 电子科技大学,266,266,2017
176 | 武汉大学,297,297,2017
177 | 西安交通大学,298,298,2017
178 | 北京航空航天大学,303,303,2017
179 | 首都医科大学,307,307,2017
180 | 清华大学,45,45,2018
181 | 北京大学,57,57,2018
182 | 浙江大学,67,67,2018
183 | 复旦大学,108,108,2018
184 | 上海交通大学,120,120,2018
185 | 中山大学,121,121,2018
186 | 中国科学技术大学,142,142,2018
187 | 哈尔滨工业大学,154,154,2018
188 | 华中科技大学,156,156,2018
189 | 南京大学,159,159,2018
190 | 四川大学,165,165,2018
191 | 西安交通大学,200,200,2018
192 | 北京航空航天大学,202,202,2018
193 | 北京师范大学,203,203,2018
194 | 中南大学,205,205,2018
195 | 大连理工大学,213,213,2018
196 | 吉林大学,223,223,2018
197 | 苏州大学,244,244,2018
198 | 华南理工大学,245,245,2018
199 | 东南大学,246,246,2018
200 |
--------------------------------------------------------------------------------
/Dashboard/src/API.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import Scraper from './Scraper';
3 |
4 | const request = require('request');
5 |
6 | const scraper = new Scraper();
7 | const http = axios.create({
8 | baseURL:
9 | process.env.NODE_ENV === 'production' ? 'https://2019ncov-api.now.sh' : 'http://localhost:3000'
10 | });
11 | // const baidunews = axios.create({
12 | // baseURL:
13 | // 'http://opendata.baidu.com/data/inner?tn=reserved_all_res_tn&dspName=iphone&from_sf=1&dsp=iphone&resource_id=28565&alr=1&query=%E6%96%B0%E5%86%A0%E8%82%BA%E7%82%8E%E5%9B%BD%E5%A4%96%E7%96%AB%E6%83%85'
14 | // });
15 |
16 | // export async function request(url) {
17 | // const res = await fetch(url, { mode: 'no-cors' });
18 | // const data = await res.json();
19 | // return data;
20 | // }
21 | export default {
22 | async getCases() {
23 | const { data } = await scraper.fetchTimeSeries();
24 | console.log(data);
25 | return data;
26 | },
27 | async getTweets(params) {
28 | const { data } = await http('/api/tweets', {
29 | params
30 | });
31 | return data;
32 | },
33 | async getFatalityRate() {
34 | // const { data } = await http('/api/fatality-rate');
35 | // console.log(data);
36 | // console.log(JSON.stringify(data));
37 | const data = JSON.parse(
38 | '{"byAge":[{"age":"80+ years old","rate":"14.8%"},{"age":"70-79 years old","rate":"8.0%"},{"age":"60-69 years old","rate":"3.6%"},{"age":"50-59 years old","rate":"1.3%"},{"age":"40-49 years old","rate":"0.4%"},{"age":"30-39 years old","rate":"0.2%"},{"age":"20-29 years old","rate":"0.2%"},{"age":"10-19 years old","rate":"0.2%"},{"age":"0-9 years old","rate":"no fatalities"}],"bySex":[{"sex":"Male","rate":"4.7%"},{"sex":"Female","rate":"2.8%"}],"byComorbidity":[{"preExistingCondition":"Cardiovascular disease","rate":"10.5%"},{"preExistingCondition":"Diabetes","rate":"7.3%"},{"preExistingCondition":"Chronic respiratory disease","rate":"6.3%"},{"preExistingCondition":"Hypertension","rate":"6.0%"},{"preExistingCondition":"Cancer","rate":"5.6%"},{"preExistingCondition":"no pre-existing conditions","rate":"0.9%"}]}'
39 | );
40 | return data;
41 | },
42 | async getMyTime() {
43 | const { data } = await axios.get(
44 | 'https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoNewsArticleList'
45 | );
46 | return data;
47 | },
48 | async getChianData() {
49 | const url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5';
50 | const { data } = await axios.get(`https://bird.ioliu.cn/v1?url=${url}`);
51 | return data;
52 | }
53 | };
54 |
--------------------------------------------------------------------------------
/Dashboard/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
144 |
--------------------------------------------------------------------------------
/Dashboard/src/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | {{ l['CNAME'] }}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | 死亡:
35 |
36 |
37 |
38 | 治愈:
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | COVID-19
50 | Dashboard
51 |
52 |
53 |
54 |
55 | mdi-home-variant-outline
56 | 首页
57 |
58 |
59 | mdi-earth
60 | 3D展示
61 |
62 |
63 |
64 |
65 | mdi-chart-areaspline
66 | 国家对比
67 |
68 |
69 |
70 | mdi-chart-bar
71 | 动态排名
72 |
73 |
74 |
75 | mdi-hospital-box
76 | 疾病知识
77 |
78 |
89 |
90 |
91 |
92 | mdi-map-search
93 |
94 |
95 | 搜索
96 |
97 |
98 |
99 |
100 | mdi-theme-light-dark
101 |
102 |
103 | 风格切换
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
162 |
163 |
164 |
165 |
166 |
167 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 | 疫情详情: {{ selected.country }}
200 | {{ selected.country }}
201 |
202 |
203 | 关闭
204 |
205 |
206 |
207 |
208 |
国家/地区: {{ selected['CNAME'] }}
209 |
省份/洲: {{ selected['Province/State'] }}
210 |
211 |
212 | 累计确诊:
213 |
214 |
215 |
216 | 累计死亡:
217 |
218 |
219 |
220 | 累计治愈:
221 |
222 |
223 |
224 | 现存确诊:
225 |
226 |
227 |
228 |
229 |
230 | 新增确诊:
231 |
232 |
233 |
234 | 新增死亡:
235 |
236 |
237 |
238 | 新增治愈:
239 |
240 |
241 |
死亡率:{{ ((selected.death * 100) / selected.confirmed).toFixed(2) }}%
242 |
243 |
244 |
![]()
245 |
246 |
247 |
248 |
249 |
250 | 关闭
251 |
252 |
253 |
254 |
255 |
256 |
257 | An update is available
258 | Reload
259 |
260 |
261 |
262 |
263 |
264 |
265 |
268 |
269 |
270 |
271 |
432 |
433 |
438 |
--------------------------------------------------------------------------------
/Dashboard/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TjFish/COVID-19-Dashboard/7eb23976176e7a1545c27bc05707581d06f40f80/Dashboard/src/assets/logo.png
--------------------------------------------------------------------------------
/Dashboard/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Chart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | COVID-19
7 | Dashboard
8 |
9 |
10 |
11 |
12 | mdi-home-variant-outline
13 | 首页
14 |
15 |
16 | mdi-earth
17 | 3D展示
18 |
19 |
20 |
21 |
22 | mdi-chart-areaspline
23 | 国家对比
24 |
25 |
26 |
27 | mdi-chart-bar
28 | 动态排名
29 |
30 |
31 |
32 | mdi-hospital-box
33 | 疾病知识
34 |
35 |
36 |
47 |
48 |
49 |
50 | mdi-theme-light-dark
51 |
52 |
53 | 风格切换
54 |
55 |
56 |
57 |
65 |
66 |
67 |
68 |
69 |
128 |
--------------------------------------------------------------------------------
/Dashboard/src/components/DailyReport.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
112 |
--------------------------------------------------------------------------------
/Dashboard/src/components/FatalityRateByAge.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
114 |
--------------------------------------------------------------------------------
/Dashboard/src/components/FatalityRateByComorbidity.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
109 |
--------------------------------------------------------------------------------
/Dashboard/src/components/FatalityRateBySex.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
92 |
--------------------------------------------------------------------------------
/Dashboard/src/components/MainlandChina.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
86 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Map.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
25 |
26 |
27 |
28 |
101 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Ranking.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | COVID-19
7 | Dashboard
8 |
9 |
10 |
11 |
12 | mdi-home-variant-outline
13 | 首页
14 |
15 |
16 | mdi-earth
17 | 3D展示
18 |
19 |
20 |
21 |
22 | mdi-chart-areaspline
23 | 国家对比
24 |
25 |
26 |
27 | mdi-chart-bar
28 | 动态排名
29 |
30 |
31 |
32 | mdi-hospital-box
33 | 疾病知识
34 |
35 |
36 |
37 |
38 |
39 | mdi-theme-light-dark
40 |
41 |
42 | 风格切换
43 |
44 |
45 |
46 |
53 |
54 | 湖北疫情
55 |
56 |
57 | 中国疫情
58 |
59 |
60 |
61 | 世界疫情
62 |
63 |
64 |
65 | mdi-file-plus-outline
66 | 自定义数据
67 |
68 |
69 |
79 |
80 |
81 |
82 |
83 |
84 |
93 |
94 |
95 |
96 |
97 |
218 |
--------------------------------------------------------------------------------
/Dashboard/src/components/RecoveredChart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
96 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Reference.vue:
--------------------------------------------------------------------------------
1 |
2 |
79 |
80 |
81 |
116 |
117 |
122 |
--------------------------------------------------------------------------------
/Dashboard/src/components/SearchDialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 搜索国家或地区
7 |
8 |
9 |
10 | mdi-close
11 |
12 |
13 |
14 |
21 |
22 |
27 |
28 |
29 |
30 | {{ item['Province/State'] }}
31 |
32 |
33 | {item['CNAME'] }}
34 |
35 |
36 |
37 | {{ item['CNAME'] }}
38 |
39 |
40 |
41 |
42 |
43 | {{ resultText }}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
98 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Timeline.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 实时热点
6 | mdi-format-align-justify更多
9 |
10 |
11 |
12 |
13 |
14 | 原文
15 |
16 |
17 |
18 | {{ item.datetime | toDate }}
19 |
20 |
21 |
22 |
23 |
24 |
67 |
68 |
73 |
--------------------------------------------------------------------------------
/Dashboard/src/components/TotalCases.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 确诊
9 |
10 |
11 |
12 |
13 |
14 |
15 | 治愈
16 |
17 |
18 |
19 |
20 |
21 | 死亡
22 |
23 |
24 |
25 |
26 |
52 |
--------------------------------------------------------------------------------
/Dashboard/src/components/TweetDialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | mdi-twitter
7 |
8 | Twitter
9 |
10 |
11 | mdi-close
12 |
13 |
14 |
15 |
16 |
17 |
18 | {{ t.created_at | fromNow }} · {{ t.user.name }}
19 |
20 |
21 |
22 |
23 | mdi-heart
24 |
25 | mdi-share-variant
26 |
27 |
28 |
29 |
30 | Load More
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | mdi-heart
43 |
44 |
45 |
46 | mdi-share-variant
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
121 |
--------------------------------------------------------------------------------
/Dashboard/src/components/Tweets.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{ t.created_at | fromNow }} · {{ t.user.name }}
7 |
8 |
9 |
10 |
11 | mdi-heart
12 |
13 | mdi-share-variant
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | mdi-heart
29 |
30 |
31 |
32 | mdi-share-variant
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
View More Tweets
43 |
44 |
45 |
46 |
97 |
98 |
103 |
--------------------------------------------------------------------------------
/Dashboard/src/components/WHO.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | COVID-19
7 | Dashboard
8 |
9 |
10 |
11 |
12 | mdi-home-variant-outline
13 | 首页
14 |
15 |
16 | mdi-earth
17 | 3D展示
18 |
19 |
20 |
21 |
22 | mdi-chart-areaspline
23 | 国家对比
24 |
25 |
26 |
27 | mdi-chart-bar
28 | 动态排名
29 |
30 |
31 |
32 | mdi-hospital-box
33 | 疾病知识
34 |
35 |
36 |
37 |
38 |
39 | mdi-theme-light-dark
40 |
41 |
42 | 风格切换
43 |
44 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
102 |
--------------------------------------------------------------------------------
/Dashboard/src/helpers/index.js:
--------------------------------------------------------------------------------
1 | import moment from 'moment';
2 |
3 | export default {
4 | URLify(val) {
5 | if (!val) return '';
6 |
7 | return val.replace(
8 | /((http|https|ftp):\/\/[\w?=&./-;#~%-]+(?![\w\s?&./;#~%"=-]*>))/g,
9 | '$1 '
10 | );
11 | },
12 | fromNow(val) {
13 | return moment(val, 'ddd MMM DD HH:mm:ss Z YYYY').fromNow();
14 | }
15 | };
16 |
--------------------------------------------------------------------------------
/Dashboard/src/main.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable global-require */
2 | /* eslint-disable no-underscore-dangle */
3 | import Vue from 'vue';
4 | import { Icon } from 'leaflet';
5 | import VueRouter from 'vue-router';
6 | import App from './App.vue';
7 | import Home from './Home.vue';
8 | import Chart from './components/Chart.vue';
9 | import WHO from './components/WHO.vue';
10 | import Ranking from './components/Ranking.vue';
11 | import './registerServiceWorker';
12 | import vuetify from './plugins/vuetify';
13 | import './plugins/vue2-filters';
14 | import './plugins/vue2-perfect-scrollbar';
15 | import 'leaflet/dist/leaflet.css';
16 | import store from './store';
17 | import Helpers from './helpers';
18 |
19 | // this part resolve an issue where the markers would not appear
20 | delete Icon.Default.prototype._getIconUrl;
21 |
22 | Vue.config.productionTip = false;
23 |
24 | Vue.filter('URLify', Helpers.URLify);
25 | Vue.filter('fromNow', Helpers.fromNow);
26 | Vue.use(VueRouter);
27 | // 创建路由对象并配置路由规则
28 | const router = new VueRouter({
29 | routes: [
30 | // 一个个对象
31 | { path: '/', name: Home, component: Home },
32 | { path: '/Chart', name: Chart, component: Chart },
33 | { path: '/WHO', name: WHO, component: WHO },
34 | { path: '/Ranking', name: Ranking, component: Ranking }
35 | ]
36 | });
37 | new Vue({
38 | vuetify,
39 | store,
40 | router,
41 | render: h => h(App)
42 | }).$mount('#app');
43 |
--------------------------------------------------------------------------------
/Dashboard/src/plugins/vue2-filters.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vue2Filters from 'vue2-filters';
3 |
4 | Vue.use(Vue2Filters);
5 |
--------------------------------------------------------------------------------
/Dashboard/src/plugins/vue2-perfect-scrollbar.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import PerfectScrollbar from 'vue2-perfect-scrollbar';
3 | import 'vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css';
4 |
5 | Vue.use(PerfectScrollbar);
6 |
--------------------------------------------------------------------------------
/Dashboard/src/plugins/vuetify.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuetify from 'vuetify/lib';
3 | import '@mdi/font/css/materialdesignicons.css';
4 |
5 | Vue.use(Vuetify);
6 |
7 | export default new Vuetify({
8 | icons: {
9 | iconFont: 'mdi'
10 | }
11 | });
12 |
--------------------------------------------------------------------------------
/Dashboard/src/registerServiceWorker.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 |
3 | import { register } from 'register-service-worker';
4 |
5 | const UpdatedEvent = new CustomEvent('swUpdated');
6 |
7 | if (process.env.NODE_ENV === 'production') {
8 | register(`${process.env.BASE_URL}service-worker.js`, {
9 | ready() {
10 | console.log(
11 | 'App is being served from cache by a service worker.\n' +
12 | 'For more details, visit https://goo.gl/AFskqB'
13 | );
14 | },
15 | registered() {
16 | console.log('Service worker has been registered.');
17 | },
18 | cached() {
19 | console.log('Content has been cached for offline use.');
20 | },
21 | updatefound() {
22 | console.log('New content is downloading.');
23 | },
24 | updated() {
25 | console.log('New content is available; please refresh.');
26 | document.dispatchEvent(UpdatedEvent);
27 | },
28 | offline() {
29 | console.log('No internet connection found. App is running in offline mode.');
30 | },
31 | error(error) {
32 | console.error('Error during service worker registration:', error);
33 | }
34 | });
35 | }
36 |
--------------------------------------------------------------------------------
/Dashboard/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import createPersistedState from 'vuex-persistedstate';
4 |
5 | Vue.use(Vuex);
6 |
7 | export default new Vuex.Store({
8 | state: {
9 | tweetDialog: false,
10 | isDarkTheme: true
11 | },
12 | mutations: {
13 | SET_TWEET_DIALOG(state, payload) {
14 | state.tweetDialog = payload;
15 | },
16 | TOGGLE_THEME(state) {
17 | state.isDarkTheme = !state.isDarkTheme;
18 | }
19 | },
20 | actions: {},
21 | modules: {},
22 | plugins: [createPersistedState()]
23 | });
24 |
--------------------------------------------------------------------------------
/Dashboard/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | transpileDependencies: ['vuetify'],
3 | chainWebpack: config => {
4 | config.module
5 | .rule('eslint')
6 | .use('eslint-loader')
7 | .options({
8 | fix: true
9 | });
10 | },
11 | pwa: {
12 | workboxOptions: {
13 | skipWaiting: true
14 | }
15 | },
16 | publicPath: process.env.NODE_ENV === 'production'
17 | ? '/COVID-19-Dashboard/'
18 | : '/'
19 | };
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 TjFish
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # COVID-19-Dashboard
2 | 新冠疫情数据可视化,包含世界地图,中国地图,3D地球,动态排名,支持省市级交互;
3 |
4 | 数据源:[霍普金斯大学数据](https://github.com/CSSEGISandData/COVID-19) - [世卫组织WHO](https://www.who.int/zh/emergencies/diseases/novel-coronavirus-2019/advice-for-public) - [丁香园实时数据](https://3g.dxy.cn/newh5/view/pneumonia) - [Covid Data](https://github.com/bumbeishvili/covid19-daily-data) - [腾讯新闻](https://news.qq.com/zt2020/page/feiyan.htm#/global) - [国旗图片](https://corona.lmao.ninja/) - [国家中英翻译]()
5 |
6 | ## Demo
7 |
8 | 看这里
9 |
10 | 
11 |
12 | ## 参考项目
13 |
14 | ~~我是裁缝王,裁缝王就是我~~
15 |
16 | - 首页
17 |
18 | - 3d地球 https://github.com/sorxrob/covid3d
19 |
20 | - 国家对比
21 | - 动态排名
22 | - 中国地图
23 |
24 | 框架/组件:[Vuetify](https://vuetifyjs.com/en/) - [Apexchart](https://apexcharts.com/) - [Leaflet](https://leafletjs.com/) - [D3js](https://d3js.org/) - [Globe.gl](https://github.com/vasturiano/globe.gl)- [Material Design Icons](https://materialdesignicons.com/) - [Echart]() - [bird]()
25 |
26 | ## 给学弟学妹的建议(Web课)
27 |
28 | ⛔不要选功能性网站!不要选功能性网站!不要选功能性网站!(如个人博客,网上商城),被怼到怀疑人生
29 |
30 | 👀可以考虑3d游戏,数据可视化,炫酷网页,功能不要求多,重点就是**好看**,金爷爷喜欢
31 |
32 | 👼优秀学长项目
33 |
34 | - 3D魔方
35 | - 探索太空
36 | - 宫崎骏电影小站
37 | - 个人博客 (纯手撸强强强,~~答辩80分反面教材~~)
38 | - WebFPS ——Unity 制作
39 | - Unity导出WebGl了解一下?
40 |
41 | 拿良不难,有成品基本就行,拿优看选题和运气
42 |
43 | ## Q & A
44 |
45 | **Q: Demo网页连接打不开,加载很久?**
46 |
47 | A: 由于部分数据来自国外,需要VPN才能访问
48 |
49 |
50 |
51 | **Q: 项目很好,我想继续开发,有什么建议吗?**
52 |
53 | A: 不要继续开发
54 |
55 |
56 |
57 | **Q: 金👴答辩有什么要注意的吗?**
58 |
59 | A: 只答不辨,问就道歉;
60 |
61 | 老师说的都对,是我没考虑清楚;
62 |
63 |
64 |
65 | **Q: 金爷爷答辩被怼的好惨,咋办?**
66 |
67 | A: 建议心态放轻松, 往年来看被怼也不一定拿良,有时候金爷爷很喜欢你的项目,也会怼你。另外金老师只给70%分数,还有助教捞你一手。
68 |
69 |
70 |
71 | ## Run it
72 |
73 | 运行项目前,需要先安装npm,由于nodejs自带npm,所以直接安装[nodejs](https://nodejs.org/zh-cn/) 即可。
74 |
75 | 下载源代码后,项目分为两个子项目
76 |
77 | - Dashboard
78 |
79 | ```powershell
80 | # 工作目录
81 | cd Dashboard
82 | # 安装依赖
83 | npm install
84 | # 启动server
85 | npm run server
86 | ```
87 |
88 | open browser http://localhost:8080/
89 |
90 | - 3d
91 |
92 | ```powershell
93 | cd 3d
94 | npm install
95 | npm run dev
96 | ```
97 |
98 | open browser http://localhost:1234/
99 |
100 | **最后,本项目代码混乱,赶工明显,不建议继续开发。谨希望能为学弟学妹们提供一些思路~~**
101 |
102 | **祝好!**
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/img/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TjFish/COVID-19-Dashboard/7eb23976176e7a1545c27bc05707581d06f40f80/img/home.png
--------------------------------------------------------------------------------