├── .eslintrc.js
├── .gitignore
├── README.md
├── babel.config.js
├── demos
├── Snip20210729_36.png
├── Snip20220107_10.gif
├── Snip20220622_2.png
├── Snip20220622_3.png
├── Snip20220622_4.png
├── Snip20220622_5.png
├── Snip20220622_6.png
├── Snip20220622_7.png
├── Snip20220622_8.png
├── amapLocaTest.gif
└── polylineTest.gif
├── package.json
├── public
├── EasyPlayer-lib.min.js
├── EasyPlayer.swf
├── crossdomain.xml
├── data
│ ├── 4401.json
│ ├── huadu.geojson
│ ├── huadu_line.geojson
│ ├── mapdata.json
│ ├── polyline.json
│ ├── something.json
│ ├── table.json
│ └── user.json
├── favicon.ico
├── images
│ ├── cat.png
│ ├── close.png
│ └── map-ic.png
├── index.html
└── libDecoder.wasm
├── src
├── .env.development
├── .env.production
├── App.vue
├── api
│ ├── map.js
│ ├── polyline.js
│ ├── something.js
│ ├── table.js
│ └── user.js
├── assets
│ ├── images
│ │ ├── close.png
│ │ ├── map-bg.png
│ │ └── map-ic.png
│ └── logo.png
├── components
│ ├── bmap
│ │ ├── bMarker.vue
│ │ ├── bmap-jsapi-loader
│ │ │ └── index.js
│ │ ├── bmapgl-jsapi-loader
│ │ │ └── index.js
│ │ ├── gl
│ │ │ ├── index.js
│ │ │ └── index.vue
│ │ ├── index.js
│ │ ├── index.vue
│ │ └── pointSelect.vue
│ ├── chart
│ │ ├── index.js
│ │ ├── index.vue
│ │ └── options
│ │ │ ├── bar
│ │ │ └── index.js
│ │ │ ├── map
│ │ │ └── index.js
│ │ │ └── pie
│ │ │ └── index.js
│ └── map
│ │ ├── index.js
│ │ ├── index.vue
│ │ ├── locaPoint.vue
│ │ └── polyLine.vue
├── main.js
├── plugins
│ └── element.js
├── router
│ └── index.js
├── settings.js
├── store
│ └── index.js
├── styles
│ ├── box.scss
│ └── index.scss
├── utils
│ ├── Export2Excel.js
│ ├── mock-request.js
│ └── utils.js
└── views
│ ├── About.vue
│ ├── Home.vue
│ ├── amapLocaTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── bigscreen
│ ├── components
│ │ ├── bottomView
│ │ │ ├── index.js
│ │ │ ├── index.scss
│ │ │ └── index.vue
│ │ ├── centerView
│ │ │ ├── index.js
│ │ │ ├── index.scss
│ │ │ └── index.vue
│ │ ├── header.vue
│ │ ├── leftView
│ │ │ ├── index.js
│ │ │ ├── index.scss
│ │ │ └── index.vue
│ │ └── rightView
│ │ │ ├── index.js
│ │ │ ├── index.scss
│ │ │ └── index.vue
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── bmapGLTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── bmapTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── chartTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── dynamicTableTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── echartMapTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── mockDataTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── polylineTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ ├── somethingTest
│ ├── component
│ │ └── son.vue
│ ├── index.js
│ ├── index.scss
│ └── index.vue
│ └── videoCaptureTest
│ ├── index.js
│ ├── index.scss
│ └── index.vue
└── vue.config.js
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parserOptions: {
4 | parser: 'babel-eslint',
5 | sourceType: 'module'
6 | },
7 | env: {
8 | browser: true,
9 | node: true,
10 | es6: true
11 | },
12 | extends: ['plugin:vue/recommended', 'eslint:recommended'],
13 | globals: {
14 | 'AMap': true,
15 | 'AMapUI': true,
16 | 'Loca': true,
17 | 'BMap': true,
18 | 'BMapGL': true,
19 | 'mapvgl': true
20 | },
21 | // add your custom rules here
22 | // it is base on https://github.com/vuejs/eslint-config-vue
23 | rules: {
24 | 'vue/max-attributes-per-line': [2, {
25 | 'singleline': 10,
26 | 'multiline': {
27 | 'max': 1,
28 | 'allowFirstLine': false
29 | }
30 | }],
31 | 'vue/singleline-html-element-content-newline': 'off',
32 | 'vue/multiline-html-element-content-newline': 'off',
33 | 'vue/html-closing-bracket-newline': ['error', {
34 | 'singleline': 'never',
35 | 'multiline': 'never'
36 | }],
37 | 'vue/name-property-casing': ['error', 'PascalCase'],
38 | 'vue/no-v-html': 'off',
39 | 'accessor-pairs': 2,
40 | 'arrow-spacing': [2, {
41 | 'before': true,
42 | 'after': true
43 | }],
44 | 'block-spacing': [2, 'always'],
45 | 'brace-style': [2, '1tbs', {
46 | 'allowSingleLine': true
47 | }],
48 | 'camelcase': [0, {
49 | 'properties': 'always'
50 | }],
51 | 'comma-dangle': [2, 'never'],
52 | 'comma-spacing': [2, {
53 | 'before': false,
54 | 'after': true
55 | }],
56 | 'comma-style': [2, 'last'],
57 | 'constructor-super': 2,
58 | 'curly': [2, 'multi-line'],
59 | 'dot-location': [2, 'property'],
60 | 'eol-last': 2,
61 | 'eqeqeq': ['error', 'always', { 'null': 'ignore' }],
62 | 'generator-star-spacing': [2, {
63 | 'before': true,
64 | 'after': true
65 | }],
66 | 'handle-callback-err': [2, '^(err|error)$'],
67 | 'indent': [2, 2, {
68 | 'SwitchCase': 1
69 | }],
70 | 'jsx-quotes': [2, 'prefer-single'],
71 | 'key-spacing': [2, {
72 | 'beforeColon': false,
73 | 'afterColon': true
74 | }],
75 | 'keyword-spacing': [2, {
76 | 'before': true,
77 | 'after': true
78 | }],
79 | 'new-cap': [2, {
80 | 'newIsCap': true,
81 | 'capIsNew': false
82 | }],
83 | 'new-parens': 2,
84 | 'no-array-constructor': 2,
85 | 'no-caller': 2,
86 | 'no-console': 'off',
87 | 'no-class-assign': 2,
88 | 'no-cond-assign': 2,
89 | 'no-const-assign': 2,
90 | 'no-control-regex': 0,
91 | 'no-delete-var': 2,
92 | 'no-dupe-args': 2,
93 | 'no-dupe-class-members': 2,
94 | 'no-dupe-keys': 2,
95 | 'no-duplicate-case': 2,
96 | 'no-empty-character-class': 2,
97 | 'no-empty-pattern': 2,
98 | 'no-eval': 2,
99 | 'no-ex-assign': 2,
100 | 'no-extend-native': 2,
101 | 'no-extra-bind': 2,
102 | 'no-extra-boolean-cast': 2,
103 | 'no-extra-parens': [2, 'functions'],
104 | 'no-fallthrough': 2,
105 | 'no-floating-decimal': 2,
106 | 'no-func-assign': 2,
107 | 'no-implied-eval': 2,
108 | 'no-inner-declarations': [2, 'functions'],
109 | 'no-invalid-regexp': 2,
110 | 'no-irregular-whitespace': 2,
111 | 'no-iterator': 2,
112 | 'no-label-var': 2,
113 | 'no-labels': [2, {
114 | 'allowLoop': false,
115 | 'allowSwitch': false
116 | }],
117 | 'no-lone-blocks': 2,
118 | 'no-mixed-spaces-and-tabs': 2,
119 | 'no-multi-spaces': 2,
120 | 'no-multi-str': 2,
121 | 'no-multiple-empty-lines': [2, {
122 | 'max': 1
123 | }],
124 | 'no-native-reassign': 2,
125 | 'no-negated-in-lhs': 2,
126 | 'no-new-object': 2,
127 | 'no-new-require': 2,
128 | 'no-new-symbol': 2,
129 | 'no-new-wrappers': 2,
130 | 'no-obj-calls': 2,
131 | 'no-octal': 2,
132 | 'no-octal-escape': 2,
133 | 'no-path-concat': 2,
134 | 'no-proto': 2,
135 | 'no-redeclare': 2,
136 | 'no-regex-spaces': 2,
137 | 'no-return-assign': [2, 'except-parens'],
138 | 'no-self-assign': 2,
139 | 'no-self-compare': 2,
140 | 'no-sequences': 2,
141 | 'no-shadow-restricted-names': 2,
142 | 'no-spaced-func': 2,
143 | 'no-sparse-arrays': 2,
144 | 'no-this-before-super': 2,
145 | 'no-throw-literal': 2,
146 | 'no-trailing-spaces': 2,
147 | 'no-undef': 2,
148 | 'no-undef-init': 2,
149 | 'no-unexpected-multiline': 2,
150 | 'no-unmodified-loop-condition': 2,
151 | 'no-unneeded-ternary': [2, {
152 | 'defaultAssignment': false
153 | }],
154 | 'no-unreachable': 2,
155 | 'no-unsafe-finally': 2,
156 | 'no-unused-vars': [2, {
157 | 'vars': 'all',
158 | 'args': 'none'
159 | }],
160 | 'no-useless-call': 2,
161 | 'no-useless-computed-key': 2,
162 | 'no-useless-constructor': 2,
163 | 'no-useless-escape': 0,
164 | 'no-whitespace-before-property': 2,
165 | 'no-with': 2,
166 | 'one-var': [2, {
167 | 'initialized': 'never'
168 | }],
169 | 'operator-linebreak': [2, 'after', {
170 | 'overrides': {
171 | '?': 'before',
172 | ':': 'before'
173 | }
174 | }],
175 | 'padded-blocks': [2, 'never'],
176 | 'quotes': [2, 'single', {
177 | 'avoidEscape': true,
178 | 'allowTemplateLiterals': true
179 | }],
180 | 'semi': [2, 'never'],
181 | 'semi-spacing': [2, {
182 | 'before': false,
183 | 'after': true
184 | }],
185 | 'space-before-blocks': [2, 'always'],
186 | 'space-before-function-paren': [2, 'never'],
187 | 'space-in-parens': [2, 'never'],
188 | 'space-infix-ops': 2,
189 | 'space-unary-ops': [2, {
190 | 'words': true,
191 | 'nonwords': false
192 | }],
193 | 'spaced-comment': [2, 'always', {
194 | 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
195 | }],
196 | 'template-curly-spacing': [2, 'never'],
197 | 'use-isnan': 2,
198 | 'valid-typeof': 2,
199 | 'wrap-iife': [2, 'any'],
200 | 'yield-star-spacing': [2, 'both'],
201 | 'yoda': [2, 'never'],
202 | 'prefer-const': 2,
203 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
204 | 'object-curly-spacing': [2, 'always', {
205 | objectsInObjects: false
206 | }],
207 | 'array-bracket-spacing': [2, 'never']
208 | }
209 | }
210 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | package-lock.json
3 | node_modules
4 | dist/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-skill
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | npm run lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
26 | ## 环境
27 |
28 | 平时是在`node`版本`v12.22.4`环境下运行`vue ui`开发的,`npm`版本是`6.14.14`,用的`nvm`管理版本切换,在别的版本应该也可以开发,自行尝试了。
29 |
30 | ## 例子
31 |
32 | ### 1、MockDataTest
33 |
34 | [vue本地模拟服务器请求mock数据](https://juejin.cn/post/6995147964427534373)
35 |
36 | 
37 |
38 | ### 2、chartTest
39 |
40 | [vue项目中封装echarts的比较优雅的方式](https://juejin.cn/post/6995518429952212999)
41 |
42 | 
43 |
44 | ### 3、dynamicTableTest
45 |
46 | [Vue + Element,记动态生成表格在一个运维项目中的应用](https://juejin.cn/post/6996102642061557773)
47 |
48 | 
49 |
50 | ### 4、polylineTest
51 |
52 | [Vue对高德地图2.0的封装使用](https://juejin.cn/post/6998363016571912222)
53 |
54 | 
55 |
56 | ### 5、amapLocaTest
57 |
58 | [高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)](https://juejin.cn/post/7002975848152170504)
59 |
60 | 
61 |
62 | ### 6、video-time-slider,用于IVR视频回播的时间选择插件
63 |
64 | [video-time-slider,用于IVR视频回播的时间选择插件](https://juejin.cn/post/7051500204209471501)
65 |
66 | 
67 |
68 | ### 7、如何快速开发一个响应式移动端页面
69 |
70 | [如何快速开发一个响应式移动端页面](https://juejin.cn/post/7052157317504040968)
71 |
72 | 
73 |
74 | ### 8、echart地图显示测试
75 |
76 | [vue2项目中封装echarts地图比较优雅的方式](https://juejin.cn/post/7072658645296611359)
77 |
78 | 
79 |
80 | ### 9、vue2项目中给echarts地图设置背景图和打点
81 |
82 | [vue2项目中给echarts地图设置背景图和打点](https://juejin.cn/post/7097136735963840542)
83 |
84 | 
85 |
86 | ### 10、响应式大屏
87 |
88 | [Echarts大屏展示,实现响应式比较常用的方式](https://juejin.cn/post/7099746692295032846)
89 |
90 | 
91 |
92 | ### 11、bmapTest
93 |
94 | [Vue2项目中对百度地图的封装使用](https://juejin.cn/post/7109381065344548901)
95 |
96 | 
97 |
98 | ### 12、百度地图选坐标组件测试
99 |
100 | [vue2项目封装百度地图3.0拾取坐标控件](https://juejin.cn/post/7109693496453234719)
101 |
102 | 
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | 'presets': [
3 | '@vue/cli-plugin-babel/preset'
4 | ],
5 | 'plugins': [
6 | [
7 | 'component',
8 | {
9 | 'libraryName': 'element-ui',
10 | 'styleLibraryName': 'theme-chalk'
11 | }
12 | ]
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/demos/Snip20210729_36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20210729_36.png
--------------------------------------------------------------------------------
/demos/Snip20220107_10.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220107_10.gif
--------------------------------------------------------------------------------
/demos/Snip20220622_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_2.png
--------------------------------------------------------------------------------
/demos/Snip20220622_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_3.png
--------------------------------------------------------------------------------
/demos/Snip20220622_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_4.png
--------------------------------------------------------------------------------
/demos/Snip20220622_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_5.png
--------------------------------------------------------------------------------
/demos/Snip20220622_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_6.png
--------------------------------------------------------------------------------
/demos/Snip20220622_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_7.png
--------------------------------------------------------------------------------
/demos/Snip20220622_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_8.png
--------------------------------------------------------------------------------
/demos/amapLocaTest.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/amapLocaTest.gif
--------------------------------------------------------------------------------
/demos/polylineTest.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/polylineTest.gif
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-skill",
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 | "axios": "^0.21.4",
12 | "core-js": "^3.23.2",
13 | "gcoord": "^0.3.2",
14 | "terser-webpack-plugin": "^5.3.3",
15 | "uglifyjs-webpack-plugin": "^2.2.0",
16 | "vue": "^2.6.14",
17 | "vue-mobile-detection": "^1.0.0",
18 | "vue-router": "^3.5.4",
19 | "vuex": "^3.6.2"
20 | },
21 | "devDependencies": {
22 | "@amap/amap-jsapi-loader": "^1.0.1",
23 | "@easydarwin/easyplayer": "^3.3.12",
24 | "@vue/cli-plugin-babel": "^4.5.17",
25 | "@vue/cli-plugin-eslint": "^4.5.17",
26 | "@vue/cli-plugin-router": "^4.5.17",
27 | "@vue/cli-plugin-vuex": "^4.5.17",
28 | "@vue/cli-service": "^4.5.17",
29 | "@vue/eslint-config-prettier": "^6.0.0",
30 | "babel-eslint": "^10.1.0",
31 | "babel-plugin-component": "^1.1.1",
32 | "echarts": "^5.3.3",
33 | "element-ui": "^2.15.9",
34 | "eslint": "^6.8.0",
35 | "eslint-plugin-prettier": "^3.4.1",
36 | "eslint-plugin-vue": "^6.2.2",
37 | "file-saver": "^2.0.5",
38 | "prettier": "^2.7.1",
39 | "sass": "^1.52.3",
40 | "sass-loader": "^8.0.2",
41 | "vue-cli-plugin-element": "^1.0.1",
42 | "vue-template-compiler": "^2.6.14",
43 | "xlsx": "^0.17.5"
44 | },
45 | "eslintConfig": {
46 | "root": true,
47 | "env": {
48 | "node": true
49 | },
50 | "extends": [
51 | "plugin:vue/essential",
52 | "eslint:recommended",
53 | "@vue/prettier"
54 | ],
55 | "parserOptions": {
56 | "parser": "babel-eslint"
57 | },
58 | "rules": {}
59 | },
60 | "browserslist": [
61 | "> 1%",
62 | "last 2 versions",
63 | "not dead"
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/public/EasyPlayer.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/EasyPlayer.swf
--------------------------------------------------------------------------------
/public/crossdomain.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/data/4401.json:
--------------------------------------------------------------------------------
1 | {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":440103,"name":"荔湾区","center":[113.243038,23.124943],"centroid":[113.227791,23.088038],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":0,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.242883,23.159608],[113.238157,23.156599],[113.237067,23.149034],[113.233278,23.143739],[113.229401,23.14063],[113.227693,23.138046],[113.220479,23.144505],[113.216447,23.149999],[113.215412,23.148679],[113.213716,23.141695],[113.212669,23.141098],[113.211601,23.12889],[113.209718,23.121848],[113.203715,23.121876],[113.203296,23.119775],[113.205246,23.109509],[113.206788,23.107649],[113.208142,23.099683],[113.213848,23.099797],[113.215809,23.100677],[113.216348,23.096772],[113.213099,23.095665],[113.213264,23.092682],[113.212075,23.090978],[113.212504,23.088323],[113.209585,23.086903],[113.208814,23.083551],[113.195233,23.084105],[113.193658,23.083878],[113.183415,23.077856],[113.177412,23.077558],[113.178866,23.07476],[113.177566,23.069576],[113.180606,23.06317],[113.184836,23.059647],[113.188184,23.058241],[113.195762,23.056167],[113.20334,23.050599],[113.209222,23.044476],[113.211689,23.043311],[113.225744,23.041862],[113.233674,23.042857],[113.24535,23.043368],[113.254932,23.044831],[113.256122,23.043908],[113.257807,23.046778],[113.265077,23.05057],[113.273393,23.053596],[113.276885,23.054448],[113.270893,23.060358],[113.265418,23.064363],[113.258336,23.072061],[113.252355,23.081747],[113.248533,23.093932],[113.242078,23.103276],[113.248434,23.104909],[113.25425,23.107138],[113.252708,23.11499],[113.252741,23.118852],[113.254426,23.125142],[113.254701,23.128847],[113.253247,23.128847],[113.247112,23.131871],[113.245779,23.134682],[113.243103,23.136258],[113.245019,23.137677],[113.24969,23.137862],[113.253534,23.139835],[113.251926,23.144179],[113.253302,23.145272],[113.251232,23.148707],[113.24904,23.147713],[113.245339,23.148395],[113.244689,23.151688],[113.2421,23.156117],[113.242883,23.159608]]]]}},{"type":"Feature","properties":{"adcode":440104,"name":"越秀区","center":[113.280714,23.125624],"centroid":[113.281396,23.13291],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":1,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.242883,23.159608],[113.2421,23.156117],[113.244689,23.151688],[113.245339,23.148395],[113.24904,23.147713],[113.251232,23.148707],[113.253302,23.145272],[113.251926,23.144179],[113.253534,23.139835],[113.24969,23.137862],[113.245019,23.137677],[113.243103,23.136258],[113.245779,23.134682],[113.247112,23.131871],[113.253247,23.128847],[113.254701,23.128847],[113.254426,23.125142],[113.252741,23.118852],[113.252708,23.11499],[113.25425,23.107138],[113.267126,23.112704],[113.273657,23.113726],[113.281136,23.112079],[113.294629,23.106826],[113.298958,23.105818],[113.30495,23.105321],[113.311107,23.106101],[113.323058,23.109211],[113.319291,23.112136],[113.315215,23.112718],[113.315237,23.133489],[113.314202,23.14327],[113.311548,23.14337],[113.309763,23.140318],[113.307858,23.140204],[113.304939,23.147387],[113.300974,23.150311],[113.303793,23.1542],[113.308673,23.156074],[113.306239,23.159764],[113.300654,23.157366],[113.298297,23.160957],[113.296513,23.160133],[113.295576,23.156855],[113.29388,23.154754],[113.287591,23.154385],[113.283989,23.156699],[113.281368,23.156173],[113.279638,23.153817],[113.273569,23.153775],[113.270749,23.15183],[113.270915,23.148608],[113.267665,23.147529],[113.266399,23.149644],[113.262544,23.149814],[113.262092,23.147713],[113.255197,23.151773],[113.257135,23.153817],[113.26001,23.154967],[113.257058,23.157933],[113.256386,23.160616],[113.254316,23.162362],[113.253412,23.165513],[113.248775,23.167471],[113.243312,23.168735],[113.24047,23.168593],[113.242111,23.166166],[113.240525,23.161794],[113.242883,23.159608]]]]}},{"type":"Feature","properties":{"adcode":440105,"name":"海珠区","center":[113.262008,23.103131],"centroid":[113.326676,23.082002],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":2,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.323058,23.109211],[113.311107,23.106101],[113.30495,23.105321],[113.298958,23.105818],[113.294629,23.106826],[113.281136,23.112079],[113.273657,23.113726],[113.267126,23.112704],[113.25425,23.107138],[113.248434,23.104909],[113.242078,23.103276],[113.248533,23.093932],[113.252355,23.081747],[113.258336,23.072061],[113.265418,23.064363],[113.270893,23.060358],[113.276885,23.054448],[113.280046,23.055116],[113.28563,23.054534],[113.294133,23.052417],[113.308265,23.050727],[113.314709,23.050727],[113.323047,23.051508],[113.327816,23.051494],[113.3487,23.044221],[113.352423,23.043638],[113.360518,23.045329],[113.36466,23.047218],[113.368691,23.052815],[113.368757,23.054789],[113.3715,23.057105],[113.380169,23.063156],[113.383682,23.068922],[113.390126,23.074291],[113.399863,23.080214],[113.409787,23.083281],[113.419711,23.087769],[113.413763,23.091561],[113.416803,23.096857],[113.414666,23.098121],[113.407176,23.09974],[113.398464,23.104412],[113.387658,23.10701],[113.381094,23.107891],[113.372117,23.107195],[113.355727,23.107138],[113.347764,23.107848],[113.342377,23.10914],[113.334105,23.109694],[113.323058,23.109211]]]]}},{"type":"Feature","properties":{"adcode":440106,"name":"天河区","center":[113.335367,23.13559],"centroid":[113.376026,23.159958],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":3,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.306239,23.159764],[113.308673,23.156074],[113.303793,23.1542],[113.300974,23.150311],[113.304939,23.147387],[113.307858,23.140204],[113.309763,23.140318],[113.311548,23.14337],[113.314202,23.14327],[113.315237,23.133489],[113.315215,23.112718],[113.319291,23.112136],[113.323058,23.109211],[113.334105,23.109694],[113.342377,23.10914],[113.347764,23.107848],[113.355727,23.107138],[113.372117,23.107195],[113.381094,23.107891],[113.387658,23.10701],[113.398464,23.104412],[113.407176,23.09974],[113.414666,23.098121],[113.417156,23.103333],[113.421705,23.105434],[113.424932,23.108075],[113.429569,23.119604],[113.432807,23.124176],[113.439504,23.12358],[113.440529,23.127569],[113.443657,23.131559],[113.445056,23.134923],[113.447633,23.135959],[113.447071,23.139736],[113.44804,23.141666],[113.437345,23.143355],[113.437995,23.154286],[113.435814,23.152199],[113.433755,23.152029],[113.431155,23.154541],[113.425835,23.157891],[113.425405,23.159239],[113.415702,23.157422],[113.415702,23.158444],[113.419414,23.161737],[113.419436,23.165896],[113.421308,23.166095],[113.423125,23.170523],[113.427399,23.173063],[113.429955,23.17593],[113.429239,23.178726],[113.426265,23.177704],[113.424018,23.178783],[113.42524,23.184062],[113.422387,23.183423],[113.419292,23.185665],[113.420537,23.190277],[113.423775,23.191327],[113.421616,23.194605],[113.417464,23.196805],[113.40895,23.203389],[113.407463,23.207503],[113.398067,23.214215],[113.400634,23.217024],[113.401955,23.221592],[113.402407,23.227806],[113.405645,23.231594],[113.404995,23.241523],[113.402385,23.245183],[113.398056,23.245566],[113.390886,23.240899],[113.386601,23.238998],[113.377558,23.228941],[113.373328,23.2286],[113.368515,23.230317],[113.363922,23.228572],[113.35967,23.230147],[113.354185,23.226345],[113.349989,23.218003],[113.350771,23.213193],[113.350176,23.207433],[113.350429,23.204027],[113.348832,23.19672],[113.344856,23.192463],[113.342631,23.18663],[113.339018,23.184771],[113.336374,23.179024],[113.334513,23.178343],[113.333423,23.173546],[113.329523,23.172893],[113.326483,23.175448],[113.323774,23.174014],[113.317837,23.177491],[113.318487,23.175944],[113.316438,23.174752],[113.316295,23.172141],[113.313552,23.170182],[113.309124,23.169089],[113.309543,23.16503],[113.311867,23.162475],[113.3106,23.160701],[113.31255,23.158075],[113.310127,23.157777],[113.309697,23.15975],[113.306239,23.159764]]]]}},{"type":"Feature","properties":{"adcode":440111,"name":"白云区","center":[113.262831,23.162281],"centroid":[113.323943,23.289328],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":4,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.306239,23.159764],[113.309697,23.15975],[113.310127,23.157777],[113.31255,23.158075],[113.3106,23.160701],[113.311867,23.162475],[113.309543,23.16503],[113.309124,23.169089],[113.313552,23.170182],[113.316295,23.172141],[113.316438,23.174752],[113.318487,23.175944],[113.317837,23.177491],[113.323774,23.174014],[113.326483,23.175448],[113.329523,23.172893],[113.333423,23.173546],[113.334513,23.178343],[113.336374,23.179024],[113.339018,23.184771],[113.342631,23.18663],[113.344856,23.192463],[113.348832,23.19672],[113.350429,23.204027],[113.350176,23.207433],[113.350771,23.213193],[113.349989,23.218003],[113.354185,23.226345],[113.35967,23.230147],[113.363922,23.228572],[113.368515,23.230317],[113.373328,23.2286],[113.377558,23.228941],[113.386601,23.238998],[113.390886,23.240899],[113.398056,23.245566],[113.402385,23.245183],[113.404995,23.241523],[113.405645,23.231594],[113.406934,23.233679],[113.411318,23.237339],[113.410756,23.242729],[113.409511,23.245736],[113.412309,23.246516],[113.412122,23.248346],[113.4146,23.247041],[113.41644,23.248701],[113.419336,23.248006],[113.418764,23.245027],[113.422387,23.24158],[113.425372,23.242573],[113.427708,23.239268],[113.430054,23.242162],[113.429778,23.246275],[113.425196,23.247155],[113.425284,23.250602],[113.427652,23.250885],[113.431188,23.24958],[113.434955,23.253055],[113.433887,23.255821],[113.431122,23.258119],[113.427465,23.265239],[113.430494,23.266515],[113.436806,23.266458],[113.438843,23.267834],[113.444956,23.264884],[113.446278,23.261892],[113.449373,23.258658],[113.447071,23.256927],[113.44825,23.251552],[113.444097,23.251297],[113.442126,23.249126],[113.447258,23.247921],[113.446719,23.24697],[113.44152,23.246332],[113.440407,23.245126],[113.442071,23.243722],[113.447126,23.246502],[113.449483,23.246091],[113.451741,23.243878],[113.458306,23.245098],[113.46041,23.244346],[113.464684,23.244899],[113.465433,23.243141],[113.46844,23.243382],[113.470962,23.240999],[113.469563,23.245212],[113.474938,23.245821],[113.475191,23.243836],[113.477692,23.246247],[113.480302,23.247339],[113.477769,23.248857],[113.481371,23.252715],[113.484884,23.252417],[113.491273,23.253041],[113.492462,23.254445],[113.493751,23.259211],[113.495557,23.260261],[113.495646,23.2627],[113.500933,23.264147],[113.506087,23.266884],[113.507409,23.272741],[113.510163,23.273946],[113.506594,23.277095],[113.50525,23.273209],[113.506098,23.271167],[113.504116,23.271025],[113.503202,23.277747],[113.505999,23.279179],[113.504678,23.282682],[113.502221,23.283249],[113.495921,23.286156],[113.495249,23.287248],[113.498322,23.290736],[113.5009,23.296578],[113.50416,23.299556],[113.509326,23.302732],[113.509843,23.307779],[113.508588,23.313309],[113.506451,23.317009],[113.50384,23.318894],[113.49331,23.322254],[113.490997,23.320794],[113.487396,23.326819],[113.485193,23.326862],[113.481117,23.32509],[113.475445,23.325302],[113.471821,23.326507],[113.470532,23.328123],[113.471458,23.333949],[113.470786,23.33626],[113.467746,23.335806],[113.463263,23.337153],[113.466259,23.341079],[113.46975,23.342312],[113.470455,23.345417],[113.469464,23.34648],[113.468682,23.351157],[113.47387,23.350717],[113.477097,23.355579],[113.472052,23.362226],[113.468605,23.366038],[113.468649,23.371792],[113.466501,23.374626],[113.468506,23.387039],[113.468087,23.38932],[113.461864,23.386543],[113.459991,23.38684],[113.460961,23.391757],[113.465983,23.3918],[113.468781,23.393004],[113.467514,23.396291],[113.467735,23.40108],[113.470797,23.402624],[113.47463,23.400046],[113.478595,23.40006],[113.481778,23.402001],[113.482175,23.405571],[113.486856,23.40594],[113.489698,23.407626],[113.490039,23.409991],[113.492022,23.412003],[113.498179,23.411776],[113.496538,23.414454],[113.49146,23.420092],[113.477703,23.426254],[113.474696,23.426523],[113.472989,23.428662],[113.465223,23.42488],[113.46085,23.42073],[113.456896,23.419313],[113.445011,23.418307],[113.44456,23.416423],[113.445606,23.412173],[113.444461,23.40917],[113.439526,23.40465],[113.434504,23.405812],[113.430406,23.402228],[113.428974,23.400102],[113.426066,23.399635],[113.419656,23.403106],[113.418092,23.403021],[113.412232,23.397708],[113.403685,23.393089],[113.400964,23.391148],[113.397087,23.392763],[113.395798,23.400287],[113.396624,23.410487],[113.395336,23.413221],[113.387372,23.414411],[113.386447,23.417882],[113.382515,23.420871],[113.378109,23.414553],[113.374749,23.412726],[113.367667,23.412315],[113.361675,23.412711],[113.359571,23.41053],[113.358238,23.40594],[113.356355,23.403078],[113.351586,23.400627],[113.345153,23.400457],[113.342455,23.398927],[113.338897,23.394364],[113.337817,23.387705],[113.335747,23.386755],[113.328499,23.389816],[113.323322,23.391176],[113.31896,23.391049],[113.317617,23.394378],[113.311581,23.393897],[113.308353,23.384205],[113.306194,23.384956],[113.301469,23.381881],[113.298385,23.385494],[113.296513,23.385707],[113.293164,23.380365],[113.290444,23.378083],[113.286699,23.376766],[113.287558,23.372784],[113.283559,23.368957],[113.278305,23.369028],[113.276686,23.367058],[113.273525,23.365698],[113.272225,23.360199],[113.267148,23.356897],[113.261277,23.356217],[113.260858,23.358513],[113.262301,23.363119],[113.260462,23.363062],[113.25729,23.357294],[113.257488,23.352262],[113.26033,23.349754],[113.26164,23.344963],[113.260242,23.343801],[113.250582,23.343205],[113.247641,23.341349],[113.238818,23.33969],[113.238278,23.334474],[113.237078,23.331681],[113.230943,23.332234],[113.220864,23.331185],[113.217428,23.335112],[113.213705,23.337422],[113.213859,23.346125],[113.215247,23.351667],[113.212405,23.356897],[113.20573,23.359987],[113.204695,23.359023],[113.195531,23.358328],[113.193625,23.359576],[113.18792,23.356968],[113.181818,23.355253],[113.179174,23.358541],[113.17392,23.360398],[113.171001,23.360072],[113.166551,23.357606],[113.163522,23.352673],[113.161782,23.348152],[113.157343,23.342766],[113.153631,23.336855],[113.153069,23.333014],[113.157189,23.324395],[113.157685,23.320794],[113.155294,23.311664],[113.155438,23.305553],[113.156892,23.302661],[113.155504,23.300364],[113.150018,23.299131],[113.150591,23.289971],[113.153466,23.287092],[113.16089,23.286667],[113.16274,23.28532],[113.163346,23.280924],[113.164569,23.279009],[113.173446,23.277052],[113.177753,23.271294],[113.181399,23.25697],[113.181994,23.251438],[113.181135,23.245722],[113.179185,23.237537],[113.176542,23.236587],[113.176057,23.230969],[113.178062,23.228132],[113.177478,23.220883],[113.184362,23.21525],[113.191103,23.214966],[113.19357,23.210937],[113.196236,23.208071],[113.202239,23.2038],[113.204904,23.201161],[113.209002,23.192179],[113.208969,23.186645],[113.208032,23.183452],[113.209453,23.177108],[113.207063,23.173532],[113.197899,23.169629],[113.192711,23.165186],[113.187732,23.159111],[113.186884,23.15552],[113.186851,23.148253],[113.188503,23.145187],[113.192006,23.143455],[113.203483,23.143398],[113.211656,23.142617],[113.212669,23.141098],[113.213716,23.141695],[113.215412,23.148679],[113.216447,23.149999],[113.220479,23.144505],[113.227693,23.138046],[113.229401,23.14063],[113.233278,23.143739],[113.237067,23.149034],[113.238157,23.156599],[113.242883,23.159608],[113.240525,23.161794],[113.242111,23.166166],[113.24047,23.168593],[113.243312,23.168735],[113.248775,23.167471],[113.253412,23.165513],[113.254316,23.162362],[113.256386,23.160616],[113.257058,23.157933],[113.26001,23.154967],[113.257135,23.153817],[113.255197,23.151773],[113.262092,23.147713],[113.262544,23.149814],[113.266399,23.149644],[113.267665,23.147529],[113.270915,23.148608],[113.270749,23.15183],[113.273569,23.153775],[113.279638,23.153817],[113.281368,23.156173],[113.283989,23.156699],[113.287591,23.154385],[113.29388,23.154754],[113.295576,23.156855],[113.296513,23.160133],[113.298297,23.160957],[113.300654,23.157366],[113.306239,23.159764]]]]}},{"type":"Feature","properties":{"adcode":440112,"name":"黄埔区","center":[113.450761,23.103239],"centroid":[113.50827,23.216905],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":5,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.414666,23.098121],[113.416803,23.096857],[113.413763,23.091561],[113.419711,23.087769],[113.409787,23.083281],[113.399863,23.080214],[113.402473,23.074788],[113.402352,23.0728],[113.400127,23.067843],[113.40255,23.064803],[113.407022,23.062872],[113.411725,23.063525],[113.4222,23.063624],[113.437665,23.07172],[113.444251,23.074731],[113.451444,23.076208],[113.459044,23.075953],[113.468274,23.073794],[113.478617,23.069221],[113.49645,23.059619],[113.502959,23.054988],[113.506429,23.051906],[113.51491,23.039106],[113.521695,23.030213],[113.522896,23.037274],[113.526211,23.043084],[113.531994,23.050954],[113.540574,23.057957],[113.543724,23.062289],[113.545993,23.06905],[113.549,23.076024],[113.556292,23.081236],[113.562471,23.082017],[113.570336,23.084204],[113.569565,23.089572],[113.567218,23.092597],[113.564795,23.093123],[113.564178,23.097411],[113.558616,23.098121],[113.555929,23.100209],[113.552525,23.104426],[113.553153,23.10613],[113.55019,23.107706],[113.550025,23.112377],[113.552162,23.11296],[113.553241,23.115487],[113.556248,23.11702],[113.558484,23.120371],[113.558473,23.126107],[113.557206,23.129017],[113.557724,23.131388],[113.551435,23.137294],[113.550851,23.140389],[113.554992,23.147359],[113.550917,23.159977],[113.548339,23.163951],[113.547833,23.166407],[113.550862,23.172141],[113.558153,23.172566],[113.567196,23.171161],[113.570082,23.168706],[113.572428,23.169345],[113.573277,23.166989],[113.578189,23.163313],[113.580458,23.167386],[113.581086,23.178882],[113.580061,23.188901],[113.579114,23.192562],[113.574841,23.194378],[113.574708,23.195982],[113.581989,23.199558],[113.580304,23.204581],[113.583289,23.203502],[113.584522,23.207674],[113.582738,23.208284],[113.587012,23.211561],[113.582958,23.218925],[113.587122,23.229849],[113.592783,23.23558],[113.594358,23.237949],[113.598742,23.238857],[113.601672,23.240403],[113.602928,23.243282],[113.597498,23.244843],[113.599998,23.245651],[113.600174,23.24758],[113.602862,23.250899],[113.599183,23.250332],[113.596561,23.251013],[113.596936,23.253268],[113.600615,23.252701],[113.601143,23.255665],[113.599822,23.260105],[113.597123,23.265437],[113.599679,23.268302],[113.602663,23.268926],[113.601804,23.27372],[113.60078,23.283873],[113.601815,23.287149],[113.598941,23.287333],[113.596561,23.285958],[113.588135,23.286312],[113.588091,23.290212],[113.589138,23.292608],[113.595019,23.291105],[113.597057,23.292537],[113.597244,23.296975],[113.595471,23.297202],[113.593643,23.295189],[113.592662,23.296522],[113.593389,23.299698],[113.592122,23.30181],[113.594072,23.305369],[113.590889,23.315832],[113.597189,23.314018],[113.598511,23.312855],[113.5998,23.309055],[113.598401,23.306886],[113.598996,23.30527],[113.603622,23.306773],[113.607675,23.309396],[113.607521,23.312515],[113.599535,23.3145],[113.592618,23.319504],[113.590426,23.320043],[113.588774,23.326663],[113.588884,23.331299],[113.587166,23.330689],[113.584005,23.336557],[113.585106,23.338542],[113.591462,23.343602],[113.588378,23.345374],[113.589093,23.347528],[113.587496,23.34991],[113.58178,23.355069],[113.573827,23.359576],[113.573673,23.363558],[113.570281,23.367313],[113.565225,23.369227],[113.56387,23.371026],[113.557878,23.367781],[113.554353,23.367866],[113.552922,23.370927],[113.545354,23.377474],[113.542975,23.380804],[113.539318,23.383496],[113.538922,23.386968],[113.535706,23.384998],[113.532005,23.385792],[113.523182,23.390071],[113.518479,23.39469],[113.514337,23.395299],[113.514348,23.400584],[113.515064,23.404835],[113.513522,23.408022],[113.502948,23.410105],[113.498179,23.411776],[113.492022,23.412003],[113.490039,23.409991],[113.489698,23.407626],[113.486856,23.40594],[113.482175,23.405571],[113.481778,23.402001],[113.478595,23.40006],[113.47463,23.400046],[113.470797,23.402624],[113.467735,23.40108],[113.467514,23.396291],[113.468781,23.393004],[113.465983,23.3918],[113.460961,23.391757],[113.459991,23.38684],[113.461864,23.386543],[113.468087,23.38932],[113.468506,23.387039],[113.466501,23.374626],[113.468649,23.371792],[113.468605,23.366038],[113.472052,23.362226],[113.477097,23.355579],[113.47387,23.350717],[113.468682,23.351157],[113.469464,23.34648],[113.470455,23.345417],[113.46975,23.342312],[113.466259,23.341079],[113.463263,23.337153],[113.467746,23.335806],[113.470786,23.33626],[113.471458,23.333949],[113.470532,23.328123],[113.471821,23.326507],[113.475445,23.325302],[113.481117,23.32509],[113.485193,23.326862],[113.487396,23.326819],[113.490997,23.320794],[113.49331,23.322254],[113.50384,23.318894],[113.506451,23.317009],[113.508588,23.313309],[113.509843,23.307779],[113.509326,23.302732],[113.50416,23.299556],[113.5009,23.296578],[113.498322,23.290736],[113.495249,23.287248],[113.495921,23.286156],[113.502221,23.283249],[113.504678,23.282682],[113.505999,23.279179],[113.503202,23.277747],[113.504116,23.271025],[113.506098,23.271167],[113.50525,23.273209],[113.506594,23.277095],[113.510163,23.273946],[113.507409,23.272741],[113.506087,23.266884],[113.500933,23.264147],[113.495646,23.2627],[113.495557,23.260261],[113.493751,23.259211],[113.492462,23.254445],[113.491273,23.253041],[113.484884,23.252417],[113.481371,23.252715],[113.477769,23.248857],[113.480302,23.247339],[113.477692,23.246247],[113.475191,23.243836],[113.474938,23.245821],[113.469563,23.245212],[113.470962,23.240999],[113.46844,23.243382],[113.465433,23.243141],[113.464684,23.244899],[113.46041,23.244346],[113.458306,23.245098],[113.451741,23.243878],[113.449483,23.246091],[113.447126,23.246502],[113.442071,23.243722],[113.440407,23.245126],[113.44152,23.246332],[113.446719,23.24697],[113.447258,23.247921],[113.442126,23.249126],[113.444097,23.251297],[113.44825,23.251552],[113.447071,23.256927],[113.449373,23.258658],[113.446278,23.261892],[113.444956,23.264884],[113.438843,23.267834],[113.436806,23.266458],[113.430494,23.266515],[113.427465,23.265239],[113.431122,23.258119],[113.433887,23.255821],[113.434955,23.253055],[113.431188,23.24958],[113.427652,23.250885],[113.425284,23.250602],[113.425196,23.247155],[113.429778,23.246275],[113.430054,23.242162],[113.427708,23.239268],[113.425372,23.242573],[113.422387,23.24158],[113.418764,23.245027],[113.419336,23.248006],[113.41644,23.248701],[113.4146,23.247041],[113.412122,23.248346],[113.412309,23.246516],[113.409511,23.245736],[113.410756,23.242729],[113.411318,23.237339],[113.406934,23.233679],[113.405645,23.231594],[113.402407,23.227806],[113.401955,23.221592],[113.400634,23.217024],[113.398067,23.214215],[113.407463,23.207503],[113.40895,23.203389],[113.417464,23.196805],[113.421616,23.194605],[113.423775,23.191327],[113.420537,23.190277],[113.419292,23.185665],[113.422387,23.183423],[113.42524,23.184062],[113.424018,23.178783],[113.426265,23.177704],[113.429239,23.178726],[113.429955,23.17593],[113.427399,23.173063],[113.423125,23.170523],[113.421308,23.166095],[113.419436,23.165896],[113.419414,23.161737],[113.415702,23.158444],[113.415702,23.157422],[113.425405,23.159239],[113.425835,23.157891],[113.431155,23.154541],[113.433755,23.152029],[113.435814,23.152199],[113.437995,23.154286],[113.437345,23.143355],[113.44804,23.141666],[113.447071,23.139736],[113.447633,23.135959],[113.445056,23.134923],[113.443657,23.131559],[113.440529,23.127569],[113.439504,23.12358],[113.432807,23.124176],[113.429569,23.119604],[113.424932,23.108075],[113.421705,23.105434],[113.417156,23.103333],[113.414666,23.098121]]]]}},{"type":"Feature","properties":{"adcode":440113,"name":"番禺区","center":[113.364619,22.938582],"centroid":[113.406928,22.973597],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":6,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.256122,23.043908],[113.254844,23.038495],[113.256959,23.03081],[113.258722,23.022058],[113.263127,23.021134],[113.258391,23.014001],[113.25393,23.012168],[113.250009,23.009042],[113.249458,23.004211],[113.250317,22.999777],[113.251804,22.998456],[113.256695,22.997788],[113.257895,22.99486],[113.251793,22.990213],[113.251011,22.988195],[113.251606,22.982624],[113.249987,22.978914],[113.249932,22.973286],[113.251892,22.970344],[113.257235,22.965739],[113.264097,22.962114],[113.267588,22.958802],[113.267049,22.95495],[113.272919,22.95748],[113.276411,22.954267],[113.281632,22.952704],[113.2878,22.949064],[113.291545,22.944913],[113.29638,22.93789],[113.298198,22.934037],[113.290179,22.930838],[113.288659,22.928549],[113.285002,22.929416],[113.282392,22.927383],[113.283615,22.923786],[113.285068,22.913733],[113.284308,22.91079],[113.284562,22.90678],[113.285961,22.901433],[113.278636,22.901091],[113.277413,22.90011],[113.277028,22.894706],[113.278834,22.891563],[113.282216,22.890084],[113.300423,22.877056],[113.305434,22.877241],[113.310677,22.878635],[113.323102,22.882617],[113.331297,22.884935],[113.339194,22.886187],[113.349537,22.890582],[113.361917,22.894208],[113.370509,22.89856],[113.380741,22.901049],[113.384541,22.901319],[113.401074,22.901177],[113.407793,22.903125],[113.415691,22.907604],[113.418224,22.908401],[113.431221,22.906538],[113.447435,22.906452],[113.46508,22.905002],[113.473495,22.901788],[113.485578,22.895844],[113.496031,22.892445],[113.502607,22.889785],[113.509524,22.885547],[113.510306,22.886656],[113.520726,22.882773],[113.530771,22.876288],[113.548516,22.868536],[113.561061,22.861921],[113.571007,22.856956],[113.571096,22.865876],[113.572616,22.874752],[113.574279,22.881124],[113.575105,22.888334],[113.574279,22.891933],[113.570545,22.898603],[113.564311,22.906922],[113.550498,22.936212],[113.546357,22.946207],[113.541797,22.959385],[113.537347,22.965085],[113.533646,22.971509],[113.529229,22.98261],[113.526189,22.995656],[113.523017,23.01133],[113.521541,23.028337],[113.521695,23.030213],[113.51491,23.039106],[113.506429,23.051906],[113.502959,23.054988],[113.49645,23.059619],[113.478617,23.069221],[113.468274,23.073794],[113.459044,23.075953],[113.451444,23.076208],[113.444251,23.074731],[113.437665,23.07172],[113.4222,23.063624],[113.411725,23.063525],[113.407022,23.062872],[113.40255,23.064803],[113.400127,23.067843],[113.402352,23.0728],[113.402473,23.074788],[113.399863,23.080214],[113.390126,23.074291],[113.383682,23.068922],[113.380169,23.063156],[113.3715,23.057105],[113.368757,23.054789],[113.368691,23.052815],[113.36466,23.047218],[113.360518,23.045329],[113.352423,23.043638],[113.3487,23.044221],[113.327816,23.051494],[113.323047,23.051508],[113.314709,23.050727],[113.308265,23.050727],[113.294133,23.052417],[113.28563,23.054534],[113.280046,23.055116],[113.276885,23.054448],[113.273393,23.053596],[113.265077,23.05057],[113.257807,23.046778],[113.256122,23.043908]]]]}},{"type":"Feature","properties":{"adcode":440114,"name":"花都区","center":[113.211184,23.39205],"centroid":[113.214795,23.442737],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":7,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.472989,23.428662],[113.475974,23.432543],[113.475158,23.435121],[113.467162,23.44379],[113.462029,23.446495],[113.456973,23.447543],[113.454792,23.450064],[113.456984,23.454157],[113.463417,23.459822],[113.466534,23.463348],[113.467426,23.466832],[113.463725,23.468531],[113.460619,23.471632],[113.460057,23.478316],[113.45889,23.480808],[113.452612,23.483569],[113.449968,23.48119],[113.440518,23.481728],[113.436563,23.484064],[113.434911,23.493678],[113.437665,23.497911],[113.444747,23.506066],[113.446333,23.507113],[113.445133,23.5117],[113.440892,23.513498],[113.439394,23.515267],[113.439857,23.519075],[113.43816,23.520958],[113.440374,23.522331],[113.443657,23.519839],[113.446939,23.523633],[113.445992,23.525204],[113.443172,23.523831],[113.440253,23.524539],[113.441608,23.528431],[113.439978,23.529592],[113.435528,23.528799],[113.431221,23.53398],[113.431045,23.536655],[113.428622,23.541807],[113.425328,23.542401],[113.416924,23.546647],[113.411031,23.544651],[113.408641,23.542557],[113.399841,23.542175],[113.394642,23.544694],[113.387603,23.542514],[113.386799,23.539401],[113.385147,23.538367],[113.381094,23.54141],[113.37497,23.542896],[113.37237,23.542528],[113.366896,23.544439],[113.363647,23.542811],[113.362765,23.540632],[113.35532,23.538934],[113.353249,23.540632],[113.351101,23.550199],[113.349911,23.557827],[113.342884,23.561662],[113.335031,23.567407],[113.331539,23.568482],[113.324754,23.5681],[113.320557,23.572472],[113.324512,23.57676],[113.34034,23.578514],[113.342961,23.581627],[113.333323,23.588941],[113.331671,23.58972],[113.324181,23.589352],[113.321483,23.59013],[113.314852,23.596623],[113.311944,23.597784],[113.304641,23.597812],[113.298815,23.59934],[113.296744,23.602211],[113.28986,23.601999],[113.285212,23.60521],[113.281544,23.609497],[113.280079,23.608931],[113.278239,23.614094],[113.276565,23.616003],[113.274461,23.614292],[113.270287,23.61316],[113.266927,23.609369],[113.261905,23.607672],[113.25773,23.607686],[113.253545,23.605606],[113.248478,23.601589],[113.24296,23.606993],[113.240382,23.606243],[113.244535,23.598208],[113.243863,23.59651],[113.245901,23.591997],[113.245834,23.588234],[113.24318,23.586649],[113.240625,23.590201],[113.23743,23.590512],[113.233113,23.593256],[113.227892,23.594417],[113.227275,23.592818],[113.226988,23.58573],[113.221558,23.584032],[113.214487,23.584258],[113.212207,23.583325],[113.202239,23.576519],[113.203373,23.572515],[113.201523,23.56636],[113.200774,23.561831],[113.208087,23.555704],[113.210158,23.553015],[113.206281,23.548048],[113.211931,23.543915],[113.21268,23.540278],[113.210654,23.537164],[113.206138,23.538849],[113.20529,23.537094],[113.19987,23.531913],[113.197227,23.530583],[113.195817,23.526351],[113.191125,23.523208],[113.194209,23.519174],[113.194396,23.516881],[113.19205,23.514772],[113.175947,23.513215],[113.172103,23.512365],[113.172323,23.520292],[113.170087,23.516683],[113.1711,23.511558],[113.169437,23.513073],[113.165252,23.50884],[113.162487,23.510157],[113.159083,23.509024],[113.158401,23.505075],[113.153543,23.502838],[113.145734,23.506349],[113.147287,23.508203],[113.138101,23.50918],[113.128672,23.51262],[113.123517,23.508486],[113.119277,23.506731],[113.115333,23.510327],[113.115025,23.508076],[113.117757,23.504692],[113.115444,23.501507],[113.109033,23.497968],[113.107403,23.498987],[113.102942,23.497557],[113.101334,23.495363],[113.09304,23.49692],[113.089086,23.493027],[113.083964,23.494244],[113.077675,23.488779],[113.075516,23.484234],[113.069171,23.48439],[113.064413,23.482804],[113.061064,23.47908],[113.060304,23.475951],[113.055844,23.471958],[113.048838,23.469975],[113.042945,23.474124],[113.038683,23.474464],[113.037647,23.47159],[113.028571,23.470273],[113.026357,23.47285],[113.018052,23.469055],[113.019815,23.467639],[113.018879,23.465755],[113.014131,23.465061],[113.016764,23.461818],[113.015938,23.460586],[113.011785,23.464835],[113.004692,23.462045],[113.001343,23.461932],[112.998017,23.463135],[112.99338,23.466832],[112.987509,23.463815],[112.984469,23.464764],[112.978774,23.464792],[112.975118,23.46349],[112.975745,23.459085],[112.974666,23.454313],[112.97167,23.448166],[112.968289,23.445843],[112.965601,23.446608],[112.9619,23.444455],[112.96038,23.437869],[112.958552,23.432614],[112.958508,23.429696],[112.960204,23.426013],[112.963387,23.426424],[112.967936,23.432373],[112.970183,23.433818],[112.97417,23.434073],[112.976109,23.436099],[112.978631,23.44158],[112.98513,23.443336],[112.986419,23.444356],[112.989117,23.443294],[112.988688,23.440036],[112.982795,23.434456],[112.982685,23.431439],[112.985581,23.42896],[112.988666,23.419795],[112.99089,23.417344],[112.992697,23.417401],[112.995473,23.41104],[112.998457,23.409836],[112.998149,23.408348],[113.00109,23.406322],[113.00022,23.40526],[112.995902,23.40543],[112.993732,23.402228],[112.990571,23.402639],[112.989701,23.40057],[112.986826,23.399182],[112.986077,23.395824],[112.988236,23.393287],[112.988346,23.390114],[112.985174,23.389717],[112.983301,23.386784],[112.986198,23.385537],[112.985835,23.383567],[112.982156,23.382575],[112.980658,23.38028],[112.984777,23.377233],[112.980438,23.373804],[112.981517,23.371451],[112.983147,23.371437],[112.985747,23.369042],[112.986771,23.365599],[112.986529,23.357591],[112.989844,23.354728],[112.996926,23.355494],[113.000253,23.355111],[113.005859,23.352432],[113.010232,23.354147],[113.012578,23.352588],[113.012843,23.348733],[113.015299,23.34227],[113.018306,23.341363],[113.019462,23.344127],[113.023637,23.346437],[113.02638,23.349187],[113.027481,23.351653],[113.032702,23.356245],[113.034795,23.357393],[113.040809,23.356061],[113.043397,23.351114],[113.034189,23.339591],[113.029364,23.33582],[113.027569,23.333496],[113.025047,23.327273],[113.023472,23.324905],[113.024893,23.323275],[113.030069,23.32],[113.031215,23.321744],[113.037548,23.320071],[113.038606,23.316243],[113.036072,23.315379],[113.035059,23.313068],[113.032493,23.300889],[113.032636,23.29767],[113.035015,23.297684],[113.038033,23.292821],[113.038672,23.290637],[113.036458,23.289985],[113.042549,23.283448],[113.045809,23.281505],[113.048266,23.281576],[113.051427,23.278399],[113.051911,23.276428],[113.051394,23.269451],[113.053068,23.268231],[113.052715,23.263423],[113.05092,23.263296],[113.050744,23.259495],[113.044895,23.252219],[113.046988,23.250148],[113.053508,23.253438],[113.057584,23.251098],[113.063179,23.252048],[113.07024,23.248786],[113.079778,23.250105],[113.081651,23.25297],[113.081904,23.261736],[113.079029,23.267479],[113.076981,23.270146],[113.075339,23.276258],[113.071429,23.281987],[113.072266,23.28427],[113.081486,23.284951],[113.082609,23.286255],[113.086178,23.285291],[113.089009,23.286582],[113.090551,23.289956],[113.093051,23.291105],[113.097842,23.291275],[113.105552,23.289744],[113.110245,23.295983],[113.108416,23.301527],[113.105751,23.302732],[113.113219,23.309863],[113.114188,23.306673],[113.124696,23.307638],[113.127989,23.314542],[113.134741,23.307992],[113.140975,23.303781],[113.146207,23.30303],[113.150018,23.299131],[113.155504,23.300364],[113.156892,23.302661],[113.155438,23.305553],[113.155294,23.311664],[113.157685,23.320794],[113.157189,23.324395],[113.153069,23.333014],[113.153631,23.336855],[113.157343,23.342766],[113.161782,23.348152],[113.163522,23.352673],[113.166551,23.357606],[113.171001,23.360072],[113.17392,23.360398],[113.179174,23.358541],[113.181818,23.355253],[113.18792,23.356968],[113.193625,23.359576],[113.195531,23.358328],[113.204695,23.359023],[113.20573,23.359987],[113.212405,23.356897],[113.215247,23.351667],[113.213859,23.346125],[113.213705,23.337422],[113.217428,23.335112],[113.220864,23.331185],[113.230943,23.332234],[113.237078,23.331681],[113.238278,23.334474],[113.238818,23.33969],[113.247641,23.341349],[113.250582,23.343205],[113.260242,23.343801],[113.26164,23.344963],[113.26033,23.349754],[113.257488,23.352262],[113.25729,23.357294],[113.260462,23.363062],[113.262301,23.363119],[113.260858,23.358513],[113.261277,23.356217],[113.267148,23.356897],[113.272225,23.360199],[113.273525,23.365698],[113.276686,23.367058],[113.278305,23.369028],[113.283559,23.368957],[113.287558,23.372784],[113.286699,23.376766],[113.290444,23.378083],[113.293164,23.380365],[113.296513,23.385707],[113.298385,23.385494],[113.301469,23.381881],[113.306194,23.384956],[113.308353,23.384205],[113.311581,23.393897],[113.317617,23.394378],[113.31896,23.391049],[113.323322,23.391176],[113.328499,23.389816],[113.335747,23.386755],[113.337817,23.387705],[113.338897,23.394364],[113.342455,23.398927],[113.345153,23.400457],[113.351586,23.400627],[113.356355,23.403078],[113.358238,23.40594],[113.359571,23.41053],[113.361675,23.412711],[113.367667,23.412315],[113.374749,23.412726],[113.378109,23.414553],[113.382515,23.420871],[113.386447,23.417882],[113.387372,23.414411],[113.395336,23.413221],[113.396624,23.410487],[113.395798,23.400287],[113.397087,23.392763],[113.400964,23.391148],[113.403685,23.393089],[113.412232,23.397708],[113.418092,23.403021],[113.419656,23.403106],[113.426066,23.399635],[113.428974,23.400102],[113.430406,23.402228],[113.434504,23.405812],[113.439526,23.40465],[113.444461,23.40917],[113.445606,23.412173],[113.44456,23.416423],[113.445011,23.418307],[113.456896,23.419313],[113.46085,23.42073],[113.465223,23.42488],[113.472989,23.428662]]]]}},{"type":"Feature","properties":{"adcode":440115,"name":"南沙区","center":[113.53738,22.794531],"centroid":[113.544315,22.736609],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":8,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.300423,22.877056],[113.301304,22.874951],[113.29811,22.873102],[113.301337,22.866117],[113.296325,22.862504],[113.297416,22.860214],[113.29681,22.857824],[113.29985,22.859048],[113.301018,22.855591],[113.303804,22.852077],[113.305622,22.851038],[113.309653,22.851195],[113.310788,22.83445],[113.312098,22.830395],[113.314411,22.828189],[113.318178,22.826254],[113.329369,22.82328],[113.332244,22.821687],[113.335967,22.817944],[113.344977,22.820207],[113.346078,22.818812],[113.350407,22.818072],[113.352555,22.81877],[113.352522,22.821658],[113.364263,22.823494],[113.36803,22.821587],[113.373384,22.822697],[113.375575,22.822227],[113.38398,22.816479],[113.387196,22.812594],[113.39343,22.809847],[113.39191,22.8073],[113.388749,22.804895],[113.383032,22.799302],[113.376071,22.795986],[113.374683,22.794563],[113.371852,22.796883],[113.36336,22.793538],[113.360265,22.792955],[113.357875,22.793923],[113.356542,22.792969],[113.35771,22.787034],[113.361499,22.777014],[113.365156,22.772601],[113.381457,22.761569],[113.391073,22.755704],[113.404279,22.747247],[113.412188,22.742819],[113.417883,22.740413],[113.426143,22.738007],[113.441123,22.737224],[113.447776,22.735857],[113.467977,22.728524],[113.464816,22.720963],[113.471314,22.714997],[113.491912,22.699787],[113.52338,22.679305],[113.540717,22.6662],[113.539506,22.657938],[113.533084,22.656371],[113.532974,22.654989],[113.536884,22.647523],[113.544749,22.635184],[113.561634,22.607511],[113.565137,22.603477],[113.567395,22.605929],[113.571922,22.602808],[113.574719,22.605715],[113.578552,22.604618],[113.580976,22.602095],[113.589986,22.595197],[113.594667,22.594399],[113.599623,22.594399],[113.615011,22.585291],[113.620782,22.579532],[113.63932,22.548283],[113.651612,22.515714],[113.66201,22.514787],[113.682343,22.51436],[113.70598,22.516285],[113.728186,22.521989],[113.737625,22.527665],[113.740467,22.534267],[113.716852,22.645201],[113.685284,22.717731],[113.648132,22.76174],[113.626014,22.786749],[113.612081,22.802291],[113.59763,22.817418],[113.584027,22.831305],[113.577594,22.841194],[113.571228,22.85313],[113.571007,22.856956],[113.561061,22.861921],[113.548516,22.868536],[113.530771,22.876288],[113.520726,22.882773],[113.510306,22.886656],[113.509524,22.885547],[113.502607,22.889785],[113.496031,22.892445],[113.485578,22.895844],[113.473495,22.901788],[113.46508,22.905002],[113.447435,22.906452],[113.431221,22.906538],[113.418224,22.908401],[113.415691,22.907604],[113.407793,22.903125],[113.401074,22.901177],[113.384541,22.901319],[113.380741,22.901049],[113.370509,22.89856],[113.361917,22.894208],[113.349537,22.890582],[113.339194,22.886187],[113.331297,22.884935],[113.323102,22.882617],[113.310677,22.878635],[113.305434,22.877241],[113.300423,22.877056]]]]}},{"type":"Feature","properties":{"adcode":440117,"name":"从化区","center":[113.587386,23.545283],"centroid":[113.680484,23.677286],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":9,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.83256,23.619879],[113.833651,23.622708],[113.832219,23.624235],[113.825147,23.624702],[113.817437,23.623458],[113.815631,23.627842],[113.813769,23.629016],[113.817834,23.636752],[113.823462,23.638011],[113.825566,23.639878],[113.826877,23.644036],[113.828364,23.645916],[113.827769,23.648024],[113.822361,23.648844],[113.81866,23.654019],[113.818781,23.656169],[113.825951,23.656041],[113.834102,23.654811],[113.839951,23.655448],[113.842022,23.660538],[113.843916,23.669474],[113.85275,23.667763],[113.852816,23.670323],[113.844533,23.674847],[113.847837,23.679329],[113.862575,23.681082],[113.867994,23.683245],[113.875782,23.683485],[113.881851,23.685125],[113.887314,23.688094],[113.891312,23.691289],[113.894209,23.696449],[113.897579,23.700167],[113.899276,23.707446],[113.89878,23.711871],[113.900939,23.715433],[113.909993,23.715758],[113.91235,23.716507],[113.915897,23.721637],[113.920049,23.729453],[113.924191,23.729297],[113.932815,23.732689],[113.936417,23.732166],[113.937893,23.733184],[113.937606,23.735431],[113.940294,23.738144],[113.949062,23.737112],[113.952641,23.73365],[113.95588,23.732689],[113.961035,23.738201],[113.966046,23.739727],[113.970441,23.73837],[113.972864,23.739246],[113.9764,23.747259],[113.975673,23.756768],[113.979032,23.759425],[113.982987,23.760555],[113.992338,23.760908],[113.998793,23.763013],[114.000874,23.764554],[114.009356,23.773257],[114.010479,23.776195],[114.013123,23.777961],[114.017716,23.778286],[114.015733,23.772183],[114.011503,23.769823],[114.00995,23.763013],[114.014521,23.762378],[114.018211,23.762844],[114.018927,23.758139],[114.021185,23.75609],[114.023124,23.752247],[114.024897,23.752572],[114.02742,23.760117],[114.035725,23.765288],[114.035956,23.768538],[114.038456,23.771222],[114.044074,23.774288],[114.047609,23.775249],[114.058007,23.776605],[114.059957,23.77587],[114.056344,23.784036],[114.053855,23.786141],[114.046332,23.787596],[114.037201,23.793528],[114.037201,23.798317],[114.04306,23.79997],[114.047752,23.803331],[114.042939,23.80699],[114.037608,23.808035],[114.03535,23.813345],[114.038225,23.821579],[114.040318,23.824446],[114.045428,23.826833],[114.048028,23.828824],[114.052268,23.830024],[114.051916,23.832665],[114.052698,23.839923],[114.054394,23.840615],[114.055231,23.845599],[114.057765,23.846757],[114.054912,23.850372],[114.05109,23.85352],[114.051112,23.855808],[114.048821,23.85866],[114.048887,23.861738],[114.047444,23.865818],[114.047708,23.867512],[114.045032,23.870773],[114.041849,23.871507],[114.041001,23.875375],[114.043743,23.880231],[114.043633,23.884833],[114.042653,23.889872],[114.038269,23.892032],[114.036385,23.895264],[114.036209,23.901771],[114.03318,23.903732],[114.031341,23.906315],[114.031297,23.910225],[114.033665,23.914811],[114.033819,23.918876],[114.032938,23.920386],[114.03003,23.921133],[114.02818,23.922968],[114.026252,23.922897],[114.022199,23.92469],[114.017969,23.92524],[114.012572,23.929826],[114.009994,23.929741],[114.009212,23.932916],[114.005688,23.932535],[114.002295,23.929516],[113.997328,23.929135],[113.994045,23.930263],[113.984518,23.926171],[113.982116,23.929699],[113.969538,23.928542],[113.971146,23.930757],[113.96945,23.932563],[113.963414,23.928189],[113.959404,23.930221],[113.952696,23.929657],[113.946826,23.925282],[113.942519,23.925212],[113.941164,23.923561],[113.935932,23.926016],[113.936417,23.928725],[113.933531,23.929233],[113.929092,23.92785],[113.92635,23.928838],[113.921206,23.927639],[113.914564,23.924238],[113.910235,23.923561],[113.90779,23.924563],[113.904309,23.92905],[113.900697,23.929445],[113.898879,23.928443],[113.894848,23.928584],[113.892524,23.931675],[113.889208,23.928429],[113.888955,23.926058],[113.885827,23.923659],[113.880826,23.926058],[113.879824,23.930376],[113.875319,23.930475],[113.873612,23.929022],[113.865208,23.928951],[113.862377,23.927766],[113.857718,23.923829],[113.853279,23.921218],[113.848653,23.919765],[113.841526,23.91872],[113.833287,23.91522],[113.826513,23.909801],[113.817239,23.906132],[113.81356,23.902702],[113.809452,23.900613],[113.807326,23.900387],[113.803768,23.903408],[113.800243,23.902547],[113.795033,23.902801],[113.791597,23.903902],[113.78761,23.902462],[113.786629,23.899075],[113.781133,23.896294],[113.780869,23.89237],[113.777983,23.883647],[113.775317,23.87793],[113.771727,23.873977],[113.767056,23.871436],[113.764732,23.866961],[113.762078,23.863686],[113.758168,23.857488],[113.755524,23.857629],[113.749059,23.854353],[113.745545,23.858307],[113.742307,23.859154],[113.736821,23.855271],[113.733671,23.855017],[113.731303,23.857742],[113.727822,23.858166],[113.728175,23.855243],[113.724265,23.853873],[113.725509,23.857798],[113.722844,23.86041],[113.720354,23.86082],[113.718845,23.858886],[113.713525,23.8625],[113.710045,23.858688],[113.709758,23.856288],[113.713536,23.854241],[113.718063,23.843905],[113.717215,23.838709],[113.714803,23.834995],[113.716863,23.827299],[113.7202,23.825124],[113.718548,23.82076],[113.715761,23.820901],[113.706388,23.815266],[113.702445,23.81617],[113.700616,23.819531],[113.697907,23.820703],[113.693545,23.821085],[113.689679,23.825618],[113.687366,23.825731],[113.683984,23.817498],[113.684293,23.812964],[113.681396,23.812018],[113.679292,23.813769],[113.670216,23.814546],[113.666394,23.813684],[113.662429,23.817695],[113.659212,23.817512],[113.658166,23.818896],[113.653672,23.816763],[113.653628,23.818966],[113.651667,23.820139],[113.647328,23.818585],[113.640234,23.814263],[113.637789,23.811396],[113.637271,23.806255],[113.63433,23.8048],[113.632755,23.800605],[113.633714,23.797215],[113.620298,23.786819],[113.616751,23.78792],[113.615374,23.785378],[113.618469,23.785858],[113.620827,23.783923],[113.618965,23.781606],[113.615154,23.779812],[113.616145,23.776421],[113.61967,23.771279],[113.626114,23.767393],[113.62977,23.759382],[113.631599,23.752996],[113.63639,23.75024],[113.633967,23.744305],[113.630729,23.738964],[113.634242,23.733438],[113.636522,23.731968],[113.631654,23.727884],[113.63205,23.71833],[113.628052,23.716408],[113.628118,23.711701],[113.630288,23.708945],[113.63357,23.70821],[113.638197,23.704577],[113.636324,23.701792],[113.631202,23.702768],[113.6251,23.701397],[113.622589,23.699432],[113.623811,23.69471],[113.620882,23.691954],[113.61457,23.689409],[113.61413,23.687585],[113.611629,23.686186],[113.612477,23.683443],[113.615727,23.680205],[113.606375,23.673264],[113.599381,23.665487],[113.598985,23.662984],[113.597277,23.664936],[113.587243,23.669008],[113.587287,23.675229],[113.580689,23.67571],[113.573915,23.680714],[113.568045,23.679442],[113.567053,23.68333],[113.56962,23.686087],[113.568067,23.690215],[113.563518,23.691346],[113.564421,23.695502],[113.558759,23.70069],[113.54693,23.702527],[113.542909,23.701806],[113.53836,23.699107],[113.543317,23.699177],[113.545465,23.696392],[113.532677,23.689508],[113.527081,23.686143],[113.524184,23.685408],[113.521255,23.686313],[113.517917,23.685493],[113.516441,23.683104],[113.513699,23.682086],[113.510306,23.682453],[113.506958,23.68439],[113.501693,23.682793],[113.495646,23.682298],[113.491934,23.685323],[113.488541,23.684829],[113.483596,23.686695],[113.481029,23.684037],[113.477141,23.685281],[113.468704,23.690992],[113.469673,23.693],[113.469618,23.69652],[113.465796,23.700294],[113.464309,23.703107],[113.466148,23.705326],[113.464298,23.707969],[113.456962,23.710245],[113.45477,23.709962],[113.44782,23.714839],[113.443855,23.715913],[113.444296,23.720266],[113.442467,23.720224],[113.440319,23.722457],[113.44445,23.723559],[113.444538,23.725029],[113.441905,23.727036],[113.438447,23.727107],[113.430351,23.723107],[113.426044,23.726584],[113.423775,23.726782],[113.419006,23.724535],[113.404313,23.723503],[113.400997,23.724478],[113.397836,23.730569],[113.391403,23.72917],[113.384035,23.729721],[113.378351,23.73153],[113.377007,23.729735],[113.376831,23.726358],[113.37508,23.723107],[113.373284,23.722853],[113.375752,23.716309],[113.375388,23.712818],[113.372381,23.709736],[113.369363,23.709086],[113.366323,23.710288],[113.363713,23.707164],[113.362016,23.702414],[113.360717,23.696322],[113.355661,23.687006],[113.355,23.681096],[113.350594,23.675398],[113.350352,23.671779],[113.349074,23.667976],[113.347411,23.667212],[113.339921,23.666675],[113.338445,23.665727],[113.336518,23.65812],[113.334843,23.656409],[113.327959,23.655476],[113.327541,23.654132],[113.328752,23.649381],[113.328301,23.645379],[113.323708,23.643286],[113.317672,23.64388],[113.315359,23.643131],[113.308904,23.643908],[113.302857,23.64603],[113.289265,23.644361],[113.288835,23.641504],[113.299454,23.637459],[113.296513,23.632905],[113.295235,23.629469],[113.293737,23.621845],[113.290565,23.617093],[113.282821,23.61217],[113.281544,23.609497],[113.285212,23.60521],[113.28986,23.601999],[113.296744,23.602211],[113.298815,23.59934],[113.304641,23.597812],[113.311944,23.597784],[113.314852,23.596623],[113.321483,23.59013],[113.324181,23.589352],[113.331671,23.58972],[113.333323,23.588941],[113.342961,23.581627],[113.34034,23.578514],[113.324512,23.57676],[113.320557,23.572472],[113.324754,23.5681],[113.331539,23.568482],[113.335031,23.567407],[113.342884,23.561662],[113.349911,23.557827],[113.351101,23.550199],[113.353249,23.540632],[113.35532,23.538934],[113.362765,23.540632],[113.363647,23.542811],[113.366896,23.544439],[113.37237,23.542528],[113.37497,23.542896],[113.381094,23.54141],[113.385147,23.538367],[113.386799,23.539401],[113.387603,23.542514],[113.394642,23.544694],[113.399841,23.542175],[113.408641,23.542557],[113.411031,23.544651],[113.416924,23.546647],[113.425328,23.542401],[113.428622,23.541807],[113.431045,23.536655],[113.431221,23.53398],[113.435528,23.528799],[113.439978,23.529592],[113.441608,23.528431],[113.440253,23.524539],[113.443172,23.523831],[113.445992,23.525204],[113.446939,23.523633],[113.443657,23.519839],[113.440374,23.522331],[113.43816,23.520958],[113.439857,23.519075],[113.439394,23.515267],[113.440892,23.513498],[113.445133,23.5117],[113.446333,23.507113],[113.444747,23.506066],[113.437665,23.497911],[113.434911,23.493678],[113.436563,23.484064],[113.440518,23.481728],[113.449968,23.48119],[113.452612,23.483569],[113.45889,23.480808],[113.460057,23.478316],[113.460619,23.471632],[113.463725,23.468531],[113.467426,23.466832],[113.466534,23.463348],[113.463417,23.459822],[113.456984,23.454157],[113.454792,23.450064],[113.456973,23.447543],[113.462029,23.446495],[113.467162,23.44379],[113.475158,23.435121],[113.475974,23.432543],[113.472989,23.428662],[113.474696,23.426523],[113.477703,23.426254],[113.49146,23.420092],[113.496538,23.414454],[113.498179,23.411776],[113.502948,23.410105],[113.513522,23.408022],[113.515064,23.404835],[113.514348,23.400584],[113.514337,23.395299],[113.518479,23.39469],[113.523182,23.390071],[113.532005,23.385792],[113.535706,23.384998],[113.538922,23.386968],[113.539318,23.383496],[113.542975,23.380804],[113.545354,23.377474],[113.552922,23.370927],[113.554353,23.367866],[113.557878,23.367781],[113.56387,23.371026],[113.565555,23.374824],[113.56615,23.37899],[113.565831,23.382859],[113.568144,23.390369],[113.57125,23.390709],[113.576239,23.388867],[113.577253,23.390156],[113.575028,23.39588],[113.575039,23.397991],[113.576933,23.402539],[113.580061,23.40652],[113.585679,23.411606],[113.586362,23.417514],[113.587408,23.41903],[113.593643,23.422401],[113.597398,23.425617],[113.60284,23.43396],[113.605021,23.434923],[113.608997,23.434031],[113.61696,23.440759],[113.617071,23.442543],[113.621851,23.444767],[113.623085,23.446821],[113.623162,23.450121],[113.624516,23.451154],[113.629649,23.451636],[113.634132,23.454228],[113.638064,23.459043],[113.643913,23.46339],[113.650544,23.463348],[113.654564,23.462073],[113.659433,23.463334],[113.662363,23.463178],[113.66657,23.468956],[113.672,23.472552],[113.673058,23.474068],[113.673741,23.480723],[113.67504,23.485919],[113.680867,23.486146],[113.684777,23.490761],[113.683863,23.493211],[113.687377,23.496057],[113.689459,23.496042],[113.694085,23.50172],[113.697389,23.501507],[113.702313,23.503857],[113.70554,23.506674],[113.706388,23.509732],[113.712688,23.513965],[113.718603,23.51664],[113.719352,23.5179],[113.714462,23.524128],[113.714671,23.52536],[113.719738,23.532748],[113.725256,23.542797],[113.72671,23.543547],[113.731061,23.542557],[113.734817,23.543293],[113.734894,23.550524],[113.733264,23.553765],[113.733297,23.55777],[113.73203,23.559864],[113.731248,23.565553],[113.73149,23.569883],[113.734079,23.571454],[113.739498,23.572939],[113.74202,23.576335],[113.74289,23.580707],[113.745281,23.585221],[113.746371,23.589295],[113.749367,23.59279],[113.750402,23.602325],[113.756262,23.606073],[113.76525,23.609044],[113.77361,23.613896],[113.779657,23.614009],[113.78794,23.612679],[113.791167,23.611548],[113.797567,23.614179],[113.802843,23.610204],[113.815609,23.612594],[113.818803,23.612255],[113.820257,23.614462],[113.822922,23.615721],[113.828353,23.616895],[113.83256,23.619879]]]]}},{"type":"Feature","properties":{"adcode":440118,"name":"增城区","center":[113.829579,23.290497],"centroid":[113.764273,23.341055],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":10,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.570336,23.084204],[113.586417,23.087797],[113.59611,23.092072],[113.601408,23.095395],[113.605395,23.100393],[113.610396,23.103787],[113.628592,23.103404],[113.640278,23.103886],[113.644398,23.10897],[113.642845,23.110872],[113.642702,23.113485],[113.646325,23.11526],[113.64844,23.117744],[113.651249,23.119292],[113.655258,23.117191],[113.657098,23.118596],[113.661228,23.117972],[113.660644,23.112093],[113.66201,23.111455],[113.670701,23.116424],[113.681891,23.117759],[113.687806,23.119789],[113.692267,23.1227],[113.701332,23.130281],[113.705342,23.13207],[113.716929,23.138912],[113.724375,23.141226],[113.7291,23.142049],[113.738595,23.141311],[113.754048,23.129571],[113.757286,23.129401],[113.77513,23.131047],[113.781023,23.13065],[113.785462,23.128421],[113.791266,23.127683],[113.80455,23.12906],[113.814673,23.127768],[113.826106,23.123125],[113.832814,23.119888],[113.837704,23.118483],[113.841075,23.116154],[113.841559,23.122245],[113.843531,23.123012],[113.843255,23.125709],[113.844687,23.12561],[113.844258,23.129812],[113.845778,23.131999],[113.8458,23.135392],[113.849082,23.14151],[113.848069,23.144392],[113.849853,23.148863],[113.856131,23.1521],[113.856726,23.155251],[113.85872,23.157252],[113.867697,23.159083],[113.869834,23.160176],[113.870924,23.16293],[113.874779,23.165357],[113.886356,23.164817],[113.890233,23.162944],[113.895674,23.164548],[113.899121,23.168621],[113.90149,23.173333],[113.90215,23.177179],[113.898494,23.178995],[113.893185,23.177264],[113.888977,23.178626],[113.885397,23.185779],[113.88564,23.188631],[113.883811,23.192647],[113.885276,23.194903],[113.886356,23.199657],[113.888294,23.20258],[113.891819,23.204226],[113.894,23.212654],[113.898174,23.21149],[113.902448,23.211576],[113.90377,23.21254],[113.904442,23.217463],[113.903814,23.219733],[113.900807,23.221195],[113.89867,23.224415],[113.8952,23.231352],[113.893185,23.237665],[113.890112,23.242133],[113.89064,23.246701],[113.894121,23.249949],[113.895167,23.253552],[113.893107,23.256076],[113.888349,23.257821],[113.884439,23.261097],[113.877202,23.264218],[113.876597,23.266132],[113.878084,23.268203],[113.88478,23.274017],[113.890288,23.282682],[113.891158,23.286667],[113.888503,23.290481],[113.891279,23.297287],[113.891984,23.303923],[113.894749,23.309197],[113.895024,23.314698],[113.898207,23.320553],[113.893636,23.321744],[113.892447,23.326309],[113.889572,23.329186],[113.889208,23.333567],[113.892381,23.338471],[113.893669,23.342242],[113.895993,23.345076],[113.901424,23.346919],[113.90497,23.346876],[113.910753,23.343602],[113.927473,23.339945],[113.935536,23.342723],[113.93927,23.34295],[113.94188,23.339889],[113.946583,23.336784],[113.95241,23.335679],[113.958876,23.332617],[113.960098,23.330136],[113.961277,23.324579],[113.958468,23.314953],[113.962202,23.312444],[113.968679,23.309991],[113.975563,23.306376],[113.977435,23.304844],[113.978228,23.301059],[113.982205,23.301229],[113.985134,23.300463],[113.988868,23.298181],[113.994585,23.298507],[113.9967,23.297457],[113.995742,23.303597],[113.99616,23.309339],[113.992933,23.313039],[113.992107,23.316116],[113.98856,23.319858],[113.988924,23.325047],[113.988373,23.327443],[113.984209,23.330491],[113.983614,23.332588],[113.986754,23.331823],[113.989948,23.333425],[113.993913,23.333155],[113.997195,23.338684],[114.001315,23.343191],[114.00094,23.346621],[113.992437,23.352163],[113.990576,23.354828],[113.990212,23.359576],[113.989199,23.362807],[113.98693,23.365854],[113.985917,23.369283],[113.981995,23.374994],[113.98118,23.377658],[113.98205,23.379359],[113.987756,23.383171],[113.992834,23.38582],[113.995984,23.38677],[113.999123,23.390397],[114.000434,23.393401],[113.999861,23.396645],[113.997394,23.399125],[113.986765,23.405614],[113.984275,23.408476],[113.984319,23.412669],[113.986467,23.416466],[113.98422,23.421225],[113.984452,23.423308],[113.987205,23.425971],[113.987954,23.431424],[113.984507,23.433138],[113.979704,23.430504],[113.975354,23.429399],[113.967974,23.431396],[113.96316,23.431028],[113.960021,23.432756],[113.958788,23.434866],[113.954029,23.440022],[113.952807,23.442897],[113.954558,23.449568],[113.953137,23.454553],[113.953468,23.463914],[113.95545,23.466039],[113.961024,23.464566],[113.969934,23.463914],[113.974494,23.464891],[113.981709,23.472156],[113.97586,23.477905],[113.97412,23.478811],[113.969009,23.47765],[113.964416,23.480156],[113.961068,23.480369],[113.955737,23.477877],[113.950306,23.478585],[113.945889,23.478372],[113.940911,23.476701],[113.938719,23.47673],[113.93298,23.479717],[113.931174,23.483059],[113.932617,23.484206],[113.938036,23.481884],[113.940878,23.483597],[113.946683,23.492517],[113.945328,23.493664],[113.939611,23.494938],[113.929973,23.494216],[113.927759,23.496453],[113.92657,23.500304],[113.923078,23.503079],[113.915875,23.502979],[113.911513,23.504169],[113.910081,23.505514],[113.906391,23.511842],[113.900344,23.514928],[113.89748,23.519075],[113.89313,23.520278],[113.890497,23.523605],[113.889098,23.527625],[113.889979,23.532012],[113.88814,23.53507],[113.883789,23.537009],[113.879229,23.537617],[113.874878,23.53899],[113.870142,23.543038],[113.867752,23.552194],[113.867994,23.555039],[113.864525,23.559638],[113.864348,23.562114],[113.86252,23.566317],[113.857574,23.56902],[113.852816,23.570576],[113.853279,23.574566],[113.856065,23.580622],[113.857971,23.58307],[113.864051,23.587385],[113.860141,23.590257],[113.858323,23.593497],[113.859216,23.59784],[113.861804,23.603895],[113.859623,23.609963],[113.84602,23.616909],[113.843542,23.617885],[113.838134,23.616979],[113.834179,23.617588],[113.83256,23.619879],[113.828353,23.616895],[113.822922,23.615721],[113.820257,23.614462],[113.818803,23.612255],[113.815609,23.612594],[113.802843,23.610204],[113.797567,23.614179],[113.791167,23.611548],[113.78794,23.612679],[113.779657,23.614009],[113.77361,23.613896],[113.76525,23.609044],[113.756262,23.606073],[113.750402,23.602325],[113.749367,23.59279],[113.746371,23.589295],[113.745281,23.585221],[113.74289,23.580707],[113.74202,23.576335],[113.739498,23.572939],[113.734079,23.571454],[113.73149,23.569883],[113.731248,23.565553],[113.73203,23.559864],[113.733297,23.55777],[113.733264,23.553765],[113.734894,23.550524],[113.734817,23.543293],[113.731061,23.542557],[113.72671,23.543547],[113.725256,23.542797],[113.719738,23.532748],[113.714671,23.52536],[113.714462,23.524128],[113.719352,23.5179],[113.718603,23.51664],[113.712688,23.513965],[113.706388,23.509732],[113.70554,23.506674],[113.702313,23.503857],[113.697389,23.501507],[113.694085,23.50172],[113.689459,23.496042],[113.687377,23.496057],[113.683863,23.493211],[113.684777,23.490761],[113.680867,23.486146],[113.67504,23.485919],[113.673741,23.480723],[113.673058,23.474068],[113.672,23.472552],[113.66657,23.468956],[113.662363,23.463178],[113.659433,23.463334],[113.654564,23.462073],[113.650544,23.463348],[113.643913,23.46339],[113.638064,23.459043],[113.634132,23.454228],[113.629649,23.451636],[113.624516,23.451154],[113.623162,23.450121],[113.623085,23.446821],[113.621851,23.444767],[113.617071,23.442543],[113.61696,23.440759],[113.608997,23.434031],[113.605021,23.434923],[113.60284,23.43396],[113.597398,23.425617],[113.593643,23.422401],[113.587408,23.41903],[113.586362,23.417514],[113.585679,23.411606],[113.580061,23.40652],[113.576933,23.402539],[113.575039,23.397991],[113.575028,23.39588],[113.577253,23.390156],[113.576239,23.388867],[113.57125,23.390709],[113.568144,23.390369],[113.565831,23.382859],[113.56615,23.37899],[113.565555,23.374824],[113.56387,23.371026],[113.565225,23.369227],[113.570281,23.367313],[113.573673,23.363558],[113.573827,23.359576],[113.58178,23.355069],[113.587496,23.34991],[113.589093,23.347528],[113.588378,23.345374],[113.591462,23.343602],[113.585106,23.338542],[113.584005,23.336557],[113.587166,23.330689],[113.588884,23.331299],[113.588774,23.326663],[113.590426,23.320043],[113.592618,23.319504],[113.599535,23.3145],[113.607521,23.312515],[113.607675,23.309396],[113.603622,23.306773],[113.598996,23.30527],[113.598401,23.306886],[113.5998,23.309055],[113.598511,23.312855],[113.597189,23.314018],[113.590889,23.315832],[113.594072,23.305369],[113.592122,23.30181],[113.593389,23.299698],[113.592662,23.296522],[113.593643,23.295189],[113.595471,23.297202],[113.597244,23.296975],[113.597057,23.292537],[113.595019,23.291105],[113.589138,23.292608],[113.588091,23.290212],[113.588135,23.286312],[113.596561,23.285958],[113.598941,23.287333],[113.601815,23.287149],[113.60078,23.283873],[113.601804,23.27372],[113.602663,23.268926],[113.599679,23.268302],[113.597123,23.265437],[113.599822,23.260105],[113.601143,23.255665],[113.600615,23.252701],[113.596936,23.253268],[113.596561,23.251013],[113.599183,23.250332],[113.602862,23.250899],[113.600174,23.24758],[113.599998,23.245651],[113.597498,23.244843],[113.602928,23.243282],[113.601672,23.240403],[113.598742,23.238857],[113.594358,23.237949],[113.592783,23.23558],[113.587122,23.229849],[113.582958,23.218925],[113.587012,23.211561],[113.582738,23.208284],[113.584522,23.207674],[113.583289,23.203502],[113.580304,23.204581],[113.581989,23.199558],[113.574708,23.195982],[113.574841,23.194378],[113.579114,23.192562],[113.580061,23.188901],[113.581086,23.178882],[113.580458,23.167386],[113.578189,23.163313],[113.573277,23.166989],[113.572428,23.169345],[113.570082,23.168706],[113.567196,23.171161],[113.558153,23.172566],[113.550862,23.172141],[113.547833,23.166407],[113.548339,23.163951],[113.550917,23.159977],[113.554992,23.147359],[113.550851,23.140389],[113.551435,23.137294],[113.557724,23.131388],[113.557206,23.129017],[113.558473,23.126107],[113.558484,23.120371],[113.556248,23.11702],[113.553241,23.115487],[113.552162,23.11296],[113.550025,23.112377],[113.55019,23.107706],[113.553153,23.10613],[113.552525,23.104426],[113.555929,23.100209],[113.558616,23.098121],[113.564178,23.097411],[113.564795,23.093123],[113.567218,23.092597],[113.569565,23.089572],[113.570336,23.084204]]]]}}]}
--------------------------------------------------------------------------------
/public/data/huadu.geojson:
--------------------------------------------------------------------------------
1 | {
2 | "type": "FeatureCollection",
3 | "features": [
4 | {
5 | "type": "Feature",
6 | "properties": {},
7 | "geometry": { "type": "Point", "coordinates": [113.220125, 23.404326] }
8 | },
9 | {
10 | "type": "Feature",
11 | "properties": {},
12 | "geometry": { "type": "Point", "coordinates": [113.203846, 23.377273] }
13 | },
14 | {
15 | "type": "Feature",
16 | "properties": {},
17 | "geometry": { "type": "Point", "coordinates": [113.254308, 23.416872] }
18 | },
19 | {
20 | "type": "Feature",
21 | "properties": {},
22 | "geometry": { "type": "Point", "coordinates": [113.232409, 23.426934] }
23 | },
24 | {
25 | "type": "Feature",
26 | "properties": {},
27 | "geometry": { "type": "Point", "coordinates": [113.161159, 23.400596] }
28 | },
29 | {
30 | "type": "Feature",
31 | "properties": {},
32 | "geometry": { "type": "Point", "coordinates": [113.166207, 23.385075] }
33 | },
34 | {
35 | "type": "Feature",
36 | "properties": {},
37 | "geometry": { "type": "Point", "coordinates": [113.307605, 23.389929] }
38 | },
39 | {
40 | "type": "Feature",
41 | "properties": {},
42 | "geometry": { "type": "Point", "coordinates": [113.235221, 23.496927] }
43 | },
44 | {
45 | "type": "Feature",
46 | "properties": {},
47 | "geometry": { "type": "Point", "coordinates": [113.155997, 23.483681] }
48 | }
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------
/public/data/huadu_line.geojson:
--------------------------------------------------------------------------------
1 | {
2 | "type": "FeatureCollection",
3 | "features": [
4 | {
5 | "type": "Feature",
6 | "properties": {
7 | "type": 3,
8 | "ratio": 0.0167,
9 | "lineWidthRatio": 0.41279069767441856
10 | },
11 | "geometry": {
12 | "type": "LineString",
13 | "coordinates": [
14 | [113.23233, 23.426682],
15 | [113.23233, 23.426811]
16 | ]
17 | }
18 | },
19 | {
20 | "type": "Feature",
21 | "properties": {
22 | "type": 2,
23 | "ratio": 0.0189,
24 | "lineWidthRatio": 0.47674418604651164
25 | },
26 | "geometry": {
27 | "type": "LineString",
28 | "coordinates": [
29 | [113.219603, 23.404224],
30 | [113.23219, 23.427196]
31 | ]
32 | }
33 | },
34 | {
35 | "type": "Feature",
36 | "properties": {
37 | "type": 1,
38 | "ratio": 0.035,
39 | "lineWidthRatio": 0.9447674418604651
40 | },
41 | "geometry": {
42 | "type": "LineString",
43 | "coordinates": [
44 | [113.219743, 23.40448],
45 | [113.254007, 23.416801]
46 | ]
47 | }
48 | },
49 | {
50 | "type": "Feature",
51 | "properties": {
52 | "type": 0,
53 | "ratio": 0.0369,
54 | "lineWidthRatio": 1
55 | },
56 | "geometry": {
57 | "type": "LineString",
58 | "coordinates": [
59 | [113.219464, 23.404749],
60 | [113.307269, 23.38978]
61 | ]
62 | }
63 | },
64 | {
65 | "type": "Feature",
66 | "properties": {
67 | "type": 4,
68 | "ratio": 0.0148,
69 | "lineWidthRatio": 0.35755813953488375
70 | },
71 | "geometry": {
72 | "type": "LineString",
73 | "coordinates": [
74 | [113.219911, 23.404134],
75 | [113.203825, 23.37686]
76 | ]
77 | }
78 | },
79 | {
80 | "type": "Feature",
81 | "properties": {
82 | "type": 5,
83 | "ratio": 0.0147,
84 | "lineWidthRatio": 0.35465116279069764
85 | },
86 | "geometry": {
87 | "type": "LineString",
88 | "coordinates": [
89 | [113.220805, 23.404954],
90 | [113.161598, 23.400853]
91 | ]
92 | }
93 | },
94 | {
95 | "type": "Feature",
96 | "properties": {
97 | "type": 6,
98 | "ratio": 0.0137,
99 | "lineWidthRatio": 0.32558139534883723
100 | },
101 | "geometry": {
102 | "type": "LineString",
103 | "coordinates": [
104 | [113.219241, 23.403518],
105 | [113.16562, 23.385269]
106 | ]
107 | }
108 | },
109 | {
110 | "type": "Feature",
111 | "properties": {
112 | "type": 7,
113 | "ratio": 0.0136,
114 | "lineWidthRatio": 0.3226744186046511
115 | },
116 | "geometry": {
117 | "type": "LineString",
118 | "coordinates": [
119 | [113.219931, 23.404969],
120 | [113.156196, 23.483756]
121 | ]
122 | }
123 | },
124 | {
125 | "type": "Feature",
126 | "properties": {
127 | "type": 1,
128 | "ratio": 0.0116,
129 | "lineWidthRatio": 0.2645348837209302
130 | },
131 | "geometry": {
132 | "type": "LineString",
133 | "coordinates": [
134 | [113.218782, 23.404948],
135 | [113.235571, 23.498389]
136 | ]
137 | }
138 | }
139 | ]
140 | }
141 |
--------------------------------------------------------------------------------
/public/data/mapdata.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "index": 1,
4 | "adcode": 440103,
5 | "name": "荔湾区",
6 | "num": 230
7 | },
8 | {
9 | "index": 2,
10 | "adcode": 440104,
11 | "name": "越秀区",
12 | "num": 231
13 | },
14 | {
15 | "index": 3,
16 | "adcode": 440105,
17 | "name": "海珠区",
18 | "num": 232
19 | },
20 | {
21 | "index": 4,
22 | "adcode": 440106,
23 | "name": "天河区",
24 | "num": 233
25 | },
26 | {
27 | "index": 5,
28 | "adcode": 440111,
29 | "name": "白云区",
30 | "num": 234
31 | },
32 | {
33 | "index": 6,
34 | "adcode": 440112,
35 | "name": "黄埔区",
36 | "num": 235
37 | },
38 | {
39 | "index": 7,
40 | "adcode": 440116,
41 | "name": "萝岗区",
42 | "num": 236
43 | },
44 | {
45 | "index": 8,
46 | "adcode": 440113,
47 | "name": "番禺区",
48 | "num": 237
49 | },
50 | {
51 | "index": 9,
52 | "adcode": 440114,
53 | "name": "花都区",
54 | "num": 238
55 | },
56 | {
57 | "index": 10,
58 | "adcode": 440115,
59 | "name": "南沙区",
60 | "num": 239
61 | },
62 | {
63 | "index": 11,
64 | "adcode": 440117,
65 | "name": "从化区",
66 | "num": 240
67 | },
68 | {
69 | "index": 12,
70 | "adcode": 440118,
71 | "name": "增城区",
72 | "num": 241
73 | }
74 | ]
75 |
--------------------------------------------------------------------------------
/public/data/polyline.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 0,
3 | "msg": "成功",
4 | "result": {
5 | "data": [
6 | [113.216516, 23.405735],
7 | [113.217037, 23.40572],
8 | [113.217809, 23.405696],
9 | [113.218491, 23.405661],
10 | [113.218458, 23.40512],
11 | [113.218405, 23.404617],
12 | [113.218421, 23.402387],
13 | [113.218356, 23.401531],
14 | [113.218635, 23.401314],
15 | [113.220127, 23.401353],
16 | [113.221178, 23.401363],
17 | [113.222616, 23.401452]
18 | ]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/public/data/something.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 0,
3 | "msg": "成功",
4 | "result": {
5 | "test1": {
6 | "a": 1,
7 | "b": 2,
8 | "c": 3
9 | },
10 | "test2": [
11 | { "a": 1 },
12 | { "b": 2 },
13 | { "c": 3 }
14 | ],
15 | "test3": [
16 | 1, 2, 3,
17 | [4, 5],
18 | ["a"],
19 | [6, 7, [8, 9], 10]
20 | ]
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/public/data/table.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 0,
3 | "msg": "成功",
4 | "result": {
5 | "filename": "test",
6 | "searchcols": [
7 | {
8 | "prop": "date",
9 | "label": "日期"
10 | },
11 | {
12 | "prop": "name",
13 | "label": "姓名"
14 | },
15 | {
16 | "prop": "address",
17 | "label": "地址"
18 | },
19 | {
20 | "prop": "type",
21 | "label": "类型"
22 | }
23 | ],
24 | "cols": [
25 | {
26 | "prop": "date",
27 | "label": "日期",
28 | "sortable": true,
29 | "filters": []
30 | },
31 | {
32 | "prop": "name",
33 | "label": "姓名",
34 | "sortable": true,
35 | "filters": []
36 | },
37 | {
38 | "prop": "address",
39 | "label": "地址",
40 | "sortable": true,
41 | "filters": []
42 | },
43 | {
44 | "prop": "type",
45 | "label": "类型",
46 | "sortable": false,
47 | "filters": [
48 | { "text": "旅游", "value": "旅游" },
49 | { "text": "美食", "value": "美食" }
50 | ]
51 | }
52 | ],
53 | "data": [
54 | {
55 | "date": "2021-08-02",
56 | "name": "小红",
57 | "address": "王子山",
58 | "type": "旅游"
59 | },
60 | {
61 | "date": "2021-08-06",
62 | "name": "小智",
63 | "address": "探鱼",
64 | "type": "美食"
65 | },
66 | {
67 | "date": "2021-08-03",
68 | "name": "小明",
69 | "address": "石头记",
70 | "type": "旅游"
71 | },
72 | {
73 | "date": "2021-08-07",
74 | "name": "小伟",
75 | "address": "如轩砂锅粥",
76 | "type": "美食"
77 | },
78 | {
79 | "date": "2021-08-04",
80 | "name": "小李",
81 | "address": "香草世界",
82 | "type": "旅游"
83 | },
84 | {
85 | "date": "2021-08-08",
86 | "name": "小二",
87 | "address": "柴灶鱼",
88 | "type": "美食"
89 | },
90 | {
91 | "date": "2021-08-05",
92 | "name": "小黄",
93 | "address": "融创文旅城",
94 | "type": "旅游"
95 | },
96 | {
97 | "date": "2021-08-09",
98 | "name": "小四",
99 | "address": "佬麻雀",
100 | "type": "美食"
101 | }
102 | ]
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/public/data/user.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 0,
3 | "msg": "成功",
4 | "result": {}
5 | }
6 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/cat.png
--------------------------------------------------------------------------------
/public/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/close.png
--------------------------------------------------------------------------------
/public/images/map-ic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/map-ic.png
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 | vue-skill
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/public/libDecoder.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/libDecoder.wasm
--------------------------------------------------------------------------------
/src/.env.development:
--------------------------------------------------------------------------------
1 | # 调用方式
2 | # var env = process.env.ENV
3 | # process.env.VUE_APP_API_URL
4 | # process.env.VUE_APP_IMAGE_URL
5 | # process.env.VUE_APP_VIDEO_URL
6 | ENV = 'dev'
7 |
8 | # base api
9 | VUE_APP_API_URL = ''
10 | # 服务器地址/publicPath
11 | VUE_APP_MOCK_URL = 'http://localhost:8081/'
12 |
--------------------------------------------------------------------------------
/src/.env.production:
--------------------------------------------------------------------------------
1 | # 调用方式
2 | # var env = process.env.ENV;
3 | # process.env.VUE_APP_API_URL
4 | ENV = 'pro'
5 |
6 | # base api
7 | VUE_APP_API_URL = ''
8 | VUE_APP_MOCK_URL = 'https://liyoro.github.io/'
9 |
10 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Home
4 |
5 |
6 |
7 |
8 |
20 |
21 |
23 |
--------------------------------------------------------------------------------
/src/api/map.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2022-03-07 10:47:52
4 | * @lastTime: 2022-03-08 15:39:20
5 | */
6 |
7 | import axios from 'axios'
8 | import defaultSettings from '@/settings'
9 | const { publicPath } = defaultSettings
10 |
11 | export const mapRequest = (url) => {
12 | return axios.get(publicPath + `/data/${url}.json`)
13 | }
14 |
--------------------------------------------------------------------------------
/src/api/polyline.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-08-20 09:15:21
4 | * @lastTime: 2021-08-20 09:15:54
5 | */
6 | import mrequest from '@/utils/mock-request'
7 | import defaultSettings from '@/settings'
8 | const { publicPath } = defaultSettings
9 |
10 | export const polylineData = () => {
11 | return mrequest({
12 | url: publicPath + `/data/polyline.json`,
13 | method: 'get'
14 | })
15 | }
16 |
--------------------------------------------------------------------------------
/src/api/something.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2022-03-10 15:29:23
4 | * @lastTime: 2022-03-10 15:30:26
5 | */
6 | import mrequest from '@/utils/mock-request'
7 | import defaultSettings from '@/settings'
8 | const { publicPath } = defaultSettings
9 |
10 | export const somethingData = () => {
11 | return mrequest({
12 | url: publicPath + `/data/something.json`,
13 | method: 'get'
14 | })
15 | }
16 |
--------------------------------------------------------------------------------
/src/api/table.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @Date: 2021-07-14 16:46:10
4 | * @Last Modified by: liyoro
5 | * @Last Modified time: 2021-07-14 16:52:48
6 | */
7 | import mrequest from '@/utils/mock-request'
8 | import defaultSettings from '@/settings'
9 | const { publicPath } = defaultSettings
10 |
11 | export const tableData = () => {
12 | return mrequest({
13 | url: publicPath + `/data/table.json`,
14 | method: 'get'
15 | })
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/src/api/user.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | import mrequest from '@/utils/mock-request'
3 | import defaultSettings from '@/settings'
4 | const { publicPath } = defaultSettings
5 |
6 | export function login(data) {
7 | return request({
8 | url: '/vue-admin-template/user/login',
9 | method: 'post',
10 | data
11 | })
12 | }
13 |
14 | export function getInfo(token) {
15 | return request({
16 | url: '/vue-admin-template/user/info',
17 | method: 'get',
18 | params: { token }
19 | })
20 | }
21 |
22 | export function logout() {
23 | return request({
24 | url: '/vue-admin-template/user/logout',
25 | method: 'post'
26 | })
27 | }
28 |
29 | export const user = () => {
30 | return mrequest({
31 | url: publicPath + `data/user.json`,
32 | method: 'get'
33 | })
34 | }
35 |
--------------------------------------------------------------------------------
/src/assets/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/close.png
--------------------------------------------------------------------------------
/src/assets/images/map-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/map-bg.png
--------------------------------------------------------------------------------
/src/assets/images/map-ic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/map-ic.png
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/logo.png
--------------------------------------------------------------------------------
/src/components/bmap/bMarker.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
107 |
108 |
111 |
--------------------------------------------------------------------------------
/src/components/bmap/bmap-jsapi-loader/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-08-23 11:11:54
4 | * @lastTime: 2022-06-16 12:16:45
5 | */
6 |
7 | // const options = {
8 | // key: '',
9 | // version: ''
10 | // }
11 |
12 | const LoadStatus = {
13 | notload: 'notload',
14 | loading: 'loading',
15 | loaded: 'loaded',
16 | failed: 'failed'
17 | }
18 |
19 | const config = {
20 | key: '',
21 | BMap: {
22 | version: '3.0'
23 | }
24 | }
25 |
26 | const Status = {
27 | BMap: LoadStatus.notload
28 | }
29 |
30 | const load = function(options) {
31 | return new Promise((resolve, reject) => {
32 | if (Status.BMap === LoadStatus.failed) {
33 | reject('bMapPointSelect')
34 | } else if (Status.BMap === LoadStatus.notload) {
35 | // 初次加载
36 | const { key, version, type } = options
37 | if (!key) {
38 | reject('请填写key')
39 | return
40 | }
41 | if (!type) {
42 | config.type = config.BMap.type
43 | }
44 | config.key = key
45 | config.BMap.version = version || config.BMap.version
46 | Status.BMap = LoadStatus.loading
47 |
48 | const parentNode = document.body || document.head
49 |
50 | window.___onAPILoaded = function(err) {
51 | delete window.___onAPILoaded
52 | if (err) {
53 | Status.BMap = LoadStatus.failed
54 | reject(err)
55 | } else {
56 | Status.BMap = LoadStatus.loaded
57 | resolve(window.BMap)
58 | }
59 | }
60 | const script = document.createElement('script')
61 | script.type = 'text/javascript'
62 | script.src = 'https://api.map.baidu.com/api?v=' + config.BMap.version +
63 | '&ak=' + key + '&callback=___onAPILoaded'
64 | script.onerror = (e) => {
65 | Status.BMap = LoadStatus.failed
66 | reject(e)
67 | }
68 | parentNode.appendChild(script)
69 | } else {
70 | if (typeof window.BMap !== 'undefined') {
71 | resolve(window.BMap)
72 | }
73 | reject('')
74 | }
75 | })
76 | }
77 |
78 | export default { load }
79 |
--------------------------------------------------------------------------------
/src/components/bmap/bmapgl-jsapi-loader/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-08-23 11:11:54
4 | * @lastTime: 2021-09-02 17:08:04
5 | */
6 |
7 | // BMapGL
8 | // export function BMPGL(ak) {
9 | // return new Promise(function(resolve, reject) {
10 | // window.init = function() {
11 | // resolve(BMapGL)
12 | // }
13 | // const script = document.createElement("script")
14 | // script.type = "text/javascript"
15 | // script.src = `http://api.map.baidu.com/api?v=1.0&type=webgl&ak=${ak}&callback=init`
16 | // script.onerror = reject
17 | // document.head.appendChild(script)
18 | // })
19 | // }
20 |
21 | // const options = {
22 | // key: '',
23 | // version: ''
24 | // }
25 |
26 | const LoadStatus = {
27 | notload: 'notload',
28 | loading: 'loading',
29 | loaded: 'loaded',
30 | failed: 'failed'
31 | }
32 |
33 | const config = {
34 | key: '',
35 | BMapGL: {
36 | version: '3.0'
37 | }
38 | }
39 |
40 | const Status = {
41 | BMapGL: LoadStatus.notload
42 | }
43 |
44 | const load = function(options) {
45 | return new Promise((resolve, reject) => {
46 | if (Status.BMapGL === LoadStatus.failed) {
47 | reject('')
48 | } else if (Status.BMapGL === LoadStatus.notload) {
49 | // 初次加载
50 | const { key, version } = options
51 | if (!key) {
52 | reject('请填写key')
53 | return
54 | }
55 | config.key = key
56 | config.BMapGL.version = version || config.BMapGL.version
57 | Status.BMapGL = LoadStatus.loading
58 |
59 | const parentNode = document.body || document.head
60 |
61 | window.___onAPILoaded = function(err) {
62 | delete window.___onAPILoaded
63 | if (err) {
64 | Status.BMapGL = LoadStatus.failed
65 | reject(err)
66 | } else {
67 | Status.BMapGL = LoadStatus.loaded
68 | resolve(window.BMapGL)
69 | }
70 | }
71 | const script = document.createElement('script')
72 | script.type = 'text/javascript'
73 | script.src = 'https://api.map.baidu.com/api?v=' + config.BMapGL.version +
74 | '&type=webgl' +
75 | '&ak=' + key + '&callback=___onAPILoaded'
76 | script.onerror = (e) => {
77 | Status.BMapGL = LoadStatus.failed
78 | reject(e)
79 | }
80 | parentNode.appendChild(script)
81 | }
82 | })
83 | }
84 |
85 | export default { load }
86 |
--------------------------------------------------------------------------------
/src/components/bmap/gl/index.js:
--------------------------------------------------------------------------------
1 | import BMapLoader from '../bmapgl-jsapi-loader'
2 |
3 | export default {
4 | name: 'BmapGLView',
5 | props: {
6 | ak: {
7 | type: String,
8 | default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX'
9 | },
10 | styleId: {
11 | type: String,
12 | default: '728e2ca5c2c75aa8b26190a9e23c4687'
13 | },
14 | zoom: {
15 | type: Number,
16 | default: 12
17 | },
18 | center: {
19 | type: [Array, String],
20 | default() {
21 | return [113.220218, 23.404165]
22 | }
23 | },
24 | height: {
25 | type: Number | String,
26 | default: 520
27 | }
28 |
29 | },
30 | computed: {
31 | mapHeight() {
32 | return isNaN(this.height) ? this.height : `${this.height}px`
33 | }
34 | },
35 | data() {
36 | return {
37 | map: ''
38 | }
39 | },
40 | beforeDestroy() {
41 | this.map = null
42 | },
43 | mounted() {
44 | this.initMap()
45 | },
46 | created() {
47 | },
48 | methods: {
49 | initMap() {
50 | BMapLoader.load({
51 | key: this.ak,
52 | version: '3.0'
53 | }).then((BMapGL) => {
54 | this.map = new BMapGL.Map('bmapglcontainer')
55 | const point = new BMapGL.Point(this.center[0], this.center[1])
56 | this.map.centerAndZoom(point, this.zoom)
57 | this.map.enableScrollWheelZoom(true)
58 |
59 | // 2. 创建MapVGL图层管理器
60 | // const view = new mapvgl.View({
61 | // map: this.map
62 | // })
63 | // var layer = new mapvgl.PointLayer({
64 | // color: 'rgba(50, 50, 200, 1)',
65 | // blend: 'lighter',
66 | // size: 200,
67 | // data: [{
68 | // geometry: {
69 | // type: 'Point',
70 | // coordinates: this.center
71 | // }
72 | // }]
73 | // })
74 | // view.addLayer(layer)
75 | }).catch(e => {
76 | console.log(e)
77 | })
78 | }
79 |
80 | },
81 | watch: {}
82 | }
83 |
--------------------------------------------------------------------------------
/src/components/bmap/gl/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
14 |
15 |
21 |
--------------------------------------------------------------------------------
/src/components/bmap/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * showNavigationControl 开启页面缩放、平移控件
3 | * geoCoder 开启点击地图获取坐标功能 回调 @bmap-point-select
4 | * customStyle 方便自定义弹窗的自定义样式
5 | */
6 | import BMapLoader from './bmap-jsapi-loader'
7 |
8 | export default {
9 | name: 'BmapView',
10 | props: {
11 | ak: {
12 | type: String,
13 | default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX'
14 | },
15 | styleId: {
16 | type: String,
17 | default: '41d153e7e9e7bcda9541996853046c93'
18 | },
19 | zoom: {
20 | type: Number,
21 | default: 15
22 | },
23 | center: {
24 | type: [Array, String],
25 | default() {
26 | return [113.22682, 23.410167]
27 | }
28 | },
29 | height: {
30 | type: Number | String,
31 | default: 520
32 | },
33 | showNavigationControl: {
34 | type: Boolean,
35 | default: false
36 | },
37 | geoCoder: {
38 | type: Boolean,
39 | default: false
40 | },
41 | customStyle: {
42 | type: Boolean,
43 | default: false
44 | }
45 | },
46 | computed: {
47 | mapHeight() {
48 | return isNaN(this.height) ? this.height : `${this.height}px`
49 | }
50 | },
51 | data() {
52 | return {
53 | map: ''
54 | }
55 | },
56 | beforeDestroy() {
57 | this.map = null
58 | },
59 | mounted() {
60 | },
61 | created() {
62 | this.initMap()
63 | },
64 | methods: {
65 | initMap() {
66 | BMapLoader.load({
67 | key: this.ak,
68 | version: '3.0'
69 | }).then((BMap) => {
70 | this.map = new BMap.Map('bmapcontainer')
71 | const point = new BMap.Point(this.center[0], this.center[1])
72 | this.map.centerAndZoom(point, this.zoom)
73 | // 开启鼠标滚轮缩放
74 | this.map.enableScrollWheelZoom(true)
75 | this.map.setMapStyleV2({
76 | styleId: this.styleId
77 | })
78 | // 左上角,添加默认缩放平移控件
79 | if (this.showNavigationControl) {
80 | const top_left_navigation = new BMap.NavigationControl()
81 | this.map.addControl(top_left_navigation)
82 | }
83 | // 地图选点
84 | if (this.geoCoder) {
85 | const geoc = new BMap.Geocoder()
86 | this.map.addEventListener('click', (e) => {
87 | const pt = e.point
88 | const respoint = [pt.lng, pt.lat]
89 | geoc.getLocation(pt, (res) => {
90 | if (res) {
91 | this.$emit('bmap-point-select', { point: respoint, address: res.address })
92 | } else {
93 | this.$emit('bmap-point-select', { point: respoint })
94 | }
95 | })
96 | })
97 | }
98 | this.$emit('bmap-ready', this.map)
99 | }).catch(e => {
100 | console.log(e)
101 | })
102 | }
103 | },
104 | watch: {
105 | center() {
106 | if (this.map) {
107 | const point = new BMap.Point(this.center[0], this.center[1])
108 | this.map.setCenter(point)
109 | }
110 | }
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/src/components/bmap/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
14 |
15 |
20 |
21 |
57 |
--------------------------------------------------------------------------------
/src/components/bmap/pointSelect.vue:
--------------------------------------------------------------------------------
1 | /**
2 | * 百度地图坐标选点组件
3 | *
4 | */
5 |
6 |
7 |
12 |
13 |
14 | 地址名称
15 |
16 | 查询
17 | 位置经纬度:{{ point.toString() }}
18 |
19 |
提示:可通过鼠标单击地图任意位置选取摄像机的位置
20 |
27 |
28 |
32 |
33 |
34 |
35 |
36 |
81 |
82 |
120 |
--------------------------------------------------------------------------------
/src/components/chart/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-08-11 17:28:11
4 | * @lastTime: 2021-08-11 17:42:58
5 | */
6 | const modulesFiles = require.context('./options', true, /index.js$/)
7 | let modules = {}
8 | modulesFiles.keys().forEach(item => {
9 | modules = Object.assign({}, modules, modulesFiles(item).default)
10 | })
11 | export default modules
12 |
--------------------------------------------------------------------------------
/src/components/chart/index.vue:
--------------------------------------------------------------------------------
1 |
6 |
13 |
14 |
17 |
18 |
163 |
165 |
--------------------------------------------------------------------------------
/src/components/chart/options/bar/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-05-24 17:34:27
4 | * @lastTime: 2021-12-28 15:05:19
5 | */
6 | const testBar = (data) => {
7 | const defaultConfig = {
8 | xAxis: {
9 | type: 'category',
10 | data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
11 | },
12 | yAxis: {
13 | type: 'value'
14 | },
15 | series: [{
16 | data: [120, 200, 150, 80, 70, 110, 130],
17 | type: 'bar'
18 | }]
19 | }
20 |
21 | const opt = Object.assign({}, defaultConfig)
22 | return opt
23 | }
24 |
25 | const testBar2 = (data) => {
26 | const defaultConfig = {
27 | color: ['#61C77E'],
28 | title: {
29 | text: '调阅次数',
30 | textStyle: {
31 | color: '#000000',
32 | fontSize: 14
33 | }
34 | },
35 | grid: {
36 | left: '1%',
37 | right: '2%',
38 | bottom: '3%',
39 | containLabel: true
40 | },
41 | tooltip: {
42 | trigger: 'axis',
43 | axisPointer: {
44 | type: 'line',
45 | lineStyle: {
46 | color: '#61C77E'
47 | }
48 | },
49 | textStyle: {
50 | color: 'black',
51 | fontSize: 14
52 | },
53 | formatter: '{b}: {c} 次'
54 | },
55 | xAxis: {
56 | type: 'category',
57 | axisLabel: {
58 | fontSize: 12,
59 | color: 'rgba(0, 0, 0, 0.65)',
60 | margin: 12
61 | },
62 | axisLine: {
63 | lineStyle: {
64 | color: ['#E8E8E8']
65 | }
66 | },
67 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
68 | },
69 | yAxis: {
70 | splitLine: {
71 | lineStyle: {
72 | color: ['#E8E8E8'],
73 | type: 'dotted'
74 | }
75 | },
76 | axisTick: {
77 | show: false
78 | },
79 | axisLine: {
80 | show: false
81 | },
82 | axisLabel: {
83 | fontSize: 12,
84 | color: 'rgba(0, 0, 0, 0.65)'
85 | }
86 | },
87 | series: [
88 | {
89 | name: '调阅次数',
90 | type: 'bar',
91 | barWidth: '20',
92 | data: [220, 182, 191, 234, 290, 330, 310]
93 | }
94 | ]
95 | }
96 | const opt = Object.assign({}, defaultConfig)
97 | return opt
98 | }
99 |
100 | export default {
101 | testBar,
102 | testBar2
103 | }
104 |
--------------------------------------------------------------------------------
/src/components/chart/options/map/index.js:
--------------------------------------------------------------------------------
1 | // import echarts from 'echarts'
2 | import * as echarts from 'echarts'
3 | import mapbg from '@/assets/images/map-bg.png'
4 |
5 | const getSimpleMap = (jsonMap, data, config) => {
6 | if (!echarts.getMap(jsonMap.mark)) {
7 | echarts.registerMap(jsonMap.mark, jsonMap.json)
8 | }
9 | const convertData = (data) => {
10 | console.log(data)
11 | var res = []
12 | for (var i = 0; i < data.length; i++) {
13 | const mapData = data[i].hoverObj
14 | const center = data[i].mapProperty.center
15 |
16 | if (center && mapData) {
17 | res.push({
18 | name: mapData.name,
19 | value: center.concat(mapData.num)
20 | })
21 | }
22 | }
23 | return res
24 | }
25 | const defaultConfig = {
26 | tooltip: {
27 | // 窗口外框
28 | trigger: 'item',
29 | padding: 0,
30 | borderWidth: 0,
31 | borderColor: '#FFFFFF',
32 | backgroundColor: '#FFFFFF',
33 | formatter: (params) => {
34 | const { data } = params
35 | const str = `
37 |
38 |

${data.name}
39 |
40 |
41 |
42 |
43 |
区号:
44 |
${data.hoverObj == null ? '' : data.hoverObj.adcode}
45 |
46 |
47 |
48 |
`
49 | return str
50 | }
51 | },
52 | geo: {
53 | map: jsonMap.mark,
54 | type: 'map',
55 | layoutCenter: ['50%', '50%'],
56 | layoutSize: '150%',
57 | zoom: 0.65,
58 | roam: false,
59 | // 样式一
60 | // itemStyle: {
61 | // normal: {
62 | // areaColor: 'rgba(13, 110, 191, 1)',
63 | // shadowColor: 'rgba(13, 110, 191, 0.5)',
64 | // shadowOffsetX: 6,
65 | // shadowOffsetY: 12
66 | // }
67 | // }
68 | // 样式二
69 | itemStyle: {
70 | normal: {
71 | borderColor: '#AEF3FF',
72 | borderWidth: 2,
73 | areaColor: {
74 | image: mapbg, //
75 | repeat: 'repeat' // // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat'
76 | },
77 | shadowColor: 'rgba(13, 110, 191, 0.5)',
78 | shadowOffsetX: 6,
79 | shadowOffsetY: 12
80 | }
81 | }
82 | },
83 | series: [
84 | {
85 | type: 'map',
86 | map: jsonMap.mark, // 自定义扩展图表类型
87 | zoom: 0.65, // 缩放
88 | animationDuration: 1200,
89 | // 点击选中后的效果
90 | select: {
91 | label: {
92 | color: '#FFFFFF',
93 | fontSize: 12,
94 | fontWeight: 400
95 | },
96 | // 清除点击选中后的背景色
97 | itemStyle: {
98 | color: null
99 | }
100 | },
101 | // 样式一
102 | // itemStyle: {
103 | // // 地图样式
104 | // normal: {
105 | // borderColor: '#FFFFFF',
106 | // borderWidth: 3,
107 | // areaColor: 'rgba(201, 229, 255, 1)'
108 | // }
109 | // },
110 | // 样式二
111 | itemStyle: {
112 | // 地图样式
113 | normal: {
114 | borderColor: '#AEF3FF',
115 | borderWidth: 2,
116 | areaColor: {
117 | image: mapbg, //
118 | repeat: 'repeat' // // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat'
119 | }
120 | }
121 | },
122 | // 样式一
123 | // label: {
124 | // show: true,
125 | // color: '#666666',
126 | // fontSize: 12,
127 | // fontWeight: 400
128 | // },
129 | // 样式二
130 | label: {
131 | show: true,
132 | color: '#FFFFFF',
133 | fontSize: 12,
134 | fontWeight: 400
135 | },
136 | emphasis: {
137 | // 鼠标移入动态的时候显示的默认样式
138 | label: {
139 | show: true,
140 | color: '#FFFFFF',
141 | fontSize: 15,
142 | fontWeight: 600
143 | },
144 | itemStyle: {
145 | areaColor: 'rgba(102, 182, 255, 0.7)',
146 | borderColor: '#FFFFFF',
147 | borderWidth: 2
148 | }
149 | },
150 | layoutCenter: ['50%', '50%'],
151 | layoutSize: '150%',
152 | data: data
153 | },
154 | {
155 | type: 'effectScatter',
156 | coordinateSystem: 'geo',
157 | symbol: 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABhdJREFUaEPtWW9sU1UU/51XCPuAMfR1DPGDiUFJGAETiFtvUYMoMr4YSdZXEPAvGhVRENQYjRj0A4LoUBMV/wK6vjYR/SKKICL0dTNAhDASFE1MkADrG/7BZML6jrnte91r147XrgMxu8mS3XvPPb/zu+fcc899JVzijS5x+zFE4GJ7cMgD/ysPpHZHGmgYN8PCTQDqiFDHwFkCTnLmj3YRrF1QhifVxo//rAb5qoTQaUNbaBEeBqPBm1F0DEDLiWPp9fXh+Flva4pLDYhAyojMIFjLAZpViREE7LfAqwIi9lkl6+WaigmcTkaWWMwtecCEA2C0K4RDacvq6EHPITk/DMMm+hSl3mJMBKEBjMnudQqwdJTQX6uEREUEupLanczYnG88bUh3p5eNnh4/058hp3Y2j/TV+NaBeVG+nNKkitYvyyVRNgHT0JoBxHJAjBSIbldF1CgH3DQiAsyfgxBw1lmEKbVBfX85esoi8Pfe+Vd0nz23F8BYG+S4KvQrCwGP75wbqKlJj2em+kycEnd0d/uOjJ3emiqUNQ3tN0cfAd/6hT590Ah0JsIrFaLnczuWxvjaG/Qf3YCmoclYfqyEES2q0B93z3Xu1q5VfDiS08n8Qm0ottIrCc8e+H33vFFpX1oeyszuM3hxQMTedAOljPBJAo3uD5zBpwIiVlew7hECveGM9TDG1YX0n72Q8EzA3BPRoHA0o5T5azUUm5lnREJbT4RHXWPbmLM7S4TxAHLyzHg9ENKX5HkuEd4Goluz8vSQPxh9q7oEDO1dAPfZBNaroVguTFKJ8Hwi2pQDJHyoBvV78gxMah+AcbczxswLAqFYLpOZiXALiGxSvEUVsTnVJiAP7xRb6YOq0N9xALoMbSMDC+zdftkf1J8qBt6V1FYz48mMHLDJL/SFjpxpaA8AeNvuH1SFnndXlCLjPYRc2cJSrKm1jfF9LvADACbJfuFc3oFta56iWIrcCNnyjOx0zcm6KSD0MdX2ADsKVaHnETcNreRcoRH9yZajx9Hr2QNdSa2TOXvpjFCUMSMbW0+6PJALL1KUyf7G1oNFQ6ht7iS2LOkt2fapQp/qyJ1pm1v3j2WdsMMw5Q/qtdX2wB4AoYxSxm1qSN/WSyDyHsD32v24KvRwMXDT0OQNLm9yeQreV0U0mxQAmAltJghf2d2EKvRp1SWQl0VohSqia3Pge7T7oWCD07eKXEaFlyAsLFKn6TKzZQkYkeUAr8ly65vFSpHxHEL5BtA3qojOcCs1DW07APeY7P9iy1wN4BaX/A5V6O6+JLAD4JulTLENGDABs615Aiylo1cRhQoLuJSh/UTAuP5cz8DRgNCvyScfEQAncmOKVa82xg9XNYSybnbFMOEVNagvLwQxDU3WOq+WAF+qFqn7zaS2Fown7DUlz1AxnZ5DyCaQK6Vlrvaxr2FU6JNfCxX/9V1zbTf56n0KT5BzaYsO13C647Ib452FsqcT865KU7qdAKc+CqtCj3vZ/exxKbOZRqQd4Ouzy3itKmIrylSRJ24a4TUA2Z6k71UR9fiuzqopm0DK0BYS8JFtRTcpSkOpvH8+Yl3Ze6EdQE1mO4C7AkLfeL517vmyCdihlMs4RLTZH4xm6qByW1cysomZ59vr+mQmL/oqIpAymu8gKJ86AMz8XCAUe9ELoCOTSoSfJaJVOR2w5gREfEs5OioKoV4D+tT/ng9f4bu62PvAK5GKPOAoNw3tCwBNdv84KUrT+c6DHfdbXe/qrarQZ3s1uFBuQAT+MJrHnYOy1XV5/TBCUWa5Cz03oF2wyU8n19mH9uhwWE2Xi/jRi0JAgnYltSZmSE84zVCFni36CpppaPK2Fc4wEWb7g7r0RsVtQB5wUDPfRntTq0yHOwIFtU7K0LaTq1aqJGUWY1kVAhlPGNpiBl7P7a7ryeh+cmZDp+8XjUpdUDUC2XCKPMPML+WMIVqW+Z95XW/Y0NP+YHR1pQZX9RAXM6JP3e8SKqdM9kqwqh5wQIuRGAzjJd6gEJCK3SQGy/hBJSCVy98QeizLX863Tq+h40oW5S75b8kPWghdKJpDBC7UTpfCGfLAxfbAv/mAaE9adPIDAAAAAElFTkSuQmCC',
158 | symbolSize: [16, 16],
159 | // symbolOffset: [],
160 | label: {
161 | normal: {
162 | show: true,
163 | offset: [0, -18],
164 | textStyle: {
165 | color: '#fff',
166 | fontSize: 12,
167 | fontWeight: 500
168 | },
169 | formatter(value) {
170 | return '{a|' + value.data.value[2] + '}'
171 | },
172 | rich: {
173 | a: {
174 | color: '#FFFFFF',
175 | backgroundColor: '#06406A',
176 | width: 28,
177 | height: 16,
178 | lineHeight: 16,
179 | align: 'center',
180 | borderWidth: 1,
181 | borderColor: '#79D6FE',
182 | borderRadius: 2,
183 | padding: [0, 4, 0, 4]
184 | }
185 | }
186 | }
187 | },
188 | itemStyle: {
189 | normal: {
190 | color: 'rgba(255, 178, 76, 1)'
191 | }
192 | },
193 | data: convertData(data),
194 | showEffectOn: 'render',
195 | rippleEffect: {
196 | brushType: 'stroke'
197 | },
198 | hoverAnimation: true,
199 | zlevel: 9
200 | }
201 | ]
202 | }
203 | const opt = Object.assign({}, defaultConfig, config)
204 | const { legend, tooltip, series, geo, grid } = opt
205 | const chartOpt = {
206 | grid,
207 | legend,
208 | tooltip,
209 | geo,
210 | series
211 | }
212 | return chartOpt
213 | }
214 |
215 | export default {
216 | getSimpleMap
217 | }
218 |
--------------------------------------------------------------------------------
/src/components/chart/options/pie/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2021-12-15 17:41:38
4 | * @lastTime: 2021-12-16 09:23:49
5 | */
6 | import 'echarts/lib/chart/pie'
7 |
8 | const getPieChart = (data, color) => {
9 | const defaultConfig = {
10 | backgroundColor: '#fff',
11 | tooltip: {
12 | show: true
13 | },
14 | color: color,
15 | series: [
16 | {
17 | type: 'pie',
18 | radius: ['68%', '90%'],
19 | center: ['50%', '50%'],
20 | hoverAnimation: true,
21 | z: 10,
22 | itemStyle: {
23 | normal: {
24 | borderWidth: 4,
25 | borderColor: '#fff'
26 | }
27 | },
28 | label: {
29 | show: false
30 | },
31 | data: data,
32 | labelLine: {
33 | show: false
34 | }
35 | }
36 | ]
37 | }
38 |
39 | const opt = Object.assign({}, defaultConfig)
40 | const { grid, tooltip, xAxis, yAxis, title, series } = opt
41 | const chartOpt = {
42 | color,
43 | grid,
44 | tooltip,
45 | xAxis,
46 | yAxis,
47 | title,
48 | series
49 | }
50 | return chartOpt
51 | }
52 |
53 | export default { getPieChart }
54 |
--------------------------------------------------------------------------------
/src/components/map/index.js:
--------------------------------------------------------------------------------
1 | import AMapLoader from '@amap/amap-jsapi-loader'
2 |
3 | export default {
4 | name: 'AmapView',
5 | props: {
6 | amapKey: {
7 | type: String,
8 | default: '6411e510973dc722ce416a298588ae4e'
9 | },
10 | styleId: {
11 | type: String,
12 | default: '728e2ca5c2c75aa8b26190a9e23c4687'
13 | },
14 | zoom: {
15 | type: Number,
16 | default: 12
17 | },
18 | center: {
19 | type: [Array, String],
20 | default() {
21 | return [113.220218, 23.404165]
22 | }
23 | },
24 | height: {
25 | type: Number | String,
26 | default: 520
27 | },
28 | // AMap.Geocoder, AMap.CustomLayer, AMap.ControlBar,
29 | // AMap.Heatmap, AMap.DistrictSearch, AMap.AdvancedInfoWindow,
30 | // AMap.MassMarks, AMap.Size, AMap.Pixel
31 | plugins: {
32 | type: Array,
33 | default: () => []
34 | },
35 | uis: {
36 | type: Array,
37 | default: () => ['overlay/SimpleMarker']
38 | }
39 |
40 | },
41 | computed: {
42 | mapHeight() {
43 | return isNaN(this.height) ? this.height : `${this.height}px`
44 | }
45 | },
46 | data() {
47 | return {
48 | map: ''
49 | }
50 | },
51 | beforeDestroy() {
52 | this.map && this.map.destroy()
53 | this.map = null
54 | },
55 | mounted() {
56 | },
57 | created() {
58 | this.initMap()
59 | },
60 | methods: {
61 | initMap() {
62 | AMapLoader.load({
63 | key: this.amapKey,
64 | version: '2.0',
65 | AMapUI: {
66 | version: '1.1',
67 | plugins: this.uis
68 | },
69 | Loca: { // 是否加载 Loca, 缺省不加载
70 | version: '2.0.0' // Loca 版本,缺省 1.3.2
71 | }
72 | }).then((AMap) => {
73 | this.map = new AMap.Map('amapcontainer', {
74 | zoom: this.zoom, // 级别
75 | center: this.center, // 中心点坐标
76 | viewMode: '3D', // 使用3D视图
77 | buildingAnimation: true, // 楼块出现是否带动画
78 | // expandZoomRange: true,
79 | // resizeEnable: true,
80 | // rotateEnable: true,
81 | // pitchEnable: true,
82 | pitch: 62, // 地图倾斜
83 | // rotation: -15,
84 | mapStyle: `amap://styles/${this.styleId}`
85 | })
86 | this.$emit('amap-ready', this.map)
87 | }).catch(e => {
88 | console.log(e)
89 | })
90 | }
91 |
92 | },
93 | watch: {}
94 | }
95 |
--------------------------------------------------------------------------------
/src/components/map/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
14 |
15 |
22 |
--------------------------------------------------------------------------------
/src/components/map/locaPoint.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
202 |
203 |
206 |
--------------------------------------------------------------------------------
/src/components/map/polyLine.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
75 |
76 |
79 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 | import router from './router'
4 | import store from './store'
5 | import VueMobileDetection from 'vue-mobile-detection'
6 | import utils from './utils/utils.js'
7 |
8 | import './styles/index.scss'
9 |
10 | Vue.config.productionTip = false
11 |
12 | // eCharts组件
13 | import eChartFn from '@/components/chart/index.js'
14 | import ChartPanel from '@/components/chart/index.vue'
15 | import './plugins/element.js'
16 | Vue.component(ChartPanel.name, ChartPanel)
17 | Vue.prototype.$eChartFn = eChartFn
18 |
19 | import './plugins/element.js'
20 |
21 | Vue.use(VueMobileDetection)
22 |
23 | /**
24 | * 全局方法
25 | * In template
26 | * $utils.methodname()
27 | * In methods
28 | * this.$utils.methodname()
29 | */
30 | Vue.prototype.$utils = utils
31 |
32 | new Vue({
33 | router,
34 | store,
35 | render: h => h(App)
36 | }).$mount('#app')
37 |
--------------------------------------------------------------------------------
/src/plugins/element.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import 'element-ui/lib/theme-chalk/index.css'
3 |
4 | import {
5 | Button,
6 | Table,
7 | TableColumn,
8 | Popover,
9 | Tooltip,
10 | Input,
11 | Select,
12 | Option,
13 | Dialog
14 | } from 'element-ui'
15 |
16 | Vue.use(Button)
17 | Vue.use(Table)
18 | Vue.use(TableColumn)
19 | Vue.use(Popover)
20 | Vue.use(Tooltip)
21 | Vue.use(Input)
22 | Vue.use(Select)
23 | Vue.use(Option)
24 | Vue.use(Dialog)
25 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueRouter from 'vue-router'
3 | import Home from '../views/Home.vue'
4 |
5 | Vue.use(VueRouter)
6 |
7 | const routes = [
8 | {
9 | path: '/',
10 | name: 'Home',
11 | meta: { title: '首页' },
12 | component: Home
13 | },
14 | {
15 | path: '/about',
16 | name: 'About',
17 | component: () => import('@/views/About.vue')
18 | },
19 | {
20 | path: '/mockdatatest',
21 | name: 'mockDataTest',
22 | meta: { title: '假数据测试' },
23 | component: () => import('@/views/mockDataTest/index.vue')
24 | },
25 | {
26 | path: '/charttest',
27 | name: 'chartTest',
28 | meta: { title: '图表测试' },
29 | component: () => import('@/views/chartTest/index.vue')
30 | },
31 | {
32 | path: '/dynamictabletest',
33 | name: 'dynamicTableTest',
34 | meta: { title: '动态生成表格测试' },
35 | component: () => import('@/views/dynamicTableTest/index.vue')
36 | },
37 | {
38 | path: '/polylinetest',
39 | name: 'polylineTest',
40 | meta: { title: '人员轨迹测试' },
41 | component: () => import('@/views/polylineTest/index.vue')
42 | },
43 | {
44 | path: '/bmaptest',
45 | name: 'bmapTest',
46 | meta: { title: '百度地图测试' },
47 | component: () => import('@/views/bmapTest/index.vue')
48 | },
49 | {
50 | path: '/bmapgltest',
51 | name: 'bmapGLTest',
52 | meta: { title: '百度地图GL测试' },
53 | component: () => import('@/views/bmapGLTest/index.vue')
54 | },
55 | {
56 | path: '/amaplocatest',
57 | name: 'amapLocaTest',
58 | meta: { title: '百度地图GL测试' },
59 | component: () => import('@/views/amapLocaTest/index.vue')
60 | },
61 | {
62 | path: '/videocapturetest',
63 | name: 'videoCaptureTest',
64 | meta: { title: 'video视频截图+水印' },
65 | component: () => import('@/views/videoCaptureTest/index.vue')
66 | },
67 | {
68 | path: '/somethingtest',
69 | name: 'somethingTest',
70 | meta: { title: 'somethingTestView' },
71 | component: () => import('@/views/somethingTest/index.vue')
72 | },
73 | {
74 | path: '/echartMapTest',
75 | name: 'echartMap',
76 | meta: { title: 'echart省市地图显示测试' },
77 | component: () => import('@/views/echartMapTest/index.vue')
78 | },
79 | {
80 | path: '/bigscreen',
81 | name: 'bigscreen',
82 | component: () => import('@/views/bigscreen/index.vue'),
83 | meta: {
84 | title: '大屏',
85 | icon: 'el-icon-s-platform'
86 | }
87 | }
88 | ]
89 |
90 | const router = new VueRouter({
91 | mode: 'history',
92 | base: process.env.BASE_URL,
93 | routes
94 | })
95 |
96 | export default router
97 |
--------------------------------------------------------------------------------
/src/settings.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 调用:const defaultSettings = require('./src/settings.js');
3 | *
4 | * import defaultSettings from '@/settings'
5 | const { publicPath } = defaultSettings
6 | */
7 | module.exports = {
8 | title: 'Vue Skill',
9 | /**
10 | * 这里方便代码里面使用而已,注意要和vue.config.js里面的同步修改
11 | */
12 | publicPath: process.env.NODE_ENV === 'production' ? 'https://liyoro.github.io/' : '/dist',
13 |
14 | /**
15 | * @type {boolean} true | false
16 | * @description Whether fix the header
17 | */
18 | fixedHeader: false,
19 |
20 | /**
21 | * @type {boolean} true | false
22 | * @description Whether show the logo in sidebar
23 | */
24 | sidebarLogo: false
25 | }
26 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 |
4 | Vue.use(Vuex)
5 |
6 | export default new Vuex.Store({
7 | state: {
8 | },
9 | mutations: {
10 | },
11 | actions: {
12 | },
13 | modules: {
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/src/styles/box.scss:
--------------------------------------------------------------------------------
1 | // 大屏页面的共用css
2 | .box-title {
3 | height: 38px;
4 | line-height: 38px;
5 | text-align: center;
6 | font-size: 22px;
7 | font-weight: 600;
8 | color: #ffffff;
9 | }
10 |
11 | .box-margin {
12 | margin-bottom: 22px;
13 | }
14 |
15 | .box-1 {
16 | width: 100%;
17 | height: 158px;
18 | }
19 |
20 | .box-2 {
21 | width: 100%;
22 | height: 248px;
23 | }
24 |
25 | .box-3 {
26 | width: 100%;
27 | height: 248px;
28 | }
29 |
30 | .box-4 {
31 | width: 100%;
32 | height: 248px;
33 | }
34 |
35 | .chart-content {
36 | width: 100%;
37 | height: 208px;
38 | }
39 |
40 | .box-content {
41 | height: 120px;
42 | display: flex;
43 | justify-content: center;
44 | }
45 |
--------------------------------------------------------------------------------
/src/styles/index.scss:
--------------------------------------------------------------------------------
1 | // 解决vue渲染页面时出现的变量闪烁
2 | [v-cloak] {
3 | display: none;
4 | }
--------------------------------------------------------------------------------
/src/utils/Export2Excel.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | import { saveAs } from 'file-saver'
3 | import XLSX from 'xlsx'
4 |
5 | function generateArray(table) {
6 | var out = [];
7 | var rows = table.querySelectorAll('tr');
8 | var ranges = [];
9 | for (var R = 0; R < rows.length; ++R) {
10 | var outRow = [];
11 | var row = rows[R];
12 | var columns = row.querySelectorAll('td');
13 | for (var C = 0; C < columns.length; ++C) {
14 | var cell = columns[C];
15 | var colspan = cell.getAttribute('colspan');
16 | var rowspan = cell.getAttribute('rowspan');
17 | var cellValue = cell.innerText;
18 | if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
19 |
20 | //Skip ranges
21 | ranges.forEach(function (range) {
22 | if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
23 | for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
24 | }
25 | });
26 |
27 | //Handle Row Span
28 | if (rowspan || colspan) {
29 | rowspan = rowspan || 1;
30 | colspan = colspan || 1;
31 | ranges.push({
32 | s: {
33 | r: R,
34 | c: outRow.length
35 | },
36 | e: {
37 | r: R + rowspan - 1,
38 | c: outRow.length + colspan - 1
39 | }
40 | });
41 | };
42 |
43 | //Handle Value
44 | outRow.push(cellValue !== "" ? cellValue : null);
45 |
46 | //Handle Colspan
47 | if (colspan)
48 | for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
49 | }
50 | out.push(outRow);
51 | }
52 | return [out, ranges];
53 | };
54 |
55 | function datenum(v, date1904) {
56 | if (date1904) v += 1462;
57 | var epoch = Date.parse(v);
58 | return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
59 | }
60 |
61 | function sheet_from_array_of_arrays(data, opts) {
62 | var ws = {};
63 | var range = {
64 | s: {
65 | c: 10000000,
66 | r: 10000000
67 | },
68 | e: {
69 | c: 0,
70 | r: 0
71 | }
72 | };
73 | for (var R = 0; R != data.length; ++R) {
74 | for (var C = 0; C != data[R].length; ++C) {
75 | if (range.s.r > R) range.s.r = R;
76 | if (range.s.c > C) range.s.c = C;
77 | if (range.e.r < R) range.e.r = R;
78 | if (range.e.c < C) range.e.c = C;
79 | var cell = {
80 | v: data[R][C]
81 | };
82 | if (cell.v == null) continue;
83 | var cell_ref = XLSX.utils.encode_cell({
84 | c: C,
85 | r: R
86 | });
87 |
88 | if (typeof cell.v === 'number') cell.t = 'n';
89 | else if (typeof cell.v === 'boolean') cell.t = 'b';
90 | else if (cell.v instanceof Date) {
91 | cell.t = 'n';
92 | cell.z = XLSX.SSF._table[14];
93 | cell.v = datenum(cell.v);
94 | } else cell.t = 's';
95 |
96 | ws[cell_ref] = cell;
97 | }
98 | }
99 | if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
100 | return ws;
101 | }
102 |
103 | function Workbook() {
104 | if (!(this instanceof Workbook)) return new Workbook();
105 | this.SheetNames = [];
106 | this.Sheets = {};
107 | }
108 |
109 | function s2ab(s) {
110 | var buf = new ArrayBuffer(s.length);
111 | var view = new Uint8Array(buf);
112 | for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
113 | return buf;
114 | }
115 |
116 | export function export_table_to_excel(id) {
117 | var theTable = document.getElementById(id);
118 | var oo = generateArray(theTable);
119 | var ranges = oo[1];
120 |
121 | /* original data */
122 | var data = oo[0];
123 | var ws_name = "SheetJS";
124 |
125 | var wb = new Workbook(),
126 | ws = sheet_from_array_of_arrays(data);
127 |
128 | /* add ranges to worksheet */
129 | // ws['!cols'] = ['apple', 'banan'];
130 | ws['!merges'] = ranges;
131 |
132 | /* add worksheet to workbook */
133 | wb.SheetNames.push(ws_name);
134 | wb.Sheets[ws_name] = ws;
135 |
136 | var wbout = XLSX.write(wb, {
137 | bookType: 'xlsx',
138 | bookSST: false,
139 | type: 'binary'
140 | });
141 |
142 | saveAs(new Blob([s2ab(wbout)], {
143 | type: "application/octet-stream"
144 | }), "test.xlsx")
145 | }
146 |
147 | export function export_json_to_excel({
148 | multiHeader = [],
149 | header,
150 | data,
151 | filename,
152 | merges = [],
153 | autoWidth = true,
154 | bookType = 'xlsx'
155 | } = {}) {
156 | /* original data */
157 | filename = filename || 'excel-list'
158 | data = [...data]
159 | data.unshift(header);
160 |
161 | for (let i = multiHeader.length - 1; i > -1; i--) {
162 | data.unshift(multiHeader[i])
163 | }
164 |
165 | var ws_name = "SheetJS";
166 | var wb = new Workbook(),
167 | ws = sheet_from_array_of_arrays(data);
168 |
169 | if (merges.length > 0) {
170 | if (!ws['!merges']) ws['!merges'] = [];
171 | merges.forEach(item => {
172 | ws['!merges'].push(XLSX.utils.decode_range(item))
173 | })
174 | }
175 |
176 | if (autoWidth) {
177 | /*设置worksheet每列的最大宽度*/
178 | const colWidth = data.map(row => row.map(val => {
179 | /*先判断是否为null/undefined*/
180 | if (val == null) {
181 | return {
182 | 'wch': 10
183 | };
184 | }
185 | /*再判断是否为中文*/
186 | else if (val.toString().charCodeAt(0) > 255) {
187 | return {
188 | 'wch': val.toString().length * 2
189 | };
190 | } else {
191 | return {
192 | 'wch': val.toString().length
193 | };
194 | }
195 | }))
196 | /*以第一行为初始值*/
197 | let result = colWidth[0];
198 | for (let i = 1; i < colWidth.length; i++) {
199 | for (let j = 0; j < colWidth[i].length; j++) {
200 | if (result[j]['wch'] < colWidth[i][j]['wch']) {
201 | result[j]['wch'] = colWidth[i][j]['wch'];
202 | }
203 | }
204 | }
205 | ws['!cols'] = result;
206 | }
207 |
208 | /* add worksheet to workbook */
209 | wb.SheetNames.push(ws_name);
210 | wb.Sheets[ws_name] = ws;
211 |
212 | var wbout = XLSX.write(wb, {
213 | bookType: bookType,
214 | bookSST: false,
215 | type: 'binary'
216 | });
217 | saveAs(new Blob([s2ab(wbout)], {
218 | type: "application/octet-stream"
219 | }), `${filename}.${bookType}`);
220 | }
221 |
--------------------------------------------------------------------------------
/src/utils/mock-request.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @Date: 2021-05-31 15:25:56
4 | * @Last Modified by: liyoro
5 | * @Last Modified time: 2021-05-31 16:09:19
6 | */
7 | import axios from 'axios'
8 |
9 | const service = axios.create({
10 | baseURL: process.env.VUE_APP_MOCK_URL, // url = base url + request url
11 | // withCredentials: true, // send cookies when cross-domain requests
12 | timeout: 5000 // request timeout
13 | })
14 |
15 | // request interceptor
16 | service.interceptors.request.use(
17 | config => {
18 | // do something before request is sent
19 |
20 | return config
21 | },
22 | error => {
23 | // do something with request error
24 | console.log(error) // for debug
25 | return Promise.reject(error)
26 | }
27 | )
28 |
29 | // response interceptor
30 | service.interceptors.response.use(
31 | /**
32 | * If you want to get http information such as headers or status
33 | * Please return response => response
34 | */
35 |
36 | /**
37 | * Determine the request status by custom code
38 | * Here is just an example
39 | * You can also judge the status by HTTP Status Code
40 | */
41 | response => {
42 | const res = response.data
43 |
44 | // if the custom code is not 0, it is judged as an error.
45 | if (res.code !== 0) {
46 | return Promise.reject(new Error(res.message || 'Error'))
47 | } else {
48 | return res
49 | }
50 | },
51 | error => {
52 | console.log('err' + error) // for debug
53 | return Promise.reject(error)
54 | }
55 | )
56 |
57 | export default service
58 |
--------------------------------------------------------------------------------
/src/utils/utils.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: liyoro
3 | * @since: 2022-03-07 11:22:29
4 | * @lastTime: 2022-03-17 15:32:16
5 | */
6 | const findElem = (arrayToSearch, attr, val) => {
7 | if (arrayToSearch != null) {
8 | for (var i = 0; i < arrayToSearch.length; i++) {
9 | // eslint-disable-next-line eqeqeq
10 | if (arrayToSearch[i][attr] == val) {
11 | return i
12 | }
13 | }
14 | } else {
15 | return -1
16 | }
17 | return -1
18 | }
19 |
20 | // [0, max]随机整数
21 | const randomInt = (max) => {
22 | return Math.round(Math.random() * max)
23 | }
24 |
25 | // 生成[0, max)的随机整数
26 | const randomIntL = (max) => {
27 | return Math.floor(Math.random() * max)
28 | }
29 |
30 | // 生成(0, max]的随机整数
31 | const randomIntR = (max) => {
32 | return Math.ceil(Math.random() * max)
33 | }
34 |
35 | export default {
36 | findElem,
37 | randomInt,
38 | randomIntL,
39 | randomIntR
40 | }
41 |
--------------------------------------------------------------------------------
/src/views/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an about page
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | MockDataTest |
5 | chartTest |
6 | dynamicTableTest |
7 | polylineTest |
8 | bmapTest |
9 | bmapGLTest |
10 | amapLocaTest |
11 | videoCaptureTest |
12 | echart地图显示测试 |
13 | 杂七杂八测试 |
14 | 响应式大屏 |
15 |
16 |
17 | 百度地图选坐标组件测试
18 |
19 |
20 |
21 |
22 |
23 |
24 |
40 |
--------------------------------------------------------------------------------
/src/views/amapLocaTest/index.js:
--------------------------------------------------------------------------------
1 |
2 | export default {
3 | name: 'amapLocaTestView',
4 | components: {
5 | AmapView: () => import ('@/components/map/index.vue'),
6 | AmapLocaPoint: () => import ('@/components/map/locaPoint.vue')
7 | },
8 | data() {
9 | return {
10 | data: []
11 | }
12 | },
13 | mounted() {
14 | },
15 | created() {
16 | },
17 | methods: {
18 | },
19 | watch: {}
20 | }
21 |
--------------------------------------------------------------------------------
/src/views/amapLocaTest/index.scss:
--------------------------------------------------------------------------------
1 | .amapLocaTestView {
2 | padding: 10px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/views/amapLocaTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
高德地图Loca测试
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
17 |
18 |
21 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/bottomView/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'BottomView',
3 | props: {
4 | data: {
5 | type: Object,
6 | default: () => ({})
7 | }
8 | },
9 | data() {
10 | return {
11 | }
12 | },
13 | mounted() {},
14 | created() {
15 | this.initData()
16 | },
17 | methods: {
18 | initData() {
19 | }
20 | },
21 | watch: {}
22 | }
23 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/bottomView/index.scss:
--------------------------------------------------------------------------------
1 | .bottom-view {
2 | width: 786px;
3 | height: 243px;
4 | position: absolute;
5 | left: 547px;
6 | right: 547px;
7 | bottom: 0;
8 | // background-image: url("~@/assets/images/box-1572.png");
9 | // background-size: 100% 100%;
10 | background-color: #46d9fe;
11 | .box-title {
12 | height: 38px;
13 | line-height: 38px;
14 | text-align: center;
15 | font-size: 22px;
16 | font-weight: 600;
17 | color: #FFFFFF;
18 | }
19 | .chart-content {
20 | width: 100%;
21 | height: 208px;
22 | }
23 | }
--------------------------------------------------------------------------------
/src/views/bigscreen/components/bottomView/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
数据1
4 | {{ data.c }}
5 |
6 |
7 |
8 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/centerView/index.js:
--------------------------------------------------------------------------------
1 | import { mapGetters } from 'vuex'
2 | // import axios from 'axios'
3 | // import { findElem } from '@/utils/index'
4 |
5 | // const getMapJson = (url) => {
6 | // return axios.get(`data/map/${url}.json`)
7 | // }
8 |
9 | export default {
10 | name: 'CenterView',
11 | props: {
12 | data: {
13 | type: Object,
14 | default: () => ({})
15 | }
16 | },
17 | data() {
18 | return {
19 | mapOpt: {},
20 | areaCode: 4400,
21 | mapName: '广东省',
22 | mapData: []
23 | }
24 | },
25 | computed: {
26 | ...mapGetters(['curLevel', 'levelData'])
27 | },
28 | mounted() {},
29 | created() {
30 | this.initData()
31 | },
32 | updated() {
33 | },
34 | methods: {
35 | initData() {
36 | },
37 | // 中间
38 | initMap(url) {
39 | }
40 | },
41 | watch: {}
42 | }
43 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/centerView/index.scss:
--------------------------------------------------------------------------------
1 | .center-view {
2 | width: 786px;
3 | height: 705px;
4 | position: absolute;
5 | left: 547px;
6 | right: 547px;
7 | top: 0;
8 | background-color: #46d9fe;
9 | .map-view {
10 | width: 100%;
11 | height: 100%;
12 | z-index: 1;
13 | }
14 | }
--------------------------------------------------------------------------------
/src/views/bigscreen/components/centerView/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 放地图 {{ data.d }}
4 |
5 |
6 |
7 |
13 |
14 |
17 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/header.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
14 |
31 |
32 |
52 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/leftView/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'LeftView',
3 | props: {
4 | data: {
5 | type: Object,
6 | default: () => ({})
7 | }
8 | },
9 | data() {
10 | return {
11 | }
12 | },
13 | mounted() {},
14 | created() {
15 | this.initData()
16 | },
17 | methods: {
18 | initData() {
19 | }
20 | },
21 | watch: {}
22 | }
23 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/leftView/index.scss:
--------------------------------------------------------------------------------
1 | @import '@/styles/box.scss';
2 |
3 | .left-view {
4 | width: 522px;
5 | height: 100%;
6 | position: absolute;
7 | left: 0;
8 | top: 0;
9 | bottom: 0;
10 | }
11 |
12 | .box-1-bg {
13 | // background-image: url("~@/assets/images/box-308.png");
14 | // background-size: 100% 100%;
15 | background-color: #46d9fe;
16 | }
17 |
18 | .box-2-bg {
19 | // background-image: url("~@/assets/images/box-486-1.png");
20 | // background-size: 100% 100%;
21 | background-color: #46d9fe;
22 | }
23 |
24 | .box-3-bg {
25 | // background-image: url("~@/assets/images/box-486-2.png");
26 | // background-size: 100% 100%;
27 | background-color: #46d9fe;
28 | }
29 |
30 | .box-4-bg {
31 | // background-image: url("~@/assets/images/box-486-3.png");
32 | // background-size: 100% 100%;
33 | background-color: #46d9fe;
34 | }
35 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/leftView/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
数据1
5 |
6 | {{ data.a }}
7 |
8 |
9 |
12 |
15 |
18 |
19 |
20 |
21 |
27 |
28 |
31 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/rightView/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'RightView',
3 | props: {
4 | data: {
5 | type: Object,
6 | default: () => ({})
7 | }
8 | },
9 | data() {
10 | return {
11 | }
12 | },
13 | mounted() {},
14 | created() {
15 | this.initData()
16 | },
17 | methods: {
18 | initData() {
19 | }
20 | },
21 | watch: {}
22 | }
23 |
--------------------------------------------------------------------------------
/src/views/bigscreen/components/rightView/index.scss:
--------------------------------------------------------------------------------
1 | @import '@/styles/box.scss';
2 |
3 | .right-view {
4 | width: 522px;
5 | height: 100%;
6 | position: absolute;
7 | right: 0;
8 | top: 0;
9 | bottom: 0;
10 | }
11 |
12 | .box-1-bg {
13 | // background-image: url("~@/assets/images/box-308-r.png");
14 | // background-size: 100% 100%;
15 | background-color: #46d9fe;
16 | }
17 |
18 | .box-2-bg {
19 | // background-image: url("~@/assets/images/box-486-1-r.png");
20 | // background-size: 100% 100%;
21 | background-color: #46d9fe;
22 | }
23 |
24 | .box-3-bg {
25 | // background-image: url("~@/assets/images/box-486-2-r.png");
26 | // background-size: 100% 100%;
27 | background-color: #46d9fe;
28 | }
29 |
30 | .box-4-bg {
31 | // background-image: url("~@/assets/images/box-486-3-r.png");
32 | // background-size: 100% 100%;
33 | background-color: #46d9fe;
34 | }
--------------------------------------------------------------------------------
/src/views/bigscreen/components/rightView/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
数据1
5 |
6 | {{ data.b }}
7 |
8 |
9 |
12 |
15 |
18 |
19 |
20 |
21 |
27 |
28 |
31 |
--------------------------------------------------------------------------------
/src/views/bigscreen/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | components: {
3 | BsHeader: () => import('./components/header.vue'),
4 | LeftView: () => import('./components/leftView/index.vue'),
5 | RightView: () => import('./components/rightView/index.vue'),
6 | BottomView: () => import('./components/bottomView/index.vue'),
7 | CenterView: () => import('./components/centerView/index.vue')
8 | },
9 | data() {
10 | return {
11 | styleObj: { transform: 'scale(1.0) translate(-50%, -50%)' },
12 | width: 1920,
13 | height: 1080,
14 | data: {}
15 | }
16 | },
17 | mounted() {},
18 | created() {
19 | this.changeScale()
20 | window.addEventListener('resize', this.changeScale)
21 | this.initData()
22 | },
23 | methods: {
24 | changeScale() {
25 | const body = document.documentElement
26 | const scale1 = body.clientWidth / this.width
27 | const scale2 = body.clientHeight / this.height
28 | const scale = scale1 < scale2 ? scale1 : scale2
29 | this.styleObj.transform = `scale(${scale}) translate(-50%, -50%)`
30 | },
31 | // 如果大屏页面是通过一个接口全部返回的,就在这里请求,然后通过给各个部分的组件传参显示数据
32 | initData() {
33 | this.data = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'f': 5, 'g': 6, 'h': 7 }
34 | }
35 | },
36 | watch: {}
37 | }
38 |
--------------------------------------------------------------------------------
/src/views/bigscreen/index.scss:
--------------------------------------------------------------------------------
1 | .bs-container {
2 | width: 100%;
3 | height: 100%;
4 | // background-image: url("~@/assets/images/bg.png");
5 | // background-size: 100% 100%;
6 | background-color: rgba(247, 247, 247, 1);
7 | background-size: cover;
8 | background-repeat: no-repeat;
9 | background-attachment: fixed;
10 | background-position: center;
11 | .bigscreen {
12 | width: 1920px;
13 | height: 1080px;
14 | overflow: hidden;
15 | position: fixed;
16 | top: 50%;
17 | left: 50%;
18 | transform-origin: left top;
19 | z-index: 999;
20 | .content-view {
21 | margin: 20px 20px 30px 20px;
22 | height: 968px;
23 | position: relative;
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/views/bigscreen/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
25 |
--------------------------------------------------------------------------------
/src/views/bmapGLTest/index.js:
--------------------------------------------------------------------------------
1 | // import { polylineData } from '@/api/polyline'
2 |
3 | export default {
4 | name: 'bmapGLTestView',
5 | components: {
6 | 'bmap-gl-view': () => import ('@/components/bmap/gl/index.vue')
7 | },
8 | data() {
9 | return {
10 | data: []
11 | }
12 | },
13 | mounted() {
14 | },
15 | created() {
16 | },
17 | methods: {
18 |
19 | },
20 | watch: {}
21 | }
22 |
--------------------------------------------------------------------------------
/src/views/bmapGLTest/index.scss:
--------------------------------------------------------------------------------
1 | .bmapGLTestView {
2 | padding: 10px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/views/bmapGLTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
百度地图GL测试
4 |
5 |
6 |
7 |
8 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/src/views/bmapTest/index.js:
--------------------------------------------------------------------------------
1 | // import { polylineData } from '@/api/polyline'
2 |
3 | export default {
4 | name: 'bmapTestView',
5 | components: {
6 | BmapView: () => import ('@/components/bmap/index.vue'),
7 | BmapMarker: () => import ('@/components/bmap/bMarker.vue')
8 | },
9 | data() {
10 | return {
11 | data: [],
12 | markers: [],
13 | center: [113.240159, 23.433257]
14 | }
15 | },
16 | mounted() {
17 | },
18 | created() {
19 | this.initData()
20 | },
21 | methods: {
22 | initData() {
23 | // 融创茂 113.240159,23.433257
24 | // 花都湖 113.238146,23.388154
25 | // 圆玄道观 113.186404,23.405666
26 | // 白云机场 113.31231,23.403013
27 | // 花都广场 113.226483,23.406326
28 | this.markers = [
29 | { 'lng': 113.240159, 'lat': 23.433257, 'code': 1 },
30 | { 'lng': 113.238146, 'lat': 23.388154, 'code': 2 },
31 | { 'lng': 113.186404, 'lat': 23.405666, 'code': 3 },
32 | { 'lng': 113.31231, 'lat': 23.403013, 'code': 4 },
33 | { 'lng': 113.226483, 'lat': 23.406326, 'code': 5 }
34 | ]
35 | }
36 | },
37 | watch: {}
38 | }
39 |
--------------------------------------------------------------------------------
/src/views/bmapTest/index.scss:
--------------------------------------------------------------------------------
1 | .bmapTestView {
2 | padding: 10px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/views/bmapTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
百度地图测试
4 |
5 |
6 |
7 |
8 |
9 |
10 |
16 |
17 |
20 |
--------------------------------------------------------------------------------
/src/views/chartTest/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'chartTestView',
3 | data() {
4 | return {
5 | chartOpt: {},
6 | chartOpt2: {},
7 | chartOpt3: {}
8 | }
9 | },
10 | mounted() {},
11 | created() {
12 | this.chartOpt = this.$eChartFn.testBar()
13 | this.chartOpt3 = this.$eChartFn.testBar2()
14 |
15 | this.chartOpt2 = this.$eChartFn.getPieChart([100, 23, 43, 65], ['#36CBCB', '#FAD337', '#F2637B', '#975FE4'])
16 | },
17 | methods: {
18 | },
19 | watch: {}
20 | }
21 |
--------------------------------------------------------------------------------
/src/views/chartTest/index.scss:
--------------------------------------------------------------------------------
1 | .chartTestView {
2 | padding: 10px;
3 | height: 520px;
4 | .chart-content {
5 | height: 100%;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/views/chartTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
echarts图表封装示例
4 |
5 | echarts图表封装示例3
6 |
7 | echarts图表封装示例2
8 |
9 |
10 |
11 |
12 |
18 |
19 |
22 |
--------------------------------------------------------------------------------
/src/views/dynamicTableTest/index.js:
--------------------------------------------------------------------------------
1 | import { tableData } from '@/api/table'
2 |
3 | export default {
4 | name: 'dynamicTableTest',
5 | data() {
6 | return {
7 | tableCols: [],
8 | tableData: [],
9 | tableShowData: [],
10 | filename: '',
11 | searchColOption: [],
12 | searchColItem: '',
13 | searchText: ''
14 | }
15 | },
16 | mounted() {},
17 | created() {
18 | this.testMockTable()
19 | },
20 | methods: {
21 | async testMockTable() {
22 | const { code, result } = await tableData()
23 | if (code !== 0) return
24 | this.tableCols = result.cols
25 |
26 | const temp = result.searchcols
27 | if (temp.length > 0) {
28 | this.searchColOption = temp
29 | this.searchColItem = temp[0].prop
30 | }
31 | this.tableData = result.data
32 | this.filename = result.filename
33 | this.tableShowData = this.tableData
34 | },
35 | // 列值筛选
36 | filterTag(value, row) {
37 | return row.type === value
38 | },
39 | // 导出Excel
40 | handleDownload(tableCols, tableData, filename) {
41 | const tempname = this.formatDate('yyyy-MM-dd HH:mm:ss')
42 | const tHeader = []
43 | const filterVal = []
44 |
45 | tableCols.forEach(item => {
46 | tHeader.push(item.label)
47 | filterVal.push(item.prop)
48 | })
49 | import('@/utils/Export2Excel').then(excel => {
50 | const list = tableData
51 | const data = this.formatJson(filterVal, list)
52 | excel.export_json_to_excel({
53 | header: tHeader,
54 | data,
55 | filename: filename + tempname,
56 | autoWidth: true,
57 | bookType: 'xlsx'
58 | })
59 | })
60 | },
61 | // 方便对数据特殊处理
62 | formatJson(filterVal, jsonData) {
63 | return jsonData.map(v => filterVal.map(j => {
64 | return v[j]
65 | }))
66 | },
67 | // 返回格式化时间
68 | formatDate(fmt) {
69 | const nowDate = new Date()
70 | var o = {
71 | 'M+': nowDate.getMonth() + 1, // 月份
72 | 'd+': nowDate.getDate(), // 日
73 | 'H+': nowDate.getHours(), // 小时
74 | 'm+': nowDate.getMinutes(), // 分
75 | 's+': nowDate.getSeconds(), // 秒
76 | 'q+': Math.floor((nowDate.getMonth() + 3) / 3), // 季度
77 | 'S': nowDate.getMilliseconds() // 毫秒
78 | }
79 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (nowDate.getFullYear() + '').substr(4 - RegExp.$1.length))
80 | for (var k in o) {
81 | if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
82 | }
83 | return fmt
84 | },
85 | searchClick() {
86 | if (this.searchText) {
87 | const searchRes = this.filterOne(this.tableData, this.searchText, [
88 | this.searchColItem
89 | ])
90 | this.tableShowData = searchRes
91 | } else {
92 | this.tableShowData = this.tableData
93 | }
94 | },
95 | resetClick() {
96 | this.searchText = ''
97 |
98 | if (this.searchColOption.length > 0) {
99 | this.searchColItem = this.searchColOption[0].prop
100 | }
101 | this.searchClick()
102 | },
103 | filterOne(dataList, value, type) {
104 | var s = dataList.filter(function(item, index, arr) {
105 | for (let j = 0; j < type.length; j++) {
106 | if (item[type[j]] !== undefined || item[type[j]] != null) {
107 | if (item[type[j]].indexOf(value) >= 0) {
108 | return item
109 | }
110 | }
111 | }
112 | })
113 | return s
114 | }
115 | },
116 | watch: {
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/src/views/dynamicTableTest/index.scss:
--------------------------------------------------------------------------------
1 | .dynamicTableTest {
2 | padding: 10px;
3 | .ctl-view {
4 | text-align: left;
5 | margin-bottom: 10px;
6 | .ctl-select {
7 | width: 180px;
8 | }
9 | .ctl-input {
10 | width: 200px;
11 | margin-left: 20px;
12 | margin-right: 20px;
13 | }
14 | }
15 | .overtext {
16 | word-break: keep-all;
17 | white-space: nowrap;
18 | overflow: hidden;
19 | text-overflow: ellipsis;
20 | }
21 | ::v-deep .hide-filter {
22 | .el-table__column-filter-trigger {
23 | display: none !important;
24 | }
25 | }
26 | ::v-deep .show-filter {
27 | .el-table__column-filter-trigger {
28 | display: inline-block !important;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/views/dynamicTableTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
动态生成表格
4 |
5 |
6 |
7 |
12 |
13 |
14 | 搜索
15 | 重置
16 | 导出
17 |
18 |
19 |
29 |
30 |
36 | {{ scope.row[col.prop] }}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
51 |
52 |
55 |
--------------------------------------------------------------------------------
/src/views/echartMapTest/index.js:
--------------------------------------------------------------------------------
1 | import { mapRequest } from '@/api/map'
2 |
3 | export default {
4 | name: 'echartMapTestView',
5 | data() {
6 | return {
7 | mapOpt: {},
8 | mapName: '广州市',
9 | mapPopData: [] // 地图数据
10 | }
11 | },
12 | mounted() {},
13 | created() {
14 | this.initData()
15 | },
16 | methods: {
17 | // 地图点击事件
18 | handleMapClick(params) {
19 | const { name, seriesType } = params
20 | if (seriesType !== 'map') return
21 | const { data } = params
22 | const code = data.mapProperty.adcode
23 | console.log(11111, data)
24 | console.log(22222, name, code)
25 | },
26 | initData() {
27 | mapRequest('mapdata').then((result) => {
28 | const res = result.data
29 |
30 | this.mapPopData = res
31 |
32 | this.initMap('4401')
33 | })
34 | },
35 | initMap(url) {
36 | mapRequest(url).then((res) => {
37 | const mapData = res.data
38 | const jsonMap = { mark: this.mapName, json: mapData }
39 |
40 | const data = mapData.features.map((item) => {
41 | const { name, adcode } = item.properties
42 |
43 | let hoverObj = {}
44 |
45 | const objIndex = this.$utils.findElem(this.mapPopData, 'adcode', adcode)
46 | if (objIndex !== -1) {
47 | hoverObj = this.mapPopData[objIndex]
48 | } else {
49 | hoverObj = null
50 | }
51 | return {
52 | name,
53 | mapProperty: item.properties,
54 | hoverObj: hoverObj
55 | }
56 | })
57 | this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)
58 | }).catch((err) => {
59 | console.log(err, '加载地图失败')
60 | })
61 | }
62 | },
63 | watch: {}
64 | }
65 |
66 |
--------------------------------------------------------------------------------
/src/views/echartMapTest/index.scss:
--------------------------------------------------------------------------------
1 | .echartMapTestView {
2 | padding: 10px;
3 | width: 100%;
4 | height: 520px;
5 | .map-view {
6 | height: 100%;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/views/echartMapTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
echarts省市地图封装示例
4 |
9 |
10 |
11 |
12 |
18 |
19 |
22 |
--------------------------------------------------------------------------------
/src/views/mockDataTest/index.js:
--------------------------------------------------------------------------------
1 | import { tableData } from '@/api/table'
2 |
3 | export default {
4 | name: 'mockDataTestView',
5 | data() {
6 | return {
7 | tableCols: [],
8 | tableData: []
9 | }
10 | },
11 | mounted() {},
12 | created() {
13 | this.testMockTable()
14 | },
15 | methods: {
16 | async testMockTable() {
17 | const { code, result } = await tableData()
18 | if (code !== 0) return
19 | this.tableCols = result.cols
20 | this.tableData = result.data
21 | }
22 |
23 | },
24 | watch: {}
25 | }
26 |
--------------------------------------------------------------------------------
/src/views/mockDataTest/index.scss:
--------------------------------------------------------------------------------
1 | .mockDataTestView {
2 | padding: 10px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/views/mockDataTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
本地模拟数据显示
5 |
{{ tableData }}
6 |

7 |
8 |
9 |
10 |
11 |
17 |
18 |
19 |
22 |
--------------------------------------------------------------------------------
/src/views/polylineTest/index.js:
--------------------------------------------------------------------------------
1 | import { polylineData } from '@/api/polyline'
2 |
3 | export default {
4 | name: 'polylineTestView',
5 | components: {
6 | AmapView: () => import ('@/components/map/index.vue'),
7 | AmapPolyline: () => import ('@/components/map/polyLine.vue')
8 | },
9 | data() {
10 | return {
11 | data: []
12 | }
13 | },
14 | mounted() {
15 | },
16 | created() {
17 | this.testData()
18 | },
19 | methods: {
20 | async testData() {
21 | const { code, result } = await polylineData()
22 | if (code !== 0) return
23 | this.data = result.data
24 | }
25 |
26 | },
27 | watch: {}
28 | }
29 |
--------------------------------------------------------------------------------
/src/views/polylineTest/index.scss:
--------------------------------------------------------------------------------
1 | .polylineTestView {
2 | padding: 10px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/views/polylineTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
人员轨迹测试
4 |
5 |
6 |
7 |
8 |
9 |
10 |
16 |
17 |
20 |
--------------------------------------------------------------------------------
/src/views/somethingTest/component/son.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 | {{ $parent.msg }}
8 |
9 |
10 |
12 |
--------------------------------------------------------------------------------
/src/views/somethingTest/index.js:
--------------------------------------------------------------------------------
1 |
2 | import { somethingData } from '@/api/something'
3 | // import Vue from 'vue'
4 | import son from './component/son.vue'
5 |
6 | export default {
7 | name: 'somethingTestView',
8 | components: { son },
9 | data() {
10 | return {
11 | showText: '',
12 | test1: {},
13 | test2: [],
14 | test3: [],
15 | includetest: 0,
16 | msg: '子组件访问父数据测试'
17 | }
18 | },
19 | mounted() {
20 | },
21 | created() {
22 | this.initData()
23 | },
24 | methods: {
25 | async initData() {
26 | const { code, result } = await somethingData()
27 | if (code !== 0) return
28 | this.test1 = result.test1
29 | this.test2 = result.test2
30 | this.test3 = result.test3
31 |
32 | // 可枚举键值对的值
33 | // const values = Object.values(this.test1)
34 |
35 | // 可枚举键值对的键值数组
36 | // const entries = Object.entries(this.test1)
37 |
38 | // 异步迭代,不能保证马上获取到数据的情景,保证是顺序执行
39 | // for await (const item of this.test2) {
40 | // console.log(111, item)
41 | // }
42 |
43 | // 数组降维,默认1,默认去除空项(空值不去除,例如: ''、 "")
44 | // const flatRes = this.test3.flat()
45 | // 数组嵌套3层了
46 | // const flatRes = this.test3.flat(2)
47 | // 无穷降维,多维-->一维,可不关注数组嵌套多少层了
48 | // const flatRes = this.test3.flat(Infinity)
49 |
50 | // includes
51 | // const includesRes = this.test3.includes(3)
52 |
53 | // 空值合并运算符
54 | // const a = 0
55 | // const b = a ?? 2
56 |
57 | // globalThis
58 |
59 | // 获取vue版本
60 | /**
61 | const version = Number(Vue.version.split('.')[0])
62 |
63 | if (version === 2) {
64 | // Vue v2.x.x
65 | } else if (version === 1) {
66 | // Vue v1.x.x
67 | } else {
68 | // Unsupported versions of Vue
69 | }
70 | */
71 |
72 | // this.showText = version
73 | },
74 | // includes 测试
75 | includeClick() {
76 | this.includetest = this.$utils.randomIntR(3)
77 | }
78 | },
79 | watch: {}
80 | }
81 |
--------------------------------------------------------------------------------
/src/views/somethingTest/index.scss:
--------------------------------------------------------------------------------
1 | .somethingTestView {
2 | padding: 10px;
3 | .line {
4 | display: flex;
5 | align-items: center;
6 | }
7 | .color1 {
8 | color: red;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/views/somethingTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ showText }}
4 |
{{ v-pre不编译,原样输出 }}
5 |

6 |
判断当前为:手机端
7 |
判断当前为:桌面端
8 |
9 |
includes测试{{ includetest }}
10 |
includes测试
11 |
12 |
13 |
14 |
15 |
16 |
22 |
23 |
26 |
--------------------------------------------------------------------------------
/src/views/videoCaptureTest/index.js:
--------------------------------------------------------------------------------
1 | import EasyPlayer from '@easydarwin/easyplayer'
2 |
3 | export default {
4 | name: 'videoCaptureTestView',
5 | components: { EasyPlayer },
6 | data() {
7 | return {
8 | url: 'https://player.alicdn.com/video/editor.mp4',
9 | captureImg1: '',
10 | captureImg2: '',
11 | player2: ''
12 | }
13 | },
14 | mounted() {
15 | this.player2 = this.$refs['video2'].player.el_.children[0]
16 | this.player2.setAttribute('crossOrigin', 'Anonymous')
17 | },
18 | created() {
19 | },
20 | methods: {
21 | // 普通视频截图+水印
22 | captureClick() {
23 | const v = document.querySelector('#video1')
24 | // v.setAttribute('crossOrigin', 'anonymous')
25 | // v.crossOrigin = 'anonymous'
26 | const width = v.videoWidth
27 | const height = v.videoHeight
28 | // console.log(222, v, width, height)
29 |
30 | const canvas = window.canvas = document.createElement('canvas')
31 | canvas.width = width
32 | canvas.height = height
33 |
34 | const ctx = canvas.getContext('2d')
35 |
36 | ctx.drawImage(v, 0, 0, width, height)
37 |
38 | ctx.rotate(-16 * Math.PI / 180)
39 | ctx.font = '100px 宋体'
40 | ctx.fillStyle = 'rgba(255, 255, 255, 1)'
41 | ctx.fillText('测试水印', 100, height - 200)
42 |
43 | const image = canvas.toDataURL('image/png')
44 | this.captureImg1 = image
45 | },
46 | // Easyplayer视频截图+水印
47 | captureClick2() {
48 | const width = this.player2.videoWidth
49 | const height = this.player2.videoHeight
50 |
51 | const canvas = window.canvas = document.createElement('canvas')
52 | canvas.width = width
53 | canvas.height = height
54 |
55 | const ctx = canvas.getContext('2d')
56 |
57 | ctx.drawImage(this.player2, 0, 0, width, height)
58 |
59 | ctx.rotate(-16 * Math.PI / 180)
60 | ctx.font = '100px 宋体'
61 | ctx.fillStyle = 'rgba(255, 255, 255, 1)'
62 | ctx.fillText('测试水印', 100, height - 200)
63 |
64 | const image = canvas.toDataURL('image/png')
65 | this.captureImg2 = image
66 | }
67 | },
68 | watch: {}
69 | }
70 |
--------------------------------------------------------------------------------
/src/views/videoCaptureTest/index.scss:
--------------------------------------------------------------------------------
1 | .videoCaptureTestView {
2 | // video {
3 | // object-fit: fill;
4 | // }
5 | padding: 10px;
6 | .video-view {
7 | width: 520px;
8 | height: 320px;
9 | float: left;
10 | }
11 | .capture-img {
12 | width: 520px;
13 | height: 320px;
14 | }
15 | ::v-deep .video-wrapper {
16 | padding-bottom: 0px !important;
17 | height: 320px !important;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/views/videoCaptureTest/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
video视频截图+水印
4 |
普通视频截图+水印
5 |
6 |
10 |
11 |
![]()
12 |
13 |
Easyplayer视频截图+水印
14 |
Easyplayer视频截图+水印
15 |
16 |
25 |
26 |
![]()
27 |
28 |
29 |
30 |
31 |
37 |
38 |
41 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 | const resolve = (dir) => path.join(__dirname, dir)
3 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
4 | // const TerserPlugin = require('terser-webpack-plugin')
5 |
6 | module.exports = {
7 | // 基本路径
8 | publicPath: process.env.NODE_ENV === 'production' ? '/' : '/dist',
9 | productionSourceMap: false,
10 | // 是否使用包含运行时编译器的Vue核心的构建
11 | runtimeCompiler: true,
12 | // webpack配置
13 | // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
14 | chainWebpack: (config) => {
15 | config.resolve.alias
16 | .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components'))
17 | .set('_c', resolve('src/components'))
18 | // 因为是多页面,所以取消 chunks,每个页面只对应一个单独的 JS / CSS
19 | config.optimization.splitChunks({
20 | cacheGroups: {}
21 | })
22 |
23 | // it can improve the speed of the first screen, it is recommended to turn on preload
24 | config.plugin('preload').tap(() => [
25 | {
26 | rel: 'preload',
27 | // to ignore runtime.js
28 | // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
29 | fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
30 | include: 'initial'
31 | }
32 | ])
33 |
34 | // when there are many pages, it will cause too many meaningless requests
35 | config.plugins.delete('prefetch')
36 |
37 | // set preserveWhitespace
38 | config.module
39 | .rule('vue')
40 | .use('vue-loader')
41 | .loader('vue-loader')
42 | .tap(options => {
43 | options.compilerOptions.preserveWhitespace = true
44 | options.transformAssetUrls = {
45 | // avatar: 'img-src'
46 | }
47 | return options
48 | })
49 | .end()
50 | // =====提取公共代码,防止代码被重复打包,拆分过大的js文件,合并零散的js文件
51 | config
52 | .when(process.env.NODE_ENV !== 'development',
53 | config => {
54 | config
55 | .optimization.splitChunks({
56 | chunks: 'all',
57 | cacheGroups: {
58 | libs: {
59 | name: 'chunk-libs',
60 | test: /[\\/]node_modules[\\/]/,
61 | priority: 10,
62 | chunks: 'initial' // only package third parties that are initially dependent
63 | },
64 | elementUI: {
65 | name: 'chunk-elementUI', // split elementUI into a single package
66 | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
67 | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
68 | },
69 | commons: {
70 | name: 'chunk-commons',
71 | test: path.resolve(__dirname, 'src/components'),
72 | minChunks: 3, // minimum common number
73 | priority: 5,
74 | reuseExistingChunk: true
75 | }
76 | }
77 | })
78 | // https://webpack.js.org/configuration/optimization/#optimizationruntimechunk
79 | config.optimization.runtimeChunk('single')
80 | }
81 | )
82 | // ===end
83 | },
84 | configureWebpack: (config) => {
85 | config.externals = {
86 | 'AMap': 'AMap',
87 | 'AMapUI': 'AMapUI',
88 | 'Loca': 'Loca'
89 | // 'BMapGL': 'BMapGL'
90 | }
91 | if (process.env.NODE_ENV === 'production') {
92 | config.plugins.push(
93 | // eslint-disable-next-line no-undef
94 | new UglifyJsPlugin({
95 | uglifyOptions: {
96 | compress: {
97 | drop_debugger: true,
98 | drop_console: true // 生产环境自动删除console
99 | },
100 | warnings: false
101 | },
102 | sourceMap: false,
103 | parallel: true // 使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。
104 | })
105 | // new TerserPlugin({
106 | // terserOptions: {
107 | // mangle: true, // 混淆,默认也是开的,mangle也是可以配置很多选项的,具体看后面的链接
108 | // compress: {
109 | // drop_console: true, // 传true就是干掉所有的console.*这些函数的调用.
110 | // drop_debugger: true, // 干掉那些debugger;
111 | // pure_funcs: ['console.log'] // 如果你要干掉特定的函数比如console.info ,又想删掉后保留其参数中的副作用,那用pure_funcs来处理
112 | // }
113 | // }
114 | // })
115 | )
116 | }
117 | }
118 | }
119 |
--------------------------------------------------------------------------------