Browse Source

init project

hi-cactus! 3 years ago
commit
39eed428ab
100 changed files with 11218 additions and 0 deletions
  1. 14 0
      .editorconfig
  2. 92 0
      .eslintrc.js
  3. 107 0
      .gitattributes
  4. 16 0
      .gitignore
  5. 1 0
      .nvmrc
  6. 7 0
      .prettierignore
  7. 9 0
      .prettierrc
  8. 24 0
      .travis.yml
  9. 1 0
      README.md
  10. 52 0
      app/.htaccess
  11. 143 0
      app/app.tsx
  12. 3 0
      app/assets/fonts/iconfont.css
  13. BIN
      app/assets/fonts/iconfont.eot
  14. 0 0
      app/assets/fonts/iconfont.js
  15. 67 0
      app/assets/fonts/iconfont.svg
  16. BIN
      app/assets/fonts/iconfont.ttf
  17. BIN
      app/assets/fonts/iconfont.woff
  18. BIN
      app/assets/fonts/iconfont.woff2
  19. BIN
      app/assets/images/bg1.png
  20. BIN
      app/assets/images/bg10.png
  21. BIN
      app/assets/images/bg11.png
  22. BIN
      app/assets/images/bg12.png
  23. BIN
      app/assets/images/bg13.png
  24. BIN
      app/assets/images/bg14.png
  25. BIN
      app/assets/images/bg15.png
  26. BIN
      app/assets/images/bg16.png
  27. BIN
      app/assets/images/bg17.png
  28. BIN
      app/assets/images/bg18.png
  29. BIN
      app/assets/images/bg19.png
  30. BIN
      app/assets/images/bg2.png
  31. BIN
      app/assets/images/bg20.png
  32. BIN
      app/assets/images/bg3.png
  33. BIN
      app/assets/images/bg4.png
  34. BIN
      app/assets/images/bg5.png
  35. BIN
      app/assets/images/bg6.png
  36. BIN
      app/assets/images/bg7.png
  37. BIN
      app/assets/images/bg8.png
  38. BIN
      app/assets/images/bg9.png
  39. BIN
      app/assets/images/grid.png
  40. 27 0
      app/assets/images/logo.svg
  41. 33 0
      app/assets/images/logo_light.svg
  42. 17 0
      app/assets/images/logo_mobile.svg
  43. BIN
      app/assets/images/noDashboard.png
  44. BIN
      app/assets/images/profile.png
  45. 26 0
      app/assets/js/china.js
  46. 3319 0
      app/assets/js/geo.js
  47. 168 0
      app/assets/json/echartsThemes/default.project.json
  48. 179 0
      app/assets/json/echartsThemes/macarons.project.json
  49. 167 0
      app/assets/json/echartsThemes/walden.project.json
  50. 117 0
      app/assets/json/slideSettings/chart.json
  51. 218 0
      app/assets/json/slideSettings/label.json
  52. 133 0
      app/assets/json/slideSettings/rectangle.json
  53. 194 0
      app/assets/json/slideSettings/slide.json
  54. 308 0
      app/assets/json/slideSettings/timer.json
  55. 78 0
      app/assets/json/slideSettings/video.json
  56. 49 0
      app/assets/less/resizer.less
  57. 35 0
      app/assets/less/style.less
  58. 82 0
      app/assets/less/util.less
  59. 93 0
      app/assets/less/variable.less
  60. 141 0
      app/assets/override/antd.css
  61. 54 0
      app/assets/override/codemirror_theme.css
  62. 99 0
      app/assets/override/datepicker.css
  63. 27 0
      app/assets/override/lessVariables.js
  64. 23 0
      app/assets/override/react-grid.css
  65. 17 0
      app/assets/sqlFunctionName/sqlFns.js
  66. 88 0
      app/assets/template/activate.html
  67. 116 0
      app/assets/template/inviteOrgMemberTemplate.html
  68. 73 0
      app/components/Avatar/Avatar.less
  69. 121 0
      app/components/Avatar/index.tsx
  70. 9 0
      app/components/Avatar/types.ts
  71. 69 0
      app/components/Avatar/useIntersectionObserver.ts
  72. 41 0
      app/components/Box/Box.less
  73. 64 0
      app/components/Box/index.tsx
  74. 73 0
      app/components/CheckPanel/CheckPanel.less
  75. 177 0
      app/components/CheckPanel/index.tsx
  76. 11 0
      app/components/CheckPanel/types.ts
  77. 23 0
      app/components/CheckPanel/utils.ts
  78. 43 0
      app/components/ColorPicker/ColorPicker.less
  79. 83 0
      app/components/ColorPicker/index.tsx
  80. 24 0
      app/components/ConditionValuesControl/ConditionValuesControl.less
  81. 359 0
      app/components/ConditionValuesControl/index.tsx
  82. 42 0
      app/components/Container/Body.tsx
  83. 25 0
      app/components/Container/Container.less
  84. 37 0
      app/components/Container/Title.tsx
  85. 35 0
      app/components/Container/index.tsx
  86. 380 0
      app/components/Control/Config/ControlForm/BaseForm.tsx
  87. 146 0
      app/components/Control/Config/ControlForm/Condition.tsx
  88. 293 0
      app/components/Control/Config/ControlForm/DefaultValue.tsx
  89. 78 0
      app/components/Control/Config/ControlForm/GlobalControlRelatedItemForm.tsx
  90. 184 0
      app/components/Control/Config/ControlForm/GlobalControlRelatedViewForm.tsx
  91. 160 0
      app/components/Control/Config/ControlForm/LocalControlRelatedInfoForm.tsx
  92. 380 0
      app/components/Control/Config/ControlForm/ValueForm.tsx
  93. 227 0
      app/components/Control/Config/ControlForm/index.tsx
  94. 34 0
      app/components/Control/Config/ControlForm/types.ts
  95. 184 0
      app/components/Control/Config/ControlList.tsx
  96. 119 0
      app/components/Control/Config/OptionSettingForm.tsx
  97. 1046 0
      app/components/Control/Config/index.tsx
  98. 184 0
      app/components/Control/Control.less
  99. 93 0
      app/components/Control/Control/Date.tsx
  100. 57 0
      app/components/Control/Control/DateRange.tsx

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
+# editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 92 - 0
.eslintrc.js

@@ -0,0 +1,92 @@
+const fs = require('fs')
+const path = require('path')
+
+const prettierOptions = JSON.parse(
+  fs.readFileSync(path.resolve(__dirname, '.prettierrc'), 'utf8')
+)
+
+module.exports = {
+  parser: 'babel-eslint',
+  extends: ['standard', 'standard-react', 'prettier', 'prettier/react'],
+  plugins: ['prettier', 'redux-saga', 'react', 'react-hooks', 'jsx-a11y'],
+  env: {
+    browser: true,
+    node: true,
+    jest: true,
+    es6: true
+  },
+  parserOptions: {
+    ecmaVersion: 6,
+    sourceType: 'module',
+    ecmaFeatures: {
+      jsx: true
+    }
+  },
+  rules: {
+    'prettier/prettier': ['error', prettierOptions],
+    // 'arrow-parens': 0,
+    'arrow-body-style': [2, 'as-needed'],
+    'class-methods-use-this': 0,
+    'import/imports-first': 0,
+    'import/newline-after-import': 0,
+    'import/no-dynamic-require': 0,
+    'import/no-extraneous-dependencies': 0,
+    'import/no-named-as-default': 0,
+    'import/no-unresolved': 2,
+    'import/no-webpack-loader-syntax': 0,
+    'import/prefer-default-export': 0,
+    indent: [
+      2,
+      2,
+      {
+        SwitchCase: 1
+      }
+    ],
+    'jsx-a11y/aria-props': 2,
+    'jsx-a11y/heading-has-content': 0,
+    'jsx-a11y/label-has-associated-control': [
+      2,
+      {
+        // NOTE: If this error triggers, either disable it or add
+        // your custom components, labels and attributes via these options
+        // See https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-associated-control.md
+        controlComponents: ['Input']
+      }
+    ],
+    'jsx-a11y/label-has-for': 0,
+    'jsx-a11y/mouse-events-have-key-events': 2,
+    'jsx-a11y/role-has-required-aria-props': 2,
+    'jsx-a11y/role-supports-aria-props': 2,
+    'jsx-quotes': ['error', 'prefer-double'],
+    'max-len': 0,
+    'newline-per-chained-call': 0,
+    'no-confusing-arrow': 0,
+    'no-console': 1,
+    'no-unused-vars': 2,
+    'no-use-before-define': 0,
+    'prefer-template': 2,
+    'react/destructuring-assignment': 0,
+    'react-hooks/rules-of-hooks': 'error',
+    'react-hooks/exhaustive-deps': 'error',
+    'react/jsx-closing-tag-location': 0,
+    'react/forbid-prop-types': 0,
+    'react/jsx-first-prop-new-line': [2, 'multiline'],
+    'react/jsx-filename-extension': 0,
+    'react/jsx-no-target-blank': 0,
+    'react/jsx-uses-vars': 2,
+    'react/require-default-props': 0,
+    'react/require-extension': 0,
+    'react/self-closing-comp': 0,
+    'react/sort-comp': 0,
+    'redux-saga/no-yield-in-race': 2,
+    'redux-saga/yield-effects': 2,
+    'require-yield': 0
+  },
+  settings: {
+    'import/resolver': {
+      webpack: {
+        config: './internals/webpack/webpack.prod.babel.js'
+      }
+    }
+  }
+}

+ 107 - 0
.gitattributes

@@ -0,0 +1,107 @@
+# From https://github.com/Danimoth/gitattributes/blob/master/Web.gitattributes
+
+# Handle line endings automatically for files detected as text
+# and leave all files detected as binary untouched.
+* text=auto
+
+#
+# The above will handle all files NOT found below
+#
+
+#
+## These files are text and should be normalized (Convert crlf => lf)
+#
+
+# source code
+*.php text
+*.css text
+*.sass text
+*.scss text
+*.less text
+*.styl text
+*.js text eol=lf
+*.coffee text
+*.json text
+*.htm text
+*.html text
+*.xml text
+*.svg text
+*.txt text
+*.ini text
+*.inc text
+*.pl text
+*.rb text
+*.py text
+*.scm text
+*.sql text
+*.sh text
+*.bat text
+
+# templates
+*.ejs text
+*.hbt text
+*.jade text
+*.haml text
+*.hbs text
+*.dot text
+*.tmpl text
+*.phtml text
+
+# server config
+.htaccess text
+.nginx.conf text
+
+# git config
+.gitattributes text
+.gitignore text
+.gitconfig text
+
+# code analysis config
+.jshintrc text
+.jscsrc text
+.jshintignore text
+.csslintrc text
+
+# misc config
+*.yaml text
+*.yml text
+.editorconfig text
+
+# build config
+*.npmignore text
+*.bowerrc text
+
+# Heroku
+Procfile text
+.slugignore text
+
+# Documentation
+*.md text
+LICENSE text
+AUTHORS text
+
+
+#
+## These files are binary and should be left untouched
+#
+
+# (binary is a macro for -text -diff)
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.mov binary
+*.mp4 binary
+*.mp3 binary
+*.flv binary
+*.fla binary
+*.swf binary
+*.gz binary
+*.zip binary
+*.7z binary
+*.ttf binary
+*.eot binary
+*.woff binary
+*.pyc binary
+*.pdf binary

+ 16 - 0
.gitignore

@@ -0,0 +1,16 @@
+# Don't check auto-generated stuff into git
+coverage
+build
+node_modules
+__snapshots__
+stats.json
+package-lock.json
+
+# Cruft
+.DS_Store
+npm-debug.log
+.idea
+pom.xml
+.vscode
+.awcache
+.history

+ 1 - 0
.nvmrc

@@ -0,0 +1 @@
+lts/carbon

+ 7 - 0
.prettierignore

@@ -0,0 +1,7 @@
+build/
+libs/
+node_modules/
+internals/scripts/
+package-lock.json
+yarn.lock
+package.json

+ 9 - 0
.prettierrc

@@ -0,0 +1,9 @@
+{
+  "printWidth": 80,
+  "tabWidth": 2,
+  "useTabs": false,
+  "semi": false,
+  "singleQuote": true,
+  "trailingComma": "none",
+  "arrowParens": "always"
+}

+ 24 - 0
.travis.yml

@@ -0,0 +1,24 @@
+language: node_js
+
+node_js:
+  - 'node'
+  - 'lts/*'
+
+script:
+  - npm test -- --maxWorkers=4
+  - npm run build
+
+before_install:
+  - export CHROME_BIN=chromium-browser
+  - export DISPLAY=:99.0
+  - sh -e /etc/init.d/xvfb start
+
+notifications:
+  email:
+    on_failure: change
+
+after_success: 'npm run coveralls'
+
+cache:
+  directories:
+    - node_modules

+ 1 - 0
README.md

@@ -0,0 +1 @@
+Davinci Web Application

+ 52 - 0
app/.htaccess

@@ -0,0 +1,52 @@
+<ifModule mod_rewrite.c>
+
+
+  #######################################################################
+  # GENERAL                                                             #
+  #######################################################################
+
+  # Make apache follow sym links to files
+  Options +FollowSymLinks
+  # If somebody opens a folder, hide all files from the resulting folder list
+  IndexIgnore */*
+
+
+  #######################################################################
+  # REWRITING                                                           #
+  #######################################################################
+
+  # Enable rewriting
+  RewriteEngine On
+
+  # If its not HTTPS
+  RewriteCond %{HTTPS} off
+
+  # Comment out the RewriteCond above, and uncomment the RewriteCond below if you're using a load balancer (e.g. CloudFlare) for SSL
+  # RewriteCond %{HTTP:X-Forwarded-Proto} !https
+
+  # Redirect to the same URL with https://, ignoring all further rules if this one is in effect
+  RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R,L]
+
+  # If we get to here, it means we are on https://
+
+  # If the file with the specified name in the browser doesn't exist
+  RewriteCond %{REQUEST_FILENAME} !-f
+
+  # and the directory with the specified name in the browser doesn't exist
+  RewriteCond %{REQUEST_FILENAME} !-d
+
+  # and we are not opening the root already (otherwise we get a redirect loop)
+  RewriteCond %{REQUEST_FILENAME} !\/$
+
+  # Rewrite all requests to the root
+  RewriteRule ^(.*) /
+
+</ifModule>
+
+<IfModule mod_headers.c>
+  # Do not cache sw.js, required for offline-first updates.
+  <FilesMatch "sw\.js$">
+    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
+    Header set Pragma "no-cache"
+  </FilesMatch>
+</IfModule>

+ 143 - 0
app/app.tsx

@@ -0,0 +1,143 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import 'intersection-observer'
+
+import React from 'react'
+import ReactDOM from 'react-dom'
+import { Provider } from 'react-redux'
+import { ConnectedRouter } from 'connected-react-router'
+import history from 'utils/history'
+
+import App from 'containers/App'
+
+import { ConfigProvider } from 'antd'
+import zh_CN from 'antd/es/locale/zh_CN'
+import LanguageProvider from 'containers/LanguageProvider'
+import { translationMessages } from './i18n'
+import moment from 'moment'
+import 'moment/dist/locale/zh-cn'
+moment.locale('zh-cn')
+
+import '!file-loader?name=[name].[ext]!./favicon.ico'
+import 'file-loader?name=[name].[ext]!./.htaccess'
+import 'react-grid-layout/css/styles.css'
+import 'libs/react-resizable/css/styles.css'
+import 'bootstrap-datepicker/dist/css/bootstrap-datepicker3.standalone.min.css'
+import 'assets/fonts/iconfont.css'
+import 'assets/override/antd.css'
+import 'assets/override/react-grid.css'
+import 'assets/override/datepicker.css'
+import 'assets/less/style.less'
+
+import * as echarts from 'echarts/lib/echarts'
+import 'zrender/lib/svg/svg'
+import 'echarts/lib/chart/bar'
+import 'echarts/lib/chart/line'
+import 'echarts/lib/chart/scatter'
+import 'echarts/lib/chart/pie'
+import 'echarts/lib/chart/sankey'
+import 'echarts/lib/chart/funnel'
+import 'echarts/lib/chart/map'
+import 'echarts/lib/chart/lines'
+import 'echarts/lib/chart/effectScatter'
+import 'echarts/lib/chart/treemap'
+import 'echarts/lib/chart/heatmap'
+import 'echarts/lib/chart/boxplot'
+import 'echarts/lib/chart/graph'
+import 'echarts/lib/chart/gauge'
+import 'echarts/lib/chart/radar'
+import 'echarts/lib/chart/parallel'
+import 'echarts/lib/chart/pictorialBar'
+import 'echarts-wordcloud'
+import 'echarts/lib/component/legend'
+import 'echarts/lib/component/legendScroll'
+import 'echarts/lib/component/tooltip'
+import 'echarts/lib/component/toolbox'
+import 'echarts/lib/component/dataZoom'
+import 'echarts/lib/component/visualMap'
+import 'echarts/lib/component/geo'
+import 'echarts/lib/component/brush'
+import 'echarts/lib/component/markLine'
+import 'echarts/lib/component/markArea'
+import 'assets/js/china.js'
+
+import { DEFAULT_ECHARTS_THEME } from 'app/globalConstants'
+echarts.registerTheme('default', DEFAULT_ECHARTS_THEME)
+
+import configureStore from './configureStore'
+
+
+const initialState = {}
+const store = configureStore(initialState, history)
+const MOUNT_NODE = document.getElementById('app')
+
+const render = (messages) => {
+  ReactDOM.render(
+    <Provider store={store}>
+      <LanguageProvider messages={messages}>
+        <ConfigProvider locale={zh_CN}>
+          <ConnectedRouter history={history}>
+            <App />
+          </ConnectedRouter>
+        </ConfigProvider>
+      </LanguageProvider>
+    </Provider>,
+    MOUNT_NODE
+  )
+}
+
+if (module.hot) {
+  module.hot.accept(['./i18n', 'containers/App'], () => {
+    ReactDOM.unmountComponentAtNode(MOUNT_NODE)
+    render(translationMessages)
+  })
+}
+
+interface IWindow extends Window {
+  Intl: any
+  __REACT_DEVTOOLS_GLOBAL_HOOK__: any
+}
+declare const window: IWindow
+
+if (!window.Intl) {
+  (new Promise((resolve) => {
+    resolve(import('intl'))
+  }))
+    .then(() => Promise.all([
+      import('intl/locale-data/jsonp/en.js')
+    ]))
+    .then(() => render(translationMessages))
+    .catch((err) => {
+      throw err
+    })
+} else {
+  render(translationMessages)
+}
+
+// Install ServiceWorker and AppCache in the end since
+// it's not most important operation and if main code fails,
+// we do not want it installed
+if (process.env.NODE_ENV === 'production') {
+  // disable react developer tools in production
+  if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {
+    window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = () => void 0
+  }
+}

File diff suppressed because it is too large
+ 3 - 0
app/assets/fonts/iconfont.css


BIN
app/assets/fonts/iconfont.eot


File diff suppressed because it is too large
+ 0 - 0
app/assets/fonts/iconfont.js


File diff suppressed because it is too large
+ 67 - 0
app/assets/fonts/iconfont.svg


BIN
app/assets/fonts/iconfont.ttf


BIN
app/assets/fonts/iconfont.woff


BIN
app/assets/fonts/iconfont.woff2


BIN
app/assets/images/bg1.png


BIN
app/assets/images/bg10.png


BIN
app/assets/images/bg11.png


BIN
app/assets/images/bg12.png


BIN
app/assets/images/bg13.png


BIN
app/assets/images/bg14.png


BIN
app/assets/images/bg15.png


BIN
app/assets/images/bg16.png


BIN
app/assets/images/bg17.png


BIN
app/assets/images/bg18.png


BIN
app/assets/images/bg19.png


BIN
app/assets/images/bg2.png


BIN
app/assets/images/bg20.png


BIN
app/assets/images/bg3.png


BIN
app/assets/images/bg4.png


BIN
app/assets/images/bg5.png


BIN
app/assets/images/bg6.png


BIN
app/assets/images/bg7.png


BIN
app/assets/images/bg8.png


BIN
app/assets/images/bg9.png


BIN
app/assets/images/grid.png


+ 27 - 0
app/assets/images/logo.svg

@@ -0,0 +1,27 @@
+
+<svg width="91px" height="18px" viewBox="0 0 91 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
+  <desc>Created with Sketch.</desc>
+  <defs></defs>
+  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+    <g id="内页" transform="translate(-22.000000, -19.000000)">
+      <g id="Page-1" transform="translate(22.000000, 19.000000)">
+        <path d="M5.04,17.9999995 L0,17.9999995 L0,11.7070651 C0,8.82028121 2.25652799,6.47999954 5.04,6.47999954 L5.04,17.9999995 Z" id="Fill-1" fill="#006595"></path>
+        <path d="M20.16,18 L15.12,18 L15.12,11.7461 C15.12,8.83775834 17.376528,6.48 20.16,6.48 L20.16,6.48 L20.16,18 Z" id="Fill-3" fill="#1B98E0"></path>
+        <path d="M51.12,18 L46.08,18 L46.08,11.7461 C46.08,8.83775834 48.336528,6.48 51.12,6.48 L51.12,18 Z" id="Fill-5" fill="#1B98E0"></path>
+        <polygon id="Fill-7" fill="#1B98E0" points="21.6 18 26.64 18 26.64 6.48 21.6 6.48"></polygon>
+        <path d="M59.76,18 L54.72,18 L54.72,11.7461 C54.72,8.83775834 56.976528,6.48 59.76,6.48 L59.76,6.48 L59.76,18 Z" id="Fill-9" fill="#1B98E0"></path>
+        <polygon id="Fill-10" fill="#1B98E0" points="61.2 18 66.24 18 66.24 6.48 61.2 6.48"></polygon>
+        <polygon id="Fill-11" fill="#1B98E0" points="75.6 11.52 80.64 11.52 80.64 6.48 75.6 6.48"></polygon>
+        <polygon id="Fill-12" fill="#1B98E0" points="75.6 18 75.6 14.4 80.64 14.4 80.64 18"></polygon>
+        <path d="M74.88,18 L69.84,18 L69.84,11.7461 C69.84,8.83775834 72.096528,6.48 74.88,6.48 L74.88,6.48 L74.88,18 Z" id="Fill-13" fill="#1B98E0"></path>
+        <path d="M89.64,17.82 L84.6,17.82 L84.6,11.5661 C84.6,8.65775834 86.856528,6.3 89.64,6.3 L89.64,6.3 L89.64,17.82 Z" id="Fill-14" fill="#1B98E0"></path>
+        <polygon id="Fill-15" fill="#1B98E0" points="28.08 18 31.68 18 31.68 14.4 28.08 14.4"></polygon>
+        <polygon id="Fill-16" fill="#006595" points="6.3 0 6.3 11.1529619 6.3 18 11.34 18 11.34 11.1529619 11.34 0"></polygon>
+        <polyline id="Fill-17" fill="#006595" points="40.7020205 17.976457 47.2727547 2.05805094 90.18 2.05805094 90.18 0 42.8701284 0 42.8603622 0 42.8603622 0.0294287552 38.2038134 10.4407338 33.5746101 0.117518829 33.5746101 0 33.5355451 0 15.3 0 15.3 2.05805094 29.1348721 2.05805094 35.7142005 18 35.9888275 18 40.4187993 18 40.6942075 18"></polyline>
+        <polygon id="Fill-18" fill="#1B98E0" points="75.6 11.52 80.64 11.52 80.64 6.48 75.6 6.48"></polygon>
+        <polygon id="Fill-19" fill="#1B98E0" points="75.6 17.28 80.64 17.28 80.64 12.24 75.6 12.24"></polygon>
+      </g>
+    </g>
+  </g>
+</svg>

+ 33 - 0
app/assets/images/logo_light.svg

@@ -0,0 +1,33 @@
+
+<svg width="140px" height="28px" viewBox="0 0 140 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
+  <desc>Created with Sketch.</desc>
+  <defs>
+    <polygon id="path-1" points="0 28 140 28 140 0 0 0"></polygon>
+  </defs>
+  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+    <g id="首页" transform="translate(-618.000000, -157.000000)">
+      <g id="Page-1" transform="translate(618.000000, 157.000000)">
+        <path d="M8,28 L0,28 L0,18.1672899 C0,13.6566901 3.58179046,10 8,10 L8,28 Z" id="Fill-1" fill="#FFFFFF"></path>
+        <path d="M31,28 L23,28 L23,18.2282813 C23,13.6839974 26.5817905,10 31,10 L31,10 L31,28 Z" id="Fill-3" fill="#FFFFFF"></path>
+        <path d="M80,28 L72,28 L72,18.2282813 C72,13.6839974 75.5817905,10 80,10 L80,28 Z" id="Fill-5" fill="#FFFFFF"></path>
+        <mask id="mask-2" fill="white">
+          <use xlink:href="#path-1"></use>
+        </mask>
+        <g id="Clip-8"></g>
+        <polygon id="Fill-7" fill="#FFFFFF" mask="url(#mask-2)" points="33 28 41 28 41 10 33 10"></polygon>
+        <path d="M93,28 L85,28 L85,18.2282813 C85,13.6839974 88.5817905,10 93,10 L93,10 L93,28 Z" id="Fill-9" fill="#FFFFFF" mask="url(#mask-2)"></path>
+        <polygon id="Fill-10" fill="#FFFFFF" mask="url(#mask-2)" points="95 28 103 28 103 10 95 10"></polygon>
+        <polygon id="Fill-11" fill="#FFFFFF" mask="url(#mask-2)" points="117 18 125 18 125 10 117 10"></polygon>
+        <polygon id="Fill-12" fill="#FFFFFF" mask="url(#mask-2)" points="117 28 117 22 125 22 125 28"></polygon>
+        <path d="M116,28 L108,28 L108,18.2282813 C108,13.6839974 111.58179,10 116,10 L116,10 L116,28 Z" id="Fill-13" fill="#FFFFFF" mask="url(#mask-2)"></path>
+        <path d="M140,28 L132,28 L132,18.2282813 C132,13.6839974 135.58179,10 140,10 L140,10 L140,28 Z" id="Fill-14" fill="#FFFFFF" mask="url(#mask-2)"></path>
+        <polygon id="Fill-15" fill="#FFFFFF" mask="url(#mask-2)" points="43 28 49 28 49 22 43 22"></polygon>
+        <polygon id="Fill-16" fill="#FFFFFF" mask="url(#mask-2)" points="10 0 10 17.3490518 10 28 18 28 18 17.3490518 18 0"></polygon>
+        <polyline id="Fill-17" fill="#FFFFFF" mask="url(#mask-2)" points="62.4719904 27.9633775 72.6822 3.20141258 139 3.20141258 139 0 65.8409953 0 65.8258196 0 65.8258196 0.0457780636 58.5900468 16.2411414 51.396766 0.182807067 51.396766 0 51.3360632 0 23 0 23 3.20141258 44.4978937 3.20141258 54.7214579 28 55.1481985 28 62.0318951 28 62.4598498 28"></polyline>
+        <polygon id="Fill-18" fill="#FFFFFF" mask="url(#mask-2)" points="117 18 125 18 125 10 117 10"></polygon>
+        <polygon id="Fill-19" fill="#FFFFFF" mask="url(#mask-2)" points="117 28 125 28 125 20 117 20"></polygon>
+      </g>
+    </g>
+  </g>
+</svg>

+ 17 - 0
app/assets/images/logo_mobile.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">  <image id="image0" width="32" height="32" x="0" y="0"
+    xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
+AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA4VBMVEUAAAAdc58AZZUec5//
+//8LbJlRkbNHia5fmroAOncqeaOz0uAAU4hlor8Yc58fdJ8FZ5YAZZUAZZUAZZUAZZUfdKAFZ5YA
+ZZUAZZUAZZUAZZUAZZUfdKAFZ5YAZZUAZZUAZZUvgakheaMPbJoacZ0fdKB1o78fdqELa5kFaJcH
+Z5cdc58fdKB8qcQfc58GZ5YFZpYedJ8dcZ0GZpYseqQIZ5YhdqEDZpbm7/UNa5ked6IEZ5cAZZUA
+ZZUAZZUAZZUAZZUAZZUAZZUFZpYec58fdKAFZ5YAZZUAZZUBZZX///8mNS0DAAAASHRSTlMAAAAA
+AAAAAAAAAAAAAAAFGRwbFAEnyt7c350GLeq1B7QFGSoGLAEwnNfXKCoCW97qK0rnFcdV9gKdBra6
+uwNJZWNkXBERW0fOvDAFAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+IEFAMEEbE5LY4AAACSSURBVDjL
+Y2CgO2DkFxAUEhISFBZhwqFAVExcQkJCUkoahwJmGVkPEJCTJ6BAYagqYGFVVFJWUcWpgE1NXUNT
+S1sHlwJ2XT19Tw8DQ1wKODiNjIHiuBVwmZh64FPAzWNmjlcBr4WlB14FfFbW+BUwyduMDAW2qArQ
+UzWTnb2Do6Ojk7OLq5sTkOHgbocjRdEAAAA7YFDyCw3VbAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAx
+OC0wNC0yMFQwMzowNDoxNy0wNzowMAjMzeoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDQtMjBU
+MDM6MDQ6MTctMDc6MDB5kXVWAAAAAElFTkSuQmCC" />
+</svg>

BIN
app/assets/images/noDashboard.png


BIN
app/assets/images/profile.png


File diff suppressed because it is too large
+ 26 - 0
app/assets/js/china.js


+ 3319 - 0
app/assets/js/geo.js

@@ -0,0 +1,3319 @@
+export default [
+  {id: 11, name: "北京市", parent: 0, lon: 116.39564503788, lat: 39.92998577808},
+  {id: 12, name: "天津市", parent: 0, lon: 117.21081309155, lat: 39.14392990331},
+  {id: 13, name: "河北省", parent: 0, lon: 115.66143362422, lat: 38.613839749251},
+  {id: 14, name: "山西省", parent: 0, lon: 112.51549586384, lat: 37.866565990509},
+  {id: 15, name: "内蒙古自治区", parent: 0, lon: 114.41586754817, lat: 43.468238221949},
+  {id: 21, name: "辽宁省", parent: 0, lon: 122.75359155772, lat: 41.621600105958},
+  {id: 22, name: "吉林省", parent: 0, lon: 126.26287593078, lat: 43.678846185241},
+  {id: 23, name: "黑龙江省", parent: 0, lon: 128.04741371499, lat: 47.356591643111},
+  {id: 31, name: "上海市", parent: 0, lon: 121.48789948569, lat: 31.249161710015},
+  {id: 32, name: "江苏省", parent: 0, lon: 119.36848893836, lat: 33.013797169954},
+  {id: 33, name: "浙江省", parent: 0, lon: 119.95720242066, lat: 29.159494120761},
+  {id: 34, name: "安徽省", parent: 0, lon: 117.21600520757, lat: 31.859252417079},
+  {id: 35, name: "福建省", parent: 0, lon: 117.98494311991, lat: 26.050118295661},
+  {id: 36, name: "江西省", parent: 0, lon: 115.6760823667, lat: 27.757258443441},
+  {id: 37, name: "山东省", parent: 0, lon: 118.52766339288, lat: 36.099289929728},
+  {id: 41, name: "河南省", parent: 0, lon: 113.48680405753, lat: 34.157183767956},
+  {id: 42, name: "湖北省", parent: 0, lon: 112.41056219213, lat: 31.20931625014},
+  {id: 43, name: "湖南省", parent: 0, lon: 111.72066354648, lat: 27.695864052356},
+  {id: 44, name: "广东省", parent: 0, lon: 113.39481755876, lat: 23.408003729025},
+  {id: 45, name: "广西壮族自治区", parent: 0, lon: 108.92427442706, lat: 23.552254688119},
+  {id: 46, name: "海南省", parent: 0, lon: 109.73375548794, lat: 19.180500801261},
+  {id: 50, name: "重庆市", parent: 0, lon: 106.53063501341, lat: 29.544606108886},
+  {id: 51, name: "四川省", parent: 0, lon: 102.8991597236, lat: 30.367480937958},
+  {id: 52, name: "贵州省", parent: 0, lon: 106.7349961033, lat: 26.902825927797},
+  {id: 53, name: "云南省", parent: 0, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 54, name: "西藏自治区", parent: 0, lon: 89.137981684031, lat: 31.367315402715},
+  {id: 61, name: "陕西省", parent: 0, lon: 109.50378929073, lat: 35.860026261323},
+  {id: 62, name: "甘肃省", parent: 0, lon: 102.45762459934, lat: 38.103267343752},
+  {id: 63, name: "青海省", parent: 0, lon: 96.202543672261, lat: 35.499761004275},
+  {id: 64, name: "宁夏回族自治区", parent: 0, lon: 106.15548126505, lat: 37.321323112295},
+  {id: 65, name: "新疆维吾尔自治区", parent: 0, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 71, name: "台湾省", parent: 0, lon: 121.97387097872, lat: 24.086956718805},
+  {id: 81, name: "香港特别行政区", parent: 0, lon: 114.18612410257, lat: 22.29358599328},
+  {id: 82, name: "澳门特别行政区", parent: 0, lon: 113.55751910182, lat: 22.204117988443},
+  {id: 1101, name: "市辖区", parent: 11, lon: 116.39564503788, lat: 39.92998577808},
+  {id: 1201, name: "市辖区", parent: 12, lon: 117.21081309155, lat: 39.14392990331},
+  {id: 1301, name: "石家庄市", parent: 13, lon: 114.52208184421, lat: 38.048958314615},
+  {id: 1302, name: "唐山市", parent: 13, lon: 118.18345059773, lat: 39.650530922537},
+  {id: 1303, name: "秦皇岛市", parent: 13, lon: 119.60436761612, lat: 39.945461565898},
+  {id: 1304, name: "邯郸市", parent: 13, lon: 114.48269393234, lat: 36.609307928471},
+  {id: 1305, name: "邢台市", parent: 13, lon: 114.52048681294, lat: 37.069531196912},
+  {id: 1306, name: "保定市", parent: 13, lon: 115.49481016908, lat: 38.886564548027},
+  {id: 1307, name: "张家口市", parent: 13, lon: 114.89378153033, lat: 40.811188491103},
+  {id: 1308, name: "承德市", parent: 13, lon: 117.93382245584, lat: 40.992521052457},
+  {id: 1309, name: "沧州市", parent: 13, lon: 116.86380647644, lat: 38.297615350326},
+  {id: 1310, name: "廊坊市", parent: 13, lon: 116.70360222264, lat: 39.518610625085},
+  {id: 1311, name: "衡水市", parent: 13, lon: 115.68622865291, lat: 37.746929045857},
+  {id: 1390, name: "省直辖县级行政区划", parent: 13, lon: 115.66143362422, lat: 38.613839749251},
+  {id: 1401, name: "太原市", parent: 14, lon: 112.55086358906, lat: 37.890277053968},
+  {id: 1402, name: "大同市", parent: 14, lon: 113.29050867308, lat: 40.113744499705},
+  {id: 1403, name: "阳泉市", parent: 14, lon: 113.56923760163, lat: 37.869529493223},
+  {id: 1404, name: "长治市", parent: 14, lon: 113.12029208573, lat: 36.201664385743},
+  {id: 1405, name: "晋城市", parent: 14, lon: 112.86733275751, lat: 35.499834467226},
+  {id: 1406, name: "朔州市", parent: 14, lon: 112.47992772666, lat: 39.337671966221},
+  {id: 1407, name: "晋中市", parent: 14, lon: 112.73851439992, lat: 37.693361526798},
+  {id: 1408, name: "运城市", parent: 14, lon: 111.00685365308, lat: 35.038859479812},
+  {id: 1409, name: "忻州市", parent: 14, lon: 112.72793882881, lat: 38.461030572959},
+  {id: 1410, name: "临汾市", parent: 14, lon: 111.53878759641, lat: 36.099745443585},
+  {id: 1411, name: "吕梁市", parent: 14, lon: 111.14315660235, lat: 37.527316096963},
+  {id: 1501, name: "呼和浩特市", parent: 15, lon: 111.66035052005, lat: 40.828318873082},
+  {id: 1502, name: "包头市", parent: 15, lon: 109.84623853249, lat: 40.647119425709},
+  {id: 1503, name: "乌海市", parent: 15, lon: 106.83199909716, lat: 39.683177006785},
+  {id: 1504, name: "赤峰市", parent: 15, lon: 118.93076119217, lat: 42.297112320317},
+  {id: 1505, name: "通辽市", parent: 15, lon: 122.26036326322, lat: 43.633756072996},
+  {id: 1506, name: "鄂尔多斯市", parent: 15, lon: 109.99370625145, lat: 39.816489560602},
+  {id: 1507, name: "呼伦贝尔市", parent: 15, lon: 119.760821794, lat: 49.201636054604},
+  {id: 1508, name: "巴彦淖尔市", parent: 15, lon: 107.42380671968, lat: 40.769179902429},
+  {id: 1509, name: "乌兰察布市", parent: 15, lon: 113.11284639068, lat: 41.022362946751},
+  {id: 1522, name: "兴安盟", parent: 15, lon: 122.04816651407, lat: 46.083757065182},
+  {id: 1525, name: "锡林郭勒盟", parent: 15, lon: 116.02733968896, lat: 43.939704842324},
+  {id: 1529, name: "阿拉善盟", parent: 15, lon: 105.69568287113, lat: 38.843075264408},
+  {id: 2101, name: "沈阳市", parent: 21, lon: 123.43279092161, lat: 41.808644783516},
+  {id: 2102, name: "大连市", parent: 21, lon: 121.59347778144, lat: 38.948709938304},
+  {id: 2103, name: "鞍山市", parent: 21, lon: 123.00776332888, lat: 41.118743682153},
+  {id: 2104, name: "抚顺市", parent: 21, lon: 123.92981976705, lat: 41.877303829591},
+  {id: 2105, name: "本溪市", parent: 21, lon: 123.77806236979, lat: 41.325837626649},
+  {id: 2106, name: "丹东市", parent: 21, lon: 124.33854311477, lat: 40.129022826638},
+  {id: 2107, name: "锦州市", parent: 21, lon: 121.14774873824, lat: 41.130878875917},
+  {id: 2108, name: "营口市", parent: 21, lon: 122.23339137079, lat: 40.668651066474},
+  {id: 2109, name: "阜新市", parent: 21, lon: 121.66082212857, lat: 42.01925010706},
+  {id: 2110, name: "辽阳市", parent: 21, lon: 123.17245120515, lat: 41.273339265569},
+  {id: 2111, name: "盘锦市", parent: 21, lon: 122.07322781023, lat: 41.141248022956},
+  {id: 2112, name: "铁岭市", parent: 21, lon: 123.85484961462, lat: 42.299757012125},
+  {id: 2113, name: "朝阳市", parent: 21, lon: 120.44616270274, lat: 41.571827667857},
+  {id: 2114, name: "葫芦岛市", parent: 21, lon: 120.86075764476, lat: 40.743029881318},
+  {id: 2201, name: "长春市", parent: 22, lon: 125.3136424272, lat: 43.898337607098},
+  {id: 2202, name: "吉林市", parent: 22, lon: 126.56454398883, lat: 43.871988334359},
+  {id: 2203, name: "四平市", parent: 22, lon: 124.39138207368, lat: 43.175524701126},
+  {id: 2204, name: "辽源市", parent: 22, lon: 125.13368605218, lat: 42.923302619054},
+  {id: 2205, name: "通化市", parent: 22, lon: 125.94265013851, lat: 41.736397129868},
+  {id: 2206, name: "白山市", parent: 22, lon: 126.43579767535, lat: 41.945859397018},
+  {id: 2207, name: "松原市", parent: 22, lon: 124.83299453234, lat: 45.136048970084},
+  {id: 2208, name: "白城市", parent: 22, lon: 122.8407766791, lat: 45.621086275219},
+  {id: 2224, name: "延边朝鲜族自治州", parent: 22, lon: 129.48590195816, lat: 42.896413603744},
+  {id: 2301, name: "哈尔滨市", parent: 23, lon: 126.65771685545, lat: 45.773224633239},
+  {id: 2302, name: "齐齐哈尔市", parent: 23, lon: 123.98728894217, lat: 47.347699813366},
+  {id: 2303, name: "鸡西市", parent: 23, lon: 130.94176727325, lat: 45.321539886551},
+  {id: 2304, name: "鹤岗市", parent: 23, lon: 130.29247205063, lat: 47.338665903727},
+  {id: 2305, name: "双鸭山市", parent: 23, lon: 131.17140173958, lat: 46.655102062482},
+  {id: 2306, name: "大庆市", parent: 23, lon: 125.02183973021, lat: 46.596709020008},
+  {id: 2307, name: "伊春市", parent: 23, lon: 128.91076597792, lat: 47.734685075079},
+  {id: 2308, name: "佳木斯市", parent: 23, lon: 130.28473458595, lat: 46.81377960474},
+  {id: 2309, name: "七台河市", parent: 23, lon: 131.01904804712, lat: 45.77500536864},
+  {id: 2310, name: "牡丹江市", parent: 23, lon: 129.60803539564, lat: 44.588521152783},
+  {id: 2311, name: "黑河市", parent: 23, lon: 127.50083029524, lat: 50.250690090738},
+  {id: 2312, name: "绥化市", parent: 23, lon: 126.98909457163, lat: 46.646063926997},
+  {id: 2327, name: "大兴安岭地区", parent: 23, lon: 124.19610419017, lat: 51.991788968014},
+  {id: 3101, name: "市辖区", parent: 31, lon: 121.48789948569, lat: 31.249161710015},
+  {id: 3201, name: "南京市", parent: 32, lon: 118.77807440803, lat: 32.057235501806},
+  {id: 3202, name: "无锡市", parent: 32, lon: 120.30545590054, lat: 31.570037451923},
+  {id: 3203, name: "徐州市", parent: 32, lon: 117.18810662318, lat: 34.271553431092},
+  {id: 3204, name: "常州市", parent: 32, lon: 119.98186101346, lat: 31.771396744684},
+  {id: 3205, name: "苏州市", parent: 32, lon: 120.61990711549, lat: 31.317987367952},
+  {id: 3206, name: "南通市", parent: 32, lon: 120.87380095093, lat: 32.014664540823},
+  {id: 3207, name: "连云港市", parent: 32, lon: 119.17387221742, lat: 34.60154896701},
+  {id: 3208, name: "淮安市", parent: 32, lon: 119.03018636466, lat: 33.606512739276},
+  {id: 3209, name: "盐城市", parent: 32, lon: 120.14887181794, lat: 33.379861877121},
+  {id: 3210, name: "扬州市", parent: 32, lon: 119.42777755117, lat: 32.408505254568},
+  {id: 3211, name: "镇江市", parent: 32, lon: 119.45583540513, lat: 32.204409443599},
+  {id: 3212, name: "泰州市", parent: 32, lon: 119.91960601619, lat: 32.47605327483},
+  {id: 3213, name: "宿迁市", parent: 32, lon: 118.29689337855, lat: 33.952049733709},
+  {id: 3301, name: "杭州市", parent: 33, lon: 120.21937541572, lat: 30.259244461536},
+  {id: 3302, name: "宁波市", parent: 33, lon: 121.57900597259, lat: 29.885258965918},
+  {id: 3303, name: "温州市", parent: 33, lon: 120.69063473371, lat: 28.002837594041},
+  {id: 3304, name: "嘉兴市", parent: 33, lon: 120.76042769896, lat: 30.773992239582},
+  {id: 3305, name: "湖州市", parent: 33, lon: 120.13724316328, lat: 30.877925155691},
+  {id: 3306, name: "绍兴市", parent: 33, lon: 120.59246738555, lat: 30.002364580528},
+  {id: 3307, name: "金华市", parent: 33, lon: 119.65257570368, lat: 29.102899105391},
+  {id: 3308, name: "衢州市", parent: 33, lon: 118.87584165151, lat: 28.956910447536},
+  {id: 3309, name: "舟山市", parent: 33, lon: 122.16987209835, lat: 30.036010302554},
+  {id: 3310, name: "台州市", parent: 33, lon: 121.44061293594, lat: 28.668283285674},
+  {id: 3311, name: "丽水市", parent: 33, lon: 119.92957584319, lat: 28.456299552144},
+  {id: 3401, name: "合肥市", parent: 34, lon: 117.28269909168, lat: 31.866942260687},
+  {id: 3402, name: "芜湖市", parent: 34, lon: 118.38410842323, lat: 31.366019787543},
+  {id: 3403, name: "蚌埠市", parent: 34, lon: 117.35707986588, lat: 32.929498906698},
+  {id: 3404, name: "淮南市", parent: 34, lon: 117.01863886329, lat: 32.642811823748},
+  {id: 3405, name: "马鞍山市", parent: 34, lon: 118.51588184662, lat: 31.68852815888},
+  {id: 3406, name: "淮北市", parent: 34, lon: 116.79144742863, lat: 33.960023305364},
+  {id: 3407, name: "铜陵市", parent: 34, lon: 117.81942872881, lat: 30.940929694666},
+  {id: 3408, name: "安庆市", parent: 34, lon: 117.05873877211, lat: 30.537897817381},
+  {id: 3410, name: "黄山市", parent: 34, lon: 118.293569632, lat: 29.734434856163},
+  {id: 3411, name: "滁州市", parent: 34, lon: 118.32457035098, lat: 32.317350595384},
+  {id: 3412, name: "阜阳市", parent: 34, lon: 115.82093225905, lat: 32.90121133057},
+  {id: 3413, name: "宿州市", parent: 34, lon: 116.98869241183, lat: 33.636772385781},
+  {id: 3415, name: "六安市", parent: 34, lon: 116.50525268298, lat: 31.755558355198},
+  {id: 3416, name: "亳州市", parent: 34, lon: 115.78792824512, lat: 33.871210565302},
+  {id: 3417, name: "池州市", parent: 34, lon: 117.49447677159, lat: 30.660019248161},
+  {id: 3418, name: "宣城市", parent: 34, lon: 118.75209631098, lat: 30.951642354296},
+  {id: 3501, name: "福州市", parent: 35, lon: 119.33022110713, lat: 26.047125496573},
+  {id: 3502, name: "厦门市", parent: 35, lon: 118.10388604566, lat: 24.489230612469},
+  {id: 3503, name: "莆田市", parent: 35, lon: 119.07773096396, lat: 25.448450136734},
+  {id: 3504, name: "三明市", parent: 35, lon: 117.64219393404, lat: 26.270835279362},
+  {id: 3505, name: "泉州市", parent: 35, lon: 118.60036234323, lat: 24.901652383991},
+  {id: 3506, name: "漳州市", parent: 35, lon: 117.67620467895, lat: 24.517064779808},
+  {id: 3507, name: "南平市", parent: 35, lon: 118.18188294866, lat: 26.643626474198},
+  {id: 3508, name: "龙岩市", parent: 35, lon: 117.01799673877, lat: 25.078685433515},
+  {id: 3509, name: "宁德市", parent: 35, lon: 119.54208214972, lat: 26.656527419159},
+  {id: 3601, name: "南昌市", parent: 36, lon: 115.89352754584, lat: 28.689578000141},
+  {id: 3602, name: "景德镇市", parent: 36, lon: 117.18652262527, lat: 29.303562768448},
+  {id: 3603, name: "萍乡市", parent: 36, lon: 113.85991703301, lat: 27.639544222952},
+  {id: 3604, name: "九江市", parent: 36, lon: 115.99984802155, lat: 29.719639526122},
+  {id: 3605, name: "新余市", parent: 36, lon: 114.94711741679, lat: 27.822321558629},
+  {id: 3606, name: "鹰潭市", parent: 36, lon: 117.03545018601, lat: 28.241309597182},
+  {id: 3607, name: "赣州市", parent: 36, lon: 114.93590907928, lat: 25.845295536347},
+  {id: 3608, name: "吉安市", parent: 36, lon: 114.99203871092, lat: 27.113847650157},
+  {id: 3609, name: "宜春市", parent: 36, lon: 114.40003867156, lat: 27.811129895843},
+  {id: 3610, name: "抚州市", parent: 36, lon: 116.36091886693, lat: 27.95454517027},
+  {id: 3611, name: "上饶市", parent: 36, lon: 117.95546387715, lat: 28.457622553937},
+  {id: 3701, name: "济南市", parent: 37, lon: 117.02496706629, lat: 36.682784727161},
+  {id: 3702, name: "青岛市", parent: 37, lon: 120.38442818368, lat: 36.105214901274},
+  {id: 3703, name: "淄博市", parent: 37, lon: 118.05913427787, lat: 36.804684854212},
+  {id: 3704, name: "枣庄市", parent: 37, lon: 117.2793053833, lat: 34.807883078386},
+  {id: 3705, name: "东营市", parent: 37, lon: 118.58392633307, lat: 37.487121155276},
+  {id: 3706, name: "烟台市", parent: 37, lon: 121.30955503009, lat: 37.53656156286},
+  {id: 3707, name: "潍坊市", parent: 37, lon: 119.14263382297, lat: 36.716114873051},
+  {id: 3708, name: "济宁市", parent: 37, lon: 116.60079762482, lat: 35.402121664331},
+  {id: 3709, name: "泰安市", parent: 37, lon: 117.08941491714, lat: 36.188077758948},
+  {id: 3710, name: "威海市", parent: 37, lon: 122.09395836581, lat: 37.528787081251},
+  {id: 3711, name: "日照市", parent: 37, lon: 119.50717994299, lat: 35.420225193144},
+  {id: 3712, name: "莱芜市", parent: 37, lon: 117.68466691247, lat: 36.233654133647},
+  {id: 3713, name: "临沂市", parent: 37, lon: 118.34076823661, lat: 35.072409074391},
+  {id: 3714, name: "德州市", parent: 37, lon: 116.32816136356, lat: 37.460825926305},
+  {id: 3715, name: "聊城市", parent: 37, lon: 115.98686913929, lat: 36.455828514728},
+  {id: 3716, name: "滨州市", parent: 37, lon: 117.96829241453, lat: 37.405313941826},
+  {id: 3717, name: "菏泽市", parent: 37, lon: 115.46335977453, lat: 35.262440496075},
+  {id: 4101, name: "郑州市", parent: 41, lon: 113.64964384986, lat: 34.75661006414},
+  {id: 4102, name: "开封市", parent: 41, lon: 114.35164211776, lat: 34.801854175837},
+  {id: 4103, name: "洛阳市", parent: 41, lon: 112.44752476895, lat: 34.657367817651},
+  {id: 4104, name: "平顶山市", parent: 41, lon: 113.30084897798, lat: 33.745301456524},
+  {id: 4105, name: "安阳市", parent: 41, lon: 114.35180650767, lat: 36.110266722181},
+  {id: 4106, name: "鹤壁市", parent: 41, lon: 114.29776983802, lat: 35.755425874224},
+  {id: 4107, name: "新乡市", parent: 41, lon: 113.91269016082, lat: 35.307257557661},
+  {id: 4108, name: "焦作市", parent: 41, lon: 113.21183588499, lat: 35.234607554986},
+  {id: 4109, name: "濮阳市", parent: 41, lon: 115.02662744067, lat: 35.753297888208},
+  {id: 4110, name: "许昌市", parent: 41, lon: 113.83531245979, lat: 34.026739588655},
+  {id: 4111, name: "漯河市", parent: 41, lon: 114.04606140023, lat: 33.576278688483},
+  {id: 4112, name: "三门峡市", parent: 41, lon: 111.18126209327, lat: 34.78331994105},
+  {id: 4113, name: "南阳市", parent: 41, lon: 112.54284190051, lat: 33.011419569116},
+  {id: 4114, name: "商丘市", parent: 41, lon: 115.64188568785, lat: 34.438588640246},
+  {id: 4115, name: "信阳市", parent: 41, lon: 114.08549099347, lat: 32.128582307512},
+  {id: 4116, name: "周口市", parent: 41, lon: 114.6541019423, lat: 33.623740818141},
+  {id: 4117, name: "驻马店市", parent: 41, lon: 114.04915354746, lat: 32.983158154093},
+  {id: 4190, name: "省直辖县级行政区划", parent: 41, lon: 113.48680405753, lat: 34.157183767956},
+  {id: 4201, name: "武汉市", parent: 42, lon: 114.31620010268, lat: 30.581084126921},
+  {id: 4202, name: "黄石市", parent: 42, lon: 115.05068316392, lat: 30.216127127714},
+  {id: 4203, name: "十堰市", parent: 42, lon: 110.80122891676, lat: 32.636994339468},
+  {id: 4205, name: "宜昌市", parent: 42, lon: 111.31098109196, lat: 30.732757818026},
+  {id: 4206, name: "襄阳市", parent: 42, lon: 111.94954852739, lat: 31.939712558944},
+  {id: 4207, name: "鄂州市", parent: 42, lon: 114.89559404136, lat: 30.384439322752},
+  {id: 4208, name: "荆门市", parent: 42, lon: 112.21733029897, lat: 31.042611202949},
+  {id: 4209, name: "孝感市", parent: 42, lon: 113.93573439207, lat: 30.927954784201},
+  {id: 4210, name: "荆州市", parent: 42, lon: 112.24186580719, lat: 30.332590522986},
+  {id: 4211, name: "黄冈市", parent: 42, lon: 114.90661804658, lat: 30.446108937901},
+  {id: 4212, name: "咸宁市", parent: 42, lon: 114.30006059206, lat: 29.880656757728},
+  {id: 4213, name: "随州市", parent: 42, lon: 113.37935836429, lat: 31.717857608189},
+  {id: 4228, name: "恩施土家族苗族自治州", parent: 42, lon: 109.49192330375, lat: 30.285888316556},
+  {id: 4290, name: "省直辖县级行政区划", parent: 42, lon: 112.41056219213, lat: 31.20931625014},
+  {id: 4301, name: "长沙市", parent: 43, lon: 112.97935278765, lat: 28.213478230853},
+  {id: 4302, name: "株洲市", parent: 43, lon: 113.13169534107, lat: 27.827432927663},
+  {id: 4303, name: "湘潭市", parent: 43, lon: 112.93555563303, lat: 27.835095052979},
+  {id: 4304, name: "衡阳市", parent: 43, lon: 112.58381881072, lat: 26.898164415358},
+  {id: 4305, name: "邵阳市", parent: 43, lon: 111.46152540355, lat: 27.236811244922},
+  {id: 4306, name: "岳阳市", parent: 43, lon: 113.14619551912, lat: 29.378007075474},
+  {id: 4307, name: "常德市", parent: 43, lon: 111.65371813684, lat: 29.012148855181},
+  {id: 4308, name: "张家界市", parent: 43, lon: 110.48162015697, lat: 29.12488935322},
+  {id: 4309, name: "益阳市", parent: 43, lon: 112.36654664523, lat: 28.588087779887},
+  {id: 4310, name: "郴州市", parent: 43, lon: 113.0377044678, lat: 25.782263975739},
+  {id: 4311, name: "永州市", parent: 43, lon: 111.61464768616, lat: 26.435971646759},
+  {id: 4312, name: "怀化市", parent: 43, lon: 109.98695879585, lat: 27.557482901173},
+  {id: 4313, name: "娄底市", parent: 43, lon: 111.99639635657, lat: 27.741073302349},
+  {id: 4331, name: "湘西土家族苗族自治州", parent: 43, lon: 109.74574580039, lat: 28.317950793674},
+  {id: 4401, name: "广州市", parent: 44, lon: 113.30764967515, lat: 23.120049102076},
+  {id: 4402, name: "韶关市", parent: 44, lon: 113.59446110744, lat: 24.802960311892},
+  {id: 4403, name: "深圳市", parent: 44, lon: 114.02597365732, lat: 22.546053546205},
+  {id: 4404, name: "珠海市", parent: 44, lon: 113.56244702619, lat: 22.256914646126},
+  {id: 4405, name: "汕头市", parent: 44, lon: 116.72865028834, lat: 23.383908453269},
+  {id: 4406, name: "佛山市", parent: 44, lon: 113.13402563539, lat: 23.035094840514},
+  {id: 4407, name: "江门市", parent: 44, lon: 113.07812534115, lat: 22.575116783451},
+  {id: 4408, name: "湛江市", parent: 44, lon: 110.36506726285, lat: 21.257463103764},
+  {id: 4409, name: "茂名市", parent: 44, lon: 110.93124533068, lat: 21.668225718822},
+  {id: 4412, name: "肇庆市", parent: 44, lon: 112.47965336992, lat: 23.078663282929},
+  {id: 4413, name: "惠州市", parent: 44, lon: 114.41065807997, lat: 23.113539852408},
+  {id: 4414, name: "梅州市", parent: 44, lon: 116.12640309837, lat: 24.304570606031},
+  {id: 4415, name: "汕尾市", parent: 44, lon: 115.3729242894, lat: 22.778730500164},
+  {id: 4416, name: "河源市", parent: 44, lon: 114.71372147587, lat: 23.757250850469},
+  {id: 4417, name: "阳江市", parent: 44, lon: 111.97700975587, lat: 21.871517304519},
+  {id: 4418, name: "清远市", parent: 44, lon: 113.04077334891, lat: 23.698468550422},
+  {id: 4451, name: "潮州市", parent: 44, lon: 116.63007599086, lat: 23.661811676517},
+  {id: 4452, name: "揭阳市", parent: 44, lon: 116.37950085538, lat: 23.547999466926},
+  {id: 4453, name: "云浮市", parent: 44, lon: 112.05094595865, lat: 22.937975685537},
+  {id: 4501, name: "南宁市", parent: 45, lon: 108.29723355587, lat: 22.806492935603},
+  {id: 4502, name: "柳州市", parent: 45, lon: 109.42240181015, lat: 24.329053352467},
+  {id: 4503, name: "桂林市", parent: 45, lon: 110.26092014748, lat: 25.262901245955},
+  {id: 4504, name: "梧州市", parent: 45, lon: 111.30547195007, lat: 23.485394636734},
+  {id: 4505, name: "北海市", parent: 45, lon: 109.12262791919, lat: 21.47271823501},
+  {id: 4506, name: "防城港市", parent: 45, lon: 108.35179115286, lat: 21.617398470472},
+  {id: 4507, name: "钦州市", parent: 45, lon: 108.63879805642, lat: 21.973350465313},
+  {id: 4508, name: "贵港市", parent: 45, lon: 109.61370755658, lat: 23.103373164409},
+  {id: 4509, name: "玉林市", parent: 45, lon: 110.15167631614, lat: 22.643973608377},
+  {id: 4510, name: "百色市", parent: 45, lon: 106.63182140365, lat: 23.90151236791},
+  {id: 4511, name: "贺州市", parent: 45, lon: 111.55259417884, lat: 24.411053547113},
+  {id: 4512, name: "河池市", parent: 45, lon: 108.06994770937, lat: 24.699520782873},
+  {id: 4513, name: "来宾市", parent: 45, lon: 109.23181650474, lat: 23.741165926515},
+  {id: 4514, name: "崇左市", parent: 45, lon: 107.35732203837, lat: 22.415455296546},
+  {id: 4601, name: "海口市", parent: 46, lon: 110.33080184834, lat: 20.022071276952},
+  {id: 4602, name: "三亚市", parent: 46, lon: 109.52277128136, lat: 18.257775914897},
+  {id: 4603, name: "三沙市", parent: 46, lon: 113.75535610385, lat: 12.464712920653},
+  {id: 4690, name: "省直辖县级行政区划", parent: 46, lon: 109.73375548794, lat: 19.180500801261},
+  {id: 5001, name: "市辖区", parent: 50, lon: 106.53063501341, lat: 29.544606108886},
+  {id: 5002, name: "县", parent: 50, lon: 106.53063501341, lat: 29.544606108886},
+  {id: 5101, name: "成都市", parent: 51, lon: 104.0679234633, lat: 30.67994284542},
+  {id: 5103, name: "自贡市", parent: 51, lon: 104.77607133936, lat: 29.359156889476},
+  {id: 5104, name: "攀枝花市", parent: 51, lon: 101.72242315249, lat: 26.587571257109},
+  {id: 5105, name: "泸州市", parent: 51, lon: 105.44397028921, lat: 28.89592980386},
+  {id: 5106, name: "德阳市", parent: 51, lon: 104.40239781824, lat: 31.131139652701},
+  {id: 5107, name: "绵阳市", parent: 51, lon: 104.70551897529, lat: 31.504701258061},
+  {id: 5108, name: "广元市", parent: 51, lon: 105.81968694, lat: 32.441040158428},
+  {id: 5109, name: "遂宁市", parent: 51, lon: 105.56488779226, lat: 30.55749135038},
+  {id: 5110, name: "内江市", parent: 51, lon: 105.07305599171, lat: 29.599461534775},
+  {id: 5111, name: "乐山市", parent: 51, lon: 103.76082423877, lat: 29.600957611095},
+  {id: 5113, name: "南充市", parent: 51, lon: 106.10555398379, lat: 30.800965168237},
+  {id: 5114, name: "眉山市", parent: 51, lon: 103.84142956287, lat: 30.061115079945},
+  {id: 5115, name: "宜宾市", parent: 51, lon: 104.63301906153, lat: 28.769674796266},
+  {id: 5116, name: "广安市", parent: 51, lon: 106.63572033137, lat: 30.463983887888},
+  {id: 5117, name: "达州市", parent: 51, lon: 107.49497344659, lat: 31.214198858945},
+  {id: 5118, name: "雅安市", parent: 51, lon: 103.00935646635, lat: 29.999716337066},
+  {id: 5119, name: "巴中市", parent: 51, lon: 106.75791584175, lat: 31.86918915916},
+  {id: 5120, name: "资阳市", parent: 51, lon: 104.63593030167, lat: 30.132191433952},
+  {id: 5132, name: "阿坝藏族羌族自治州", parent: 51, lon: 102.22856468921, lat: 31.905762858339},
+  {id: 5133, name: "甘孜藏族自治州", parent: 51, lon: 101.96923206306, lat: 30.055144114356},
+  {id: 5134, name: "凉山彝族自治州", parent: 51, lon: 102.2595908032, lat: 27.892392903666},
+  {id: 5201, name: "贵阳市", parent: 52, lon: 106.70917709618, lat: 26.629906741441},
+  {id: 5202, name: "六盘水市", parent: 52, lon: 104.85208676007, lat: 26.591866060319},
+  {id: 5203, name: "遵义市", parent: 52, lon: 106.93126031648, lat: 27.699961377076},
+  {id: 5204, name: "安顺市", parent: 52, lon: 105.92826996576, lat: 26.228594577737},
+  {id: 5205, name: "毕节市", parent: 52, lon: 105.33332337117, lat: 27.408562131331},
+  {id: 5206, name: "铜仁市", parent: 52, lon: 109.16855802826, lat: 27.674902690624},
+  {id: 5223, name: "黔西南布依族苗族自治州", parent: 52, lon: 104.90055779825, lat: 25.095148055927},
+  {id: 5226, name: "黔东南苗族侗族自治州", parent: 52, lon: 107.98535257274, lat: 26.583991766542},
+  {id: 5227, name: "黔南布依族苗族自治州", parent: 52, lon: 107.52320511006, lat: 26.264535997442},
+  {id: 5301, name: "昆明市", parent: 53, lon: 102.71460113878, lat: 25.049153100453},
+  {id: 5303, name: "曲靖市", parent: 53, lon: 103.78253888803, lat: 25.520758142871},
+  {id: 5304, name: "玉溪市", parent: 53, lon: 102.54506789248, lat: 24.370447134438},
+  {id: 5305, name: "保山市", parent: 53, lon: 99.177995613278, lat: 25.12048919619},
+  {id: 5306, name: "昭通市", parent: 53, lon: 103.72502065573, lat: 27.340632963635},
+  {id: 5307, name: "丽江市", parent: 53, lon: 100.22962839888, lat: 26.875351089481},
+  {id: 5308, name: "普洱市", parent: 53, lon: 100.98005773013, lat: 22.788777780149},
+  {id: 5309, name: "临沧市", parent: 53, lon: 100.09261291373, lat: 23.887806103773},
+  {id: 5323, name: "楚雄彝族自治州", parent: 53, lon: 101.52938223914, lat: 25.066355674186},
+  {id: 5325, name: "红河哈尼族彝族自治州", parent: 53, lon: 103.38406475716, lat: 23.367717516499},
+  {id: 5326, name: "文山壮族苗族自治州", parent: 53, lon: 104.24629431757, lat: 23.37408685041},
+  {id: 5328, name: "西双版纳傣族自治州", parent: 53, lon: 100.80303827521, lat: 22.009433002236},
+  {id: 5329, name: "大理白族自治州", parent: 53, lon: 100.22367478928, lat: 25.596899639421},
+  {id: 5331, name: "德宏傣族景颇族自治州", parent: 53, lon: 98.589434287407, lat: 24.441239663008},
+  {id: 5333, name: "怒江傈僳族自治州", parent: 53, lon: 98.859932042482, lat: 25.860676978165},
+  {id: 5334, name: "迪庆藏族自治州", parent: 53, lon: 99.713681598883, lat: 27.831029461167},
+  {id: 5401, name: "拉萨市", parent: 54, lon: 91.111890895984, lat: 29.662557062057},
+  {id: 5402, name: "日喀则市", parent: 54, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 5403, name: "昌都市", parent: 54, lon: 96.362440472918, lat: 30.510924801158},
+  {id: 5404, name: "林芝市", parent: 54, lon: 95.466234246683, lat: 29.128080197802},
+  {id: 5405, name: "山南市", parent: 54, lon: 92.22087273151, lat: 28.354982378107},
+  {id: 5424, name: "那曲地区", parent: 54, lon: 92.067018368859, lat: 31.48067983012},
+  {id: 5425, name: "阿里地区", parent: 54, lon: 81.10766868949, lat: 30.404556588325},
+  {id: 6101, name: "西安市", parent: 61, lon: 108.9530982792, lat: 34.277799897831},
+  {id: 6102, name: "铜川市", parent: 61, lon: 108.9680670134, lat: 34.908367696384},
+  {id: 6103, name: "宝鸡市", parent: 61, lon: 107.17064545238, lat: 34.364080809748},
+  {id: 6104, name: "咸阳市", parent: 61, lon: 108.7075092782, lat: 34.345372995999},
+  {id: 6105, name: "渭南市", parent: 61, lon: 109.48393269658, lat: 34.502357975829},
+  {id: 6106, name: "延安市", parent: 61, lon: 109.50050975697, lat: 36.60332035226},
+  {id: 6107, name: "汉中市", parent: 61, lon: 107.04547762873, lat: 33.081568978158},
+  {id: 6108, name: "榆林市", parent: 61, lon: 109.74592574433, lat: 38.279439240071},
+  {id: 6109, name: "安康市", parent: 61, lon: 109.03804456348, lat: 32.704370449994},
+  {id: 6110, name: "商洛市", parent: 61, lon: 109.9342081538, lat: 33.873907395085},
+  {id: 6201, name: "兰州市", parent: 62, lon: 103.82330544073, lat: 36.064225525043},
+  {id: 6203, name: "金昌市", parent: 62, lon: 102.20812626259, lat: 38.516071799532},
+  {id: 6204, name: "白银市", parent: 62, lon: 104.17124090374, lat: 36.546681706163},
+  {id: 6205, name: "天水市", parent: 62, lon: 105.73693162286, lat: 34.584319418869},
+  {id: 6206, name: "武威市", parent: 62, lon: 102.64014734337, lat: 37.933172142906},
+  {id: 6207, name: "张掖市", parent: 62, lon: 100.45989186892, lat: 38.939320296982},
+  {id: 6208, name: "平凉市", parent: 62, lon: 106.68891115655, lat: 35.550110190017},
+  {id: 6209, name: "酒泉市", parent: 62, lon: 98.508414506167, lat: 39.741473768159},
+  {id: 6210, name: "庆阳市", parent: 62, lon: 107.64422708673, lat: 35.72680075453},
+  {id: 6211, name: "定西市", parent: 62, lon: 104.62663760066, lat: 35.586056241828},
+  {id: 6212, name: "陇南市", parent: 62, lon: 104.93457340575, lat: 33.394479972938},
+  {id: 6229, name: "临夏回族自治州", parent: 62, lon: 103.21524917832, lat: 35.598514348802},
+  {id: 6230, name: "甘南藏族自治州", parent: 62, lon: 102.9174424865, lat: 34.992211178379},
+  {id: 6301, name: "西宁市", parent: 63, lon: 101.7679209898, lat: 36.640738611958},
+  {id: 6302, name: "海东市", parent: 63, lon: 102.37668874252, lat: 36.312743354178},
+  {id: 6322, name: "海北藏族自治州", parent: 63, lon: 100.87980217448, lat: 36.960654101084},
+  {id: 6323, name: "黄南藏族自治州", parent: 63, lon: 102.00760030834, lat: 35.522851551728},
+  {id: 6325, name: "海南藏族自治州", parent: 63, lon: 100.6240660941, lat: 36.284363803805},
+  {id: 6326, name: "果洛藏族自治州", parent: 63, lon: 100.22372276899, lat: 34.48048458461},
+  {id: 6327, name: "玉树藏族自治州", parent: 63, lon: 97.013316137414, lat: 33.006239909722},
+  {id: 6328, name: "海西蒙古族藏族自治州", parent: 63, lon: 97.342625415333, lat: 37.37379907059},
+  {id: 6401, name: "银川市", parent: 64, lon: 106.20647860784, lat: 38.502621011876},
+  {id: 6402, name: "石嘴山市", parent: 64, lon: 106.37933720153, lat: 39.020223283603},
+  {id: 6403, name: "吴忠市", parent: 64, lon: 106.20825419851, lat: 37.993561002936},
+  {id: 6404, name: "固原市", parent: 64, lon: 106.28526799598, lat: 36.021523480709},
+  {id: 6405, name: "中卫市", parent: 64, lon: 105.19675419936, lat: 37.521124191595},
+  {id: 6501, name: "乌鲁木齐市", parent: 65, lon: 87.564987741116, lat: 43.840380347218},
+  {id: 6502, name: "克拉玛依市", parent: 65, lon: 84.881180186144, lat: 45.594331066706},
+  {id: 6504, name: "吐鲁番市", parent: 65, lon: 89.266025488642, lat: 42.678924820794},
+  {id: 6505, name: "哈密市", parent: 65, lon: 93.529373012389, lat: 42.344467104552},
+  {id: 6523, name: "昌吉回族自治州", parent: 65, lon: 87.296038125667, lat: 44.007057898533},
+  {id: 6527, name: "博尔塔拉蒙古自治州", parent: 65, lon: 82.052436267224, lat: 44.913651374298},
+  {id: 6528, name: "巴音郭楞蒙古自治州", parent: 65, lon: 86.121688362984, lat: 41.771362202569},
+  {id: 6529, name: "阿克苏地区", parent: 65, lon: 80.269846179329, lat: 41.171730901452},
+  {id: 6530, name: "克孜勒苏柯尔克孜自治州", parent: 65, lon: 76.137564477462, lat: 39.750345577845},
+  {id: 6531, name: "喀什地区", parent: 65, lon: 75.992973267492, lat: 39.470627188746},
+  {id: 6532, name: "和田地区", parent: 65, lon: 79.930238637213, lat: 37.116774492678},
+  {id: 6540, name: "伊犁哈萨克自治州", parent: 65, lon: 81.297853530366, lat: 43.922248096341},
+  {id: 6542, name: "塔城地区", parent: 65, lon: 82.974880583744, lat: 46.75868362968},
+  {id: 6543, name: "阿勒泰地区", parent: 65, lon: 88.137915487132, lat: 47.839744486198},
+  {id: 6590, name: "自治区直辖县级行政区划", parent: 65, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 110101, name: "东城区", parent: 1101, lon: 116.42188470126, lat: 39.938574012986},
+  {id: 110102, name: "西城区", parent: 1101, lon: 116.37319010402, lat: 39.934280143709},
+  {id: 110105, name: "朝阳区", parent: 1101, lon: 116.52169489108, lat: 39.958953166407},
+  {id: 110106, name: "丰台区", parent: 1101, lon: 116.25837033547, lat: 39.841937852205},
+  {id: 110107, name: "石景山区", parent: 1101, lon: 116.18455581037, lat: 39.938866544646},
+  {id: 110108, name: "海淀区", parent: 1101, lon: 116.23967780102, lat: 40.033162045078},
+  {id: 110109, name: "门头沟区", parent: 1101, lon: 115.79579538125, lat: 40.000893031476},
+  {id: 110111, name: "房山区", parent: 1101, lon: 115.8628363129, lat: 39.726752620796},
+  {id: 110112, name: "通州区", parent: 1101, lon: 116.74007918068, lat: 39.809814883851},
+  {id: 110113, name: "顺义区", parent: 1101, lon: 116.72822904528, lat: 40.154951470441},
+  {id: 110114, name: "昌平区", parent: 1101, lon: 116.21645635689, lat: 40.221723549832},
+  {id: 110115, name: "大兴区", parent: 1101, lon: 116.42519459738, lat: 39.652790118364},
+  {id: 110116, name: "怀柔区", parent: 1101, lon: 116.59340835643, lat: 40.638139340311},
+  {id: 110117, name: "平谷区", parent: 1101, lon: 117.15043344819, lat: 40.215925453896},
+  {id: 110118, name: "密云区", parent: 1101, lon: 117.09666568438, lat: 40.517334853846},
+  {id: 110119, name: "延庆区", parent: 1101, lon: 116.1618831398, lat: 40.535475747111},
+  {id: 120101, name: "和平区", parent: 1201, lon: 117.20281365403, lat: 39.124808844703},
+  {id: 120102, name: "河东区", parent: 1201, lon: 117.26169316527, lat: 39.126625684666},
+  {id: 120103, name: "河西区", parent: 1201, lon: 117.23616545062, lat: 39.084493739615},
+  {id: 120104, name: "南开区", parent: 1201, lon: 117.16272794945, lat: 39.116987285522},
+  {id: 120105, name: "河北区", parent: 1201, lon: 117.22029676508, lat: 39.173148933924},
+  {id: 120106, name: "红桥区", parent: 1201, lon: 117.16221680792, lat: 39.170621331225},
+  {id: 120110, name: "东丽区", parent: 1201, lon: 117.41478234325, lat: 39.139604642775},
+  {id: 120111, name: "西青区", parent: 1201, lon: 117.12620134665, lat: 39.035064611485},
+  {id: 120112, name: "津南区", parent: 1201, lon: 117.39290995972, lat: 38.969790532725},
+  {id: 120113, name: "北辰区", parent: 1201, lon: 117.18060609828, lat: 39.259130625979},
+  {id: 120114, name: "武清区", parent: 1201, lon: 117.03457791373, lat: 39.457042575494},
+  {id: 120115, name: "宝坻区", parent: 1201, lon: 117.41142059078, lat: 39.615544004133},
+  {id: 120116, name: "滨海新区", parent: 1201, lon: 117.64628627057, lat: 39.059176638035},
+  {id: 120117, name: "宁河区", parent: 1201, lon: 117.6312358292, lat: 39.390421570053},
+  {id: 120118, name: "静海区", parent: 1201, lon: 116.98682530718, lat: 38.837510804607},
+  {id: 120119, name: "蓟州区", parent: 1201, lon: 117.47034191571, lat: 40.009456311951},
+  {id: 130102, name: "长安区", parent: 1301, lon: 114.59262155387, lat: 38.076874795787},
+  {id: 130104, name: "桥西区", parent: 1301, lon: 114.43813995532, lat: 38.033364550068},
+  {id: 130105, name: "新华区", parent: 1301, lon: 114.45350142869, lat: 38.117218640478},
+  {id: 130107, name: "井陉矿区", parent: 1301, lon: 114.05074376291, lat: 38.08109756116},
+  {id: 130108, name: "裕华区", parent: 1301, lon: 114.58638255261, lat: 38.014621045712},
+  {id: 130109, name: "藁城区", parent: 1301, lon: 114.82809608578, lat: 38.089490113945},
+  {id: 130110, name: "鹿泉区", parent: 1301, lon: 114.35731900345, lat: 38.089969323509},
+  {id: 130111, name: "栾城区", parent: 1301, lon: 114.64775310253, lat: 37.91328595181},
+  {id: 130121, name: "井陉县", parent: 1301, lon: 114.07795206335, lat: 38.000890815811},
+  {id: 130123, name: "正定县", parent: 1301, lon: 114.57020132348, lat: 38.227072535479},
+  {id: 130125, name: "行唐县", parent: 1301, lon: 114.45743612437, lat: 38.546695301387},
+  {id: 130126, name: "灵寿县", parent: 1301, lon: 114.18781898137, lat: 38.510935985414},
+  {id: 130127, name: "高邑县", parent: 1301, lon: 114.6073846934, lat: 37.622650870757},
+  {id: 130128, name: "深泽县", parent: 1301, lon: 115.23310242793, lat: 38.194680827355},
+  {id: 130129, name: "赞皇县", parent: 1301, lon: 114.28955340433, lat: 37.628132452966},
+  {id: 130130, name: "无极县", parent: 1301, lon: 114.95113960113, lat: 38.1832860202},
+  {id: 130131, name: "平山县", parent: 1301, lon: 113.87242852701, lat: 38.408762191725},
+  {id: 130132, name: "元氏县", parent: 1301, lon: 114.42836015628, lat: 37.807352641009},
+  {id: 130133, name: "赵县", parent: 1301, lon: 114.83493823756, lat: 37.769612448365},
+  {id: 130183, name: "晋州市", parent: 1301, lon: 115.09173828064, lat: 37.991145102246},
+  {id: 130184, name: "新乐市", parent: 1301, lon: 114.76227076683, lat: 38.377578025839},
+  {id: 130202, name: "路南区", parent: 1302, lon: 118.20604028639, lat: 39.612986996735},
+  {id: 130203, name: "路北区", parent: 1302, lon: 118.18506997308, lat: 39.657845680029},
+  {id: 130204, name: "古冶区", parent: 1302, lon: 118.46223153818, lat: 39.723044780378},
+  {id: 130205, name: "开平区", parent: 1302, lon: 118.25784790075, lat: 39.692123420846},
+  {id: 130207, name: "丰南区", parent: 1302, lon: 118.08584709899, lat: 39.384662748593},
+  {id: 130208, name: "丰润区", parent: 1302, lon: 118.05949036617, lat: 39.789909410339},
+  {id: 130209, name: "曹妃甸区", parent: 1302, lon: 118.41596118319, lat: 39.266037841072},
+  {id: 130223, name: "滦县", parent: 1302, lon: 118.5837772519, lat: 39.785508848229},
+  {id: 130224, name: "滦南县", parent: 1302, lon: 118.54938466456, lat: 39.360738899901},
+  {id: 130225, name: "乐亭县", parent: 1302, lon: 118.93994305703, lat: 39.357228891896},
+  {id: 130227, name: "迁西县", parent: 1302, lon: 118.37138905434, lat: 40.238507660812},
+  {id: 130229, name: "玉田县", parent: 1302, lon: 117.7347526449, lat: 39.818843355788},
+  {id: 130281, name: "遵化市", parent: 1302, lon: 117.95763912762, lat: 40.137901064021},
+  {id: 130283, name: "迁安市", parent: 1302, lon: 118.68695461732, lat: 40.04044251326},
+  {id: 130302, name: "海港区", parent: 1303, lon: 119.57761724583, lat: 39.988779577117},
+  {id: 130303, name: "山海关区", parent: 1303, lon: 119.7136155797, lat: 40.032899628101},
+  {id: 130304, name: "北戴河区", parent: 1303, lon: 119.47932079421, lat: 39.854292584187},
+  {id: 130306, name: "抚宁区", parent: 1303, lon: 119.34003537992, lat: 39.910857115367},
+  {id: 130321, name: "青龙满族自治县", parent: 1303, lon: 119.13758245072, lat: 40.353650308648},
+  {id: 130322, name: "昌黎县", parent: 1303, lon: 119.09462149738, lat: 39.638021164728},
+  {id: 130324, name: "卢龙县", parent: 1303, lon: 118.98556414609, lat: 39.920978455186},
+  {id: 130402, name: "邯山区", parent: 1304, lon: 114.46928986668, lat: 36.536153078937},
+  {id: 130403, name: "丛台区", parent: 1304, lon: 114.51106763052, lat: 36.637214815152},
+  {id: 130404, name: "复兴区", parent: 1304, lon: 114.44809470749, lat: 36.610368592227},
+  {id: 130406, name: "峰峰矿区", parent: 1304, lon: 114.19042164993, lat: 36.474684997423},
+  {id: 130421, name: "邯郸县", parent: 1304, lon: 114.49448604232, lat: 36.620347221062},
+  {id: 130423, name: "临漳县", parent: 1304, lon: 114.58694416944, lat: 36.266141946474},
+  {id: 130424, name: "成安县", parent: 1304, lon: 114.70477468285, lat: 36.428150647186},
+  {id: 130425, name: "大名县", parent: 1304, lon: 115.24863464404, lat: 36.309543770756},
+  {id: 130426, name: "涉县", parent: 1304, lon: 113.74291352234, lat: 36.598104535573},
+  {id: 130427, name: "磁县", parent: 1304, lon: 114.25510074085, lat: 36.406730602547},
+  {id: 130428, name: "肥乡县", parent: 1304, lon: 114.83690510574, lat: 36.577260887621},
+  {id: 130429, name: "永年县", parent: 1304, lon: 114.64160198718, lat: 36.770200181653},
+  {id: 130430, name: "邱县", parent: 1304, lon: 115.20670231619, lat: 36.797269787143},
+  {id: 130431, name: "鸡泽县", parent: 1304, lon: 114.86956581384, lat: 36.873677489817},
+  {id: 130432, name: "广平县", parent: 1304, lon: 115.02087402114, lat: 36.51192631393},
+  {id: 130433, name: "馆陶县", parent: 1304, lon: 115.29915662582, lat: 36.618537005781},
+  {id: 130434, name: "魏县", parent: 1304, lon: 114.93600011898, lat: 36.250567761095},
+  {id: 130435, name: "曲周县", parent: 1304, lon: 115.03853247193, lat: 36.752651265719},
+  {id: 130481, name: "武安市", parent: 1304, lon: 114.05833396936, lat: 36.748995476597},
+  {id: 130502, name: "桥东区", parent: 1305, lon: 114.52129744384, lat: 37.059046252073},
+  {id: 130503, name: "桥西区", parent: 1305, lon: 114.46840126286, lat: 37.053579664221},
+  {id: 130521, name: "邢台县", parent: 1305, lon: 114.16774440241, lat: 37.152421699275},
+  {id: 130522, name: "临城县", parent: 1305, lon: 114.38466503755, lat: 37.463137591617},
+  {id: 130523, name: "内丘县", parent: 1305, lon: 114.30459575437, lat: 37.314224311167},
+  {id: 130524, name: "柏乡县", parent: 1305, lon: 114.70742434434, lat: 37.517418414338},
+  {id: 130525, name: "隆尧县", parent: 1305, lon: 114.79291584707, lat: 37.36468808358},
+  {id: 130526, name: "任县", parent: 1305, lon: 114.7699671597, lat: 37.174630101755},
+  {id: 130527, name: "南和县", parent: 1305, lon: 114.75308935883, lat: 37.016963874379},
+  {id: 130528, name: "宁晋县", parent: 1305, lon: 115.02167843721, lat: 37.612086758173},
+  {id: 130529, name: "巨鹿县", parent: 1305, lon: 115.05888578855, lat: 37.278679297084},
+  {id: 130530, name: "新河县", parent: 1305, lon: 115.25720361984, lat: 37.499362567334},
+  {id: 130531, name: "广宗县", parent: 1305, lon: 115.19817308929, lat: 37.083548692406},
+  {id: 130532, name: "平乡县", parent: 1305, lon: 115.00481854709, lat: 37.056110207564},
+  {id: 130533, name: "威县", parent: 1305, lon: 115.38772530687, lat: 37.078394650565},
+  {id: 130534, name: "清河县", parent: 1305, lon: 115.69158951605, lat: 37.040529913617},
+  {id: 130535, name: "临西县", parent: 1305, lon: 115.52844117588, lat: 36.858027353556},
+  {id: 130581, name: "南宫市", parent: 1305, lon: 115.47940958601, lat: 37.286427413275},
+  {id: 130582, name: "沙河市", parent: 1305, lon: 114.28309250179, lat: 36.938635459346},
+  {id: 130602, name: "竞秀区", parent: 1306, lon: 115.4337718341, lat: 38.896799171923},
+  {id: 130606, name: "莲池区", parent: 1306, lon: 115.52517138526, lat: 38.878869183082},
+  {id: 130607, name: "满城区", parent: 1306, lon: 115.22854614305, lat: 38.936509575446},
+  {id: 130608, name: "清苑区", parent: 1306, lon: 115.50474549359, lat: 38.746793898598},
+  {id: 130609, name: "徐水区", parent: 1306, lon: 115.56341421452, lat: 39.030072064834},
+  {id: 130623, name: "涞水县", parent: 1306, lon: 115.44462792481, lat: 39.616117563205},
+  {id: 130624, name: "阜平县", parent: 1306, lon: 114.16421062387, lat: 38.894806411217},
+  {id: 130626, name: "定兴县", parent: 1306, lon: 115.75504588838, lat: 39.211518314259},
+  {id: 130627, name: "唐县", parent: 1306, lon: 114.80609127315, lat: 38.904521131249},
+  {id: 130628, name: "高阳县", parent: 1306, lon: 115.83844188387, lat: 38.673020900262},
+  {id: 130629, name: "容城县", parent: 1306, lon: 115.90877891487, lat: 39.057813549536},
+  {id: 130630, name: "涞源县", parent: 1306, lon: 114.73045121001, lat: 39.366936787031},
+  {id: 130631, name: "望都县", parent: 1306, lon: 115.17834559654, lat: 38.679014979104},
+  {id: 130632, name: "安新县", parent: 1306, lon: 115.88673101005, lat: 38.8782552166},
+  {id: 130633, name: "易县", parent: 1306, lon: 115.25402170203, lat: 39.317566051144},
+  {id: 130634, name: "曲阳县", parent: 1306, lon: 114.66066397519, lat: 38.706612214921},
+  {id: 130635, name: "蠡县", parent: 1306, lon: 115.66928195753, lat: 38.528232136022},
+  {id: 130636, name: "顺平县", parent: 1306, lon: 115.07398905469, lat: 38.927951375985},
+  {id: 130637, name: "博野县", parent: 1306, lon: 115.48778569396, lat: 38.459123140672},
+  {id: 130638, name: "雄县", parent: 1306, lon: 116.18329894846, lat: 39.042786858077},
+  {id: 130681, name: "涿州市", parent: 1306, lon: 115.99905364071, lat: 39.482481810572},
+  {id: 130683, name: "安国市", parent: 1306, lon: 115.33482671534, lat: 38.393739990352},
+  {id: 130684, name: "高碑店市", parent: 1306, lon: 116.04093362477, lat: 39.265087764832},
+  {id: 130702, name: "桥东区", parent: 1307, lon: 114.91516641164, lat: 40.782910350247},
+  {id: 130703, name: "桥西区", parent: 1307, lon: 114.8616234507, lat: 40.83764647974},
+  {id: 130705, name: "宣化区", parent: 1307, lon: 115.25847218771, lat: 40.632394360149},
+  {id: 130706, name: "下花园区", parent: 1307, lon: 115.35049833098, lat: 40.568836928653},
+  {id: 130708, name: "万全区", parent: 1307, lon: 114.60159442219, lat: 40.854322579125},
+  {id: 130709, name: "崇礼区", parent: 1307, lon: 115.18918281511, lat: 41.041738952718},
+  {id: 130722, name: "张北县", parent: 1307, lon: 114.77289736584, lat: 41.293640752346},
+  {id: 130723, name: "康保县", parent: 1307, lon: 114.60653573475, lat: 41.784595269099},
+  {id: 130724, name: "沽源县", parent: 1307, lon: 115.63609164922, lat: 41.580403842568},
+  {id: 130725, name: "尚义县", parent: 1307, lon: 114.15252831523, lat: 41.132634994489},
+  {id: 130726, name: "蔚县", parent: 1307, lon: 114.71253718704, lat: 39.879353147831},
+  {id: 130727, name: "阳原县", parent: 1307, lon: 114.39439590667, lat: 40.138642120211},
+  {id: 130728, name: "怀安县", parent: 1307, lon: 114.50260736695, lat: 40.559533575131},
+  {id: 130730, name: "怀来县", parent: 1307, lon: 115.63406061974, lat: 40.34798364385},
+  {id: 130731, name: "涿鹿县", parent: 1307, lon: 115.22392517513, lat: 40.101875913481},
+  {id: 130732, name: "赤城县", parent: 1307, lon: 115.89222267195, lat: 40.956026259537},
+  {id: 130802, name: "双桥区", parent: 1308, lon: 117.94835524238, lat: 40.971406352197},
+  {id: 130803, name: "双滦区", parent: 1308, lon: 117.80933581725, lat: 41.051453160703},
+  {id: 130804, name: "鹰手营子矿区", parent: 1308, lon: 117.67942626427, lat: 40.531760281234},
+  {id: 130821, name: "承德县", parent: 1308, lon: 118.12571829805, lat: 40.9732421823},
+  {id: 130822, name: "兴隆县", parent: 1308, lon: 117.72613599005, lat: 40.458141686295},
+  {id: 130823, name: "平泉县", parent: 1308, lon: 118.73932350858, lat: 41.075303768703},
+  {id: 130824, name: "滦平县", parent: 1308, lon: 117.36956340989, lat: 40.924820741761},
+  {id: 130825, name: "隆化县", parent: 1308, lon: 117.56992967905, lat: 41.517994972231},
+  {id: 130826, name: "丰宁满族自治县", parent: 1308, lon: 116.62379481268, lat: 41.425684335184},
+  {id: 130827, name: "宽城满族自治县", parent: 1308, lon: 118.63588822017, lat: 40.578090378096},
+  {id: 130828, name: "围场满族蒙古族自治县", parent: 1308, lon: 117.54702150524, lat: 42.108024565862},
+  {id: 130902, name: "新华区", parent: 1309, lon: 116.89305880724, lat: 38.308375333084},
+  {id: 130903, name: "运河区", parent: 1309, lon: 116.84485357764, lat: 38.314446124596},
+  {id: 130921, name: "沧县", parent: 1309, lon: 116.86271383128, lat: 38.302138696207},
+  {id: 130922, name: "青县", parent: 1309, lon: 116.85123400252, lat: 38.565778328556},
+  {id: 130923, name: "东光县", parent: 1309, lon: 116.67783233648, lat: 37.887451603688},
+  {id: 130924, name: "海兴县", parent: 1309, lon: 117.56726425888, lat: 38.142470216907},
+  {id: 130925, name: "盐山县", parent: 1309, lon: 117.26693989632, lat: 37.960369724102},
+  {id: 130926, name: "肃宁县", parent: 1309, lon: 115.88581610558, lat: 38.422207122829},
+  {id: 130927, name: "南皮县", parent: 1309, lon: 116.8658497774, lat: 38.023185702825},
+  {id: 130928, name: "吴桥县", parent: 1309, lon: 116.5080334073, lat: 37.661863472094},
+  {id: 130929, name: "献县", parent: 1309, lon: 116.17550530237, lat: 38.242725840471},
+  {id: 130930, name: "孟村回族自治县", parent: 1309, lon: 117.15953838544, lat: 38.091264713342},
+  {id: 130981, name: "泊头市", parent: 1309, lon: 116.38923597745, lat: 38.090278710884},
+  {id: 130982, name: "任丘市", parent: 1309, lon: 116.16321405193, lat: 38.74110464111},
+  {id: 130983, name: "黄骅市", parent: 1309, lon: 117.40021701974, lat: 38.401521845487},
+  {id: 130984, name: "河间市", parent: 1309, lon: 116.27159283893, lat: 38.483721432479},
+  {id: 131002, name: "安次区", parent: 1310, lon: 116.79612310881, lat: 39.345312180639},
+  {id: 131003, name: "广阳区", parent: 1310, lon: 116.69423648939, lat: 39.533685537455},
+  {id: 131022, name: "固安县", parent: 1310, lon: 116.28967015726, lat: 39.351105940994},
+  {id: 131023, name: "永清县", parent: 1310, lon: 116.5605569701, lat: 39.302836430211},
+  {id: 131024, name: "香河县", parent: 1310, lon: 117.05130555355, lat: 39.743100032865},
+  {id: 131025, name: "大城县", parent: 1310, lon: 116.58863867606, lat: 38.668802703656},
+  {id: 131026, name: "文安县", parent: 1310, lon: 116.49481687118, lat: 38.911390482572},
+  {id: 131028, name: "大厂回族自治县", parent: 1310, lon: 116.95507644864, lat: 39.89531635509},
+  {id: 131081, name: "霸州市", parent: 1310, lon: 116.57430598976, lat: 39.109320079055},
+  {id: 131082, name: "三河市", parent: 1310, lon: 117.02128418409, lat: 39.96742764877},
+  {id: 131102, name: "桃城区", parent: 1311, lon: 115.66665700012, lat: 37.72421788608},
+  {id: 131103, name: "冀州区", parent: 1311, lon: 115.44750567041, lat: 37.53643502058},
+  {id: 131121, name: "枣强县", parent: 1311, lon: 115.75767748261, lat: 37.461024106054},
+  {id: 131122, name: "武邑县", parent: 1311, lon: 115.94450660708, lat: 37.827678592246},
+  {id: 131123, name: "武强县", parent: 1311, lon: 115.920118282, lat: 38.050513034027},
+  {id: 131124, name: "饶阳县", parent: 1311, lon: 115.74000746168, lat: 38.223059241042},
+  {id: 131125, name: "安平县", parent: 1311, lon: 115.49041582246, lat: 38.243195869487},
+  {id: 131126, name: "故城县", parent: 1311, lon: 115.97805666289, lat: 37.356997906367},
+  {id: 131127, name: "景县", parent: 1311, lon: 116.20013356506, lat: 37.668477471141},
+  {id: 131128, name: "阜城县", parent: 1311, lon: 116.32842518537, lat: 37.912309213617},
+  {id: 131182, name: "深州市", parent: 1311, lon: 115.58669880842, lat: 37.957012862702},
+  {id: 139001, name: "定州市", parent: 1390, lon: 115.05740695232, lat: 38.465839158048},
+  {id: 139002, name: "辛集市", parent: 1390, lon: 115.29874950521, lat: 37.924121876409},
+  {id: 140105, name: "小店区", parent: 1401, lon: 112.57740860671, lat: 37.753527970896},
+  {id: 140106, name: "迎泽区", parent: 1401, lon: 112.66320298122, lat: 37.865737302061},
+  {id: 140107, name: "杏花岭区", parent: 1401, lon: 112.62983632135, lat: 37.915556056965},
+  {id: 140108, name: "尖草坪区", parent: 1401, lon: 112.48843997984, lat: 37.972757839535},
+  {id: 140109, name: "万柏林区", parent: 1401, lon: 112.40285697662, lat: 37.894693447581},
+  {id: 140110, name: "晋源区", parent: 1401, lon: 112.48158725626, lat: 37.748674917003},
+  {id: 140121, name: "清徐县", parent: 1401, lon: 112.38708511797, lat: 37.59324244737},
+  {id: 140122, name: "阳曲县", parent: 1401, lon: 112.67265853687, lat: 38.158246373698},
+  {id: 140123, name: "娄烦县", parent: 1401, lon: 111.797820928, lat: 38.034584043133},
+  {id: 140181, name: "古交市", parent: 1401, lon: 112.1077390237, lat: 37.90517928255},
+  {id: 140202, name: "城区", parent: 1402, lon: 113.29696587275, lat: 40.102542866559},
+  {id: 140203, name: "矿区", parent: 1402, lon: 113.0470017583, lat: 40.036495634995},
+  {id: 140211, name: "南郊区", parent: 1402, lon: 113.22645661564, lat: 40.051891387407},
+  {id: 140212, name: "新荣区", parent: 1402, lon: 113.23689411719, lat: 40.267127127574},
+  {id: 140221, name: "阳高县", parent: 1402, lon: 113.82318140606, lat: 40.222311526135},
+  {id: 140222, name: "天镇县", parent: 1402, lon: 114.16812988719, lat: 40.403528534338},
+  {id: 140223, name: "广灵县", parent: 1402, lon: 114.16170176527, lat: 39.76899447952},
+  {id: 140224, name: "灵丘县", parent: 1402, lon: 114.21309517425, lat: 39.377267777348},
+  {id: 140225, name: "浑源县", parent: 1402, lon: 113.71075899599, lat: 39.634162361299},
+  {id: 140226, name: "左云县", parent: 1402, lon: 112.77785639076, lat: 40.000737963069},
+  {id: 140227, name: "大同县", parent: 1402, lon: 113.58386582098, lat: 40.001627488893},
+  {id: 140302, name: "城区", parent: 1403, lon: 113.61283811719, lat: 37.85786536147},
+  {id: 140303, name: "矿区", parent: 1403, lon: 113.54077065934, lat: 37.890804244519},
+  {id: 140311, name: "郊区", parent: 1403, lon: 113.56808615363, lat: 37.911503911114},
+  {id: 140321, name: "平定县", parent: 1403, lon: 113.76897794042, lat: 37.8492714173},
+  {id: 140322, name: "盂县", parent: 1403, lon: 113.36096660369, lat: 38.229385734147},
+  {id: 140402, name: "城区", parent: 1404, lon: 113.12316935827, lat: 36.184511192113},
+  {id: 140411, name: "郊区", parent: 1404, lon: 113.11069620661, lat: 36.270339558413},
+  {id: 140421, name: "长治县", parent: 1404, lon: 113.08619419794, lat: 36.024679976201},
+  {id: 140423, name: "襄垣县", parent: 1404, lon: 112.98897348398, lat: 36.580200785754},
+  {id: 140424, name: "屯留县", parent: 1404, lon: 112.75036278967, lat: 36.342609751076},
+  {id: 140425, name: "平顺县", parent: 1404, lon: 113.53368897635, lat: 36.221794153091},
+  {id: 140426, name: "黎城县", parent: 1404, lon: 113.39685159379, lat: 36.619367610278},
+  {id: 140427, name: "壶关县", parent: 1404, lon: 113.37199790438, lat: 35.99265193372},
+  {id: 140428, name: "长子县", parent: 1404, lon: 112.80225403294, lat: 36.110999402019},
+  {id: 140429, name: "武乡县", parent: 1404, lon: 112.96751985958, lat: 36.888322821209},
+  {id: 140430, name: "沁县", parent: 1404, lon: 112.65221013617, lat: 36.70738347605},
+  {id: 140431, name: "沁源县", parent: 1404, lon: 112.29009399197, lat: 36.701566639488},
+  {id: 140481, name: "潞城市", parent: 1404, lon: 113.25438708828, lat: 36.374406273238},
+  {id: 140502, name: "城区", parent: 1405, lon: 112.84269710529, lat: 35.513593270468},
+  {id: 140521, name: "沁水县", parent: 1405, lon: 112.37742990987, lat: 35.751489118151},
+  {id: 140522, name: "阳城县", parent: 1405, lon: 112.36152699508, lat: 35.426540841161},
+  {id: 140524, name: "陵川县", parent: 1405, lon: 113.34338659863, lat: 35.690743897919},
+  {id: 140525, name: "泽州县", parent: 1405, lon: 112.87098535033, lat: 35.475851325496},
+  {id: 140581, name: "高平市", parent: 1405, lon: 112.93511535362, lat: 35.809742457991},
+  {id: 140602, name: "朔城区", parent: 1406, lon: 112.5562001526, lat: 39.243272437238},
+  {id: 140603, name: "平鲁区", parent: 1406, lon: 112.30434987236, lat: 39.640007394398},
+  {id: 140621, name: "山阴县", parent: 1406, lon: 112.78680490549, lat: 39.521049673137},
+  {id: 140622, name: "应县", parent: 1406, lon: 113.26059286958, lat: 39.509316043686},
+  {id: 140623, name: "右玉县", parent: 1406, lon: 112.42167745341, lat: 40.008135706467},
+  {id: 140624, name: "怀仁县", parent: 1406, lon: 113.11230462343, lat: 39.793570836032},
+  {id: 140702, name: "榆次区", parent: 1407, lon: 112.84373652716, lat: 37.650824689054},
+  {id: 140721, name: "榆社县", parent: 1407, lon: 112.95418082333, lat: 37.140049981591},
+  {id: 140722, name: "左权县", parent: 1407, lon: 113.47453786444, lat: 37.03279458538},
+  {id: 140723, name: "和顺县", parent: 1407, lon: 113.47493445138, lat: 37.348373699108},
+  {id: 140724, name: "昔阳县", parent: 1407, lon: 113.76210572071, lat: 37.563418385072},
+  {id: 140725, name: "寿阳县", parent: 1407, lon: 113.14161086395, lat: 37.825118914407},
+  {id: 140726, name: "太谷县", parent: 1407, lon: 112.73643253249, lat: 37.407696414459},
+  {id: 140727, name: "祁县", parent: 1407, lon: 112.46906595172, lat: 37.292198086629},
+  {id: 140728, name: "平遥县", parent: 1407, lon: 112.26549326017, lat: 37.148089778462},
+  {id: 140729, name: "灵石县", parent: 1407, lon: 111.73550355035, lat: 36.834487193362},
+  {id: 140781, name: "介休市", parent: 1407, lon: 111.99518801957, lat: 37.02547627594},
+  {id: 140802, name: "盐湖区", parent: 1408, lon: 110.96193094165, lat: 35.063676878932},
+  {id: 140821, name: "临猗县", parent: 1408, lon: 110.62589540589, lat: 35.149379501121},
+  {id: 140822, name: "万荣县", parent: 1408, lon: 110.71553950499, lat: 35.388134013652},
+  {id: 140823, name: "闻喜县", parent: 1408, lon: 111.31928675078, lat: 35.373753157},
+  {id: 140824, name: "稷山县", parent: 1408, lon: 110.96512183757, lat: 35.59826692411},
+  {id: 140825, name: "新绛县", parent: 1408, lon: 111.17287529232, lat: 35.631582540507},
+  {id: 140826, name: "绛县", parent: 1408, lon: 111.64482039841, lat: 35.498578532808},
+  {id: 140827, name: "垣曲县", parent: 1408, lon: 111.82478688142, lat: 35.221584155393},
+  {id: 140828, name: "夏县", parent: 1408, lon: 111.35838628885, lat: 35.126679510784},
+  {id: 140829, name: "平陆县", parent: 1408, lon: 111.25110932094, lat: 34.888645774448},
+  {id: 140830, name: "芮城县", parent: 1408, lon: 110.61649553806, lat: 34.709534760447},
+  {id: 140881, name: "永济市", parent: 1408, lon: 110.48894872131, lat: 34.894671510755},
+  {id: 140882, name: "河津市", parent: 1408, lon: 110.70853926353, lat: 35.631891049091},
+  {id: 140902, name: "忻府区", parent: 1409, lon: 112.60520013418, lat: 38.437831964453},
+  {id: 140921, name: "定襄县", parent: 1409, lon: 113.03558876456, lat: 38.516749763878},
+  {id: 140922, name: "五台县", parent: 1409, lon: 113.44210404535, lat: 38.778174001492},
+  {id: 140923, name: "代县", parent: 1409, lon: 113.05058168825, lat: 39.093197224067},
+  {id: 140924, name: "繁峙县", parent: 1409, lon: 113.596213567, lat: 39.204756994709},
+  {id: 140925, name: "宁武县", parent: 1409, lon: 112.19389583349, lat: 38.821889666345},
+  {id: 140926, name: "静乐县", parent: 1409, lon: 112.06499425223, lat: 38.400067154102},
+  {id: 140927, name: "神池县", parent: 1409, lon: 112.00991986754, lat: 39.173053445654},
+  {id: 140928, name: "五寨县", parent: 1409, lon: 111.74475714392, lat: 39.008730857984},
+  {id: 140929, name: "岢岚县", parent: 1409, lon: 111.54356839151, lat: 38.73795692606},
+  {id: 140930, name: "河曲县", parent: 1409, lon: 111.3598292601, lat: 39.206439528631},
+  {id: 140931, name: "保德县", parent: 1409, lon: 111.14283481361, lat: 38.887135247044},
+  {id: 140932, name: "偏关县", parent: 1409, lon: 111.67190327635, lat: 39.464649232881},
+  {id: 140981, name: "原平市", parent: 1409, lon: 112.68212831914, lat: 38.838876172747},
+  {id: 141002, name: "尧都区", parent: 1410, lon: 111.47466486211, lat: 36.125936912419},
+  {id: 141021, name: "曲沃县", parent: 1410, lon: 111.52704105623, lat: 35.704200978944},
+  {id: 141022, name: "翼城县", parent: 1410, lon: 111.83920947478, lat: 35.695397582179},
+  {id: 141023, name: "襄汾县", parent: 1410, lon: 111.38595309536, lat: 35.874204029953},
+  {id: 141024, name: "洪洞县", parent: 1410, lon: 111.65937789135, lat: 36.325514180326},
+  {id: 141025, name: "古县", parent: 1410, lon: 112.01124254119, lat: 36.303822531038},
+  {id: 141026, name: "安泽县", parent: 1410, lon: 112.30790366347, lat: 36.164295531066},
+  {id: 141027, name: "浮山县", parent: 1410, lon: 111.92840887398, lat: 35.945830766006},
+  {id: 141028, name: "吉县", parent: 1410, lon: 110.7281619704, lat: 36.158677317484},
+  {id: 141029, name: "乡宁县", parent: 1410, lon: 110.94412841404, lat: 35.925119179378},
+  {id: 141030, name: "大宁县", parent: 1410, lon: 110.71080544253, lat: 36.432636300532},
+  {id: 141031, name: "隰县", parent: 1410, lon: 111.00996531617, lat: 36.711950508392},
+  {id: 141032, name: "永和县", parent: 1410, lon: 110.61789818355, lat: 36.737137367462},
+  {id: 141033, name: "蒲县", parent: 1410, lon: 111.16235867375, lat: 36.424599698879},
+  {id: 141034, name: "汾西县", parent: 1410, lon: 111.48314834543, lat: 36.642781389504},
+  {id: 141081, name: "侯马市", parent: 1410, lon: 111.37150924676, lat: 35.62178548788},
+  {id: 141082, name: "霍州市", parent: 1410, lon: 111.8308356262, lat: 36.599677829115},
+  {id: 141102, name: "离石区", parent: 1411, lon: 111.31314199347, lat: 37.552339254903},
+  {id: 141121, name: "文水县", parent: 1411, lon: 111.96499464978, lat: 37.459705909704},
+  {id: 141122, name: "交城县", parent: 1411, lon: 111.81992715422, lat: 37.68704558482},
+  {id: 141123, name: "兴县", parent: 1411, lon: 111.0693110824, lat: 38.392262583946},
+  {id: 141124, name: "临县", parent: 1411, lon: 110.90114744504, lat: 37.962867394138},
+  {id: 141125, name: "柳林县", parent: 1411, lon: 110.87692675415, lat: 37.403754146298},
+  {id: 141126, name: "石楼县", parent: 1411, lon: 110.75347868183, lat: 37.035145108626},
+  {id: 141127, name: "岚县", parent: 1411, lon: 111.60664055968, lat: 38.343813372012},
+  {id: 141128, name: "方山县", parent: 1411, lon: 111.33797892211, lat: 37.886687741974},
+  {id: 141129, name: "中阳县", parent: 1411, lon: 111.18590350772, lat: 37.266317510804},
+  {id: 141130, name: "交口县", parent: 1411, lon: 111.31592365888, lat: 36.957718536996},
+  {id: 141181, name: "孝义市", parent: 1411, lon: 111.63764576631, lat: 37.118132778217},
+  {id: 141182, name: "汾阳市", parent: 1411, lon: 111.74599591288, lat: 37.316764309106},
+  {id: 150102, name: "新城区", parent: 1501, lon: 111.79132678714, lat: 40.929360778776},
+  {id: 150103, name: "回民区", parent: 1501, lon: 111.5968855951, lat: 40.838894763788},
+  {id: 150104, name: "玉泉区", parent: 1501, lon: 111.65855345988, lat: 40.747386672042},
+  {id: 150105, name: "赛罕区", parent: 1501, lon: 111.87633478501, lat: 40.788864152356},
+  {id: 150121, name: "土默特左旗", parent: 1501, lon: 111.23470409261, lat: 40.689987016139},
+  {id: 150122, name: "托克托县", parent: 1501, lon: 111.31970020313, lat: 40.361083978494},
+  {id: 150123, name: "和林格尔县", parent: 1501, lon: 111.90169267122, lat: 40.333868442059},
+  {id: 150124, name: "清水河县", parent: 1501, lon: 111.70623630691, lat: 39.889117744685},
+  {id: 150125, name: "武川县", parent: 1501, lon: 111.17957193814, lat: 41.1162043874},
+  {id: 150202, name: "东河区", parent: 1502, lon: 110.07014136051, lat: 40.589124487996},
+  {id: 150203, name: "昆都仑区", parent: 1502, lon: 109.80683355282, lat: 40.658057498224},
+  {id: 150204, name: "青山区", parent: 1502, lon: 109.90367483934, lat: 40.658777959476},
+  {id: 150205, name: "石拐区", parent: 1502, lon: 110.29921474522, lat: 40.716464297272},
+  {id: 150206, name: "白云鄂博矿区", parent: 1502, lon: 109.98916893149, lat: 41.789992502326},
+  {id: 150207, name: "九原区", parent: 1502, lon: 109.9491974592, lat: 40.627202278275},
+  {id: 150221, name: "土默特右旗", parent: 1502, lon: 110.69325794788, lat: 40.527995764374},
+  {id: 150222, name: "固阳县", parent: 1502, lon: 110.16759209358, lat: 41.104725412274},
+  {id: 150223, name: "达尔罕茂明安联合旗", parent: 1502, lon: 110.28618869999, lat: 41.943507148267},
+  {id: 150302, name: "海勃湾区", parent: 1503, lon: 106.86148184332, lat: 39.734833651275},
+  {id: 150303, name: "海南区", parent: 1503, lon: 106.92539717866, lat: 39.296209479392},
+  {id: 150304, name: "乌达区", parent: 1503, lon: 106.72585891133, lat: 39.535877701433},
+  {id: 150402, name: "红山区", parent: 1504, lon: 118.99810293421, lat: 42.286232134079},
+  {id: 150403, name: "元宝山区", parent: 1504, lon: 119.2681694129, lat: 42.184130648802},
+  {id: 150404, name: "松山区", parent: 1504, lon: 118.75710571166, lat: 42.268753015289},
+  {id: 150421, name: "阿鲁科尔沁旗", parent: 1504, lon: 120.05324069384, lat: 44.195956597411},
+  {id: 150422, name: "巴林左旗", parent: 1504, lon: 119.28076636509, lat: 44.203430813088},
+  {id: 150423, name: "巴林右旗", parent: 1504, lon: 118.9460897431, lat: 43.684786631454},
+  {id: 150424, name: "林西县", parent: 1504, lon: 118.1102161479, lat: 43.771462211479},
+  {id: 150425, name: "克什克腾旗", parent: 1504, lon: 117.35857031121, lat: 43.218237176681},
+  {id: 150426, name: "翁牛特旗", parent: 1504, lon: 119.25464294075, lat: 42.973979919258},
+  {id: 150428, name: "喀喇沁旗", parent: 1504, lon: 118.66705601357, lat: 41.908351449935},
+  {id: 150429, name: "宁城县", parent: 1504, lon: 118.90549936909, lat: 41.571040867139},
+  {id: 150430, name: "敖汉旗", parent: 1504, lon: 120.15771329609, lat: 42.430592238203},
+  {id: 150502, name: "科尔沁区", parent: 1505, lon: 122.29129415356, lat: 43.658290149837},
+  {id: 150521, name: "科尔沁左翼中旗", parent: 1505, lon: 122.49918004442, lat: 44.0575792852},
+  {id: 150522, name: "科尔沁左翼后旗", parent: 1505, lon: 122.69734535162, lat: 43.196082751665},
+  {id: 150523, name: "开鲁县", parent: 1505, lon: 121.32409399005, lat: 43.734941954391},
+  {id: 150524, name: "库伦旗", parent: 1505, lon: 121.5730378859, lat: 42.810038215314},
+  {id: 150525, name: "奈曼旗", parent: 1505, lon: 120.94078899637, lat: 42.972383010739},
+  {id: 150526, name: "扎鲁特旗", parent: 1505, lon: 120.59602806799, lat: 44.82245130193},
+  {id: 150581, name: "霍林郭勒市", parent: 1505, lon: 119.57974844022, lat: 45.52810605633},
+  {id: 150602, name: "东胜区", parent: 1506, lon: 109.76441928582, lat: 39.805585913146},
+  {id: 150603, name: "康巴什区", parent: 1506, lon: 109.84087569351, lat: 39.640791926893},
+  {id: 150621, name: "达拉特旗", parent: 1506, lon: 109.86619090676, lat: 40.220264473893},
+  {id: 150622, name: "准格尔旗", parent: 1506, lon: 110.88623942079, lat: 39.79472489563},
+  {id: 150623, name: "鄂托克前旗", parent: 1506, lon: 107.59700999652, lat: 38.275938287288},
+  {id: 150624, name: "鄂托克旗", parent: 1506, lon: 107.75202023325, lat: 39.286296593278},
+  {id: 150625, name: "杭锦旗", parent: 1506, lon: 108.21282820432, lat: 40.212873152738},
+  {id: 150626, name: "乌审旗", parent: 1506, lon: 108.88966323666, lat: 38.640475147234},
+  {id: 150627, name: "伊金霍洛旗", parent: 1506, lon: 109.70418618841, lat: 39.420695918404},
+  {id: 150702, name: "海拉尔区", parent: 1507, lon: 120.04288208342, lat: 49.279245456202},
+  {id: 150703, name: "扎赉诺尔区", parent: 1507, lon: 117.72318498536, lat: 49.461481568108},
+  {id: 150721, name: "阿荣旗", parent: 1507, lon: 123.17195423134, lat: 48.639988741071},
+  {id: 150722, name: "莫力达瓦达斡尔族自治旗", parent: 1507, lon: 124.47443404901, lat: 49.104886651718},
+  {id: 150723, name: "鄂伦春自治旗", parent: 1507, lon: 123.81727783782, lat: 50.348754571528},
+  {id: 150724, name: "鄂温克族自治旗", parent: 1507, lon: 120.06748322167, lat: 48.499136514599},
+  {id: 150725, name: "陈巴尔虎旗", parent: 1507, lon: 119.53520765754, lat: 49.605281276761},
+  {id: 150726, name: "新巴尔虎左旗", parent: 1507, lon: 118.62152477909, lat: 48.43639187877},
+  {id: 150727, name: "新巴尔虎右旗", parent: 1507, lon: 116.8021843422, lat: 48.644978915379},
+  {id: 150781, name: "满洲里市", parent: 1507, lon: 117.60368677619, lat: 49.500031717154},
+  {id: 150782, name: "牙克石市", parent: 1507, lon: 121.51266780552, lat: 49.329995939597},
+  {id: 150783, name: "扎兰屯市", parent: 1507, lon: 121.92920216562, lat: 47.7434033831},
+  {id: 150784, name: "额尔古纳市", parent: 1507, lon: 120.65276364824, lat: 51.660818880977},
+  {id: 150785, name: "根河市", parent: 1507, lon: 121.79771324217, lat: 51.37592516127},
+  {id: 150802, name: "临河区", parent: 1508, lon: 107.44183964667, lat: 40.932018223224},
+  {id: 150821, name: "五原县", parent: 1508, lon: 108.07228406065, lat: 41.045426664817},
+  {id: 150822, name: "磴口县", parent: 1508, lon: 106.7000000567, lat: 40.55518106886},
+  {id: 150823, name: "乌拉特前旗", parent: 1508, lon: 109.10529705882, lat: 40.905993260887},
+  {id: 150824, name: "乌拉特中旗", parent: 1508, lon: 108.46454180074, lat: 41.831044527428},
+  {id: 150825, name: "乌拉特后旗", parent: 1508, lon: 106.41380804671, lat: 41.53194458396},
+  {id: 150826, name: "杭锦后旗", parent: 1508, lon: 107.03345374933, lat: 40.890870780779},
+  {id: 150902, name: "集宁区", parent: 1509, lon: 113.11283222874, lat: 41.027765971469},
+  {id: 150921, name: "卓资县", parent: 1509, lon: 112.44337671416, lat: 40.958869485808},
+  {id: 150922, name: "化德县", parent: 1509, lon: 114.16573790656, lat: 41.979126377538},
+  {id: 150923, name: "商都县", parent: 1509, lon: 113.62215528367, lat: 41.726516851564},
+  {id: 150924, name: "兴和县", parent: 1509, lon: 113.77372051762, lat: 40.952666521778},
+  {id: 150925, name: "凉城县", parent: 1509, lon: 112.55043247172, lat: 40.502780210604},
+  {id: 150926, name: "察哈尔右翼前旗", parent: 1509, lon: 113.24109639163, lat: 40.981709597107},
+  {id: 150927, name: "察哈尔右翼中旗", parent: 1509, lon: 112.47074335399, lat: 41.428255371505},
+  {id: 150928, name: "察哈尔右翼后旗", parent: 1509, lon: 113.06969288248, lat: 41.529483090789},
+  {id: 150929, name: "四子王旗", parent: 1509, lon: 111.58903652853, lat: 42.30714575607},
+  {id: 150981, name: "丰镇市", parent: 1509, lon: 113.30867650253, lat: 40.558336025296},
+  {id: 152201, name: "乌兰浩特市", parent: 1522, lon: 122.0815338095, lat: 46.116943570165},
+  {id: 152202, name: "阿尔山市", parent: 1522, lon: 120.35753387505, lat: 47.163696335727},
+  {id: 152221, name: "科尔沁右翼前旗", parent: 1522, lon: 121.22152365342, lat: 46.334025380898},
+  {id: 152222, name: "科尔沁右翼中旗", parent: 1522, lon: 121.19851019319, lat: 45.242068815668},
+  {id: 152223, name: "扎赉特旗", parent: 1522, lon: 122.38814625782, lat: 46.790807786397},
+  {id: 152224, name: "突泉县", parent: 1522, lon: 121.51921179351, lat: 45.632866219095},
+  {id: 152501, name: "二连浩特市", parent: 1525, lon: 111.96617841378, lat: 43.417780458226},
+  {id: 152502, name: "锡林浩特市", parent: 1525, lon: 116.13694826431, lat: 44.078961129099},
+  {id: 152522, name: "阿巴嘎旗", parent: 1525, lon: 114.89347121165, lat: 44.276507422523},
+  {id: 152523, name: "苏尼特左旗", parent: 1525, lon: 113.14030742275, lat: 44.039238043252},
+  {id: 152524, name: "苏尼特右旗", parent: 1525, lon: 112.91159981029, lat: 42.900963777858},
+  {id: 152525, name: "东乌珠穆沁旗", parent: 1525, lon: 117.8104504134, lat: 45.826664793338},
+  {id: 152526, name: "西乌珠穆沁旗", parent: 1525, lon: 117.81696314273, lat: 44.715902995292},
+  {id: 152527, name: "太仆寺旗", parent: 1525, lon: 115.30455821777, lat: 41.906215635041},
+  {id: 152528, name: "镶黄旗", parent: 1525, lon: 114.12058911409, lat: 42.368275700926},
+  {id: 152529, name: "正镶白旗", parent: 1525, lon: 115.02434728451, lat: 42.554842970033},
+  {id: 152530, name: "正蓝旗", parent: 1525, lon: 115.94010983058, lat: 42.674413879311},
+  {id: 152531, name: "多伦县", parent: 1525, lon: 116.4986386762, lat: 42.196600874379},
+  {id: 152921, name: "阿拉善左旗", parent: 1529, lon: 105.03824684198, lat: 39.547806401013},
+  {id: 152922, name: "阿拉善右旗", parent: 1529, lon: 102.44385599727, lat: 40.186228955604},
+  {id: 152923, name: "额济纳旗", parent: 1529, lon: 100.09951238471, lat: 41.693799843161},
+  {id: 210102, name: "和平区", parent: 2101, lon: 123.41433166046, lat: 41.786474395792},
+  {id: 210103, name: "沈河区", parent: 2101, lon: 123.45355228301, lat: 41.798304641933},
+  {id: 210104, name: "大东区", parent: 2101, lon: 123.49892677691, lat: 41.835279080775},
+  {id: 210105, name: "皇姑区", parent: 2101, lon: 123.41537632672, lat: 41.848913204573},
+  {id: 210106, name: "铁西区", parent: 2101, lon: 123.35862982907, lat: 41.805724167622},
+  {id: 210111, name: "苏家屯区", parent: 2101, lon: 123.42628905169, lat: 41.589345157565},
+  {id: 210112, name: "浑南区", parent: 2101, lon: 123.5714290915, lat: 41.794157738255},
+  {id: 210113, name: "沈北新区", parent: 2101, lon: 123.5186904027, lat: 42.043849976101},
+  {id: 210114, name: "于洪区", parent: 2101, lon: 123.2428469731, lat: 41.843551023712},
+  {id: 210115, name: "辽中区", parent: 2101, lon: 122.79857550059, lat: 41.500330370098},
+  {id: 210123, name: "康平县", parent: 2101, lon: 123.27359808776, lat: 42.765540738313},
+  {id: 210124, name: "法库县", parent: 2101, lon: 123.24889709003, lat: 42.415297839562},
+  {id: 210181, name: "新民市", parent: 2101, lon: 122.86641820399, lat: 42.016776193846},
+  {id: 210202, name: "中山区", parent: 2102, lon: 121.67796628923, lat: 38.900436431992},
+  {id: 210203, name: "西岗区", parent: 2102, lon: 121.6258229781, lat: 38.913369529939},
+  {id: 210204, name: "沙河口区", parent: 2102, lon: 121.5826178068, lat: 38.921778341674},
+  {id: 210211, name: "甘井子区", parent: 2102, lon: 121.52850037949, lat: 38.955461760661},
+  {id: 210212, name: "旅顺口区", parent: 2102, lon: 121.29593564059, lat: 38.908290673003},
+  {id: 210213, name: "金州区", parent: 2102, lon: 121.95658248044, lat: 39.29861907186},
+  {id: 210214, name: "普兰店区", parent: 2102, lon: 122.21603953088, lat: 39.651792833684},
+  {id: 210224, name: "长海县", parent: 2102, lon: 122.74826454271, lat: 39.26010853029},
+  {id: 210281, name: "瓦房店市", parent: 2102, lon: 121.79069878874, lat: 39.70895639619},
+  {id: 210283, name: "庄河市", parent: 2102, lon: 122.934145267, lat: 39.858909784172},
+  {id: 210302, name: "铁东区", parent: 2103, lon: 123.02070584518, lat: 41.118235115557},
+  {id: 210303, name: "铁西区", parent: 2103, lon: 122.98578619475, lat: 41.127872476833},
+  {id: 210304, name: "立山区", parent: 2103, lon: 123.04047350708, lat: 41.164172891853},
+  {id: 210311, name: "千山区", parent: 2103, lon: 123.01400529455, lat: 41.061328521987},
+  {id: 210321, name: "台安县", parent: 2103, lon: 122.4436825276, lat: 41.347099748004},
+  {id: 210323, name: "岫岩满族自治县", parent: 2103, lon: 123.34606899826, lat: 40.4031809953},
+  {id: 210381, name: "海城市", parent: 2103, lon: 122.79120058219, lat: 40.840354247523},
+  {id: 210402, name: "新抚区", parent: 2104, lon: 123.91136857188, lat: 41.869789660664},
+  {id: 210403, name: "东洲区", parent: 2104, lon: 124.02924934124, lat: 41.833588275171},
+  {id: 210404, name: "望花区", parent: 2104, lon: 123.78599647355, lat: 41.860403588778},
+  {id: 210411, name: "顺城区", parent: 2104, lon: 123.90172355545, lat: 41.916014133796},
+  {id: 210421, name: "抚顺县", parent: 2104, lon: 124.1365888338, lat: 41.750076669591},
+  {id: 210422, name: "新宾满族自治县", parent: 2104, lon: 124.82786556411, lat: 41.635119411},
+  {id: 210423, name: "清原满族自治县", parent: 2104, lon: 124.92431743309, lat: 42.118882344791},
+  {id: 210502, name: "平山区", parent: 2105, lon: 123.69257521577, lat: 41.240400691895},
+  {id: 210503, name: "溪湖区", parent: 2105, lon: 123.71186569778, lat: 41.45615399333},
+  {id: 210504, name: "明山区", parent: 2105, lon: 123.90173685037, lat: 41.347752110456},
+  {id: 210505, name: "南芬区", parent: 2105, lon: 123.82788014761, lat: 41.122716220999},
+  {id: 210521, name: "本溪满族自治县", parent: 2105, lon: 124.15856431847, lat: 41.195670233912},
+  {id: 210522, name: "桓仁满族自治县", parent: 2105, lon: 125.29002787, lat: 41.261815877129},
+  {id: 210602, name: "元宝区", parent: 2106, lon: 124.35032097797, lat: 40.173197015058},
+  {id: 210603, name: "振兴区", parent: 2106, lon: 124.35556286011, lat: 40.067035318752},
+  {id: 210604, name: "振安区", parent: 2106, lon: 124.29219665893, lat: 40.211546606919},
+  {id: 210624, name: "宽甸满族自治县", parent: 2106, lon: 124.93410611424, lat: 40.766142006754},
+  {id: 210681, name: "东港市", parent: 2106, lon: 123.876870274, lat: 39.981217334184},
+  {id: 210682, name: "凤城市", parent: 2106, lon: 124.07296025051, lat: 40.579570306659},
+  {id: 210702, name: "古塔区", parent: 2107, lon: 121.1264337451, lat: 41.14138819307},
+  {id: 210703, name: "凌河区", parent: 2107, lon: 121.18266452595, lat: 41.13438040426},
+  {id: 210711, name: "太和区", parent: 2107, lon: 121.11864471768, lat: 41.136830132753},
+  {id: 210726, name: "黑山县", parent: 2107, lon: 122.26073588726, lat: 41.799697885598},
+  {id: 210727, name: "义县", parent: 2107, lon: 121.30187737888, lat: 41.534928118312},
+  {id: 210781, name: "凌海市", parent: 2107, lon: 121.28557458803, lat: 41.152566155094},
+  {id: 210782, name: "北镇市", parent: 2107, lon: 121.86454971392, lat: 41.547118023827},
+  {id: 210802, name: "站前区", parent: 2108, lon: 122.2655920301, lat: 40.703009826765},
+  {id: 210803, name: "西市区", parent: 2108, lon: 122.21012624622, lat: 40.66694904618},
+  {id: 210804, name: "鲅鱼圈区", parent: 2108, lon: 122.17689658108, lat: 40.25258448446},
+  {id: 210811, name: "老边区", parent: 2108, lon: 122.33090270339, lat: 40.672565437571},
+  {id: 210881, name: "盖州市", parent: 2108, lon: 122.47732679351, lat: 40.235441470469},
+  {id: 210882, name: "大石桥市", parent: 2108, lon: 122.57155106236, lat: 40.646915451877},
+  {id: 210902, name: "海州区", parent: 2109, lon: 121.65270512981, lat: 41.99090249247},
+  {id: 210903, name: "新邱区", parent: 2109, lon: 121.82432100766, lat: 42.074627619468},
+  {id: 210904, name: "太平区", parent: 2109, lon: 121.73775310227, lat: 42.00945236252},
+  {id: 210905, name: "清河门区", parent: 2109, lon: 121.44683854847, lat: 41.754998439335},
+  {id: 210911, name: "细河区", parent: 2109, lon: 121.6275568874, lat: 42.043253678758},
+  {id: 210921, name: "阜新蒙古族自治县", parent: 2109, lon: 121.69557778355, lat: 42.157500408157},
+  {id: 210922, name: "彰武县", parent: 2109, lon: 122.47417316389, lat: 42.523754435526},
+  {id: 211002, name: "白塔区", parent: 2110, lon: 123.17516309965, lat: 41.279285816853},
+  {id: 211003, name: "文圣区", parent: 2110, lon: 123.20121638487, lat: 41.271122206557},
+  {id: 211004, name: "宏伟区", parent: 2110, lon: 123.22051827536, lat: 41.220763801748},
+  {id: 211005, name: "弓长岭区", parent: 2110, lon: 123.42628014056, lat: 41.145969646405},
+  {id: 211011, name: "太子河区", parent: 2110, lon: 123.17837427236, lat: 41.274593139071},
+  {id: 211021, name: "辽阳县", parent: 2110, lon: 123.21982126206, lat: 41.077281158776},
+  {id: 211081, name: "灯塔市", parent: 2110, lon: 123.31257357315, lat: 41.420098857086},
+  {id: 211102, name: "双台子区", parent: 2111, lon: 122.03203843649, lat: 41.193224510116},
+  {id: 211103, name: "兴隆台区", parent: 2111, lon: 121.96962911034, lat: 41.155830887559},
+  {id: 211104, name: "大洼区", parent: 2111, lon: 122.08839097548, lat: 40.905899458766},
+  {id: 211122, name: "盘山县", parent: 2111, lon: 121.95216562366, lat: 41.193475065521},
+  {id: 211202, name: "银州区", parent: 2112, lon: 123.85851586889, lat: 42.248294823185},
+  {id: 211204, name: "清河区", parent: 2112, lon: 124.27578016446, lat: 42.508557048192},
+  {id: 211221, name: "铁岭县", parent: 2112, lon: 123.91452868265, lat: 42.222764650024},
+  {id: 211223, name: "西丰县", parent: 2112, lon: 124.73850222789, lat: 42.712739429005},
+  {id: 211224, name: "昌图县", parent: 2112, lon: 123.94640914451, lat: 43.000462116167},
+  {id: 211281, name: "调兵山市", parent: 2112, lon: 123.58434789559, lat: 42.442929890534},
+  {id: 211282, name: "开原市", parent: 2112, lon: 124.28377598099, lat: 42.471223289128},
+  {id: 211302, name: "双塔区", parent: 2113, lon: 120.48407290204, lat: 41.605740189556},
+  {id: 211303, name: "龙城区", parent: 2113, lon: 120.40133294592, lat: 41.606226996662},
+  {id: 211321, name: "朝阳县", parent: 2113, lon: 120.30506072918, lat: 41.372795903547},
+  {id: 211322, name: "建平县", parent: 2113, lon: 119.63252714815, lat: 41.842222586595},
+  {id: 211324, name: "喀喇沁左翼蒙古族自治县", parent: 2113, lon: 119.77553367022, lat: 41.143623845035},
+  {id: 211381, name: "北票市", parent: 2113, lon: 120.81188458747, lat: 41.865071031498},
+  {id: 211382, name: "凌源市", parent: 2113, lon: 119.27154312683, lat: 40.981801128352},
+  {id: 211402, name: "连山区", parent: 2114, lon: 120.6883607801, lat: 40.888537340117},
+  {id: 211403, name: "龙港区", parent: 2114, lon: 120.90458597059, lat: 40.750992710489},
+  {id: 211404, name: "南票区", parent: 2114, lon: 120.66464506548, lat: 41.137035783771},
+  {id: 211421, name: "绥中县", parent: 2114, lon: 120.02630174192, lat: 40.305129005823},
+  {id: 211422, name: "建昌县", parent: 2114, lon: 119.83489152944, lat: 40.716827705586},
+  {id: 211481, name: "兴城市", parent: 2114, lon: 120.47552727234, lat: 40.596284243832},
+  {id: 220102, name: "南关区", parent: 2201, lon: 125.41964874071, lat: 43.732190540843},
+  {id: 220103, name: "宽城区", parent: 2201, lon: 125.34489933527, lat: 43.998252407951},
+  {id: 220104, name: "朝阳区", parent: 2201, lon: 125.27822648218, lat: 43.689108619451},
+  {id: 220105, name: "二道区", parent: 2201, lon: 125.61148484631, lat: 43.872222715497},
+  {id: 220106, name: "绿园区", parent: 2201, lon: 125.19133076327, lat: 43.912164564835},
+  {id: 220112, name: "双阳区", parent: 2201, lon: 125.71282235937, lat: 43.531747024963},
+  {id: 220113, name: "九台区", parent: 2201, lon: 125.96882675838, lat: 44.194372106981},
+  {id: 220122, name: "农安县", parent: 2201, lon: 125.09432707273, lat: 44.461506089801},
+  {id: 220182, name: "榆树市", parent: 2201, lon: 126.60250076501, lat: 44.879422926679},
+  {id: 220183, name: "德惠市", parent: 2201, lon: 125.76904438895, lat: 44.510507146916},
+  {id: 220202, name: "昌邑区", parent: 2202, lon: 126.3265130609, lat: 44.023897560596},
+  {id: 220203, name: "龙潭区", parent: 2202, lon: 126.69508484724, lat: 44.100874364702},
+  {id: 220204, name: "船营区", parent: 2202, lon: 126.38908947188, lat: 43.882171941455},
+  {id: 220211, name: "丰满区", parent: 2202, lon: 126.69820214702, lat: 43.654515333155},
+  {id: 220221, name: "永吉县", parent: 2202, lon: 126.22756009767, lat: 43.601481147552},
+  {id: 220281, name: "蛟河市", parent: 2202, lon: 127.35174186542, lat: 43.716756082246},
+  {id: 220282, name: "桦甸市", parent: 2202, lon: 127.04139243957, lat: 43.056631099131},
+  {id: 220283, name: "舒兰市", parent: 2202, lon: 127.11677230895, lat: 44.335465144158},
+  {id: 220284, name: "磐石市", parent: 2202, lon: 126.17462779101, lat: 43.05745611333},
+  {id: 220302, name: "铁西区", parent: 2203, lon: 124.35539155325, lat: 43.214159722508},
+  {id: 220303, name: "铁东区", parent: 2203, lon: 124.45989915866, lat: 43.101528833564},
+  {id: 220322, name: "梨树县", parent: 2203, lon: 124.38049140672, lat: 43.414437629602},
+  {id: 220323, name: "伊通满族自治县", parent: 2203, lon: 125.27114939123, lat: 43.346321828789},
+  {id: 220381, name: "公主岭市", parent: 2203, lon: 124.6858822207, lat: 43.791826067578},
+  {id: 220382, name: "双辽市", parent: 2203, lon: 123.70852021747, lat: 43.767694883217},
+  {id: 220402, name: "龙山区", parent: 2204, lon: 125.2109975481, lat: 42.913196595909},
+  {id: 220403, name: "西安区", parent: 2204, lon: 125.15014857862, lat: 42.986364946378},
+  {id: 220421, name: "东丰县", parent: 2204, lon: 125.45480890408, lat: 42.683933895982},
+  {id: 220422, name: "东辽县", parent: 2204, lon: 125.18493119325, lat: 42.94792512736},
+  {id: 220502, name: "东昌区", parent: 2205, lon: 125.9601237078, lat: 41.677262396551},
+  {id: 220503, name: "二道江区", parent: 2205, lon: 126.15628012439, lat: 41.772625959427},
+  {id: 220521, name: "通化县", parent: 2205, lon: 125.85733217991, lat: 41.729156130979},
+  {id: 220523, name: "辉南县", parent: 2205, lon: 126.34272419975, lat: 42.557948885604},
+  {id: 220524, name: "柳河县", parent: 2205, lon: 125.91727588294, lat: 42.185665412078},
+  {id: 220581, name: "梅河口市", parent: 2205, lon: 125.72351563218, lat: 42.542649892656},
+  {id: 220582, name: "集安市", parent: 2205, lon: 125.99899197532, lat: 41.251410585346},
+  {id: 220602, name: "浑江区", parent: 2206, lon: 126.39664287376, lat: 41.791642228255},
+  {id: 220605, name: "江源区", parent: 2206, lon: 126.82530168684, lat: 42.078958587922},
+  {id: 220621, name: "抚松县", parent: 2206, lon: 127.62393805705, lat: 42.277909113144},
+  {id: 220622, name: "靖宇县", parent: 2206, lon: 126.90246851455, lat: 42.449966505533},
+  {id: 220623, name: "长白朝鲜族自治县", parent: 2206, lon: 127.86435839919, lat: 41.584709161363},
+  {id: 220681, name: "临江市", parent: 2206, lon: 127.19171033688, lat: 41.816565968987},
+  {id: 220702, name: "宁江区", parent: 2207, lon: 124.86757114896, lat: 45.292709616884},
+  {id: 220721, name: "前郭尔罗斯蒙古族自治县", parent: 2207, lon: 124.48165037618, lat: 44.86912678932},
+  {id: 220722, name: "长岭县", parent: 2207, lon: 123.8665042888, lat: 44.305644527778},
+  {id: 220723, name: "乾安县", parent: 2207, lon: 123.96912337789, lat: 44.92691448746},
+  {id: 220781, name: "扶余市", parent: 2207, lon: 125.60981401543, lat: 45.171384133354},
+  {id: 220802, name: "洮北区", parent: 2208, lon: 122.78907446427, lat: 45.623300921069},
+  {id: 220821, name: "镇赉县", parent: 2208, lon: 123.45227210722, lat: 45.956171923796},
+  {id: 220822, name: "通榆县", parent: 2208, lon: 122.74529133311, lat: 44.785716778696},
+  {id: 220881, name: "洮南市", parent: 2208, lon: 122.45367732552, lat: 45.475604304499},
+  {id: 220882, name: "大安市", parent: 2208, lon: 123.72371415195, lat: 45.432438158186},
+  {id: 222401, name: "延吉市", parent: 2224, lon: 129.47130153101, lat: 43.05966660114},
+  {id: 222402, name: "图们市", parent: 2224, lon: 129.83431076023, lat: 43.03054892373},
+  {id: 222403, name: "敦化市", parent: 2224, lon: 128.23949928011, lat: 43.560201838077},
+  {id: 222404, name: "珲春市", parent: 2224, lon: 130.70236659184, lat: 43.074719340737},
+  {id: 222405, name: "龙井市", parent: 2224, lon: 129.38381622469, lat: 42.844249320769},
+  {id: 222406, name: "和龙市", parent: 2224, lon: 128.91121076889, lat: 42.466442285556},
+  {id: 222424, name: "汪清县", parent: 2224, lon: 129.95399441696, lat: 43.540143921506},
+  {id: 222426, name: "安图县", parent: 2224, lon: 128.43765169208, lat: 42.70103301919},
+  {id: 230102, name: "道里区", parent: 2301, lon: 126.36841846875, lat: 45.686139243933},
+  {id: 230103, name: "南岗区", parent: 2301, lon: 126.59025453924, lat: 45.66612348458},
+  {id: 230104, name: "道外区", parent: 2301, lon: 126.79557490271, lat: 45.799105971955},
+  {id: 230108, name: "平房区", parent: 2301, lon: 126.65771685545, lat: 45.773224633239},
+  {id: 230109, name: "松北区", parent: 2301, lon: 126.45227113075, lat: 45.941458151669},
+  {id: 230110, name: "香坊区", parent: 2301, lon: 126.79204413625, lat: 45.710449322359},
+  {id: 230111, name: "呼兰区", parent: 2301, lon: 126.78775713041, lat: 46.079315096502},
+  {id: 230112, name: "阿城区", parent: 2301, lon: 127.12462182332, lat: 45.557335189202},
+  {id: 230113, name: "双城区", parent: 2301, lon: 126.20893033512, lat: 45.429694282772},
+  {id: 230123, name: "依兰县", parent: 2301, lon: 129.72150310519, lat: 46.275637068421},
+  {id: 230124, name: "方正县", parent: 2301, lon: 128.94941872931, lat: 45.819769362966},
+  {id: 230125, name: "宾县", parent: 2301, lon: 127.66161209688, lat: 45.783825431221},
+  {id: 230126, name: "巴彦县", parent: 2301, lon: 127.32428735381, lat: 46.340415542078},
+  {id: 230127, name: "木兰县", parent: 2301, lon: 127.92983800734, lat: 46.248171654041},
+  {id: 230128, name: "通河县", parent: 2301, lon: 128.7622323166, lat: 46.247857247283},
+  {id: 230129, name: "延寿县", parent: 2301, lon: 128.4639428653, lat: 45.489520215745},
+  {id: 230183, name: "尚志市", parent: 2301, lon: 128.31617023054, lat: 45.083893011118},
+  {id: 230184, name: "五常市", parent: 2301, lon: 127.49111263245, lat: 44.772543560859},
+  {id: 230202, name: "龙沙区", parent: 2302, lon: 123.94483825767, lat: 47.301073163863},
+  {id: 230203, name: "建华区", parent: 2302, lon: 124.02127875657, lat: 47.404865706359},
+  {id: 230204, name: "铁锋区", parent: 2302, lon: 124.26293093367, lat: 47.303488569291},
+  {id: 230205, name: "昂昂溪区", parent: 2302, lon: 123.97293464894, lat: 47.104048383337},
+  {id: 230206, name: "富拉尔基区", parent: 2302, lon: 123.57199835236, lat: 47.228951853753},
+  {id: 230207, name: "碾子山区", parent: 2302, lon: 122.93233528482, lat: 47.585869259054},
+  {id: 230208, name: "梅里斯达斡尔族区", parent: 2302, lon: 124.00548681519, lat: 47.583080065198},
+  {id: 230221, name: "龙江县", parent: 2302, lon: 123.08910277315, lat: 47.258895031048},
+  {id: 230223, name: "依安县", parent: 2302, lon: 125.29463341876, lat: 47.70687276451},
+  {id: 230224, name: "泰来县", parent: 2302, lon: 123.55804791893, lat: 46.603290111422},
+  {id: 230225, name: "甘南县", parent: 2302, lon: 123.84689963764, lat: 48.011583079958},
+  {id: 230227, name: "富裕县", parent: 2302, lon: 124.57174679759, lat: 47.66582009392},
+  {id: 230229, name: "克山县", parent: 2302, lon: 125.70647087609, lat: 48.16709075607},
+  {id: 230230, name: "克东县", parent: 2302, lon: 126.35213605416, lat: 48.009015428979},
+  {id: 230231, name: "拜泉县", parent: 2302, lon: 126.02178604309, lat: 47.59225565379},
+  {id: 230281, name: "讷河市", parent: 2302, lon: 125.07655310394, lat: 48.481453388811},
+  {id: 230302, name: "鸡冠区", parent: 2303, lon: 130.95993684965, lat: 45.307610212685},
+  {id: 230303, name: "恒山区", parent: 2303, lon: 130.91626680525, lat: 45.138570833129},
+  {id: 230304, name: "滴道区", parent: 2303, lon: 130.73483586173, lat: 45.354342346984},
+  {id: 230305, name: "梨树区", parent: 2303, lon: 130.76523847274, lat: 45.097064304174},
+  {id: 230306, name: "城子河区", parent: 2303, lon: 131.02770429868, lat: 45.379689760283},
+  {id: 230307, name: "麻山区", parent: 2303, lon: 130.56688686698, lat: 45.205825834254},
+  {id: 230321, name: "鸡东县", parent: 2303, lon: 131.22565372007, lat: 45.273228207889},
+  {id: 230381, name: "虎林市", parent: 2303, lon: 133.12110607261, lat: 45.997276203515},
+  {id: 230382, name: "密山市", parent: 2303, lon: 132.17656238974, lat: 45.469765426971},
+  {id: 230402, name: "向阳区", parent: 2304, lon: 130.30123313444, lat: 47.350919505165},
+  {id: 230403, name: "工农区", parent: 2304, lon: 130.27719618578, lat: 47.327770216306},
+  {id: 230404, name: "南山区", parent: 2304, lon: 130.28176460828, lat: 47.298820938262},
+  {id: 230405, name: "兴安区", parent: 2304, lon: 130.24437533634, lat: 47.23371006572},
+  {id: 230406, name: "东山区", parent: 2304, lon: 130.24750143952, lat: 47.483737355287},
+  {id: 230407, name: "兴山区", parent: 2304, lon: 130.32664592783, lat: 47.393964799831},
+  {id: 230421, name: "萝北县", parent: 2304, lon: 130.76133324012, lat: 47.74693489479},
+  {id: 230422, name: "绥滨县", parent: 2304, lon: 131.85659492327, lat: 47.483007019685},
+  {id: 230502, name: "尖山区", parent: 2305, lon: 131.17851398363, lat: 46.658524603822},
+  {id: 230503, name: "岭东区", parent: 2305, lon: 131.24602424779, lat: 46.459521565337},
+  {id: 230505, name: "四方台区", parent: 2305, lon: 131.30870692831, lat: 46.669775046181},
+  {id: 230506, name: "宝山区", parent: 2305, lon: 131.56483592752, lat: 46.5292279819},
+  {id: 230521, name: "集贤县", parent: 2305, lon: 131.15055588277, lat: 46.818437079003},
+  {id: 230522, name: "友谊县", parent: 2305, lon: 131.8549989164, lat: 46.788592814562},
+  {id: 230523, name: "宝清县", parent: 2305, lon: 132.40927864827, lat: 46.409383212717},
+  {id: 230524, name: "饶河县", parent: 2305, lon: 133.7292586825, lat: 47.072628542857},
+  {id: 230602, name: "萨尔图区", parent: 2306, lon: 125.0424515298, lat: 46.663311354817},
+  {id: 230603, name: "龙凤区", parent: 2306, lon: 125.14176665986, lat: 46.53556824178},
+  {id: 230604, name: "让胡路区", parent: 2306, lon: 124.83842676542, lat: 46.729160383306},
+  {id: 230605, name: "红岗区", parent: 2306, lon: 124.91428498269, lat: 46.420778588396},
+  {id: 230606, name: "大同区", parent: 2306, lon: 124.69907739268, lat: 46.070051001663},
+  {id: 230621, name: "肇州县", parent: 2306, lon: 125.3089692416, lat: 45.837071583611},
+  {id: 230622, name: "肇源县", parent: 2306, lon: 124.76904364094, lat: 45.647200471445},
+  {id: 230623, name: "林甸县", parent: 2306, lon: 124.8967829092, lat: 47.159692937417},
+  {id: 230624, name: "杜尔伯特蒙古族自治县", parent: 2306, lon: 124.24651264677, lat: 46.561613536188},
+  {id: 230702, name: "伊春区", parent: 2307, lon: 128.90057964259, lat: 47.741959238189},
+  {id: 230703, name: "南岔区", parent: 2307, lon: 129.5388741261, lat: 46.964156236684},
+  {id: 230704, name: "友好区", parent: 2307, lon: 128.46596407584, lat: 48.128001664241},
+  {id: 230705, name: "西林区", parent: 2307, lon: 129.22725517859, lat: 47.500962038143},
+  {id: 230706, name: "翠峦区", parent: 2307, lon: 128.3654114401, lat: 47.589933517239},
+  {id: 230707, name: "新青区", parent: 2307, lon: 129.78735692847, lat: 48.216126405552},
+  {id: 230708, name: "美溪区", parent: 2307, lon: 129.40940395803, lat: 47.768892089215},
+  {id: 230709, name: "金山屯区", parent: 2307, lon: 129.77190301946, lat: 47.498543610736},
+  {id: 230710, name: "五营区", parent: 2307, lon: 129.061485473, lat: 48.229327781105},
+  {id: 230711, name: "乌马河区", parent: 2307, lon: 128.79469008399, lat: 47.549368172364},
+  {id: 230712, name: "汤旺河区", parent: 2307, lon: 129.53875384299, lat: 48.563262601637},
+  {id: 230713, name: "带岭区", parent: 2307, lon: 128.86147460713, lat: 47.090162166708},
+  {id: 230714, name: "乌伊岭区", parent: 2307, lon: 129.49893645126, lat: 48.836655251992},
+  {id: 230715, name: "红星区", parent: 2307, lon: 129.25191896484, lat: 48.298020306125},
+  {id: 230716, name: "上甘岭区", parent: 2307, lon: 129.02239948161, lat: 48.036509272978},
+  {id: 230722, name: "嘉荫县", parent: 2307, lon: 130.00824972425, lat: 48.769519787363},
+  {id: 230781, name: "铁力市", parent: 2307, lon: 128.55251746527, lat: 46.866328682376},
+  {id: 230803, name: "向阳区", parent: 2308, lon: 130.36295545541, lat: 46.826706255713},
+  {id: 230804, name: "前进区", parent: 2308, lon: 130.39791016311, lat: 46.809721977545},
+  {id: 230805, name: "东风区", parent: 2308, lon: 130.51740321928, lat: 46.894910414945},
+  {id: 230811, name: "郊区", parent: 2308, lon: 130.26396912133, lat: 46.775887398703},
+  {id: 230822, name: "桦南县", parent: 2308, lon: 130.63701542096, lat: 46.306671717134},
+  {id: 230826, name: "桦川县", parent: 2308, lon: 130.9630176143, lat: 46.989258424239},
+  {id: 230828, name: "汤原县", parent: 2308, lon: 130.07240618628, lat: 46.988318509463},
+  {id: 230881, name: "同江市", parent: 2308, lon: 133.27332836382, lat: 47.833684686564},
+  {id: 230882, name: "富锦市", parent: 2308, lon: 132.53900135629, lat: 47.170672548244},
+  {id: 230883, name: "抚远市", parent: 2308, lon: 134.39306261929, lat: 47.955162063941},
+  {id: 230902, name: "新兴区", parent: 2309, lon: 130.89318834856, lat: 45.8134935903},
+  {id: 230903, name: "桃山区", parent: 2309, lon: 130.9925031193, lat: 45.770092507257},
+  {id: 230904, name: "茄子河区", parent: 2309, lon: 131.47522375459, lat: 45.883167710316},
+  {id: 230921, name: "勃利县", parent: 2309, lon: 130.81816940292, lat: 45.930545419106},
+  {id: 231002, name: "东安区", parent: 2310, lon: 129.86044675749, lat: 44.408404499377},
+  {id: 231003, name: "阳明区", parent: 2310, lon: 129.78391508059, lat: 44.58797510378},
+  {id: 231004, name: "爱民区", parent: 2310, lon: 129.54456588932, lat: 44.685920648737},
+  {id: 231005, name: "西安区", parent: 2310, lon: 129.58492424063, lat: 44.491714149262},
+  {id: 231025, name: "林口县", parent: 2310, lon: 130.02318050895, lat: 45.396101732571},
+  {id: 231081, name: "绥芬河市", parent: 2310, lon: 131.10245653286, lat: 44.408005174587},
+  {id: 231083, name: "海林市", parent: 2310, lon: 129.2214141346, lat: 44.903617439366},
+  {id: 231084, name: "宁安市", parent: 2310, lon: 129.21531714201, lat: 44.058017259883},
+  {id: 231085, name: "穆棱市", parent: 2310, lon: 130.39552588753, lat: 44.576869855321},
+  {id: 231086, name: "东宁市", parent: 2310, lon: 130.82976155466, lat: 44.085228695883},
+  {id: 231102, name: "爱辉区", parent: 2311, lon: 126.76426227527, lat: 50.21824505447},
+  {id: 231121, name: "嫩江县", parent: 2311, lon: 125.77127508963, lat: 49.621866015064},
+  {id: 231123, name: "逊克县", parent: 2311, lon: 128.37087710653, lat: 48.886739946849},
+  {id: 231124, name: "孙吴县", parent: 2311, lon: 127.31667232079, lat: 49.370655539474},
+  {id: 231181, name: "北安市", parent: 2311, lon: 127.11154600578, lat: 48.115945723953},
+  {id: 231182, name: "五大连池市", parent: 2311, lon: 126.63450133401, lat: 48.749166077372},
+  {id: 231202, name: "北林区", parent: 2312, lon: 126.95786274455, lat: 46.747536778515},
+  {id: 231221, name: "望奎县", parent: 2312, lon: 126.59302313008, lat: 46.869481261175},
+  {id: 231222, name: "兰西县", parent: 2312, lon: 126.21354291791, lat: 46.358350137762},
+  {id: 231223, name: "青冈县", parent: 2312, lon: 125.96052417701, lat: 46.846560509098},
+  {id: 231224, name: "庆安县", parent: 2312, lon: 127.84448982607, lat: 47.070365971064},
+  {id: 231225, name: "明水县", parent: 2312, lon: 125.84126811337, lat: 47.201247327838},
+  {id: 231226, name: "绥棱县", parent: 2312, lon: 127.71941343154, lat: 47.584142706971},
+  {id: 231281, name: "安达市", parent: 2312, lon: 125.38455235789, lat: 46.535467128182},
+  {id: 231282, name: "肇东市", parent: 2312, lon: 125.84973124624, lat: 46.009305917541},
+  {id: 231283, name: "海伦市", parent: 2312, lon: 126.89712924928, lat: 47.447269604837},
+  {id: 232721, name: "呼玛县", parent: 2327, lon: 124.91200234302, lat: 51.813130087054},
+  {id: 232722, name: "塔河县", parent: 2327, lon: 124.64020335752, lat: 52.716506252523},
+  {id: 232723, name: "漠河县", parent: 2327, lon: 122.71572081474, lat: 52.945658619469},
+  {id: 310101, name: "黄浦区", parent: 3101, lon: 121.49607206403, lat: 31.227203440769},
+  {id: 310104, name: "徐汇区", parent: 3101, lon: 121.44623500473, lat: 31.169152089592},
+  {id: 310105, name: "长宁区", parent: 3101, lon: 121.38761610866, lat: 31.213301496814},
+  {id: 310106, name: "静安区", parent: 3101, lon: 121.454755557, lat: 31.235380803488},
+  {id: 310107, name: "普陀区", parent: 3101, lon: 121.39844294375, lat: 31.263742929076},
+  {id: 310109, name: "虹口区", parent: 3101, lon: 121.49191854079, lat: 31.282497228987},
+  {id: 310110, name: "杨浦区", parent: 3101, lon: 121.53571659963, lat: 31.304510479542},
+  {id: 310112, name: "闵行区", parent: 3101, lon: 121.42502428093, lat: 31.093537540382},
+  {id: 310113, name: "宝山区", parent: 3101, lon: 121.40904121845, lat: 31.398622694467},
+  {id: 310114, name: "嘉定区", parent: 3101, lon: 121.25101353756, lat: 31.364338055434},
+  {id: 310115, name: "浦东新区", parent: 3101, lon: 121.63848131409, lat: 31.230895349134},
+  {id: 310116, name: "金山区", parent: 3101, lon: 121.24840817975, lat: 30.835080777082},
+  {id: 310117, name: "松江区", parent: 3101, lon: 121.22679050142, lat: 31.021244628099},
+  {id: 310118, name: "青浦区", parent: 3101, lon: 121.09142524282, lat: 31.130862397997},
+  {id: 310120, name: "奉贤区", parent: 3101, lon: 121.56064167963, lat: 30.915122452606},
+  {id: 310151, name: "崇明区", parent: 3101, lon: 121.56909950183, lat: 31.52860136251},
+  {id: 320102, name: "玄武区", parent: 3201, lon: 118.84893734485, lat: 32.07176566029},
+  {id: 320104, name: "秦淮区", parent: 3201, lon: 118.81722069709, lat: 32.007969136143},
+  {id: 320105, name: "建邺区", parent: 3201, lon: 118.71334176065, lat: 32.012518207527},
+  {id: 320106, name: "鼓楼区", parent: 3201, lon: 118.76505691316, lat: 32.068604458801},
+  {id: 320111, name: "浦口区", parent: 3201, lon: 118.56912478518, lat: 32.05906230054},
+  {id: 320113, name: "栖霞区", parent: 3201, lon: 118.96372475912, lat: 32.16942425653},
+  {id: 320114, name: "雨花台区", parent: 3201, lon: 118.72197857905, lat: 31.954552108797},
+  {id: 320115, name: "江宁区", parent: 3201, lon: 118.83541822485, lat: 31.863971430281},
+  {id: 320116, name: "六合区", parent: 3201, lon: 118.84816604456, lat: 32.400640243232},
+  {id: 320117, name: "溧水区", parent: 3201, lon: 119.03955092741, lat: 31.59098879063},
+  {id: 320118, name: "高淳区", parent: 3201, lon: 118.9648579166, lat: 31.363673442531},
+  {id: 320205, name: "锡山区", parent: 3202, lon: 120.49100821099, lat: 31.615587416408},
+  {id: 320206, name: "惠山区", parent: 3202, lon: 120.21529447552, lat: 31.656376333546},
+  {id: 320211, name: "滨湖区", parent: 3202, lon: 120.24850182101, lat: 31.466578565031},
+  {id: 320213, name: "梁溪区", parent: 3202, lon: 120.30311934862, lat: 31.57842412658},
+  {id: 320214, name: "新吴区", parent: 3202, lon: 120.43882764569, lat: 31.519399416228},
+  {id: 320281, name: "江阴市", parent: 3202, lon: 120.31067896716, lat: 31.837425422051},
+  {id: 320282, name: "宜兴市", parent: 3202, lon: 119.79026529658, lat: 31.362244911879},
+  {id: 320302, name: "鼓楼区", parent: 3203, lon: 117.29612858533, lat: 34.301409800357},
+  {id: 320303, name: "云龙区", parent: 3203, lon: 117.27617608552, lat: 34.22248667954},
+  {id: 320305, name: "贾汪区", parent: 3203, lon: 117.49824588411, lat: 34.410527773608},
+  {id: 320311, name: "泉山区", parent: 3203, lon: 117.1755840183, lat: 34.241946575704},
+  {id: 320312, name: "铜山区", parent: 3203, lon: 117.22940160979, lat: 34.348981539618},
+  {id: 320321, name: "丰县", parent: 3203, lon: 116.61573315373, lat: 34.695773328628},
+  {id: 320322, name: "沛县", parent: 3203, lon: 116.91146840815, lat: 34.700648164694},
+  {id: 320324, name: "睢宁县", parent: 3203, lon: 117.89036426969, lat: 33.946570640866},
+  {id: 320381, name: "新沂市", parent: 3203, lon: 118.34412147229, lat: 34.284442736534},
+  {id: 320382, name: "邳州市", parent: 3203, lon: 117.90306004276, lat: 34.402946394877},
+  {id: 320402, name: "天宁区", parent: 3204, lon: 120.00176576036, lat: 31.777803256373},
+  {id: 320404, name: "钟楼区", parent: 3204, lon: 119.91243874189, lat: 31.79851137455},
+  {id: 320411, name: "新北区", parent: 3204, lon: 119.90315390841, lat: 31.939946043961},
+  {id: 320412, name: "武进区", parent: 3204, lon: 119.94343167667, lat: 31.672903473648},
+  {id: 320413, name: "金坛区", parent: 3204, lon: 119.53415121469, lat: 31.728356462124},
+  {id: 320481, name: "溧阳市", parent: 3204, lon: 119.38283894831, lat: 31.425241931012},
+  {id: 320505, name: "虎丘区", parent: 3205, lon: 120.47842441781, lat: 31.351869327642},
+  {id: 320506, name: "吴中区", parent: 3205, lon: 120.36577637267, lat: 31.179869740166},
+  {id: 320507, name: "相城区", parent: 3205, lon: 120.64685298258, lat: 31.450775031111},
+  {id: 320508, name: "姑苏区", parent: 3205, lon: 120.61427934735, lat: 31.326429631222},
+  {id: 320509, name: "吴江区", parent: 3205, lon: 120.65734994979, lat: 31.000093080624},
+  {id: 320581, name: "常熟市", parent: 3205, lon: 120.83148596516, lat: 31.669446047798},
+  {id: 320582, name: "张家港市", parent: 3205, lon: 120.62727852834, lat: 31.907812337769},
+  {id: 320583, name: "昆山市", parent: 3205, lon: 120.96580778411, lat: 31.328936795497},
+  {id: 320585, name: "太仓市", parent: 3205, lon: 121.15897767248, lat: 31.571904296415},
+  {id: 320602, name: "崇川区", parent: 3206, lon: 120.88759857738, lat: 31.962660695271},
+  {id: 320611, name: "港闸区", parent: 3206, lon: 120.82387483505, lat: 32.071256422788},
+  {id: 320612, name: "通州区", parent: 3206, lon: 121.07249442751, lat: 32.067098964254},
+  {id: 320621, name: "海安县", parent: 3206, lon: 120.47392692165, lat: 32.553985066143},
+  {id: 320623, name: "如东县", parent: 3206, lon: 121.05924442185, lat: 32.387662145338},
+  {id: 320681, name: "启东市", parent: 3206, lon: 121.67882229665, lat: 31.871301838383},
+  {id: 320682, name: "如皋市", parent: 3206, lon: 120.580143985, lat: 32.273616272606},
+  {id: 320684, name: "海门市", parent: 3206, lon: 121.31247014367, lat: 31.956038868177},
+  {id: 320703, name: "连云区", parent: 3207, lon: 119.46701669742, lat: 34.638921829102},
+  {id: 320706, name: "海州区", parent: 3207, lon: 119.16219625272, lat: 34.514160144549},
+  {id: 320707, name: "赣榆区", parent: 3207, lon: 119.07859315245, lat: 34.921103960847},
+  {id: 320722, name: "东海县", parent: 3207, lon: 118.79230964695, lat: 34.556383225488},
+  {id: 320723, name: "灌云县", parent: 3207, lon: 119.39277519918, lat: 34.406832167104},
+  {id: 320724, name: "灌南县", parent: 3207, lon: 119.44639688138, lat: 34.175194871764},
+  {id: 320803, name: "淮安区", parent: 3208, lon: 119.31329513264, lat: 33.528348966942},
+  {id: 320804, name: "淮阴区", parent: 3208, lon: 118.93566378046, lat: 33.664059258402},
+  {id: 320812, name: "清江浦区", parent: 3208, lon: 119.04477992516, lat: 33.494331166176},
+  {id: 320813, name: "洪泽区", parent: 3208, lon: 118.83000637571, lat: 33.230193969134},
+  {id: 320826, name: "涟水县", parent: 3208, lon: 119.32495655858, lat: 33.884155184174},
+  {id: 320830, name: "盱眙县", parent: 3208, lon: 118.53823246743, lat: 32.971613125783},
+  {id: 320831, name: "金湖县", parent: 3208, lon: 119.14563113528, lat: 33.02583443776},
+  {id: 320902, name: "亭湖区", parent: 3209, lon: 120.20635135183, lat: 33.378948242447},
+  {id: 320903, name: "盐都区", parent: 3209, lon: 119.96850073907, lat: 33.265898266894},
+  {id: 320904, name: "大丰区", parent: 3209, lon: 120.58506449027, lat: 33.265908526078},
+  {id: 320921, name: "响水县", parent: 3209, lon: 119.79760156833, lat: 34.232797426966},
+  {id: 320922, name: "滨海县", parent: 3209, lon: 120.02660867811, lat: 34.092317176392},
+  {id: 320923, name: "阜宁县", parent: 3209, lon: 119.70499024879, lat: 33.71197604815},
+  {id: 320924, name: "射阳县", parent: 3209, lon: 120.27950474858, lat: 33.745462250481},
+  {id: 320925, name: "建湖县", parent: 3209, lon: 119.83649673997, lat: 33.488907986634},
+  {id: 320981, name: "东台市", parent: 3209, lon: 120.56376947144, lat: 32.791442548289},
+  {id: 321002, name: "广陵区", parent: 3210, lon: 119.48667775758, lat: 32.395670095608},
+  {id: 321003, name: "邗江区", parent: 3210, lon: 119.45826385876, lat: 32.425830218252},
+  {id: 321012, name: "江都区", parent: 3210, lon: 119.71731808779, lat: 32.549160271061},
+  {id: 321023, name: "宝应县", parent: 3210, lon: 119.45565078384, lat: 33.225833658364},
+  {id: 321081, name: "仪征市", parent: 3210, lon: 119.20095502034, lat: 32.392636465119},
+  {id: 321084, name: "高邮市", parent: 3210, lon: 119.50340701788, lat: 32.835943695939},
+  {id: 321102, name: "京口区", parent: 3211, lon: 119.5848217021, lat: 32.201996095087},
+  {id: 321111, name: "润州区", parent: 3211, lon: 119.43092031591, lat: 32.19664652864},
+  {id: 321112, name: "丹徒区", parent: 3211, lon: 119.4989723505, lat: 32.114041364762},
+  {id: 321181, name: "丹阳市", parent: 3211, lon: 119.64430350829, lat: 31.960263455083},
+  {id: 321182, name: "扬中市", parent: 3211, lon: 119.84513751029, lat: 32.189469410323},
+  {id: 321183, name: "句容市", parent: 3211, lon: 119.20707980344, lat: 31.932634957798},
+  {id: 321202, name: "海陵区", parent: 3212, lon: 119.92117442715, lat: 32.488257837661},
+  {id: 321203, name: "高港区", parent: 3212, lon: 119.92574377278, lat: 32.330075314459},
+  {id: 321204, name: "姜堰区", parent: 3212, lon: 120.06704535319, lat: 32.532466165694},
+  {id: 321281, name: "兴化市", parent: 3212, lon: 119.99641814069, lat: 32.961954308808},
+  {id: 321282, name: "靖江市", parent: 3212, lon: 120.27689862725, lat: 32.039442789049},
+  {id: 321283, name: "泰兴市", parent: 3212, lon: 120.135346292, lat: 32.213678940627},
+  {id: 321302, name: "宿城区", parent: 3213, lon: 118.27463983758, lat: 33.862829055956},
+  {id: 321311, name: "宿豫区", parent: 3213, lon: 118.34369284322, lat: 34.009529591744},
+  {id: 321322, name: "沭阳县", parent: 3213, lon: 118.85774971753, lat: 34.154013659597},
+  {id: 321323, name: "泗阳县", parent: 3213, lon: 118.65694128685, lat: 33.708800542074},
+  {id: 321324, name: "泗洪县", parent: 3213, lon: 118.3125512525, lat: 33.425955266134},
+  {id: 330102, name: "上城区", parent: 3301, lon: 120.18012613889, lat: 30.232357639233},
+  {id: 330103, name: "下城区", parent: 3301, lon: 120.18653502974, lat: 30.310287874904},
+  {id: 330104, name: "江干区", parent: 3301, lon: 120.30382324371, lat: 30.315832099954},
+  {id: 330105, name: "拱墅区", parent: 3301, lon: 120.15884493257, lat: 30.344732010358},
+  {id: 330106, name: "西湖区", parent: 3301, lon: 120.08899292561, lat: 30.207036169515},
+  {id: 330108, name: "滨江区", parent: 3301, lon: 120.19237042946, lat: 30.187587607727},
+  {id: 330109, name: "萧山区", parent: 3301, lon: 120.38908074858, lat: 30.172893839066},
+  {id: 330110, name: "余杭区", parent: 3301, lon: 119.99808906005, lat: 30.388119980754},
+  {id: 330111, name: "富阳区", parent: 3301, lon: 119.81096609176, lat: 29.977808419757},
+  {id: 330122, name: "桐庐县", parent: 3301, lon: 119.5604618667, lat: 29.836582478934},
+  {id: 330127, name: "淳安县", parent: 3301, lon: 118.89576489835, lat: 29.614714225509},
+  {id: 330182, name: "建德市", parent: 3301, lon: 119.37953322636, lat: 29.487115319259},
+  {id: 330185, name: "临安市", parent: 3301, lon: 119.35029466684, lat: 30.207683765784},
+  {id: 330203, name: "海曙区", parent: 3302, lon: 121.5353945773, lat: 29.876800511994},
+  {id: 330204, name: "江东区", parent: 3302, lon: 121.5980008523, lat: 29.87539247212},
+  {id: 330205, name: "江北区", parent: 3302, lon: 121.49329902932, lat: 29.96639219001},
+  {id: 330206, name: "北仑区", parent: 3302, lon: 121.88941885595, lat: 29.868332319465},
+  {id: 330211, name: "镇海区", parent: 3302, lon: 121.61663045279, lat: 29.995449382446},
+  {id: 330212, name: "鄞州区", parent: 3302, lon: 121.53783481355, lat: 29.78545893326},
+  {id: 330225, name: "象山县", parent: 3302, lon: 121.85866557564, lat: 29.378771009449},
+  {id: 330226, name: "宁海县", parent: 3302, lon: 121.46362436946, lat: 29.314474088639},
+  {id: 330281, name: "余姚市", parent: 3302, lon: 121.15277918829, lat: 29.996456719011},
+  {id: 330282, name: "慈溪市", parent: 3302, lon: 121.33840825932, lat: 30.189257122714},
+  {id: 330283, name: "奉化市", parent: 3302, lon: 121.37718563878, lat: 29.617073470394},
+  {id: 330302, name: "鹿城区", parent: 3303, lon: 120.56579853224, lat: 28.067865050513},
+  {id: 330303, name: "龙湾区", parent: 3303, lon: 120.81107773683, lat: 27.913340713281},
+  {id: 330304, name: "瓯海区", parent: 3303, lon: 120.55840358596, lat: 27.972177190591},
+  {id: 330305, name: "洞头区", parent: 3303, lon: 121.15231818926, lat: 27.884883705563},
+  {id: 330324, name: "永嘉县", parent: 3303, lon: 120.66880872172, lat: 28.336390468031},
+  {id: 330326, name: "平阳县", parent: 3303, lon: 120.38938725481, lat: 27.637700763436},
+  {id: 330327, name: "苍南县", parent: 3303, lon: 120.44554278341, lat: 27.434436382653},
+  {id: 330328, name: "文成县", parent: 3303, lon: 120.02842209847, lat: 27.81271343668},
+  {id: 330329, name: "泰顺县", parent: 3303, lon: 119.88486761051, lat: 27.536406837073},
+  {id: 330381, name: "瑞安市", parent: 3303, lon: 120.46834036335, lat: 27.82923052833},
+  {id: 330382, name: "乐清市", parent: 3303, lon: 121.01617490318, lat: 28.26183898877},
+  {id: 330402, name: "南湖区", parent: 3304, lon: 120.84453542647, lat: 30.716357921235},
+  {id: 330411, name: "秀洲区", parent: 3304, lon: 120.69190746888, lat: 30.777678969089},
+  {id: 330421, name: "嘉善县", parent: 3304, lon: 120.90887281597, lat: 30.905748069187},
+  {id: 330424, name: "海盐县", parent: 3304, lon: 120.88557558868, lat: 30.526042585394},
+  {id: 330481, name: "海宁市", parent: 3304, lon: 120.61872710778, lat: 30.442176799317},
+  {id: 330482, name: "平湖市", parent: 3304, lon: 121.10583903762, lat: 30.716528587208},
+  {id: 330483, name: "桐乡市", parent: 3304, lon: 120.49041120216, lat: 30.612341030328},
+  {id: 330502, name: "吴兴区", parent: 3305, lon: 120.08891886954, lat: 30.808545234564},
+  {id: 330503, name: "南浔区", parent: 3305, lon: 120.30914675944, lat: 30.766830865515},
+  {id: 330521, name: "德清县", parent: 3305, lon: 120.04983138985, lat: 30.567582881042},
+  {id: 330522, name: "长兴县", parent: 3305, lon: 119.81941984715, lat: 30.983352787535},
+  {id: 330523, name: "安吉县", parent: 3305, lon: 119.58315792627, lat: 30.626370494334},
+  {id: 330602, name: "越城区", parent: 3306, lon: 120.61832665179, lat: 30.015792939952},
+  {id: 330603, name: "柯桥区", parent: 3306, lon: 120.54020524674, lat: 29.999366392659},
+  {id: 330604, name: "上虞区", parent: 3306, lon: 120.87986642651, lat: 30.00645910703},
+  {id: 330624, name: "新昌县", parent: 3306, lon: 120.97570154218, lat: 29.414313976622},
+  {id: 330681, name: "诸暨市", parent: 3306, lon: 120.28143440994, lat: 29.699399516981},
+  {id: 330683, name: "嵊州市", parent: 3306, lon: 120.76143097735, lat: 29.591008031468},
+  {id: 330702, name: "婺城区", parent: 3307, lon: 119.51757234284, lat: 28.984539673649},
+  {id: 330703, name: "金东区", parent: 3307, lon: 119.80922749595, lat: 29.155526265081},
+  {id: 330723, name: "武义县", parent: 3307, lon: 119.72083317224, lat: 28.774055561598},
+  {id: 330726, name: "浦江县", parent: 3307, lon: 119.91048752626, lat: 29.526266410155},
+  {id: 330727, name: "磐安县", parent: 3307, lon: 120.56744721648, lat: 29.04420249188},
+  {id: 330781, name: "兰溪市", parent: 3307, lon: 119.53333759742, lat: 29.284102536325},
+  {id: 330782, name: "义乌市", parent: 3307, lon: 120.06729564867, lat: 29.306443911839},
+  {id: 330783, name: "东阳市", parent: 3307, lon: 120.38081772668, lat: 29.237426947341},
+  {id: 330784, name: "永康市", parent: 3307, lon: 120.10868352215, lat: 28.940176566983},
+  {id: 330802, name: "柯城区", parent: 3308, lon: 118.8130029548, lat: 28.998535292058},
+  {id: 330803, name: "衢江区", parent: 3308, lon: 118.93904421103, lat: 28.941983087299},
+  {id: 330822, name: "常山县", parent: 3308, lon: 118.54767046745, lat: 28.973666155532},
+  {id: 330824, name: "开化县", parent: 3308, lon: 118.33165006627, lat: 29.18993794143},
+  {id: 330825, name: "龙游县", parent: 3308, lon: 119.19866420604, lat: 28.997079389242},
+  {id: 330881, name: "江山市", parent: 3308, lon: 118.60708619901, lat: 28.581969944141},
+  {id: 330902, name: "定海区", parent: 3309, lon: 122.07302446869, lat: 30.06484716159},
+  {id: 330903, name: "普陀区", parent: 3309, lon: 122.27876474766, lat: 29.871101375771},
+  {id: 330921, name: "岱山县", parent: 3309, lon: 122.26035914727, lat: 30.319415586505},
+  {id: 330922, name: "嵊泗县", parent: 3309, lon: 122.48168649477, lat: 30.705003931261},
+  {id: 331002, name: "椒江区", parent: 3310, lon: 121.46737635254, lat: 28.657015656331},
+  {id: 331003, name: "黄岩区", parent: 3310, lon: 121.08831775253, lat: 28.604655275769},
+  {id: 331004, name: "路桥区", parent: 3310, lon: 121.45024245576, lat: 28.548659438247},
+  {id: 331021, name: "玉环县", parent: 3310, lon: 121.28442605522, lat: 28.179738010609},
+  {id: 331022, name: "三门县", parent: 3310, lon: 121.48822880178, lat: 29.017744246024},
+  {id: 331023, name: "天台县", parent: 3310, lon: 120.98556322305, lat: 29.151778640761},
+  {id: 331024, name: "仙居县", parent: 3310, lon: 120.64060572539, lat: 28.738741988629},
+  {id: 331081, name: "温岭市", parent: 3310, lon: 121.42104597878, lat: 28.400553817107},
+  {id: 331082, name: "临海市", parent: 3310, lon: 121.22191927302, lat: 28.857388590573},
+  {id: 331102, name: "莲都区", parent: 3311, lon: 119.84995169272, lat: 28.447361330679},
+  {id: 331121, name: "青田县", parent: 3311, lon: 120.14673815822, lat: 28.208428623515},
+  {id: 331122, name: "缙云县", parent: 3311, lon: 120.19188183536, lat: 28.666326291231},
+  {id: 331123, name: "遂昌县", parent: 3311, lon: 119.08934238361, lat: 28.525410332354},
+  {id: 331124, name: "松阳县", parent: 3311, lon: 119.44101320226, lat: 28.41158038279},
+  {id: 331125, name: "云和县", parent: 3311, lon: 119.54173007925, lat: 28.131320418187},
+  {id: 331126, name: "庆元县", parent: 3311, lon: 119.15761923529, lat: 27.62804612399},
+  {id: 331127, name: "景宁畲族自治县", parent: 3311, lon: 119.61928969769, lat: 27.896052631241},
+  {id: 331181, name: "龙泉市", parent: 3311, lon: 119.08229725532, lat: 28.050639306133},
+  {id: 340102, name: "瑶海区", parent: 3401, lon: 117.33122366889, lat: 31.905375399342},
+  {id: 340103, name: "庐阳区", parent: 3401, lon: 117.24783468704, lat: 31.912901051134},
+  {id: 340104, name: "蜀山区", parent: 3401, lon: 117.23128044361, lat: 31.838184928803},
+  {id: 340111, name: "包河区", parent: 3401, lon: 117.35391279997, lat: 31.790724288122},
+  {id: 340121, name: "长丰县", parent: 3401, lon: 117.17443835982, lat: 32.286111151904},
+  {id: 340122, name: "肥东县", parent: 3401, lon: 117.57585687571, lat: 32.003189086973},
+  {id: 340123, name: "肥西县", parent: 3401, lon: 117.03626088173, lat: 31.732638067993},
+  {id: 340124, name: "庐江县", parent: 3401, lon: 117.33587636592, lat: 31.228413825483},
+  {id: 340181, name: "巢湖市", parent: 3401, lon: 117.7717833762, lat: 31.676058567558},
+  {id: 340202, name: "镜湖区", parent: 3402, lon: 118.38724548573, lat: 31.351965582559},
+  {id: 340203, name: "弋江区", parent: 3402, lon: 118.33596966824, lat: 31.216676779902},
+  {id: 340207, name: "鸠江区", parent: 3402, lon: 118.49397424134, lat: 31.375481957255},
+  {id: 340208, name: "三山区", parent: 3402, lon: 118.3117984229, lat: 31.212824987426},
+  {id: 340221, name: "芜湖县", parent: 3402, lon: 118.53246218925, lat: 31.191698969307},
+  {id: 340222, name: "繁昌县", parent: 3402, lon: 118.2001179722, lat: 31.12832958697},
+  {id: 340223, name: "南陵县", parent: 3402, lon: 118.28821596372, lat: 30.8959818627},
+  {id: 340225, name: "无为县", parent: 3402, lon: 117.82005160307, lat: 31.22249365658},
+  {id: 340302, name: "龙子湖区", parent: 3403, lon: 117.47832568768, lat: 32.926342521363},
+  {id: 340303, name: "蚌山区", parent: 3403, lon: 117.35635619096, lat: 32.881522954878},
+  {id: 340304, name: "禹会区", parent: 3403, lon: 117.3055150635, lat: 32.889696360476},
+  {id: 340311, name: "淮上区", parent: 3403, lon: 117.38818423314, lat: 33.023815185908},
+  {id: 340321, name: "怀远县", parent: 3403, lon: 117.04208647136, lat: 33.037130745984},
+  {id: 340322, name: "五河县", parent: 3403, lon: 117.764210401, lat: 33.138465310137},
+  {id: 340323, name: "固镇县", parent: 3403, lon: 117.35403405942, lat: 33.272840934373},
+  {id: 340402, name: "大通区", parent: 3404, lon: 117.11713761331, lat: 32.643535866152},
+  {id: 340403, name: "田家庵区", parent: 3404, lon: 117.01468721736, lat: 32.564363767687},
+  {id: 340404, name: "谢家集区", parent: 3404, lon: 116.90877214688, lat: 32.544400181652},
+  {id: 340405, name: "八公山区", parent: 3404, lon: 116.82552132442, lat: 32.652390199515},
+  {id: 340406, name: "潘集区", parent: 3404, lon: 116.86619300469, lat: 32.800694621968},
+  {id: 340421, name: "凤台县", parent: 3404, lon: 116.58490534783, lat: 32.791416300893},
+  {id: 340422, name: "寿县", parent: 3404, lon: 116.77854729708, lat: 32.287816164667},
+  {id: 340503, name: "花山区", parent: 3405, lon: 118.57834785585, lat: 31.711627118315},
+  {id: 340504, name: "雨山区", parent: 3405, lon: 118.55455812086, lat: 31.659719310829},
+  {id: 340506, name: "博望区", parent: 3405, lon: 118.85133588367, lat: 31.56550080289},
+  {id: 340521, name: "当涂县", parent: 3405, lon: 118.64667323993, lat: 31.503024380618},
+  {id: 340522, name: "含山县", parent: 3405, lon: 118.51588184662, lat: 31.68852815888},
+  {id: 340523, name: "和县", parent: 3405, lon: 118.29986391138, lat: 31.757568623793},
+  {id: 340602, name: "杜集区", parent: 3406, lon: 116.95496714841, lat: 34.113251414374},
+  {id: 340603, name: "相山区", parent: 3406, lon: 116.72896156685, lat: 33.988334722309},
+  {id: 340604, name: "烈山区", parent: 3406, lon: 116.9081817805, lat: 33.84405351094},
+  {id: 340621, name: "濉溪县", parent: 3406, lon: 116.73689934705, lat: 33.693204649044},
+  {id: 340705, name: "铜官区", parent: 3407, lon: 117.83324857069, lat: 30.943050294456},
+  {id: 340706, name: "义安区", parent: 3407, lon: 117.95780890267, lat: 30.944585477816},
+  {id: 340711, name: "郊区", parent: 3407, lon: 117.64155067342, lat: 30.754631362428},
+  {id: 340722, name: "枞阳县", parent: 3407, lon: 117.41703591878, lat: 30.863982478208},
+  {id: 340802, name: "迎江区", parent: 3408, lon: 117.15254234871, lat: 30.541457598958},
+  {id: 340803, name: "大观区", parent: 3408, lon: 116.9809683319, lat: 30.532487247564},
+  {id: 340811, name: "宜秀区", parent: 3408, lon: 117.05612964375, lat: 30.614339999814},
+  {id: 340822, name: "怀宁县", parent: 3408, lon: 116.80352690196, lat: 30.579024527459},
+  {id: 340824, name: "潜山县", parent: 3408, lon: 116.55281551688, lat: 30.758639275993},
+  {id: 340825, name: "太湖县", parent: 3408, lon: 116.18253924827, lat: 30.50109966504},
+  {id: 340826, name: "宿松县", parent: 3408, lon: 116.25351835628, lat: 30.108216635083},
+  {id: 340827, name: "望江县", parent: 3408, lon: 116.68809225224, lat: 30.242568216534},
+  {id: 340828, name: "岳西县", parent: 3408, lon: 116.22007036688, lat: 30.901821144678},
+  {id: 340881, name: "桐城市", parent: 3408, lon: 116.95355904596, lat: 30.972567972107},
+  {id: 341002, name: "屯溪区", parent: 3410, lon: 118.30963663452, lat: 29.716534699341},
+  {id: 341003, name: "黄山区", parent: 3410, lon: 118.07754612726, lat: 30.27774589512},
+  {id: 341004, name: "徽州区", parent: 3410, lon: 118.27859128593, lat: 29.902140398578},
+  {id: 341021, name: "歙县", parent: 3410, lon: 118.57515564084, lat: 29.871177014075},
+  {id: 341022, name: "休宁县", parent: 3410, lon: 118.09308178818, lat: 29.669120361013},
+  {id: 341023, name: "黟县", parent: 3410, lon: 117.91075047481, lat: 30.014778480875},
+  {id: 341024, name: "祁门县", parent: 3410, lon: 117.60052812882, lat: 29.873705688292},
+  {id: 341102, name: "琅琊区", parent: 3411, lon: 118.33756892154, lat: 32.338458080903},
+  {id: 341103, name: "南谯区", parent: 3411, lon: 118.27082841537, lat: 32.310209092866},
+  {id: 341122, name: "来安县", parent: 3411, lon: 118.53562960741, lat: 32.473711637442},
+  {id: 341124, name: "全椒县", parent: 3411, lon: 118.10577829394, lat: 32.069932749958},
+  {id: 341125, name: "定远县", parent: 3411, lon: 117.66596452497, lat: 32.473258599425},
+  {id: 341126, name: "凤阳县", parent: 3411, lon: 117.61147230278, lat: 32.792214955967},
+  {id: 341181, name: "天长市", parent: 3411, lon: 118.9729126449, lat: 32.721213784185},
+  {id: 341182, name: "明光市", parent: 3411, lon: 118.14072656734, lat: 32.81183581812},
+  {id: 341202, name: "颍州区", parent: 3412, lon: 115.72772731323, lat: 32.867688563381},
+  {id: 341203, name: "颍东区", parent: 3412, lon: 116.03998540511, lat: 32.941585109575},
+  {id: 341204, name: "颍泉区", parent: 3412, lon: 115.73402623147, lat: 33.073509996971},
+  {id: 341221, name: "临泉县", parent: 3412, lon: 115.24846137013, lat: 32.909769412643},
+  {id: 341222, name: "太和县", parent: 3412, lon: 115.64875595615, lat: 33.33774827164},
+  {id: 341225, name: "阜南县", parent: 3412, lon: 115.65409851632, lat: 32.655881179954},
+  {id: 341226, name: "颍上县", parent: 3412, lon: 116.26531418265, lat: 32.662460220803},
+  {id: 341282, name: "界首市", parent: 3412, lon: 115.39864296673, lat: 33.226192689105},
+  {id: 341302, name: "埇桥区", parent: 3413, lon: 117.15907588963, lat: 33.726032251705},
+  {id: 341321, name: "砀山县", parent: 3413, lon: 116.42028227207, lat: 34.454057242308},
+  {id: 341322, name: "萧县", parent: 3413, lon: 116.81242175884, lat: 34.208529641052},
+  {id: 341323, name: "灵璧县", parent: 3413, lon: 117.54312668944, lat: 33.690737031018},
+  {id: 341324, name: "泗县", parent: 3413, lon: 117.89035897388, lat: 33.544346537362},
+  {id: 341502, name: "金安区", parent: 3415, lon: 116.66194105885, lat: 31.631258470539},
+  {id: 341503, name: "裕安区", parent: 3415, lon: 116.30257286162, lat: 31.753038540484},
+  {id: 341504, name: "叶集区", parent: 3415, lon: 116.50525268298, lat: 31.755558355198},
+  {id: 341522, name: "霍邱县", parent: 3415, lon: 116.17352091075, lat: 32.201507325967},
+  {id: 341523, name: "舒城县", parent: 3415, lon: 116.82855911938, lat: 31.310003081421},
+  {id: 341524, name: "金寨县", parent: 3415, lon: 115.77931490356, lat: 31.47909281966},
+  {id: 341525, name: "霍山县", parent: 3415, lon: 116.24667502387, lat: 31.287055799576},
+  {id: 341602, name: "谯城区", parent: 3416, lon: 115.81281423257, lat: 33.782924407833},
+  {id: 341621, name: "涡阳县", parent: 3416, lon: 116.22355045352, lat: 33.557949046136},
+  {id: 341622, name: "蒙城县", parent: 3416, lon: 116.5915120873, lat: 33.22304396133},
+  {id: 341623, name: "利辛县", parent: 3416, lon: 116.16627183049, lat: 33.157375760354},
+  {id: 341702, name: "贵池区", parent: 3417, lon: 117.50847770852, lat: 30.514085692989},
+  {id: 341721, name: "东至县", parent: 3417, lon: 117.00682739944, lat: 30.034069906871},
+  {id: 341722, name: "石台县", parent: 3417, lon: 117.53828189034, lat: 30.199160540051},
+  {id: 341723, name: "青阳县", parent: 3417, lon: 117.90815913595, lat: 30.602013463857},
+  {id: 341802, name: "宣州区", parent: 3418, lon: 118.7978027295, lat: 30.943631043255},
+  {id: 341821, name: "郎溪县", parent: 3418, lon: 119.16790406676, lat: 31.100123797933},
+  {id: 341822, name: "广德县", parent: 3418, lon: 119.36471289716, lat: 30.893949749016},
+  {id: 341823, name: "泾县", parent: 3418, lon: 118.37604020629, lat: 30.599286819492},
+  {id: 341824, name: "绩溪县", parent: 3418, lon: 118.6637768779, lat: 30.162401081144},
+  {id: 341825, name: "旌德县", parent: 3418, lon: 118.48289793271, lat: 30.321833135921},
+  {id: 341881, name: "宁国市", parent: 3418, lon: 118.99702452598, lat: 30.502936034943},
+  {id: 350102, name: "鼓楼区", parent: 3501, lon: 119.29063293961, lat: 26.097871106548},
+  {id: 350103, name: "台江区", parent: 3501, lon: 119.32406268487, lat: 26.062153767548},
+  {id: 350104, name: "仓山区", parent: 3501, lon: 119.33493643794, lat: 26.019664381274},
+  {id: 350105, name: "马尾区", parent: 3501, lon: 119.51080249492, lat: 26.082650321112},
+  {id: 350111, name: "晋安区", parent: 3501, lon: 119.31492287341, lat: 26.221752079694},
+  {id: 350121, name: "闽侯县", parent: 3501, lon: 119.12238323588, lat: 26.182432187564},
+  {id: 350122, name: "连江县", parent: 3501, lon: 119.5683393031, lat: 26.301591411273},
+  {id: 350123, name: "罗源县", parent: 3501, lon: 119.46523419293, lat: 26.506325719276},
+  {id: 350124, name: "闽清县", parent: 3501, lon: 118.77880310691, lat: 26.212273389994},
+  {id: 350125, name: "永泰县", parent: 3501, lon: 118.79474057257, lat: 25.857384057085},
+  {id: 350128, name: "平潭县", parent: 3501, lon: 119.76645322176, lat: 25.537737674887},
+  {id: 350181, name: "福清市", parent: 3501, lon: 119.37754701319, lat: 25.638120577122},
+  {id: 350182, name: "长乐市", parent: 3501, lon: 119.56271983507, lat: 25.915538436925},
+  {id: 350203, name: "思明区", parent: 3502, lon: 118.13453488213, lat: 24.468728076403},
+  {id: 350205, name: "海沧区", parent: 3502, lon: 117.98395590267, lat: 24.53619033141},
+  {id: 350206, name: "湖里区", parent: 3502, lon: 118.14467575095, lat: 24.521973931072},
+  {id: 350211, name: "集美区", parent: 3502, lon: 118.02941167016, lat: 24.640972798479},
+  {id: 350212, name: "同安区", parent: 3502, lon: 118.11468496447, lat: 24.781704734783},
+  {id: 350213, name: "翔安区", parent: 3502, lon: 118.28080317925, lat: 24.675484915197},
+  {id: 350302, name: "城厢区", parent: 3503, lon: 118.95444257513, lat: 25.433374872116},
+  {id: 350303, name: "涵江区", parent: 3503, lon: 119.07903889678, lat: 25.604741724857},
+  {id: 350304, name: "荔城区", parent: 3503, lon: 119.07410333682, lat: 25.427591842484},
+  {id: 350305, name: "秀屿区", parent: 3503, lon: 119.13146589277, lat: 25.276364535891},
+  {id: 350322, name: "仙游县", parent: 3503, lon: 118.70462563885, lat: 25.468258336396},
+  {id: 350402, name: "梅列区", parent: 3504, lon: 117.63050069122, lat: 26.307448553348},
+  {id: 350403, name: "三元区", parent: 3504, lon: 117.51689648494, lat: 26.173967139255},
+  {id: 350421, name: "明溪县", parent: 3504, lon: 117.21859881719, lat: 26.418484134559},
+  {id: 350423, name: "清流县", parent: 3504, lon: 116.9211934366, lat: 26.099297668335},
+  {id: 350424, name: "宁化县", parent: 3504, lon: 116.67811816013, lat: 26.310073098848},
+  {id: 350425, name: "大田县", parent: 3504, lon: 117.81799668394, lat: 25.797449314745},
+  {id: 350426, name: "尤溪县", parent: 3504, lon: 118.25386835128, lat: 26.150593850717},
+  {id: 350427, name: "沙县", parent: 3504, lon: 117.81884600477, lat: 26.446505905088},
+  {id: 350428, name: "将乐县", parent: 3504, lon: 117.40083967575, lat: 26.732328679548},
+  {id: 350429, name: "泰宁县", parent: 3504, lon: 117.12565958885, lat: 26.865476881883},
+  {id: 350430, name: "建宁县", parent: 3504, lon: 116.79307136804, lat: 26.817741252365},
+  {id: 350481, name: "永安市", parent: 3504, lon: 117.32853545664, lat: 25.919433151382},
+  {id: 350502, name: "鲤城区", parent: 3505, lon: 118.56845525017, lat: 24.905744690408},
+  {id: 350503, name: "丰泽区", parent: 3505, lon: 118.6074317381, lat: 24.936275095413},
+  {id: 350504, name: "洛江区", parent: 3505, lon: 118.64345333988, lat: 25.133414113301},
+  {id: 350505, name: "泉港区", parent: 3505, lon: 118.81901718056, lat: 25.173479375703},
+  {id: 350521, name: "惠安县", parent: 3505, lon: 118.80947288339, lat: 24.991871443315},
+  {id: 350524, name: "安溪县", parent: 3505, lon: 117.91163244343, lat: 25.125684138245},
+  {id: 350525, name: "永春县", parent: 3505, lon: 118.14097079846, lat: 25.395598523493},
+  {id: 350526, name: "德化县", parent: 3505, lon: 118.2580388856, lat: 25.674049363102},
+  {id: 350527, name: "金门县", parent: 3505, lon: 118.3797724059, lat: 24.453685081793},
+  {id: 350581, name: "石狮市", parent: 3505, lon: 118.69248092208, lat: 24.744894247253},
+  {id: 350582, name: "晋江市", parent: 3505, lon: 118.55865054225, lat: 24.729638297698},
+  {id: 350583, name: "南安市", parent: 3505, lon: 118.38898065958, lat: 25.017972545094},
+  {id: 350602, name: "芗城区", parent: 3506, lon: 117.63336610614, lat: 24.575089413411},
+  {id: 350603, name: "龙文区", parent: 3506, lon: 117.70403687855, lat: 24.537177249549},
+  {id: 350622, name: "云霄县", parent: 3506, lon: 117.3381105564, lat: 23.984924590871},
+  {id: 350623, name: "漳浦县", parent: 3506, lon: 117.69145555574, lat: 24.134610348852},
+  {id: 350624, name: "诏安县", parent: 3506, lon: 117.13294195697, lat: 23.87404072539},
+  {id: 350625, name: "长泰县", parent: 3506, lon: 117.81298738987, lat: 24.744593711082},
+  {id: 350626, name: "东山县", parent: 3506, lon: 117.42541646767, lat: 23.691110309815},
+  {id: 350627, name: "南靖县", parent: 3506, lon: 117.29305472699, lat: 24.668805586956},
+  {id: 350628, name: "平和县", parent: 3506, lon: 117.20072092242, lat: 24.324490604831},
+  {id: 350629, name: "华安县", parent: 3506, lon: 117.54380454982, lat: 24.918688094608},
+  {id: 350681, name: "龙海市", parent: 3506, lon: 117.80759027663, lat: 24.398816824823},
+  {id: 350702, name: "延平区", parent: 3507, lon: 118.25473662436, lat: 26.590155096909},
+  {id: 350703, name: "建阳区", parent: 3507, lon: 118.09503169529, lat: 27.42298490861},
+  {id: 350721, name: "顺昌县", parent: 3507, lon: 117.87368081029, lat: 26.908712277835},
+  {id: 350722, name: "浦城县", parent: 3507, lon: 118.52429759856, lat: 27.945164125785},
+  {id: 350723, name: "光泽县", parent: 3507, lon: 117.3555359708, lat: 27.655597572386},
+  {id: 350724, name: "松溪县", parent: 3507, lon: 118.76568912522, lat: 27.610704490355},
+  {id: 350725, name: "政和县", parent: 3507, lon: 118.97167122766, lat: 27.324781791328},
+  {id: 350781, name: "邵武市", parent: 3507, lon: 117.48057222854, lat: 27.235197069611},
+  {id: 350782, name: "武夷山市", parent: 3507, lon: 118.01154264632, lat: 27.748135171112},
+  {id: 350783, name: "建瓯市", parent: 3507, lon: 118.48514716959, lat: 27.044913662799},
+  {id: 350802, name: "新罗区", parent: 3508, lon: 117.08632241393, lat: 25.22220637939},
+  {id: 350803, name: "永定区", parent: 3508, lon: 116.75552020871, lat: 24.733216812374},
+  {id: 350821, name: "长汀县", parent: 3508, lon: 116.37188399052, lat: 25.696958495476},
+  {id: 350823, name: "上杭县", parent: 3508, lon: 116.56866906668, lat: 25.126526144211},
+  {id: 350824, name: "武平县", parent: 3508, lon: 116.13591657582, lat: 25.139021186901},
+  {id: 350825, name: "连城县", parent: 3508, lon: 116.82144796403, lat: 25.60417681052},
+  {id: 350881, name: "漳平市", parent: 3508, lon: 117.45172162006, lat: 25.379998346458},
+  {id: 350902, name: "蕉城区", parent: 3509, lon: 119.45455949068, lat: 26.763865425402},
+  {id: 350921, name: "霞浦县", parent: 3509, lon: 119.99055111407, lat: 26.868876533651},
+  {id: 350922, name: "古田县", parent: 3509, lon: 118.87954004139, lat: 26.618899035408},
+  {id: 350923, name: "屏南县", parent: 3509, lon: 118.98929146416, lat: 26.921561586231},
+  {id: 350924, name: "寿宁县", parent: 3509, lon: 119.5055198374, lat: 27.426229516207},
+  {id: 350925, name: "周宁县", parent: 3509, lon: 119.31332559174, lat: 27.094312780593},
+  {id: 350926, name: "柘荣县", parent: 3509, lon: 119.88752229998, lat: 27.207067709716},
+  {id: 350981, name: "福安市", parent: 3509, lon: 119.65627713286, lat: 27.055896714799},
+  {id: 350982, name: "福鼎市", parent: 3509, lon: 120.19830746412, lat: 27.224828701234},
+  {id: 360102, name: "东湖区", parent: 3601, lon: 115.91014826387, lat: 28.692375145425},
+  {id: 360103, name: "西湖区", parent: 3601, lon: 115.89894765179, lat: 28.657325885604},
+  {id: 360104, name: "青云谱区", parent: 3601, lon: 115.9219541542, lat: 28.636601455215},
+  {id: 360105, name: "湾里区", parent: 3601, lon: 115.75048047817, lat: 28.800556903151},
+  {id: 360111, name: "青山湖区", parent: 3601, lon: 115.93090639742, lat: 28.700848503487},
+  {id: 360112, name: "新建区", parent: 3601, lon: 115.97766347318, lat: 28.762510375641},
+  {id: 360121, name: "南昌县", parent: 3601, lon: 116.07126087416, lat: 28.620772037399},
+  {id: 360123, name: "安义县", parent: 3601, lon: 115.59520240179, lat: 28.836411855907},
+  {id: 360124, name: "进贤县", parent: 3601, lon: 116.3174577813, lat: 28.441758032984},
+  {id: 360202, name: "昌江区", parent: 3602, lon: 117.1861998641, lat: 29.272154837188},
+  {id: 360203, name: "珠山区", parent: 3602, lon: 117.23411943253, lat: 29.303230556708},
+  {id: 360222, name: "浮梁县", parent: 3602, lon: 117.30897851315, lat: 29.556555537931},
+  {id: 360281, name: "乐平市", parent: 3602, lon: 117.27327879748, lat: 28.969928213838},
+  {id: 360302, name: "安源区", parent: 3603, lon: 113.87886885384, lat: 27.645394991779},
+  {id: 360313, name: "湘东区", parent: 3603, lon: 113.73981816772, lat: 27.53370963141},
+  {id: 360321, name: "莲花县", parent: 3603, lon: 113.95977686775, lat: 27.223445481289},
+  {id: 360322, name: "上栗县", parent: 3603, lon: 113.86780638258, lat: 27.832260223294},
+  {id: 360323, name: "芦溪县", parent: 3603, lon: 114.07000665468, lat: 27.578022564845},
+  {id: 360402, name: "濂溪区", parent: 3604, lon: 115.99984802155, lat: 29.719639526122},
+  {id: 360403, name: "浔阳区", parent: 3604, lon: 116.00276787378, lat: 29.717848894949},
+  {id: 360421, name: "九江县", parent: 3604, lon: 115.84203547109, lat: 29.640229926977},
+  {id: 360423, name: "武宁县", parent: 3604, lon: 115.02315949078, lat: 29.263844028424},
+  {id: 360424, name: "修水县", parent: 3604, lon: 114.4461918569, lat: 29.000021311275},
+  {id: 360425, name: "永修县", parent: 3604, lon: 115.74247538366, lat: 29.141310623242},
+  {id: 360426, name: "德安县", parent: 3604, lon: 115.63408426446, lat: 29.401728483728},
+  {id: 360428, name: "都昌县", parent: 3604, lon: 116.34204769578, lat: 29.356214912479},
+  {id: 360429, name: "湖口县", parent: 3604, lon: 116.29256118736, lat: 29.66806050769},
+  {id: 360430, name: "彭泽县", parent: 3604, lon: 116.62933206226, lat: 29.834597412665},
+  {id: 360481, name: "瑞昌市", parent: 3604, lon: 115.45968602847, lat: 29.628544625483},
+  {id: 360482, name: "共青城市", parent: 3604, lon: 115.820204477, lat: 29.236083846739},
+  {id: 360483, name: "庐山市", parent: 3604, lon: 115.98274999338, lat: 29.347769476561},
+  {id: 360502, name: "渝水区", parent: 3605, lon: 115.00785062298, lat: 27.850578117027},
+  {id: 360521, name: "分宜县", parent: 3605, lon: 114.67816306735, lat: 27.844993335525},
+  {id: 360602, name: "月湖区", parent: 3606, lon: 117.05770601694, lat: 28.2472053807},
+  {id: 360622, name: "余江县", parent: 3606, lon: 116.92157395441, lat: 28.321070494465},
+  {id: 360681, name: "贵溪市", parent: 3606, lon: 117.19787036817, lat: 28.190604458955},
+  {id: 360702, name: "章贡区", parent: 3607, lon: 114.93736527747, lat: 25.838710922212},
+  {id: 360703, name: "南康区", parent: 3607, lon: 114.70979725341, lat: 25.857651685208},
+  {id: 360721, name: "赣县", parent: 3607, lon: 115.07258602937, lat: 25.90202543961},
+  {id: 360722, name: "信丰县", parent: 3607, lon: 114.98179982408, lat: 25.286018342725},
+  {id: 360723, name: "大余县", parent: 3607, lon: 114.36649000169, lat: 25.44847167429},
+  {id: 360724, name: "上犹县", parent: 3607, lon: 114.402605282, lat: 25.939253373895},
+  {id: 360725, name: "崇义县", parent: 3607, lon: 114.19933700414, lat: 25.679632268061},
+  {id: 360726, name: "安远县", parent: 3607, lon: 115.39661257033, lat: 25.238854104103},
+  {id: 360727, name: "龙南县", parent: 3607, lon: 114.73182493834, lat: 24.772706198589},
+  {id: 360728, name: "定南县", parent: 3607, lon: 115.09388033666, lat: 24.824160396247},
+  {id: 360729, name: "全南县", parent: 3607, lon: 114.52234265684, lat: 24.853232801668},
+  {id: 360730, name: "宁都县", parent: 3607, lon: 116.01211627388, lat: 26.590232461651},
+  {id: 360731, name: "于都县", parent: 3607, lon: 115.50889266701, lat: 25.936771660723},
+  {id: 360732, name: "兴国县", parent: 3607, lon: 115.44650725812, lat: 26.425200601326},
+  {id: 360733, name: "会昌县", parent: 3607, lon: 115.76515116427, lat: 25.505756516053},
+  {id: 360734, name: "寻乌县", parent: 3607, lon: 115.66514812504, lat: 24.905101066212},
+  {id: 360735, name: "石城县", parent: 3607, lon: 116.37232152813, lat: 26.305565307867},
+  {id: 360781, name: "瑞金市", parent: 3607, lon: 115.98586699622, lat: 25.92183136176},
+  {id: 360802, name: "吉州区", parent: 3608, lon: 114.96043668241, lat: 27.160925346239},
+  {id: 360803, name: "青原区", parent: 3608, lon: 115.2661672372, lat: 26.859217102443},
+  {id: 360821, name: "吉安县", parent: 3608, lon: 114.75127781381, lat: 27.144039043235},
+  {id: 360822, name: "吉水县", parent: 3608, lon: 115.2546383758, lat: 27.19746539341},
+  {id: 360823, name: "峡江县", parent: 3608, lon: 115.2144367887, lat: 27.589281248366},
+  {id: 360824, name: "新干县", parent: 3608, lon: 115.50683935381, lat: 27.73857991921},
+  {id: 360825, name: "永丰县", parent: 3608, lon: 115.59283108743, lat: 27.097544566001},
+  {id: 360826, name: "泰和县", parent: 3608, lon: 114.90935609718, lat: 26.744020657469},
+  {id: 360827, name: "遂川县", parent: 3608, lon: 114.37058927285, lat: 26.344268552348},
+  {id: 360828, name: "万安县", parent: 3608, lon: 114.82501601739, lat: 26.444632606143},
+  {id: 360829, name: "安福县", parent: 3608, lon: 114.45559104078, lat: 27.361338381942},
+  {id: 360830, name: "永新县", parent: 3608, lon: 114.18844710958, lat: 26.973089209998},
+  {id: 360881, name: "井冈山市", parent: 3608, lon: 114.12543918071, lat: 26.633149538063},
+  {id: 360902, name: "袁州区", parent: 3609, lon: 114.29035792969, lat: 27.839383216183},
+  {id: 360921, name: "奉新县", parent: 3609, lon: 115.18007761153, lat: 28.714689488559},
+  {id: 360922, name: "万载县", parent: 3609, lon: 114.33614285625, lat: 28.209464188761},
+  {id: 360923, name: "上高县", parent: 3609, lon: 114.86095818884, lat: 28.199053404375},
+  {id: 360924, name: "宜丰县", parent: 3609, lon: 114.77436594756, lat: 28.454955048263},
+  {id: 360925, name: "靖安县", parent: 3609, lon: 115.23770855063, lat: 28.946083546903},
+  {id: 360926, name: "铜鼓县", parent: 3609, lon: 114.37013409066, lat: 28.615515536873},
+  {id: 360981, name: "丰城市", parent: 3609, lon: 115.8234035155, lat: 28.11151587847},
+  {id: 360982, name: "樟树市", parent: 3609, lon: 115.42134592031, lat: 28.002513613496},
+  {id: 360983, name: "高安市", parent: 3609, lon: 115.30448193078, lat: 28.365231807956},
+  {id: 361002, name: "临川区", parent: 3610, lon: 116.36297445174, lat: 27.924731514346},
+  {id: 361021, name: "南城县", parent: 3610, lon: 116.68173230038, lat: 27.518966176458},
+  {id: 361022, name: "黎川县", parent: 3610, lon: 116.93171710122, lat: 27.261522440114},
+  {id: 361023, name: "南丰县", parent: 3610, lon: 116.50036153348, lat: 27.114896155721},
+  {id: 361024, name: "崇仁县", parent: 3610, lon: 116.0663364594, lat: 27.714537232977},
+  {id: 361025, name: "乐安县", parent: 3610, lon: 115.8433235072, lat: 27.372428601937},
+  {id: 361026, name: "宜黄县", parent: 3610, lon: 116.25124162127, lat: 27.393066587894},
+  {id: 361027, name: "金溪县", parent: 3610, lon: 116.7577119166, lat: 27.931491559982},
+  {id: 361028, name: "资溪县", parent: 3610, lon: 117.03576739532, lat: 27.745228535574},
+  {id: 361029, name: "东乡县", parent: 3610, lon: 116.6196227029, lat: 28.221297983216},
+  {id: 361030, name: "广昌县", parent: 3610, lon: 116.36311652024, lat: 26.761885358703},
+  {id: 361102, name: "信州区", parent: 3611, lon: 118.05057821628, lat: 28.497223477761},
+  {id: 361103, name: "广丰区", parent: 3611, lon: 118.2644206827, lat: 28.344342110797},
+  {id: 361121, name: "上饶县", parent: 3611, lon: 117.94436679858, lat: 28.405679688374},
+  {id: 361123, name: "玉山县", parent: 3611, lon: 118.16891675165, lat: 28.759339988568},
+  {id: 361124, name: "铅山县", parent: 3611, lon: 117.71346110788, lat: 28.109822141358},
+  {id: 361125, name: "横峰县", parent: 3611, lon: 117.64519741314, lat: 28.513847494908},
+  {id: 361126, name: "弋阳县", parent: 3611, lon: 117.41664984164, lat: 28.452236031909},
+  {id: 361127, name: "余干县", parent: 3611, lon: 116.62132713524, lat: 28.682775556852},
+  {id: 361128, name: "鄱阳县", parent: 3611, lon: 116.78769263036, lat: 29.243055725231},
+  {id: 361129, name: "万年县", parent: 3611, lon: 117.01441274225, lat: 28.703236407929},
+  {id: 361130, name: "婺源县", parent: 3611, lon: 117.78748504184, lat: 29.327231721148},
+  {id: 361181, name: "德兴市", parent: 3611, lon: 117.75325925179, lat: 28.940751536947},
+  {id: 370102, name: "历下区", parent: 3701, lon: 117.10158579685, lat: 36.659338577102},
+  {id: 370103, name: "市中区", parent: 3701, lon: 116.97943490154, lat: 36.584025608593},
+  {id: 370104, name: "槐荫区", parent: 3701, lon: 116.89119924147, lat: 36.682531368156},
+  {id: 370105, name: "天桥区", parent: 3701, lon: 116.98315714712, lat: 36.778077694991},
+  {id: 370112, name: "历城区", parent: 3701, lon: 117.1908183999, lat: 36.612688160201},
+  {id: 370113, name: "长清区", parent: 3701, lon: 116.8035523233, lat: 36.428570220761},
+  {id: 370124, name: "平阴县", parent: 3701, lon: 116.42250204992, lat: 36.203933440502},
+  {id: 370125, name: "济阳县", parent: 3701, lon: 117.15002119645, lat: 37.032805727164},
+  {id: 370126, name: "商河县", parent: 3701, lon: 117.20871442383, lat: 37.32594723869},
+  {id: 370181, name: "章丘市", parent: 3701, lon: 117.47934537885, lat: 36.744883031601},
+  {id: 370202, name: "市南区", parent: 3702, lon: 120.37618412944, lat: 36.072517005321},
+  {id: 370203, name: "市北区", parent: 3702, lon: 120.37849501736, lat: 36.100057507009},
+  {id: 370211, name: "黄岛区", parent: 3702, lon: 120.16954109898, lat: 36.005019406172},
+  {id: 370212, name: "崂山区", parent: 3702, lon: 120.58490643507, lat: 36.195587169547},
+  {id: 370213, name: "李沧区", parent: 3702, lon: 120.43114552866, lat: 36.192897252321},
+  {id: 370214, name: "城阳区", parent: 3702, lon: 120.34632618533, lat: 36.284246909785},
+  {id: 370281, name: "胶州市", parent: 3702, lon: 119.95942122689, lat: 36.248031458483},
+  {id: 370282, name: "即墨市", parent: 3702, lon: 120.52110561991, lat: 36.487908601599},
+  {id: 370283, name: "平度市", parent: 3702, lon: 119.95106201677, lat: 36.788550047135},
+  {id: 370285, name: "莱西市", parent: 3702, lon: 120.44283105064, lat: 36.863636936232},
+  {id: 370302, name: "淄川区", parent: 3703, lon: 118.02018132413, lat: 36.58546320707},
+  {id: 370303, name: "张店区", parent: 3703, lon: 118.07715128035, lat: 36.816096523468},
+  {id: 370304, name: "博山区", parent: 3703, lon: 117.96555278725, lat: 36.425426903116},
+  {id: 370305, name: "临淄区", parent: 3703, lon: 118.30069695082, lat: 36.854244021624},
+  {id: 370306, name: "周村区", parent: 3703, lon: 117.87510840602, lat: 36.771218733055},
+  {id: 370321, name: "桓台县", parent: 3703, lon: 118.0343674972, lat: 36.996290174374},
+  {id: 370322, name: "高青县", parent: 3703, lon: 117.82824157972, lat: 37.171377591723},
+  {id: 370323, name: "沂源县", parent: 3703, lon: 118.20397204172, lat: 36.135641879756},
+  {id: 370402, name: "市中区", parent: 3704, lon: 117.60608168197, lat: 34.870585491515},
+  {id: 370403, name: "薛城区", parent: 3704, lon: 117.35850706735, lat: 34.796330499958},
+  {id: 370404, name: "峄城区", parent: 3704, lon: 117.60355623943, lat: 34.716097133125},
+  {id: 370405, name: "台儿庄区", parent: 3704, lon: 117.63824339976, lat: 34.587964202085},
+  {id: 370406, name: "山亭区", parent: 3704, lon: 117.48403628836, lat: 35.093150446743},
+  {id: 370481, name: "滕州市", parent: 3704, lon: 117.1476161953, lat: 35.065790871862},
+  {id: 370502, name: "东营区", parent: 3705, lon: 118.61264305188, lat: 37.408666288041},
+  {id: 370503, name: "河口区", parent: 3705, lon: 118.62001162992, lat: 37.969499930854},
+  {id: 370505, name: "垦利区", parent: 3705, lon: 118.80543474393, lat: 37.708139143783},
+  {id: 370522, name: "利津县", parent: 3705, lon: 118.40033677253, lat: 37.655326413663},
+  {id: 370523, name: "广饶县", parent: 3705, lon: 118.53856931196, lat: 37.162071119184},
+  {id: 370602, name: "芝罘区", parent: 3706, lon: 121.36415635471, lat: 37.520933396965},
+  {id: 370611, name: "福山区", parent: 3706, lon: 121.20346125307, lat: 37.4810742238},
+  {id: 370612, name: "牟平区", parent: 3706, lon: 121.56924005155, lat: 37.272445856085},
+  {id: 370613, name: "莱山区", parent: 3706, lon: 121.45153473051, lat: 37.407476077054},
+  {id: 370634, name: "长岛县", parent: 3706, lon: 120.75599624581, lat: 38.07745626718},
+  {id: 370681, name: "龙口市", parent: 3706, lon: 120.5227995064, lat: 37.610401281677},
+  {id: 370682, name: "莱阳市", parent: 3706, lon: 120.75134338103, lat: 36.905533169255},
+  {id: 370683, name: "莱州市", parent: 3706, lon: 120.00134352944, lat: 37.190401374398},
+  {id: 370684, name: "蓬莱市", parent: 3706, lon: 120.86269428184, lat: 37.661160410834},
+  {id: 370685, name: "招远市", parent: 3706, lon: 120.40051706225, lat: 37.344145870524},
+  {id: 370686, name: "栖霞市", parent: 3706, lon: 120.9015556194, lat: 37.311748207049},
+  {id: 370687, name: "海阳市", parent: 3706, lon: 121.11361421128, lat: 36.861587988875},
+  {id: 370702, name: "潍城区", parent: 3707, lon: 119.03430547775, lat: 36.70198215587},
+  {id: 370703, name: "寒亭区", parent: 3707, lon: 119.17913537725, lat: 36.908365760671},
+  {id: 370704, name: "坊子区", parent: 3707, lon: 119.25846542234, lat: 36.625674339008},
+  {id: 370705, name: "奎文区", parent: 3707, lon: 119.19697218249, lat: 36.691227364273},
+  {id: 370724, name: "临朐县", parent: 3707, lon: 118.55825637254, lat: 36.365388839543},
+  {id: 370725, name: "昌乐县", parent: 3707, lon: 118.91391393621, lat: 36.535532052698},
+  {id: 370781, name: "青州市", parent: 3707, lon: 118.47018708791, lat: 36.680584425831},
+  {id: 370782, name: "诸城市", parent: 3707, lon: 119.41616966208, lat: 36.016657533378},
+  {id: 370783, name: "寿光市", parent: 3707, lon: 118.85253352124, lat: 37.029891849506},
+  {id: 370784, name: "安丘市", parent: 3707, lon: 119.15599227984, lat: 36.335046466579},
+  {id: 370785, name: "高密市", parent: 3707, lon: 119.70251223974, lat: 36.387317992315},
+  {id: 370786, name: "昌邑市", parent: 3707, lon: 119.44991748822, lat: 36.834234247985},
+  {id: 370811, name: "任城区", parent: 3708, lon: 116.57219935158, lat: 35.380134737043},
+  {id: 370812, name: "兖州区", parent: 3708, lon: 116.75256014243, lat: 35.564429514451},
+  {id: 370826, name: "微山县", parent: 3708, lon: 116.99240869227, lat: 34.892715408071},
+  {id: 370827, name: "鱼台县", parent: 3708, lon: 116.57843727094, lat: 35.01985835793},
+  {id: 370828, name: "金乡县", parent: 3708, lon: 116.31512496802, lat: 35.051246098924},
+  {id: 370829, name: "嘉祥县", parent: 3708, lon: 116.30729105899, lat: 35.434199027209},
+  {id: 370830, name: "汶上县", parent: 3708, lon: 116.50644367868, lat: 35.715701266031},
+  {id: 370831, name: "泗水县", parent: 3708, lon: 117.34526415391, lat: 35.640740666213},
+  {id: 370832, name: "梁山县", parent: 3708, lon: 116.12480570072, lat: 35.801606249716},
+  {id: 370881, name: "曲阜市", parent: 3708, lon: 117.03178985128, lat: 35.615760566258},
+  {id: 370883, name: "邹城市", parent: 3708, lon: 117.08958175113, lat: 35.354042540878},
+  {id: 370902, name: "泰山区", parent: 3709, lon: 117.18390217966, lat: 36.215457241311},
+  {id: 370911, name: "岱岳区", parent: 3709, lon: 117.19048736581, lat: 36.148101133087},
+  {id: 370921, name: "宁阳县", parent: 3709, lon: 116.93293882598, lat: 35.833600319907},
+  {id: 370923, name: "东平县", parent: 3709, lon: 116.34295320558, lat: 35.97516090244},
+  {id: 370982, name: "新泰市", parent: 3709, lon: 117.61301622046, lat: 35.89581023511},
+  {id: 370983, name: "肥城市", parent: 3709, lon: 116.74476246765, lat: 36.112514344701},
+  {id: 371002, name: "环翠区", parent: 3710, lon: 122.15207450216, lat: 37.399343698592},
+  {id: 371003, name: "文登区", parent: 3710, lon: 121.96829072766, lat: 37.16608344728},
+  {id: 371082, name: "荣成市", parent: 3710, lon: 122.40692581532, lat: 37.128686091876},
+  {id: 371083, name: "乳山市", parent: 3710, lon: 121.52978797795, lat: 36.976575050291},
+  {id: 371102, name: "东港区", parent: 3711, lon: 119.37785169728, lat: 35.469377334235},
+  {id: 371103, name: "岚山区", parent: 3711, lon: 119.25182522442, lat: 35.292714155339},
+  {id: 371121, name: "五莲县", parent: 3711, lon: 119.2494328324, lat: 35.744382733588},
+  {id: 371122, name: "莒县", parent: 3711, lon: 118.8935850849, lat: 35.655874955573},
+  {id: 371202, name: "莱城区", parent: 3712, lon: 117.6459130158, lat: 36.313394584932},
+  {id: 371203, name: "钢城区", parent: 3712, lon: 117.8275371813, lat: 36.092835887233},
+  {id: 371302, name: "兰山区", parent: 3713, lon: 118.31224292902, lat: 35.174844704086},
+  {id: 371311, name: "罗庄区", parent: 3713, lon: 118.29727935276, lat: 34.964343085469},
+  {id: 371312, name: "河东区", parent: 3713, lon: 118.51731091285, lat: 35.127030975379},
+  {id: 371321, name: "沂南县", parent: 3713, lon: 118.41758556843, lat: 35.536723374853},
+  {id: 371322, name: "郯城县", parent: 3713, lon: 118.32443065841, lat: 34.649855053512},
+  {id: 371323, name: "沂水县", parent: 3713, lon: 118.60935780958, lat: 35.914368629366},
+  {id: 371324, name: "兰陵县", parent: 3713, lon: 118.00750944174, lat: 34.862619866599},
+  {id: 371325, name: "费县", parent: 3713, lon: 117.98583765075, lat: 35.254970793112},
+  {id: 371326, name: "平邑县", parent: 3713, lon: 117.68244768554, lat: 35.434249996001},
+  {id: 371327, name: "莒南县", parent: 3713, lon: 118.89007890268, lat: 35.213123220035},
+  {id: 371328, name: "蒙阴县", parent: 3713, lon: 118.03674237099, lat: 35.747440083102},
+  {id: 371329, name: "临沭县", parent: 3713, lon: 118.65944529359, lat: 34.885484018739},
+  {id: 371402, name: "德城区", parent: 3714, lon: 116.33291247583, lat: 37.45743710416},
+  {id: 371403, name: "陵城区", parent: 3714, lon: 116.67557519942, lat: 37.418030354096},
+  {id: 371422, name: "宁津县", parent: 3714, lon: 116.81455550432, lat: 37.68562160185},
+  {id: 371423, name: "庆云县", parent: 3714, lon: 117.46273738393, lat: 37.801823529258},
+  {id: 371424, name: "临邑县", parent: 3714, lon: 116.89959541702, lat: 37.235892912121},
+  {id: 371425, name: "齐河县", parent: 3714, lon: 116.67825351242, lat: 36.723454326503},
+  {id: 371426, name: "平原县", parent: 3714, lon: 116.43007889018, lat: 37.156617614138},
+  {id: 371427, name: "夏津县", parent: 3714, lon: 116.03732249608, lat: 37.016688548156},
+  {id: 371428, name: "武城县", parent: 3714, lon: 116.09122537249, lat: 37.243982507441},
+  {id: 371481, name: "乐陵市", parent: 3714, lon: 117.14555333466, lat: 37.674416911054},
+  {id: 371482, name: "禹城市", parent: 3714, lon: 116.58133068117, lat: 36.919142889593},
+  {id: 371502, name: "东昌府区", parent: 3715, lon: 115.90770556753, lat: 36.455829587246},
+  {id: 371521, name: "阳谷县", parent: 3715, lon: 115.87350298472, lat: 36.146774001697},
+  {id: 371522, name: "莘县", parent: 3715, lon: 115.55267289485, lat: 36.139121538984},
+  {id: 371523, name: "茌平县", parent: 3715, lon: 116.18017382824, lat: 36.588519734091},
+  {id: 371524, name: "东阿县", parent: 3715, lon: 116.2831984139, lat: 36.331642489915},
+  {id: 371525, name: "冠县", parent: 3715, lon: 115.54083712129, lat: 36.53635700997},
+  {id: 371526, name: "高唐县", parent: 3715, lon: 116.25743002174, lat: 36.839764457085},
+  {id: 371581, name: "临清市", parent: 3715, lon: 115.78260175173, lat: 36.782069473113},
+  {id: 371602, name: "滨城区", parent: 3716, lon: 117.98121111677, lat: 37.424890835984},
+  {id: 371603, name: "沾化区", parent: 3716, lon: 118.05636772417, lat: 37.868312497909},
+  {id: 371621, name: "惠民县", parent: 3716, lon: 117.57898363784, lat: 37.375971318454},
+  {id: 371622, name: "阳信县", parent: 3716, lon: 117.57342951076, lat: 37.605500456412},
+  {id: 371623, name: "无棣县", parent: 3716, lon: 117.79778189995, lat: 37.942568300077},
+  {id: 371625, name: "博兴县", parent: 3716, lon: 118.22571531705, lat: 37.19135384581},
+  {id: 371626, name: "邹平县", parent: 3716, lon: 117.67080618616, lat: 36.956593309429},
+  {id: 371702, name: "牡丹区", parent: 3717, lon: 115.47002526505, lat: 35.283536562407},
+  {id: 371703, name: "定陶区", parent: 3717, lon: 115.57403571958, lat: 35.111855206745},
+  {id: 371721, name: "曹县", parent: 3717, lon: 115.55360067628, lat: 34.827952767182},
+  {id: 371722, name: "单县", parent: 3717, lon: 116.122984618, lat: 34.738238141223},
+  {id: 371723, name: "成武县", parent: 3717, lon: 115.94498857738, lat: 34.989110950657},
+  {id: 371724, name: "巨野县", parent: 3717, lon: 116.04113122185, lat: 35.279400360462},
+  {id: 371725, name: "郓城县", parent: 3717, lon: 115.89463235246, lat: 35.612979519727},
+  {id: 371726, name: "鄄城县", parent: 3717, lon: 115.55287125102, lat: 35.555043149647},
+  {id: 371728, name: "东明县", parent: 3717, lon: 115.07411464426, lat: 35.182435455789},
+  {id: 410102, name: "中原区", parent: 4101, lon: 113.55728142479, lat: 34.779474293205},
+  {id: 410103, name: "二七区", parent: 4101, lon: 113.64964384986, lat: 34.75661006414},
+  {id: 410104, name: "管城回族区", parent: 4101, lon: 113.72186105524, lat: 34.70900380778},
+  {id: 410105, name: "金水区", parent: 4101, lon: 113.70801125038, lat: 34.797406405145},
+  {id: 410106, name: "上街区", parent: 4101, lon: 113.29818225705, lat: 34.822088918243},
+  {id: 410108, name: "惠济区", parent: 4101, lon: 113.62834116351, lat: 34.869446814666},
+  {id: 410122, name: "中牟县", parent: 4101, lon: 114.01122240275, lat: 34.720319012422},
+  {id: 410181, name: "巩义市", parent: 4101, lon: 113.03959002892, lat: 34.703798883243},
+  {id: 410182, name: "荥阳市", parent: 4101, lon: 113.35180180957, lat: 34.806179937519},
+  {id: 410183, name: "新密市", parent: 4101, lon: 113.43985443365, lat: 34.514074899467},
+  {id: 410184, name: "新郑市", parent: 4101, lon: 113.73611501497, lat: 34.459442752589},
+  {id: 410185, name: "登封市", parent: 4101, lon: 113.04174933248, lat: 34.418362166819},
+  {id: 410202, name: "龙亭区", parent: 4102, lon: 114.34098849918, lat: 34.860572766851},
+  {id: 410203, name: "顺河回族区", parent: 4102, lon: 114.42852744048, lat: 34.81777146999},
+  {id: 410204, name: "鼓楼区", parent: 4102, lon: 114.34190563407, lat: 34.797982546084},
+  {id: 410205, name: "禹王台区", parent: 4102, lon: 114.38560958232, lat: 34.75102886185},
+  {id: 410211, name: "金明区", parent: 4102, lon: 114.34098849918, lat: 34.860572766851},
+  {id: 410212, name: "祥符区", parent: 4102, lon: 114.43805957404, lat: 34.725946945916},
+  {id: 410221, name: "杞县", parent: 4102, lon: 114.76878210877, lat: 34.505963464038},
+  {id: 410222, name: "通许县", parent: 4102, lon: 114.50219933719, lat: 34.441630948349},
+  {id: 410223, name: "尉氏县", parent: 4102, lon: 114.16103722407, lat: 34.388437240132},
+  {id: 410225, name: "兰考县", parent: 4102, lon: 114.98029307097, lat: 34.879764140336},
+  {id: 410302, name: "老城区", parent: 4103, lon: 112.45917255752, lat: 34.704033141562},
+  {id: 410303, name: "西工区", parent: 4103, lon: 112.4071257244, lat: 34.689693743302},
+  {id: 410304, name: "瀍河回族区", parent: 4103, lon: 112.50509438434, lat: 34.702931706602},
+  {id: 410305, name: "涧西区", parent: 4103, lon: 112.39075320818, lat: 34.671667591915},
+  {id: 410306, name: "吉利区", parent: 4103, lon: 112.58976455586, lat: 34.905378745091},
+  {id: 410311, name: "洛龙区", parent: 4103, lon: 112.46709264771, lat: 34.638792103903},
+  {id: 410322, name: "孟津县", parent: 4103, lon: 112.47699634585, lat: 34.831148181123},
+  {id: 410323, name: "新安县", parent: 4103, lon: 112.12774350044, lat: 34.837606946675},
+  {id: 410324, name: "栾川县", parent: 4103, lon: 111.61701356274, lat: 33.912392483904},
+  {id: 410325, name: "嵩县", parent: 4103, lon: 112.04951135131, lat: 34.010600110067},
+  {id: 410326, name: "汝阳县", parent: 4103, lon: 112.4355439591, lat: 34.06296675028},
+  {id: 410327, name: "宜阳县", parent: 4103, lon: 112.04046789874, lat: 34.486036200799},
+  {id: 410328, name: "洛宁县", parent: 4103, lon: 111.50679130206, lat: 34.345208388992},
+  {id: 410329, name: "伊川县", parent: 4103, lon: 112.46887702474, lat: 34.407088177948},
+  {id: 410381, name: "偃师市", parent: 4103, lon: 112.73482167429, lat: 34.630801858346},
+  {id: 410402, name: "新华区", parent: 4104, lon: 113.20808222559, lat: 33.771546437308},
+  {id: 410403, name: "卫东区", parent: 4104, lon: 113.36538845598, lat: 33.769107814671},
+  {id: 410404, name: "石龙区", parent: 4104, lon: 112.89469073779, lat: 33.892093587751},
+  {id: 410411, name: "湛河区", parent: 4104, lon: 113.27818922149, lat: 33.71234144492},
+  {id: 410421, name: "宝丰县", parent: 4104, lon: 113.03577147499, lat: 33.915497347446},
+  {id: 410422, name: "叶县", parent: 4104, lon: 113.3506762416, lat: 33.551013481912},
+  {id: 410423, name: "鲁山县", parent: 4104, lon: 112.74030934124, lat: 33.748697388191},
+  {id: 410425, name: "郏县", parent: 4104, lon: 113.23328182561, lat: 34.005498968871},
+  {id: 410481, name: "舞钢市", parent: 4104, lon: 113.52599604654, lat: 33.289605497055},
+  {id: 410482, name: "汝州市", parent: 4104, lon: 112.8127174803, lat: 34.162777545453},
+  {id: 410502, name: "文峰区", parent: 4105, lon: 114.41852222061, lat: 36.034147665845},
+  {id: 410503, name: "北关区", parent: 4105, lon: 114.39143588406, lat: 36.141695896219},
+  {id: 410505, name: "殷都区", parent: 4105, lon: 114.29712997501, lat: 36.135573231517},
+  {id: 410506, name: "龙安区", parent: 4105, lon: 114.25660364057, lat: 36.056024537571},
+  {id: 410522, name: "安阳县", parent: 4105, lon: 114.31712430011, lat: 36.125134517065},
+  {id: 410523, name: "汤阴县", parent: 4105, lon: 114.46206281377, lat: 35.907982338855},
+  {id: 410526, name: "滑县", parent: 4105, lon: 114.67364721954, lat: 35.471733779112},
+  {id: 410527, name: "内黄县", parent: 4105, lon: 114.82334356443, lat: 35.906569063676},
+  {id: 410581, name: "林州市", parent: 4105, lon: 113.86108354948, lat: 36.016561032268},
+  {id: 410602, name: "鹤山区", parent: 4106, lon: 114.09845417079, lat: 35.973345969386},
+  {id: 410603, name: "山城区", parent: 4106, lon: 114.25302901346, lat: 35.927453768113},
+  {id: 410611, name: "淇滨区", parent: 4106, lon: 114.19951434914, lat: 35.812418921012},
+  {id: 410621, name: "浚县", parent: 4106, lon: 114.46718581475, lat: 35.686206113273},
+  {id: 410622, name: "淇县", parent: 4106, lon: 114.16903374394, lat: 35.667571747251},
+  {id: 410702, name: "红旗区", parent: 4107, lon: 113.91461891258, lat: 35.286150085139},
+  {id: 410703, name: "卫滨区", parent: 4107, lon: 113.86463773299, lat: 35.294831576876},
+  {id: 410704, name: "凤泉区", parent: 4107, lon: 113.86418902939, lat: 35.399318437608},
+  {id: 410711, name: "牧野区", parent: 4107, lon: 113.89672215157, lat: 35.338890167673},
+  {id: 410721, name: "新乡县", parent: 4107, lon: 113.84824573704, lat: 35.220522070112},
+  {id: 410724, name: "获嘉县", parent: 4107, lon: 113.65196887023, lat: 35.203480558843},
+  {id: 410725, name: "原阳县", parent: 4107, lon: 113.95316420007, lat: 35.029035610429},
+  {id: 410726, name: "延津县", parent: 4107, lon: 114.23135664543, lat: 35.279607523872},
+  {id: 410727, name: "封丘县", parent: 4107, lon: 114.48767812651, lat: 35.040384096253},
+  {id: 410728, name: "长垣县", parent: 4107, lon: 114.76690326799, lat: 35.218127613796},
+  {id: 410781, name: "卫辉市", parent: 4107, lon: 114.07811240389, lat: 35.499572079266},
+  {id: 410782, name: "辉县市", parent: 4107, lon: 113.68789198968, lat: 35.543594465927},
+  {id: 410802, name: "解放区", parent: 4108, lon: 113.23080396516, lat: 35.241712363011},
+  {id: 410803, name: "中站区", parent: 4108, lon: 113.16153562728, lat: 35.257023702543},
+  {id: 410804, name: "马村区", parent: 4108, lon: 113.36732116029, lat: 35.304171016133},
+  {id: 410811, name: "山阳区", parent: 4108, lon: 113.27635056977, lat: 35.241160124283},
+  {id: 410821, name: "修武县", parent: 4108, lon: 113.36352820836, lat: 35.309677964198},
+  {id: 410822, name: "博爱县", parent: 4108, lon: 113.07507819608, lat: 35.186007002113},
+  {id: 410823, name: "武陟县", parent: 4108, lon: 113.39993452059, lat: 35.057332269363},
+  {id: 410825, name: "温县", parent: 4108, lon: 113.05529612566, lat: 34.950259905072},
+  {id: 410882, name: "沁阳市", parent: 4108, lon: 112.8883049259, lat: 35.133826023222},
+  {id: 410883, name: "孟州市", parent: 4108, lon: 112.76969911916, lat: 34.925884390003},
+  {id: 410902, name: "华龙区", parent: 4109, lon: 115.04809659609, lat: 35.77193370823},
+  {id: 410922, name: "清丰县", parent: 4109, lon: 115.1612013425, lat: 35.924381925846},
+  {id: 410923, name: "南乐县", parent: 4109, lon: 115.24982310475, lat: 36.097697402715},
+  {id: 410926, name: "范县", parent: 4109, lon: 115.53840075342, lat: 35.801404731968},
+  {id: 410927, name: "台前县", parent: 4109, lon: 115.88573804863, lat: 35.966389126572},
+  {id: 410928, name: "濮阳县", parent: 4109, lon: 115.15660204659, lat: 35.59228702617},
+  {id: 411002, name: "魏都区", parent: 4110, lon: 113.82531644192, lat: 34.043477065508},
+  {id: 411023, name: "许昌县", parent: 4110, lon: 113.83526207686, lat: 34.048516339751},
+  {id: 411024, name: "鄢陵县", parent: 4110, lon: 114.20240879522, lat: 34.01192963976},
+  {id: 411025, name: "襄城县", parent: 4110, lon: 113.56898289597, lat: 33.86190518971},
+  {id: 411081, name: "禹州市", parent: 4110, lon: 113.39269360872, lat: 34.200307558026},
+  {id: 411082, name: "长葛市", parent: 4110, lon: 113.85556820652, lat: 34.236601226737},
+  {id: 411102, name: "源汇区", parent: 4111, lon: 113.92360106938, lat: 33.53475547247},
+  {id: 411103, name: "郾城区", parent: 4111, lon: 113.94136182694, lat: 33.670703809923},
+  {id: 411104, name: "召陵区", parent: 4111, lon: 114.18514173047, lat: 33.57798961468},
+  {id: 411121, name: "舞阳县", parent: 4111, lon: 113.68005525753, lat: 33.549301454759},
+  {id: 411122, name: "临颍县", parent: 4111, lon: 113.96389863435, lat: 33.844425731931},
+  {id: 411202, name: "湖滨区", parent: 4112, lon: 111.28129514586, lat: 34.771777672947},
+  {id: 411203, name: "陕州区", parent: 4112, lon: 111.38347360282, lat: 34.642257128616},
+  {id: 411221, name: "渑池县", parent: 4112, lon: 111.80253536998, lat: 34.839691429224},
+  {id: 411224, name: "卢氏县", parent: 4112, lon: 110.99472361928, lat: 33.973393506457},
+  {id: 411281, name: "义马市", parent: 4112, lon: 111.90609266704, lat: 34.749524796841},
+  {id: 411282, name: "灵宝市", parent: 4112, lon: 110.77973742779, lat: 34.437104010525},
+  {id: 411302, name: "宛城区", parent: 4113, lon: 112.61390774771, lat: 32.934703186447},
+  {id: 411303, name: "卧龙区", parent: 4113, lon: 112.48426735075, lat: 33.009838704626},
+  {id: 411321, name: "南召县", parent: 4113, lon: 112.39366620514, lat: 33.472841576965},
+  {id: 411322, name: "方城县", parent: 4113, lon: 113.01682220295, lat: 33.29995432977},
+  {id: 411323, name: "西峡县", parent: 4113, lon: 111.43898978054, lat: 33.48692481474},
+  {id: 411324, name: "镇平县", parent: 4113, lon: 112.19328453943, lat: 33.070817074221},
+  {id: 411325, name: "内乡县", parent: 4113, lon: 111.8474050987, lat: 33.224377176241},
+  {id: 411326, name: "淅川县", parent: 4113, lon: 111.44539628251, lat: 32.989722669393},
+  {id: 411327, name: "社旗县", parent: 4113, lon: 112.99852720955, lat: 32.982431382713},
+  {id: 411328, name: "唐河县", parent: 4113, lon: 112.85911827542, lat: 32.619993292449},
+  {id: 411329, name: "新野县", parent: 4113, lon: 112.41599071451, lat: 32.553440600793},
+  {id: 411330, name: "桐柏县", parent: 4113, lon: 113.43416900109, lat: 32.495650299965},
+  {id: 411381, name: "邓州市", parent: 4113, lon: 112.0568605764, lat: 32.684649552173},
+  {id: 411402, name: "梁园区", parent: 4114, lon: 115.63773066554, lat: 34.5030395946},
+  {id: 411403, name: "睢阳区", parent: 4114, lon: 115.58978387844, lat: 34.286754693787},
+  {id: 411421, name: "民权县", parent: 4114, lon: 115.17841405829, lat: 34.696116524323},
+  {id: 411422, name: "睢县", parent: 4114, lon: 115.04300110058, lat: 34.39975982873},
+  {id: 411423, name: "宁陵县", parent: 4114, lon: 115.29840053317, lat: 34.454601801008},
+  {id: 411424, name: "柘城县", parent: 4114, lon: 115.30904185846, lat: 34.111651823091},
+  {id: 411425, name: "虞城县", parent: 4114, lon: 115.9142248589, lat: 34.36907192525},
+  {id: 411426, name: "夏邑县", parent: 4114, lon: 116.15745373108, lat: 34.223680706067},
+  {id: 411481, name: "永城市", parent: 4114, lon: 116.33077515791, lat: 33.972013062908},
+  {id: 411502, name: "浉河区", parent: 4115, lon: 113.96277662182, lat: 32.031339669892},
+  {id: 411503, name: "平桥区", parent: 4115, lon: 114.1390859663, lat: 32.307840062297},
+  {id: 411521, name: "罗山县", parent: 4115, lon: 114.44356295731, lat: 32.031230299697},
+  {id: 411522, name: "光山县", parent: 4115, lon: 114.84316193505, lat: 31.941431722351},
+  {id: 411523, name: "新县", parent: 4115, lon: 114.85908905243, lat: 31.646279005794},
+  {id: 411524, name: "商城县", parent: 4115, lon: 115.37524581828, lat: 31.766261672209},
+  {id: 411525, name: "固始县", parent: 4115, lon: 115.70974321125, lat: 32.13694390485},
+  {id: 411526, name: "潢川县", parent: 4115, lon: 115.16440991805, lat: 32.132798426222},
+  {id: 411527, name: "淮滨县", parent: 4115, lon: 115.32456065214, lat: 32.44657354908},
+  {id: 411528, name: "息县", parent: 4115, lon: 114.87168181062, lat: 32.410808174844},
+  {id: 411602, name: "川汇区", parent: 4116, lon: 114.65795015653, lat: 33.630875553438},
+  {id: 411621, name: "扶沟县", parent: 4116, lon: 114.43732658093, lat: 34.100655472765},
+  {id: 411622, name: "西华县", parent: 4116, lon: 114.47808721231, lat: 33.793632327288},
+  {id: 411623, name: "商水县", parent: 4116, lon: 114.5595768694, lat: 33.52093272236},
+  {id: 411624, name: "沈丘县", parent: 4116, lon: 115.17871821127, lat: 33.295149932293},
+  {id: 411625, name: "郸城县", parent: 4116, lon: 115.30129735228, lat: 33.641500072188},
+  {id: 411626, name: "淮阳县", parent: 4116, lon: 114.90201820622, lat: 33.709946652498},
+  {id: 411627, name: "太康县", parent: 4116, lon: 114.85570075514, lat: 34.097096248874},
+  {id: 411628, name: "鹿邑县", parent: 4116, lon: 115.38398333433, lat: 33.894050509383},
+  {id: 411681, name: "项城市", parent: 4116, lon: 114.89338047633, lat: 33.274470322798},
+  {id: 411702, name: "驿城区", parent: 4117, lon: 114.00828960502, lat: 32.968356527361},
+  {id: 411721, name: "西平县", parent: 4117, lon: 113.92283839684, lat: 33.37154892996},
+  {id: 411722, name: "上蔡县", parent: 4117, lon: 114.40923857452, lat: 33.301221213377},
+  {id: 411723, name: "平舆县", parent: 4117, lon: 114.64744862019, lat: 32.992143963522},
+  {id: 411724, name: "正阳县", parent: 4117, lon: 114.49796073761, lat: 32.546931233463},
+  {id: 411725, name: "确山县", parent: 4117, lon: 113.96358973796, lat: 32.711951228899},
+  {id: 411726, name: "泌阳县", parent: 4117, lon: 113.44717429859, lat: 32.883863636522},
+  {id: 411727, name: "汝南县", parent: 4117, lon: 114.3257758188, lat: 32.921968466052},
+  {id: 411728, name: "遂平县", parent: 4117, lon: 113.90248496569, lat: 33.167855168478},
+  {id: 411729, name: "新蔡县", parent: 4117, lon: 114.94939334965, lat: 32.783574270118},
+  {id: 419001, name: "济源市", parent: 4190, lon: 112.40383005708, lat: 35.093893094508},
+  {id: 420102, name: "江岸区", parent: 4201, lon: 114.33286813952, lat: 30.656090889378},
+  {id: 420103, name: "江汉区", parent: 4201, lon: 114.26638369307, lat: 30.610951375707},
+  {id: 420104, name: "硚口区", parent: 4201, lon: 114.21975676824, lat: 30.603890608484},
+  {id: 420105, name: "汉阳区", parent: 4201, lon: 114.21759191464, lat: 30.547265210116},
+  {id: 420106, name: "武昌区", parent: 4201, lon: 114.35362228468, lat: 30.564860292785},
+  {id: 420107, name: "青山区", parent: 4201, lon: 114.44449542245, lat: 30.633205056354},
+  {id: 420111, name: "洪山区", parent: 4201, lon: 114.43389643664, lat: 30.54362328175},
+  {id: 420112, name: "东西湖区", parent: 4201, lon: 114.08715512184, lat: 30.69815326481},
+  {id: 420113, name: "汉南区", parent: 4201, lon: 113.96273175623, lat: 30.287139798861},
+  {id: 420114, name: "蔡甸区", parent: 4201, lon: 113.97206459286, lat: 30.456183515878},
+  {id: 420115, name: "江夏区", parent: 4201, lon: 114.36708160048, lat: 30.252484112134},
+  {id: 420116, name: "黄陂区", parent: 4201, lon: 114.36464422879, lat: 30.985285897674},
+  {id: 420117, name: "新洲区", parent: 4201, lon: 114.76208468205, lat: 30.803887901859},
+  {id: 420202, name: "黄石港区", parent: 4202, lon: 115.0731593966, lat: 30.233764966969},
+  {id: 420203, name: "西塞山区", parent: 4202, lon: 115.1322665517, lat: 30.184485507434},
+  {id: 420204, name: "下陆区", parent: 4202, lon: 114.99298679763, lat: 30.195818128952},
+  {id: 420205, name: "铁山区", parent: 4202, lon: 114.90300946351, lat: 30.218698027629},
+  {id: 420222, name: "阳新县", parent: 4202, lon: 115.14049262648, lat: 29.828087088129},
+  {id: 420281, name: "大冶市", parent: 4202, lon: 114.84614160381, lat: 30.072895848258},
+  {id: 420302, name: "茅箭区", parent: 4203, lon: 110.78595269258, lat: 32.605601870191},
+  {id: 420303, name: "张湾区", parent: 4203, lon: 110.7174012025, lat: 32.663839857981},
+  {id: 420304, name: "郧阳区", parent: 4203, lon: 110.70709242813, lat: 32.848666872},
+  {id: 420322, name: "郧西县", parent: 4203, lon: 110.15015123042, lat: 33.04842762997},
+  {id: 420323, name: "竹山县", parent: 4203, lon: 110.07273955599, lat: 32.240141680909},
+  {id: 420324, name: "竹溪县", parent: 4203, lon: 109.7912365606, lat: 32.0377375614},
+  {id: 420325, name: "房县", parent: 4203, lon: 110.71456120963, lat: 31.896989987694},
+  {id: 420381, name: "丹江口市", parent: 4203, lon: 111.19322791899, lat: 32.567476506858},
+  {id: 420502, name: "西陵区", parent: 4205, lon: 111.31370556274, lat: 30.740828168194},
+  {id: 420503, name: "伍家岗区", parent: 4205, lon: 111.380922081, lat: 30.678659340635},
+  {id: 420504, name: "点军区", parent: 4205, lon: 111.21627903018, lat: 30.625384685781},
+  {id: 420505, name: "猇亭区", parent: 4205, lon: 111.45521482125, lat: 30.551849254685},
+  {id: 420506, name: "夷陵区", parent: 4205, lon: 111.31064943757, lat: 30.979970536584},
+  {id: 420525, name: "远安县", parent: 4205, lon: 111.58511301877, lat: 31.176854341724},
+  {id: 420526, name: "兴山县", parent: 4205, lon: 110.82440565254, lat: 31.319349537746},
+  {id: 420527, name: "秭归县", parent: 4205, lon: 110.68599344932, lat: 30.903334635073},
+  {id: 420528, name: "长阳土家族自治县", parent: 4205, lon: 110.85396847661, lat: 30.482854820654},
+  {id: 420529, name: "五峰土家族自治县", parent: 4205, lon: 110.70999872376, lat: 30.173164959818},
+  {id: 420581, name: "宜都市", parent: 4205, lon: 111.37553355505, lat: 30.294919731409},
+  {id: 420582, name: "当阳市", parent: 4205, lon: 111.84271236769, lat: 30.825538036113},
+  {id: 420583, name: "枝江市", parent: 4205, lon: 111.72856708021, lat: 30.451766635038},
+  {id: 420602, name: "襄城区", parent: 4206, lon: 112.01708254994, lat: 31.935360283633},
+  {id: 420606, name: "樊城区", parent: 4206, lon: 111.92852759276, lat: 32.153953344009},
+  {id: 420607, name: "襄州区", parent: 4206, lon: 112.1615782359, lat: 32.161267821333},
+  {id: 420624, name: "南漳县", parent: 4206, lon: 111.76462860893, lat: 31.643279800381},
+  {id: 420625, name: "谷城县", parent: 4206, lon: 111.49595776173, lat: 32.173451559392},
+  {id: 420626, name: "保康县", parent: 4206, lon: 111.20990495958, lat: 31.719672647836},
+  {id: 420682, name: "老河口市", parent: 4206, lon: 111.76583021988, lat: 32.434165591299},
+  {id: 420683, name: "枣阳市", parent: 4206, lon: 112.77260678733, lat: 32.092510578007},
+  {id: 420684, name: "宜城市", parent: 4206, lon: 112.37274539501, lat: 31.673335169944},
+  {id: 420702, name: "梁子湖区", parent: 4207, lon: 114.65002920477, lat: 30.172732100474},
+  {id: 420703, name: "华容区", parent: 4207, lon: 114.7014718376, lat: 30.473067617235},
+  {id: 420704, name: "鄂城区", parent: 4207, lon: 114.90101603375, lat: 30.320603111112},
+  {id: 420802, name: "东宝区", parent: 4208, lon: 112.08731072725, lat: 31.129834655672},
+  {id: 420804, name: "掇刀区", parent: 4208, lon: 112.19392270314, lat: 30.932878257728},
+  {id: 420821, name: "京山县", parent: 4208, lon: 113.1122609366, lat: 31.085751895572},
+  {id: 420822, name: "沙洋县", parent: 4208, lon: 112.39598267744, lat: 30.664549510743},
+  {id: 420881, name: "钟祥市", parent: 4208, lon: 112.58482623119, lat: 31.244981073964},
+  {id: 420902, name: "孝南区", parent: 4209, lon: 114.01614199013, lat: 30.9446167023},
+  {id: 420921, name: "孝昌县", parent: 4209, lon: 114.03487209446, lat: 31.239758867241},
+  {id: 420922, name: "大悟县", parent: 4209, lon: 114.31029950549, lat: 31.57825524841},
+  {id: 420923, name: "云梦县", parent: 4209, lon: 113.77818589474, lat: 31.004978516713},
+  {id: 420981, name: "应城市", parent: 4209, lon: 113.55644020385, lat: 30.925709286687},
+  {id: 420982, name: "安陆市", parent: 4209, lon: 113.63338728419, lat: 31.304354863067},
+  {id: 420984, name: "汉川市", parent: 4209, lon: 113.68167835943, lat: 30.622039213976},
+  {id: 421002, name: "沙市区", parent: 4210, lon: 112.42410926804, lat: 30.325722718965},
+  {id: 421003, name: "荆州区", parent: 4210, lon: 112.09985718065, lat: 30.396103360853},
+  {id: 421022, name: "公安县", parent: 4210, lon: 112.15361758468, lat: 29.957130184896},
+  {id: 421023, name: "监利县", parent: 4210, lon: 113.0019564425, lat: 29.848933249111},
+  {id: 421024, name: "江陵县", parent: 4210, lon: 112.47370114506, lat: 30.101502949806},
+  {id: 421081, name: "石首市", parent: 4210, lon: 112.51435972656, lat: 29.742222414324},
+  {id: 421083, name: "洪湖市", parent: 4210, lon: 113.53891465228, lat: 29.996772000415},
+  {id: 421087, name: "松滋市", parent: 4210, lon: 111.69620454012, lat: 30.105224314496},
+  {id: 421102, name: "黄州区", parent: 4211, lon: 114.94956939748, lat: 30.518802478736},
+  {id: 421121, name: "团风县", parent: 4211, lon: 115.01408720557, lat: 30.723706101243},
+  {id: 421122, name: "红安县", parent: 4211, lon: 114.62811879353, lat: 31.29012275323},
+  {id: 421123, name: "罗田县", parent: 4211, lon: 115.48102224121, lat: 30.932372750757},
+  {id: 421124, name: "英山县", parent: 4211, lon: 115.77430241642, lat: 30.872992046545},
+  {id: 421125, name: "浠水县", parent: 4211, lon: 115.27625105135, lat: 30.507400278808},
+  {id: 421126, name: "蕲春县", parent: 4211, lon: 115.60077083531, lat: 30.328717011744},
+  {id: 421127, name: "黄梅县", parent: 4211, lon: 115.94188335896, lat: 29.998875662753},
+  {id: 421181, name: "麻城市", parent: 4211, lon: 115.08971464087, lat: 31.217943121813},
+  {id: 421182, name: "武穴市", parent: 4211, lon: 115.62583375392, lat: 30.01561431062},
+  {id: 421202, name: "咸安区", parent: 4212, lon: 114.39186727646, lat: 29.854650359958},
+  {id: 421221, name: "嘉鱼县", parent: 4212, lon: 113.9671389967, lat: 30.013807145954},
+  {id: 421222, name: "通城县", parent: 4212, lon: 113.85326552547, lat: 29.229496067967},
+  {id: 421223, name: "崇阳县", parent: 4212, lon: 114.06793496135, lat: 29.46178869538},
+  {id: 421224, name: "通山县", parent: 4212, lon: 114.61524564759, lat: 29.557670344417},
+  {id: 421281, name: "赤壁市", parent: 4212, lon: 113.88916760653, lat: 29.742560741036},
+  {id: 421303, name: "曾都区", parent: 4213, lon: 113.46768060015, lat: 31.607981069768},
+  {id: 421321, name: "随县", parent: 4213, lon: 113.26226604576, lat: 31.89292220952},
+  {id: 421381, name: "广水市", parent: 4213, lon: 113.81261910549, lat: 31.68232502305},
+  {id: 422801, name: "恩施市", parent: 4228, lon: 109.15843052724, lat: 30.463309797502},
+  {id: 422802, name: "利川市", parent: 4228, lon: 108.75827737341, lat: 30.42403337354},
+  {id: 422822, name: "建始县", parent: 4228, lon: 109.93959920981, lat: 30.578575985623},
+  {id: 422823, name: "巴东县", parent: 4228, lon: 110.30061735767, lat: 30.827452858588},
+  {id: 422825, name: "宣恩县", parent: 4228, lon: 109.45211696118, lat: 30.044021286424},
+  {id: 422826, name: "咸丰县", parent: 4228, lon: 109.11475831378, lat: 29.64880608709},
+  {id: 422827, name: "来凤县", parent: 4228, lon: 109.2467141194, lat: 29.425663227736},
+  {id: 422828, name: "鹤峰县", parent: 4228, lon: 110.2232960585, lat: 29.959848783933},
+  {id: 429004, name: "仙桃市", parent: 4290, lon: 113.38744819358, lat: 30.293966004922},
+  {id: 429005, name: "潜江市", parent: 4290, lon: 112.76876801686, lat: 30.343115792601},
+  {id: 429006, name: "天门市", parent: 4290, lon: 113.12623048765, lat: 30.649047356422},
+  {id: 429021, name: "神农架林区", parent: 4290, lon: 110.48723070015, lat: 31.595767599083},
+  {id: 430102, name: "芙蓉区", parent: 4301, lon: 113.02096885649, lat: 28.203810552355},
+  {id: 430103, name: "天心区", parent: 4301, lon: 112.99619520748, lat: 28.144470861087},
+  {id: 430104, name: "岳麓区", parent: 4301, lon: 112.90869935253, lat: 28.202706634928},
+  {id: 430105, name: "开福区", parent: 4301, lon: 113.02472997183, lat: 28.260219056422},
+  {id: 430111, name: "雨花区", parent: 4301, lon: 113.02020071545, lat: 28.146444362118},
+  {id: 430112, name: "望城区", parent: 4301, lon: 112.84853518023, lat: 28.277901873199},
+  {id: 430121, name: "长沙县", parent: 4301, lon: 113.22494603976, lat: 28.322758625178},
+  {id: 430124, name: "宁乡县", parent: 4301, lon: 112.36046547366, lat: 28.131212630242},
+  {id: 430181, name: "浏阳市", parent: 4301, lon: 113.72198528266, lat: 28.234472053802},
+  {id: 430202, name: "荷塘区", parent: 4302, lon: 113.2125259488, lat: 27.907228809861},
+  {id: 430203, name: "芦淞区", parent: 4302, lon: 113.16975977942, lat: 27.822072525123},
+  {id: 430204, name: "石峰区", parent: 4302, lon: 113.16351107646, lat: 27.941584145955},
+  {id: 430211, name: "天元区", parent: 4302, lon: 113.06800898383, lat: 27.77777212283},
+  {id: 430221, name: "株洲县", parent: 4302, lon: 113.15334777322, lat: 27.535936240494},
+  {id: 430223, name: "攸县", parent: 4302, lon: 113.48783136261, lat: 27.172267738735},
+  {id: 430224, name: "茶陵县", parent: 4302, lon: 113.6524812712, lat: 26.806729309467},
+  {id: 430225, name: "炎陵县", parent: 4302, lon: 113.85053602814, lat: 26.382712485446},
+  {id: 430281, name: "醴陵市", parent: 4302, lon: 113.47062497305, lat: 27.662278573878},
+  {id: 430302, name: "雨湖区", parent: 4303, lon: 112.89447989496, lat: 27.871843464684},
+  {id: 430304, name: "岳塘区", parent: 4303, lon: 113.02348797463, lat: 27.927747363022},
+  {id: 430321, name: "湘潭县", parent: 4303, lon: 112.78880535021, lat: 27.66922281069},
+  {id: 430381, name: "湘乡市", parent: 4303, lon: 112.35516854771, lat: 27.77667974388},
+  {id: 430382, name: "韶山市", parent: 4303, lon: 112.53309503972, lat: 27.927332779842},
+  {id: 430405, name: "珠晖区", parent: 4304, lon: 112.68848999752, lat: 26.882224641246},
+  {id: 430406, name: "雁峰区", parent: 4304, lon: 112.60790741194, lat: 26.852862113311},
+  {id: 430407, name: "石鼓区", parent: 4304, lon: 112.60248766531, lat: 26.958880199218},
+  {id: 430408, name: "蒸湘区", parent: 4304, lon: 112.5550474327, lat: 26.886508776556},
+  {id: 430412, name: "南岳区", parent: 4304, lon: 112.70876706188, lat: 27.259358565856},
+  {id: 430421, name: "衡阳县", parent: 4304, lon: 112.35157940823, lat: 27.109626113862},
+  {id: 430422, name: "衡南县", parent: 4304, lon: 112.64851378595, lat: 26.759844895044},
+  {id: 430423, name: "衡山县", parent: 4304, lon: 112.71963002036, lat: 27.281912376828},
+  {id: 430424, name: "衡东县", parent: 4304, lon: 113.02900158518, lat: 27.085080215257},
+  {id: 430426, name: "祁东县", parent: 4304, lon: 111.96160590404, lat: 26.806848291159},
+  {id: 430481, name: "耒阳市", parent: 4304, lon: 112.9215515181, lat: 26.423992793417},
+  {id: 430482, name: "常宁市", parent: 4304, lon: 112.43550437188, lat: 26.365629347663},
+  {id: 430502, name: "双清区", parent: 4305, lon: 111.54534736863, lat: 27.248222019138},
+  {id: 430503, name: "大祥区", parent: 4305, lon: 111.48663933069, lat: 27.15673687542},
+  {id: 430511, name: "北塔区", parent: 4305, lon: 111.42227870533, lat: 27.250338344113},
+  {id: 430521, name: "邵东县", parent: 4305, lon: 111.85672034136, lat: 27.193653689477},
+  {id: 430522, name: "新邵县", parent: 4305, lon: 111.47127474176, lat: 27.431198790186},
+  {id: 430523, name: "邵阳县", parent: 4305, lon: 111.33237232124, lat: 26.984976684914},
+  {id: 430524, name: "隆回县", parent: 4305, lon: 110.97332605607, lat: 27.351830793846},
+  {id: 430525, name: "洞口县", parent: 4305, lon: 110.5997390171, lat: 27.103195627285},
+  {id: 430527, name: "绥宁县", parent: 4305, lon: 110.20598518573, lat: 26.714433355354},
+  {id: 430528, name: "新宁县", parent: 4305, lon: 110.92469767578, lat: 26.548580699981},
+  {id: 430529, name: "城步苗族自治县", parent: 4305, lon: 110.32530265472, lat: 26.325514573582},
+  {id: 430581, name: "武冈市", parent: 4305, lon: 110.74581533919, lat: 26.786578072622},
+  {id: 430602, name: "岳阳楼区", parent: 4306, lon: 113.15536982346, lat: 29.367743455935},
+  {id: 430603, name: "云溪区", parent: 4306, lon: 113.35377424951, lat: 29.526210726593},
+  {id: 430611, name: "君山区", parent: 4306, lon: 112.82353001902, lat: 29.461963175999},
+  {id: 430621, name: "岳阳县", parent: 4306, lon: 113.23752715256, lat: 29.178498531192},
+  {id: 430623, name: "华容县", parent: 4306, lon: 112.65100948964, lat: 29.493395834151},
+  {id: 430624, name: "湘阴县", parent: 4306, lon: 112.8053736108, lat: 28.713089704815},
+  {id: 430626, name: "平江县", parent: 4306, lon: 113.72084646866, lat: 28.762202955269},
+  {id: 430681, name: "汨罗市", parent: 4306, lon: 113.12502676793, lat: 28.801958087001},
+  {id: 430682, name: "临湘市", parent: 4306, lon: 113.51974938156, lat: 29.496146011064},
+  {id: 430702, name: "武陵区", parent: 4307, lon: 111.69744989482, lat: 28.996871241883},
+  {id: 430703, name: "鼎城区", parent: 4307, lon: 111.74779560677, lat: 28.99524298628},
+  {id: 430721, name: "安乡县", parent: 4307, lon: 112.16243681004, lat: 29.448996008449},
+  {id: 430722, name: "汉寿县", parent: 4307, lon: 112.04431060341, lat: 28.864800229907},
+  {id: 430723, name: "澧县", parent: 4307, lon: 111.70770306732, lat: 29.750168137633},
+  {id: 430724, name: "临澧县", parent: 4307, lon: 111.62542246954, lat: 29.486256878123},
+  {id: 430725, name: "桃源县", parent: 4307, lon: 111.27070654871, lat: 28.917817681602},
+  {id: 430726, name: "石门县", parent: 4307, lon: 111.04428685665, lat: 29.801742760215},
+  {id: 430781, name: "津市市", parent: 4307, lon: 111.90685042221, lat: 29.474442427089},
+  {id: 430802, name: "永定区", parent: 4308, lon: 110.50100729665, lat: 29.08853881247},
+  {id: 430811, name: "武陵源区", parent: 4308, lon: 110.48849578734, lat: 29.35720050871},
+  {id: 430821, name: "慈利县", parent: 4308, lon: 110.9362003537, lat: 29.397692771035},
+  {id: 430822, name: "桑植县", parent: 4308, lon: 110.18733600686, lat: 29.567691591611},
+  {id: 430902, name: "资阳区", parent: 4309, lon: 112.34312135279, lat: 28.694069428897},
+  {id: 430903, name: "赫山区", parent: 4309, lon: 112.46132362565, lat: 28.456919373898},
+  {id: 430921, name: "南县", parent: 4309, lon: 112.4444992186, lat: 29.242714345729},
+  {id: 430922, name: "桃江县", parent: 4309, lon: 111.99046415183, lat: 28.464142378681},
+  {id: 430923, name: "安化县", parent: 4309, lon: 111.39078157302, lat: 28.286580101198},
+  {id: 430981, name: "沅江市", parent: 4309, lon: 112.56494222194, lat: 28.977186044013},
+  {id: 431002, name: "北湖区", parent: 4310, lon: 112.88447564616, lat: 25.679158376796},
+  {id: 431003, name: "苏仙区", parent: 4310, lon: 113.05100154527, lat: 25.773515156215},
+  {id: 431021, name: "桂阳县", parent: 4310, lon: 112.60810756507, lat: 25.893490018268},
+  {id: 431022, name: "宜章县", parent: 4310, lon: 112.93344735219, lat: 25.275886554538},
+  {id: 431023, name: "永兴县", parent: 4310, lon: 113.19839325538, lat: 26.216491688814},
+  {id: 431024, name: "嘉禾县", parent: 4310, lon: 112.41435261569, lat: 25.637287293573},
+  {id: 431025, name: "临武县", parent: 4310, lon: 112.56804110466, lat: 25.34399717934},
+  {id: 431026, name: "汝城县", parent: 4310, lon: 113.67767672321, lat: 25.555136753643},
+  {id: 431027, name: "桂东县", parent: 4310, lon: 113.90640126356, lat: 25.98664473819},
+  {id: 431028, name: "安仁县", parent: 4310, lon: 113.3656988724, lat: 26.580785897827},
+  {id: 431081, name: "资兴市", parent: 4310, lon: 113.4685220784, lat: 25.937184405929},
+  {id: 431102, name: "零陵区", parent: 4311, lon: 111.56391866724, lat: 26.102311299933},
+  {id: 431103, name: "冷水滩区", parent: 4311, lon: 111.6215855691, lat: 26.560381677834},
+  {id: 431121, name: "祁阳县", parent: 4311, lon: 111.97259355447, lat: 26.460846002508},
+  {id: 431122, name: "东安县", parent: 4311, lon: 111.3428094117, lat: 26.495587621014},
+  {id: 431123, name: "双牌县", parent: 4311, lon: 111.71629417694, lat: 25.914932997744},
+  {id: 431124, name: "道县", parent: 4311, lon: 111.60204209765, lat: 25.499396959983},
+  {id: 431125, name: "江永县", parent: 4311, lon: 111.25388667817, lat: 25.199988241379},
+  {id: 431126, name: "宁远县", parent: 4311, lon: 111.98806316398, lat: 25.653839564231},
+  {id: 431127, name: "蓝山县", parent: 4311, lon: 112.1963927883, lat: 25.319502616064},
+  {id: 431128, name: "新田县", parent: 4311, lon: 112.23480727989, lat: 25.890527389354},
+  {id: 431129, name: "江华瑶族自治县", parent: 4311, lon: 111.75249569192, lat: 24.977642122796},
+  {id: 431202, name: "鹤城区", parent: 4312, lon: 109.94553900894, lat: 27.612024135064},
+  {id: 431221, name: "中方县", parent: 4312, lon: 110.16536245669, lat: 27.52093513528},
+  {id: 431222, name: "沅陵县", parent: 4312, lon: 110.60117801132, lat: 28.576604506247},
+  {id: 431223, name: "辰溪县", parent: 4312, lon: 110.27300890779, lat: 27.895902086692},
+  {id: 431224, name: "溆浦县", parent: 4312, lon: 110.65858111747, lat: 27.83590994386},
+  {id: 431225, name: "会同县", parent: 4312, lon: 109.8099454141, lat: 26.914136373938},
+  {id: 431226, name: "麻阳苗族自治县", parent: 4312, lon: 109.72917909558, lat: 27.791375726707},
+  {id: 431227, name: "新晃侗族自治县", parent: 4312, lon: 109.1687410593, lat: 27.234509109112},
+  {id: 431228, name: "芷江侗族自治县", parent: 4312, lon: 109.61110485123, lat: 27.402510416382},
+  {id: 431229, name: "靖州苗族侗族自治县", parent: 4312, lon: 109.59083349436, lat: 26.550430723333},
+  {id: 431230, name: "通道侗族自治县", parent: 4312, lon: 109.7446605455, lat: 26.215115332486},
+  {id: 431281, name: "洪江市", parent: 4312, lon: 110.08719342097, lat: 27.239105321481},
+  {id: 431302, name: "娄星区", parent: 4313, lon: 112.00461910688, lat: 27.766945342839},
+  {id: 431321, name: "双峰县", parent: 4313, lon: 112.18792282367, lat: 27.465564445594},
+  {id: 431322, name: "新化县", parent: 4313, lon: 111.24684472009, lat: 27.873272599439},
+  {id: 431381, name: "冷水江市", parent: 4313, lon: 111.49394197482, lat: 27.684914712556},
+  {id: 431382, name: "涟源市", parent: 4313, lon: 111.79458146238, lat: 27.743727453351},
+  {id: 433101, name: "吉首市", parent: 4331, lon: 109.90596604398, lat: 28.297553747059},
+  {id: 433122, name: "泸溪县", parent: 4331, lon: 109.83368299284, lat: 28.004620053587},
+  {id: 433123, name: "凤凰县", parent: 4331, lon: 109.627609014, lat: 28.128806804716},
+  {id: 433124, name: "花垣县", parent: 4331, lon: 109.45712787573, lat: 28.573833156579},
+  {id: 433125, name: "保靖县", parent: 4331, lon: 109.69701784684, lat: 28.653191600514},
+  {id: 433126, name: "古丈县", parent: 4331, lon: 110.00814905055, lat: 28.603594321825},
+  {id: 433127, name: "永顺县", parent: 4331, lon: 109.95878299439, lat: 28.753308819921},
+  {id: 433130, name: "龙山县", parent: 4331, lon: 109.44489996147, lat: 29.458093683151},
+  {id: 440103, name: "荔湾区", parent: 4401, lon: 113.23442278391, lat: 23.093666203644},
+  {id: 440104, name: "越秀区", parent: 4401, lon: 113.28783302666, lat: 23.139277859339},
+  {id: 440105, name: "海珠区", parent: 4401, lon: 113.33384126613, lat: 23.087629228789},
+  {id: 440106, name: "天河区", parent: 4401, lon: 113.38564289133, lat: 23.166129265425},
+  {id: 440111, name: "白云区", parent: 4401, lon: 113.33130628641, lat: 23.294514083014},
+  {id: 440112, name: "黄埔区", parent: 4401, lon: 113.49288457425, lat: 23.108711814239},
+  {id: 440113, name: "番禺区", parent: 4401, lon: 113.41679952965, lat: 22.934590795798},
+  {id: 440114, name: "花都区", parent: 4401, lon: 113.22017551212, lat: 23.446660997141},
+  {id: 440115, name: "南沙区", parent: 4401, lon: 113.58022392527, lat: 22.729893804121},
+  {id: 440117, name: "从化区", parent: 4401, lon: 113.69870948609, lat: 23.705203224537},
+  {id: 440118, name: "增城区", parent: 4401, lon: 113.77002334194, lat: 23.332025887963},
+  {id: 440203, name: "武江区", parent: 4402, lon: 113.37960618165, lat: 24.708193228698},
+  {id: 440204, name: "浈江区", parent: 4402, lon: 113.57745027759, lat: 24.919162254549},
+  {id: 440205, name: "曲江区", parent: 4402, lon: 113.64217762719, lat: 24.651897914445},
+  {id: 440222, name: "始兴县", parent: 4402, lon: 114.11540446493, lat: 24.852706291962},
+  {id: 440224, name: "仁化县", parent: 4402, lon: 113.78547373726, lat: 25.148465646013},
+  {id: 440229, name: "翁源县", parent: 4402, lon: 114.03042755919, lat: 24.426734740638},
+  {id: 440232, name: "乳源瑶族自治县", parent: 4402, lon: 113.17577755468, lat: 24.812051773842},
+  {id: 440233, name: "新丰县", parent: 4402, lon: 114.14177489194, lat: 24.070091776392},
+  {id: 440281, name: "乐昌市", parent: 4402, lon: 113.24695611826, lat: 25.244441914003},
+  {id: 440282, name: "南雄市", parent: 4402, lon: 114.38658277052, lat: 25.189905400508},
+  {id: 440303, name: "罗湖区", parent: 4403, lon: 114.15639529324, lat: 22.581934478848},
+  {id: 440304, name: "福田区", parent: 4403, lon: 114.05559275391, lat: 22.551730572433},
+  {id: 440305, name: "南山区", parent: 4403, lon: 113.95072266574, lat: 22.558887751083},
+  {id: 440306, name: "宝安区", parent: 4403, lon: 113.93001313569, lat: 22.707432793082},
+  {id: 440307, name: "龙岗区", parent: 4403, lon: 114.34769572771, lat: 22.657462286882},
+  {id: 440308, name: "盐田区", parent: 4403, lon: 114.27848287567, lat: 22.606981337589},
+  {id: 440402, name: "香洲区", parent: 4404, lon: 113.53373098039, lat: 22.26559983535},
+  {id: 440403, name: "斗门区", parent: 4404, lon: 113.24798167517, lat: 22.216636753124},
+  {id: 440404, name: "金湾区", parent: 4404, lon: 113.41758987066, lat: 22.04721492726},
+  {id: 440507, name: "龙湖区", parent: 4405, lon: 116.75934746239, lat: 23.408849226222},
+  {id: 440511, name: "金平区", parent: 4405, lon: 116.65179359137, lat: 23.399887892781},
+  {id: 440512, name: "濠江区", parent: 4405, lon: 116.71136293853, lat: 23.282442837577},
+  {id: 440513, name: "潮阳区", parent: 4405, lon: 116.48544753544, lat: 23.347253898106},
+  {id: 440514, name: "潮南区", parent: 4405, lon: 116.41405584392, lat: 23.181395091106},
+  {id: 440515, name: "澄海区", parent: 4405, lon: 116.8148077949, lat: 23.532996549632},
+  {id: 440523, name: "南澳县", parent: 4405, lon: 117.0704048247, lat: 23.439131822072},
+  {id: 440604, name: "禅城区", parent: 4406, lon: 113.07042319497, lat: 23.004210165991},
+  {id: 440605, name: "南海区", parent: 4406, lon: 113.04138132585, lat: 23.07826538747},
+  {id: 440606, name: "顺德区", parent: 4406, lon: 113.18702987688, lat: 22.848510084787},
+  {id: 440607, name: "三水区", parent: 4406, lon: 112.90467719327, lat: 23.294580845555},
+  {id: 440608, name: "高明区", parent: 4406, lon: 112.68325830314, lat: 22.824522683444},
+  {id: 440703, name: "蓬江区", parent: 4407, lon: 113.06077007598, lat: 22.660132832793},
+  {id: 440704, name: "江海区", parent: 4407, lon: 113.13537054201, lat: 22.554846678035},
+  {id: 440705, name: "新会区", parent: 4407, lon: 113.0347511329, lat: 22.38821506964},
+  {id: 440781, name: "台山市", parent: 4407, lon: 112.7159079377, lat: 22.034638545952},
+  {id: 440783, name: "开平市", parent: 4407, lon: 112.54804114164, lat: 22.374200664984},
+  {id: 440784, name: "鹤山市", parent: 4407, lon: 112.80161841196, lat: 22.675317373533},
+  {id: 440785, name: "恩平市", parent: 4407, lon: 112.28646122263, lat: 22.240985208711},
+  {id: 440802, name: "赤坎区", parent: 4408, lon: 110.37972297262, lat: 21.287667885107},
+  {id: 440803, name: "霞山区", parent: 4408, lon: 110.38519600028, lat: 21.2048473973},
+  {id: 440804, name: "坡头区", parent: 4408, lon: 110.51272613161, lat: 21.283819774873},
+  {id: 440811, name: "麻章区", parent: 4408, lon: 110.33802177707, lat: 21.094100364979},
+  {id: 440823, name: "遂溪县", parent: 4408, lon: 110.0398954377, lat: 21.270307383787},
+  {id: 440825, name: "徐闻县", parent: 4408, lon: 110.25784725094, lat: 20.429967572815},
+  {id: 440881, name: "廉江市", parent: 4408, lon: 110.14171137206, lat: 21.645265225554},
+  {id: 440882, name: "雷州市", parent: 4408, lon: 110.01263612715, lat: 20.796584309564},
+  {id: 440883, name: "吴川市", parent: 4408, lon: 110.70818705195, lat: 21.441681041112},
+  {id: 440902, name: "茂南区", parent: 4409, lon: 110.86860979348, lat: 21.676115917529},
+  {id: 440904, name: "电白区", parent: 4409, lon: 111.15968915137, lat: 21.66821689615},
+  {id: 440981, name: "高州市", parent: 4409, lon: 110.97560541086, lat: 22.035521645119},
+  {id: 440982, name: "化州市", parent: 4409, lon: 110.53959146838, lat: 21.845482259109},
+  {id: 440983, name: "信宜市", parent: 4409, lon: 111.12542886235, lat: 22.431974274304},
+  {id: 441202, name: "端州区", parent: 4412, lon: 112.47779387429, lat: 23.103323258382},
+  {id: 441203, name: "鼎湖区", parent: 4412, lon: 112.62524912783, lat: 23.208968105809},
+  {id: 441204, name: "高要区", parent: 4412, lon: 112.51216619847, lat: 23.110684686218},
+  {id: 441223, name: "广宁县", parent: 4412, lon: 112.44331648004, lat: 23.677207015329},
+  {id: 441224, name: "怀集县", parent: 4412, lon: 112.18024001499, lat: 23.974272952942},
+  {id: 441225, name: "封开县", parent: 4412, lon: 111.72348651223, lat: 23.561267405148},
+  {id: 441226, name: "德庆县", parent: 4412, lon: 111.98726848872, lat: 23.276366860198},
+  {id: 441284, name: "四会市", parent: 4412, lon: 112.68755812366, lat: 23.431443755334},
+  {id: 441302, name: "惠城区", parent: 4413, lon: 114.7325947848, lat: 23.278292790243},
+  {id: 441303, name: "惠阳区", parent: 4413, lon: 114.47977020249, lat: 22.788789691764},
+  {id: 441322, name: "博罗县", parent: 4413, lon: 114.28847482844, lat: 23.352582051478},
+  {id: 441323, name: "惠东县", parent: 4413, lon: 114.95551769006, lat: 23.049117499162},
+  {id: 441324, name: "龙门县", parent: 4413, lon: 114.13724281901, lat: 23.666408023307},
+  {id: 441402, name: "梅江区", parent: 4414, lon: 116.11595202018, lat: 24.290750354901},
+  {id: 441403, name: "梅县区", parent: 4414, lon: 116.171027251, lat: 24.3647824353},
+  {id: 441422, name: "大埔县", parent: 4414, lon: 116.66412418408, lat: 24.347933570693},
+  {id: 441423, name: "丰顺县", parent: 4414, lon: 116.29139470791, lat: 23.916084592091},
+  {id: 441424, name: "五华县", parent: 4414, lon: 115.64131969769, lat: 23.802833236552},
+  {id: 441426, name: "平远县", parent: 4414, lon: 115.93265634975, lat: 24.695653660804},
+  {id: 441427, name: "蕉岭县", parent: 4414, lon: 116.19614150108, lat: 24.683283405987},
+  {id: 441481, name: "兴宁市", parent: 4414, lon: 115.75329965584, lat: 24.267311238028},
+  {id: 441502, name: "城区", parent: 4415, lon: 115.42435769122, lat: 22.768710049741},
+  {id: 441521, name: "海丰县", parent: 4415, lon: 115.2863223299, lat: 22.969599520286},
+  {id: 441523, name: "陆河县", parent: 4415, lon: 115.62919633367, lat: 23.284406924899},
+  {id: 441581, name: "陆丰市", parent: 4415, lon: 115.78802975191, lat: 22.967876723873},
+  {id: 441602, name: "源城区", parent: 4416, lon: 114.65448360226, lat: 23.693604112347},
+  {id: 441621, name: "紫金县", parent: 4416, lon: 115.06447099781, lat: 23.525442374357},
+  {id: 441622, name: "龙川县", parent: 4416, lon: 115.36229172074, lat: 24.334679775761},
+  {id: 441623, name: "连平县", parent: 4416, lon: 114.54297659273, lat: 24.340566290031},
+  {id: 441624, name: "和平县", parent: 4416, lon: 115.01181507521, lat: 24.45211039106},
+  {id: 441625, name: "东源县", parent: 4416, lon: 114.82694608538, lat: 23.933052556598},
+  {id: 441702, name: "江城区", parent: 4417, lon: 111.93003574135, lat: 21.762803637074},
+  {id: 441704, name: "阳东区", parent: 4417, lon: 112.04622577462, lat: 21.90761038558},
+  {id: 441721, name: "阳西县", parent: 4417, lon: 111.60050919755, lat: 21.720609599412},
+  {id: 441781, name: "阳春市", parent: 4417, lon: 111.69444876956, lat: 22.223897927949},
+  {id: 441802, name: "清城区", parent: 4418, lon: 113.11458528252, lat: 23.62585596526},
+  {id: 441803, name: "清新区", parent: 4418, lon: 112.94889933526, lat: 23.932290452567},
+  {id: 441821, name: "佛冈县", parent: 4418, lon: 113.56668917499, lat: 23.881077228129},
+  {id: 441823, name: "阳山县", parent: 4418, lon: 112.68133014518, lat: 24.509485552315},
+  {id: 441825, name: "连山壮族瑶族自治县", parent: 4418, lon: 112.10080575295, lat: 24.515164969495},
+  {id: 441826, name: "连南瑶族自治县", parent: 4418, lon: 112.26364236788, lat: 24.574155992653},
+  {id: 441881, name: "英德市", parent: 4418, lon: 113.32316898492, lat: 24.225680391225},
+  {id: 441882, name: "连州市", parent: 4418, lon: 112.45918890578, lat: 24.937020846031},
+  {id: 441900, name: "东莞市", parent: 44, lon: 113.76343399076, lat: 23.043023815368},
+  {id: 442000, name: "中山市", parent: 44, lon: 113.4220600208, lat: 22.545177514513},
+  {id: 445102, name: "湘桥区", parent: 4451, lon: 116.67789952964, lat: 23.700043577114},
+  {id: 445103, name: "潮安区", parent: 4451, lon: 116.60876927831, lat: 23.717386141778},
+  {id: 445122, name: "饶平县", parent: 4451, lon: 116.90612266997, lat: 23.865029718048},
+  {id: 445202, name: "榕城区", parent: 4452, lon: 116.3692235802, lat: 23.529452754199},
+  {id: 445203, name: "揭东区", parent: 4452, lon: 116.37807073325, lat: 23.585024810833},
+  {id: 445222, name: "揭西县", parent: 4452, lon: 115.91682503049, lat: 23.494712399671},
+  {id: 445224, name: "惠来县", parent: 4452, lon: 116.2247989034, lat: 23.034046544147},
+  {id: 445281, name: "普宁市", parent: 4452, lon: 116.07816590835, lat: 23.288953583142},
+  {id: 445302, name: "云城区", parent: 4453, lon: 112.17160356227, lat: 22.973002378136},
+  {id: 445303, name: "云安区", parent: 4453, lon: 111.96143088808, lat: 22.856466364893},
+  {id: 445321, name: "新兴县", parent: 4453, lon: 112.21754109744, lat: 22.626992446128},
+  {id: 445322, name: "郁南县", parent: 4453, lon: 111.61993760725, lat: 23.043633197681},
+  {id: 445381, name: "罗定市", parent: 4453, lon: 111.49324209266, lat: 22.690983986437},
+  {id: 450102, name: "兴宁区", parent: 4501, lon: 108.41762068739, lat: 22.924530825243},
+  {id: 450103, name: "青秀区", parent: 4501, lon: 108.54167973252, lat: 22.829217973591},
+  {id: 450105, name: "江南区", parent: 4501, lon: 108.13559066584, lat: 22.663806639444},
+  {id: 450107, name: "西乡塘区", parent: 4501, lon: 108.21544203073, lat: 22.912937296114},
+  {id: 450108, name: "良庆区", parent: 4501, lon: 108.37044913796, lat: 22.498910081219},
+  {id: 450109, name: "邕宁区", parent: 4501, lon: 108.62620569962, lat: 22.595811549706},
+  {id: 450110, name: "武鸣区", parent: 4501, lon: 108.23369489981, lat: 23.233267218289},
+  {id: 450123, name: "隆安县", parent: 4501, lon: 107.69066557406, lat: 23.110227709531},
+  {id: 450124, name: "马山县", parent: 4501, lon: 108.1696043635, lat: 23.664942974082},
+  {id: 450125, name: "上林县", parent: 4501, lon: 108.64581538209, lat: 23.521730154673},
+  {id: 450126, name: "宾阳县", parent: 4501, lon: 108.94049469657, lat: 23.168344342302},
+  {id: 450127, name: "横县", parent: 4501, lon: 109.16892656267, lat: 22.774919317685},
+  {id: 450202, name: "城中区", parent: 4502, lon: 109.48318080161, lat: 24.371128485733},
+  {id: 450203, name: "鱼峰区", parent: 4502, lon: 109.45632703637, lat: 24.275815550781},
+  {id: 450204, name: "柳南区", parent: 4502, lon: 109.34346581857, lat: 24.306183897363},
+  {id: 450205, name: "柳北区", parent: 4502, lon: 109.41391452987, lat: 24.471742756535},
+  {id: 450206, name: "柳江区", parent: 4502, lon: 109.33837797157, lat: 24.21578019619},
+  {id: 450222, name: "柳城县", parent: 4502, lon: 109.23019655363, lat: 24.62988200842},
+  {id: 450223, name: "鹿寨县", parent: 4502, lon: 109.80281600679, lat: 24.532198388889},
+  {id: 450224, name: "融安县", parent: 4502, lon: 109.51401020724, lat: 25.139782632024},
+  {id: 450225, name: "融水苗族自治县", parent: 4502, lon: 109.05786347353, lat: 25.343698638547},
+  {id: 450226, name: "三江侗族自治县", parent: 4502, lon: 109.5100810614, lat: 25.74756560612},
+  {id: 450302, name: "秀峰区", parent: 4503, lon: 110.27454852003, lat: 25.287138490985},
+  {id: 450303, name: "叠彩区", parent: 4503, lon: 110.336225817, lat: 25.318874237568},
+  {id: 450304, name: "象山区", parent: 4503, lon: 110.28460774513, lat: 25.215755465426},
+  {id: 450305, name: "七星区", parent: 4503, lon: 110.35658833681, lat: 25.264669861823},
+  {id: 450311, name: "雁山区", parent: 4503, lon: 110.37148547606, lat: 25.112805740761},
+  {id: 450312, name: "临桂区", parent: 4503, lon: 110.05831249425, lat: 25.266798702759},
+  {id: 450321, name: "阳朔县", parent: 4503, lon: 110.48292929478, lat: 24.857282289724},
+  {id: 450323, name: "灵川县", parent: 4503, lon: 110.41812911351, lat: 25.381008804927},
+  {id: 450324, name: "全州县", parent: 4503, lon: 111.02643476452, lat: 25.936464773168},
+  {id: 450325, name: "兴安县", parent: 4503, lon: 110.60102057414, lat: 25.6070310342},
+  {id: 450326, name: "永福县", parent: 4503, lon: 109.91693042182, lat: 24.997329894857},
+  {id: 450327, name: "灌阳县", parent: 4503, lon: 111.0777084233, lat: 25.458880833514},
+  {id: 450328, name: "龙胜各族自治县", parent: 4503, lon: 110.0102504878, lat: 25.868327982022},
+  {id: 450329, name: "资源县", parent: 4503, lon: 110.59842700994, lat: 26.067857197159},
+  {id: 450330, name: "平乐县", parent: 4503, lon: 110.79768988938, lat: 24.558919773879},
+  {id: 450331, name: "荔浦县", parent: 4503, lon: 110.36832789757, lat: 24.525342885432},
+  {id: 450332, name: "恭城瑶族自治县", parent: 4503, lon: 110.90944732333, lat: 24.949325584117},
+  {id: 450403, name: "万秀区", parent: 4504, lon: 111.42162608637, lat: 23.563455294046},
+  {id: 450405, name: "长洲区", parent: 4504, lon: 111.1899141988, lat: 23.560200006306},
+  {id: 450406, name: "龙圩区", parent: 4504, lon: 111.32167060016, lat: 23.205423202289},
+  {id: 450421, name: "苍梧县", parent: 4504, lon: 111.29835212828, lat: 23.626737954219},
+  {id: 450422, name: "藤县", parent: 4504, lon: 110.77883787789, lat: 23.510902782468},
+  {id: 450423, name: "蒙山县", parent: 4504, lon: 110.56122298515, lat: 24.133850543878},
+  {id: 450481, name: "岑溪市", parent: 4504, lon: 111.02872021172, lat: 22.925290987321},
+  {id: 450502, name: "海城区", parent: 4505, lon: 109.16534360381, lat: 21.518620780285},
+  {id: 450503, name: "银海区", parent: 4505, lon: 109.2515908141, lat: 21.48972262057},
+  {id: 450512, name: "铁山港区", parent: 4505, lon: 109.42248930511, lat: 21.574915371765},
+  {id: 450521, name: "合浦县", parent: 4505, lon: 109.33539345631, lat: 21.740444343774},
+  {id: 450602, name: "港口区", parent: 4506, lon: 108.44916612265, lat: 21.662035674238},
+  {id: 450603, name: "防城区", parent: 4506, lon: 108.02974018357, lat: 21.764841822261},
+  {id: 450621, name: "上思县", parent: 4506, lon: 107.90234352919, lat: 22.053625294887},
+  {id: 450681, name: "东兴市", parent: 4506, lon: 108.0610807332, lat: 21.627169839712},
+  {id: 450702, name: "钦南区", parent: 4507, lon: 108.8165239388, lat: 21.89668072285},
+  {id: 450703, name: "钦北区", parent: 4507, lon: 108.52867631111, lat: 22.171133309191},
+  {id: 450721, name: "灵山县", parent: 4507, lon: 109.14774755818, lat: 22.315715686267},
+  {id: 450722, name: "浦北县", parent: 4507, lon: 109.54236668008, lat: 22.271304072712},
+  {id: 450802, name: "港北区", parent: 4508, lon: 109.68955750941, lat: 23.244654866397},
+  {id: 450803, name: "港南区", parent: 4508, lon: 109.7098514885, lat: 22.87475110083},
+  {id: 450804, name: "覃塘区", parent: 4508, lon: 109.4013360968, lat: 23.147899675106},
+  {id: 450821, name: "平南县", parent: 4508, lon: 110.41260119285, lat: 23.538682883685},
+  {id: 450881, name: "桂平市", parent: 4508, lon: 110.08711890997, lat: 23.3332806173},
+  {id: 450902, name: "玉州区", parent: 4509, lon: 110.0645342655, lat: 22.557212692568},
+  {id: 450903, name: "福绵区", parent: 4509, lon: 109.99939646175, lat: 22.485121229661},
+  {id: 450921, name: "容县", parent: 4509, lon: 110.61027737584, lat: 22.831614121088},
+  {id: 450922, name: "陆川县", parent: 4509, lon: 110.27211293424, lat: 22.251747037814},
+  {id: 450923, name: "博白县", parent: 4509, lon: 109.87890451509, lat: 22.066766171087},
+  {id: 450924, name: "兴业县", parent: 4509, lon: 109.92861094693, lat: 22.798461756462},
+  {id: 450981, name: "北流市", parent: 4509, lon: 110.46705456426, lat: 22.528890370522},
+  {id: 451002, name: "右江区", parent: 4510, lon: 106.50559640624, lat: 23.941865593712},
+  {id: 451021, name: "田阳县", parent: 4510, lon: 106.81127009414, lat: 23.729759302774},
+  {id: 451022, name: "田东县", parent: 4510, lon: 107.19163711741, lat: 23.614585367817},
+  {id: 451023, name: "平果县", parent: 4510, lon: 107.57751209903, lat: 23.540954424157},
+  {id: 451024, name: "德保县", parent: 4510, lon: 106.59428466728, lat: 23.382214509826},
+  {id: 451026, name: "那坡县", parent: 4510, lon: 105.8347049622, lat: 23.247545560208},
+  {id: 451027, name: "凌云县", parent: 4510, lon: 106.64837922239, lat: 24.363726145418},
+  {id: 451028, name: "乐业县", parent: 4510, lon: 106.5178987429, lat: 24.829664240385},
+  {id: 451029, name: "田林县", parent: 4510, lon: 105.99982724993, lat: 24.392538479127},
+  {id: 451030, name: "西林县", parent: 4510, lon: 105.09732745516, lat: 24.391377583083},
+  {id: 451031, name: "隆林各族自治县", parent: 4510, lon: 105.30321343556, lat: 24.680432837057},
+  {id: 451081, name: "靖西市", parent: 4510, lon: 106.38310874744, lat: 23.221036271428},
+  {id: 451102, name: "八步区", parent: 4511, lon: 111.68835191834, lat: 24.309335821524},
+  {id: 451103, name: "平桂区", parent: 4511, lon: 111.4583206726, lat: 24.272024331072},
+  {id: 451121, name: "昭平县", parent: 4511, lon: 110.97690768696, lat: 24.108072861819},
+  {id: 451122, name: "钟山县", parent: 4511, lon: 111.24883282187, lat: 24.513864981375},
+  {id: 451123, name: "富川瑶族自治县", parent: 4511, lon: 111.31324328294, lat: 24.891613643714},
+  {id: 451202, name: "金城江区", parent: 4512, lon: 107.87344356952, lat: 24.660762069433},
+  {id: 451221, name: "南丹县", parent: 4512, lon: 107.46800068753, lat: 25.11943883054},
+  {id: 451222, name: "天峨县", parent: 4512, lon: 106.99659443884, lat: 25.01883375149},
+  {id: 451223, name: "凤山县", parent: 4512, lon: 107.01971572195, lat: 24.560064974996},
+  {id: 451224, name: "东兰县", parent: 4512, lon: 107.41353376084, lat: 24.511600489222},
+  {id: 451225, name: "罗城仫佬族自治县", parent: 4512, lon: 108.82719124199, lat: 24.904567511665},
+  {id: 451226, name: "环江毛南族自治县", parent: 4512, lon: 108.29198518646, lat: 25.104531056442},
+  {id: 451227, name: "巴马瑶族自治县", parent: 4512, lon: 107.20766596976, lat: 24.157595548736},
+  {id: 451228, name: "都安瑶族自治县", parent: 4512, lon: 108.11806068056, lat: 24.169778074597},
+  {id: 451229, name: "大化瑶族自治县", parent: 4512, lon: 107.71195932144, lat: 23.970744702117},
+  {id: 451281, name: "宜州市", parent: 4512, lon: 108.5465522796, lat: 24.481176748089},
+  {id: 451302, name: "兴宾区", parent: 4513, lon: 109.19320522678, lat: 23.664270771977},
+  {id: 451321, name: "忻城县", parent: 4513, lon: 108.75231859732, lat: 24.018747261796},
+  {id: 451322, name: "象州县", parent: 4513, lon: 109.77196784577, lat: 24.019170132851},
+  {id: 451323, name: "武宣县", parent: 4513, lon: 109.68768015891, lat: 23.61072110732},
+  {id: 451324, name: "金秀瑶族自治县", parent: 4513, lon: 110.13777637174, lat: 24.089876611192},
+  {id: 451381, name: "合山市", parent: 4513, lon: 108.94253993058, lat: 23.802816135427},
+  {id: 451402, name: "江州区", parent: 4514, lon: 107.46135714079, lat: 22.529826577387},
+  {id: 451421, name: "扶绥县", parent: 4514, lon: 107.82912504554, lat: 22.524058231311},
+  {id: 451422, name: "宁明县", parent: 4514, lon: 107.29465888577, lat: 22.005062342039},
+  {id: 451423, name: "龙州县", parent: 4514, lon: 106.85853904762, lat: 22.431578425316},
+  {id: 451424, name: "大新县", parent: 4514, lon: 107.13710947577, lat: 22.813462764842},
+  {id: 451425, name: "天等县", parent: 4514, lon: 107.08133912276, lat: 23.117161246424},
+  {id: 451481, name: "凭祥市", parent: 4514, lon: 106.83705317757, lat: 22.093647276973},
+  {id: 460105, name: "秀英区", parent: 4601, lon: 110.26320040619, lat: 19.884344360797},
+  {id: 460106, name: "龙华区", parent: 4601, lon: 110.33522411653, lat: 19.905350664019},
+  {id: 460107, name: "琼山区", parent: 4601, lon: 110.48011046473, lat: 19.741333613805},
+  {id: 460108, name: "美兰区", parent: 4601, lon: 110.50726929452, lat: 19.942908977934},
+  {id: 460202, name: "海棠区", parent: 4602, lon: 109.73605457423, lat: 18.38141790489},
+  {id: 460203, name: "吉阳区", parent: 4602, lon: 109.57378482237, lat: 18.266590591978},
+  {id: 460204, name: "天涯区", parent: 4602, lon: 109.38879057584, lat: 18.395908258064},
+  {id: 460205, name: "崖州区", parent: 4602, lon: 109.18636245975, lat: 18.448774794407},
+  {id: 460321, name: "西沙群岛", parent: 4603, lon: 111.67308686126, lat: 16.497085431044},
+  {id: 460322, name: "南沙群岛", parent: 4603, lon: 112.66030170907, lat: 4.9743661921368},
+  {id: 460323, name: "中沙群岛的岛礁及其海域", parent: 4603, lon: 113.75535610385, lat: 12.464712920653},
+  {id: 460400, name: "儋州市", parent: 46, lon: 109.33458619886, lat: 19.574787798597},
+  {id: 469001, name: "五指山市", parent: 4690, lon: 109.51775006369, lat: 18.831305749013},
+  {id: 469002, name: "琼海市", parent: 4690, lon: 110.41435935151, lat: 19.214830368617},
+  {id: 469005, name: "文昌市", parent: 4690, lon: 110.78090944499, lat: 19.750947380145},
+  {id: 469006, name: "万宁市", parent: 4690, lon: 110.29250485724, lat: 18.839885909177},
+  {id: 469007, name: "东方市", parent: 4690, lon: 108.85100963157, lat: 18.998160861218},
+  {id: 469021, name: "定安县", parent: 4690, lon: 110.20642407813, lat: 20.050057124473},
+  {id: 469022, name: "屯昌县", parent: 4690, lon: 110.06336404474, lat: 19.347749127852},
+  {id: 469023, name: "澄迈县", parent: 4690, lon: 109.99673620157, lat: 19.693135069577},
+  {id: 469024, name: "临高县", parent: 4690, lon: 109.72410152868, lat: 19.805922012409},
+  {id: 469025, name: "白沙黎族自治县", parent: 4690, lon: 109.35858558291, lat: 19.216056142062},
+  {id: 469026, name: "昌江黎族自治县", parent: 4690, lon: 109.01129968163, lat: 19.222482900957},
+  {id: 469027, name: "乐东黎族自治县", parent: 4690, lon: 109.0626980127, lat: 18.658613560734},
+  {id: 469028, name: "陵水黎族自治县", parent: 4690, lon: 109.94866071004, lat: 18.575984851566},
+  {id: 469029, name: "保亭黎族苗族自治县", parent: 4690, lon: 109.65611337969, lat: 18.597592346267},
+  {id: 469030, name: "琼中黎族苗族自治县", parent: 4690, lon: 109.86184857077, lat: 19.039771066968},
+  {id: 500101, name: "万州区", parent: 5001, lon: 108.4134386367, lat: 30.710054184366},
+  {id: 500102, name: "涪陵区", parent: 5001, lon: 107.34079973803, lat: 29.66467054056},
+  {id: 500103, name: "渝中区", parent: 5001, lon: 106.54696678483, lat: 29.555236194395},
+  {id: 500104, name: "大渡口区", parent: 5001, lon: 106.46532181465, lat: 29.424139786946},
+  {id: 500105, name: "江北区", parent: 5001, lon: 106.71361473094, lat: 29.619317744064},
+  {id: 500106, name: "沙坪坝区", parent: 5001, lon: 106.37480489265, lat: 29.630548136629},
+  {id: 500107, name: "九龙坡区", parent: 5001, lon: 106.37059488439, lat: 29.434566154958},
+  {id: 500108, name: "南岸区", parent: 5001, lon: 106.66717849904, lat: 29.541514618903},
+  {id: 500109, name: "北碚区", parent: 5001, lon: 106.52034245432, lat: 29.866596066865},
+  {id: 500110, name: "綦江区", parent: 5001, lon: 106.73584657225, lat: 28.825949323551},
+  {id: 500111, name: "大足区", parent: 5001, lon: 105.76093297492, lat: 29.622204718555},
+  {id: 500112, name: "渝北区", parent: 5001, lon: 106.7537985312, lat: 29.816264082426},
+  {id: 500113, name: "巴南区", parent: 5001, lon: 106.7582741592, lat: 29.378027968889},
+  {id: 500114, name: "黔江区", parent: 5001, lon: 108.71480796402, lat: 29.440981033584},
+  {id: 500115, name: "长寿区", parent: 5001, lon: 107.14661537132, lat: 29.96049135503},
+  {id: 500116, name: "江津区", parent: 5001, lon: 106.26928185639, lat: 29.035351190668},
+  {id: 500117, name: "合川区", parent: 5001, lon: 106.31802875449, lat: 30.118708260134},
+  {id: 500118, name: "永川区", parent: 5001, lon: 105.88035760368, lat: 29.296487646991},
+  {id: 500119, name: "南川区", parent: 5001, lon: 107.17788827954, lat: 29.141685769527},
+  {id: 500120, name: "璧山区", parent: 5001, lon: 106.21326949786, lat: 29.588328631909},
+  {id: 500151, name: "铜梁区", parent: 5001, lon: 106.03488288304, lat: 29.813265758673},
+  {id: 500152, name: "潼南区", parent: 5001, lon: 105.78466162818, lat: 30.116632232545},
+  {id: 500153, name: "荣昌区", parent: 5001, lon: 105.52149235061, lat: 29.472620663129},
+  {id: 500154, name: "开州区", parent: 5001, lon: 108.42256829126, lat: 31.262995406524},
+  {id: 500228, name: "梁平县", parent: 5002, lon: 107.72542817193, lat: 30.66436343529},
+  {id: 500229, name: "城口县", parent: 5002, lon: 108.74185516517, lat: 31.888131392209},
+  {id: 500230, name: "丰都县", parent: 5002, lon: 107.8375173643, lat: 29.890595717682},
+  {id: 500231, name: "垫江县", parent: 5002, lon: 107.44444454166, lat: 30.259498445887},
+  {id: 500232, name: "武隆县", parent: 5002, lon: 107.71610570339, lat: 29.379270963599},
+  {id: 500233, name: "忠县", parent: 5002, lon: 106.53063501341, lat: 29.544606108886},
+  {id: 500235, name: "云阳县", parent: 5002, lon: 108.86318575675, lat: 31.042409267237},
+  {id: 500236, name: "奉节县", parent: 5002, lon: 109.35566670168, lat: 30.958552797156},
+  {id: 500237, name: "巫山县", parent: 5002, lon: 109.90861122268, lat: 31.121151720268},
+  {id: 500238, name: "巫溪县", parent: 5002, lon: 109.36053147066, lat: 31.509161376321},
+  {id: 500240, name: "石柱土家族自治县", parent: 5002, lon: 108.30489042793, lat: 30.099636944155},
+  {id: 500241, name: "秀山土家族苗族自治县", parent: 5002, lon: 109.02532125368, lat: 28.498315398405},
+  {id: 500242, name: "酉阳土家族苗族自治县", parent: 5002, lon: 108.80680823733, lat: 28.905277662391},
+  {id: 500243, name: "彭水苗族土家族自治县", parent: 5002, lon: 108.27286773419, lat: 29.359628264894},
+  {id: 510104, name: "锦江区", parent: 5101, lon: 104.12426938462, lat: 30.606301824621},
+  {id: 510105, name: "青羊区", parent: 5101, lon: 103.98842870094, lat: 30.685101946314},
+  {id: 510106, name: "金牛区", parent: 5101, lon: 104.06137695451, lat: 30.735622100763},
+  {id: 510107, name: "武侯区", parent: 5101, lon: 104.04124020837, lat: 30.612881788753},
+  {id: 510108, name: "成华区", parent: 5101, lon: 104.15003204704, lat: 30.695040111899},
+  {id: 510112, name: "龙泉驿区", parent: 5101, lon: 104.30118080707, lat: 30.603368382019},
+  {id: 510113, name: "青白江区", parent: 5101, lon: 104.34642982356, lat: 30.796353967983},
+  {id: 510114, name: "新都区", parent: 5101, lon: 104.11658349961, lat: 30.839503886637},
+  {id: 510115, name: "温江区", parent: 5101, lon: 103.81646839534, lat: 30.730254927008},
+  {id: 510116, name: "双流区", parent: 5101, lon: 104.0328303402, lat: 30.450175430612},
+  {id: 510121, name: "金堂县", parent: 5101, lon: 104.61537139695, lat: 30.728612610912},
+  {id: 510124, name: "郫县", parent: 5101, lon: 103.88462503305, lat: 30.839641883011},
+  {id: 510129, name: "大邑县", parent: 5101, lon: 103.38845160801, lat: 30.614941412606},
+  {id: 510131, name: "蒲江县", parent: 5101, lon: 103.49773846901, lat: 30.239938504594},
+  {id: 510132, name: "新津县", parent: 5101, lon: 103.83217681027, lat: 30.42786608997},
+  {id: 510181, name: "都江堰市", parent: 5101, lon: 103.63734201321, lat: 31.039123659728},
+  {id: 510182, name: "彭州市", parent: 5101, lon: 103.88986635887, lat: 31.148577255886},
+  {id: 510183, name: "邛崃市", parent: 5101, lon: 103.37651244321, lat: 30.388736018151},
+  {id: 510184, name: "崇州市", parent: 5101, lon: 103.52946689588, lat: 30.71964092397},
+  {id: 510185, name: "简阳市", parent: 5101, lon: 104.55059629796, lat: 30.37250750046},
+  {id: 510302, name: "自流井区", parent: 5103, lon: 104.70785437828, lat: 29.28261396923},
+  {id: 510303, name: "贡井区", parent: 5103, lon: 104.6027348472, lat: 29.314590727756},
+  {id: 510304, name: "大安区", parent: 5103, lon: 104.87756638738, lat: 29.411547695333},
+  {id: 510311, name: "沿滩区", parent: 5103, lon: 104.854763441, lat: 29.242640479342},
+  {id: 510321, name: "荣县", parent: 5103, lon: 104.372407917, lat: 29.398978496698},
+  {id: 510322, name: "富顺县", parent: 5103, lon: 105.02222048778, lat: 29.152297063892},
+  {id: 510402, name: "东区", parent: 5104, lon: 101.72242315249, lat: 26.587571257109},
+  {id: 510403, name: "西区", parent: 5104, lon: 101.72242315249, lat: 26.587571257109},
+  {id: 510411, name: "仁和区", parent: 5104, lon: 101.66970205128, lat: 26.56790741922},
+  {id: 510421, name: "米易县", parent: 5104, lon: 102.00072626456, lat: 26.932749356485},
+  {id: 510422, name: "盐边县", parent: 5104, lon: 101.58605027726, lat: 26.940087094351},
+  {id: 510502, name: "江阳区", parent: 5105, lon: 105.37171257028, lat: 28.87690067554},
+  {id: 510503, name: "纳溪区", parent: 5105, lon: 105.3906055521, lat: 28.614041373614},
+  {id: 510504, name: "龙马潭区", parent: 5105, lon: 105.4378416897, lat: 28.987460236388},
+  {id: 510521, name: "泸县", parent: 5105, lon: 105.50826734902, lat: 29.124919969133},
+  {id: 510522, name: "合江县", parent: 5105, lon: 105.93160013109, lat: 28.751865254096},
+  {id: 510524, name: "叙永县", parent: 5105, lon: 105.46859233328, lat: 28.099206628496},
+  {id: 510525, name: "古蔺县", parent: 5105, lon: 105.93629331276, lat: 27.983319448381},
+  {id: 510603, name: "旌阳区", parent: 5106, lon: 104.41525849556, lat: 31.179805144786},
+  {id: 510623, name: "中江县", parent: 5106, lon: 104.80495180574, lat: 30.887114236708},
+  {id: 510626, name: "罗江县", parent: 5106, lon: 104.53541026815, lat: 31.320265186662},
+  {id: 510681, name: "广汉市", parent: 5106, lon: 104.29847583599, lat: 31.006480881164},
+  {id: 510682, name: "什邡市", parent: 5106, lon: 104.01987074915, lat: 31.29369418585},
+  {id: 510683, name: "绵竹市", parent: 5106, lon: 104.12929386201, lat: 31.436657312108},
+  {id: 510703, name: "涪城区", parent: 5107, lon: 104.67051389601, lat: 31.435734812547},
+  {id: 510704, name: "游仙区", parent: 5107, lon: 104.98157984665, lat: 31.518816009605},
+  {id: 510705, name: "安州区", parent: 5107, lon: 104.37720699346, lat: 31.589559671673},
+  {id: 510722, name: "三台县", parent: 5107, lon: 105.04258112078, lat: 31.118872490873},
+  {id: 510723, name: "盐亭县", parent: 5107, lon: 105.4790711008, lat: 31.247942979309},
+  {id: 510725, name: "梓潼县", parent: 5107, lon: 105.19383418448, lat: 31.653620996937},
+  {id: 510726, name: "北川羌族自治县", parent: 5107, lon: 104.25834135739, lat: 31.962527312739},
+  {id: 510727, name: "平武县", parent: 5107, lon: 104.40430826693, lat: 32.446911722865},
+  {id: 510781, name: "江油市", parent: 5107, lon: 104.93314929993, lat: 31.952426668806},
+  {id: 510802, name: "利州区", parent: 5108, lon: 105.7853172322, lat: 32.478529639449},
+  {id: 510811, name: "昭化区", parent: 5108, lon: 105.82174977463, lat: 32.141760307902},
+  {id: 510812, name: "朝天区", parent: 5108, lon: 106.02216392398, lat: 32.708417209014},
+  {id: 510821, name: "旺苍县", parent: 5108, lon: 106.40182287359, lat: 32.372139642174},
+  {id: 510822, name: "青川县", parent: 5108, lon: 105.19044673467, lat: 32.515859827572},
+  {id: 510823, name: "剑阁县", parent: 5108, lon: 105.50302096949, lat: 31.921947731961},
+  {id: 510824, name: "苍溪县", parent: 5108, lon: 106.11328295036, lat: 31.918551658673},
+  {id: 510903, name: "船山区", parent: 5109, lon: 105.62152802077, lat: 30.523499649283},
+  {id: 510904, name: "安居区", parent: 5109, lon: 105.41441146849, lat: 30.363522338679},
+  {id: 510921, name: "蓬溪县", parent: 5109, lon: 105.71608763636, lat: 30.657491289748},
+  {id: 510922, name: "射洪县", parent: 5109, lon: 105.38824463742, lat: 30.908078631387},
+  {id: 510923, name: "大英县", parent: 5109, lon: 105.25637201729, lat: 30.580190633917},
+  {id: 511002, name: "市中区", parent: 5110, lon: 104.95397876928, lat: 29.55164493068},
+  {id: 511011, name: "东兴区", parent: 5110, lon: 105.20216881381, lat: 29.628088552472},
+  {id: 511024, name: "威远县", parent: 5110, lon: 104.59397578195, lat: 29.599588801619},
+  {id: 511025, name: "资中县", parent: 5110, lon: 104.80746566888, lat: 29.813836235002},
+  {id: 511028, name: "隆昌县", parent: 5110, lon: 105.25295771714, lat: 29.367868749158},
+  {id: 511102, name: "市中区", parent: 5111, lon: 103.80478219007, lat: 29.61984411709},
+  {id: 511111, name: "沙湾区", parent: 5111, lon: 103.60454818519, lat: 29.316409760812},
+  {id: 511112, name: "五通桥区", parent: 5111, lon: 103.84663334546, lat: 29.395443506532},
+  {id: 511113, name: "金口河区", parent: 5111, lon: 103.07336628607, lat: 29.293819974164},
+  {id: 511123, name: "犍为县", parent: 5111, lon: 103.98019853458, lat: 29.231190495122},
+  {id: 511124, name: "井研县", parent: 5111, lon: 104.05532967168, lat: 29.644500661501},
+  {id: 511126, name: "夹江县", parent: 5111, lon: 103.55926293457, lat: 29.7761069203},
+  {id: 511129, name: "沐川县", parent: 5111, lon: 103.82650268685, lat: 29.006905081763},
+  {id: 511132, name: "峨边彝族自治县", parent: 5111, lon: 103.2167397181, lat: 29.050415556838},
+  {id: 511133, name: "马边彝族自治县", parent: 5111, lon: 103.48138754926, lat: 28.776739333365},
+  {id: 511181, name: "峨眉山市", parent: 5111, lon: 103.40091230856, lat: 29.50700404085},
+  {id: 511302, name: "顺庆区", parent: 5113, lon: 106.11579825983, lat: 30.949624560849},
+  {id: 511303, name: "高坪区", parent: 5113, lon: 106.25975917374, lat: 30.75468404314},
+  {id: 511304, name: "嘉陵区", parent: 5113, lon: 105.93870307769, lat: 30.665451829003},
+  {id: 511321, name: "南部县", parent: 5113, lon: 105.92351381942, lat: 31.349802866479},
+  {id: 511322, name: "营山县", parent: 5113, lon: 106.7185269662, lat: 31.162322799073},
+  {id: 511323, name: "蓬安县", parent: 5113, lon: 106.42891733521, lat: 31.007075500318},
+  {id: 511324, name: "仪陇县", parent: 5113, lon: 106.53472488695, lat: 31.443593221681},
+  {id: 511325, name: "西充县", parent: 5113, lon: 105.85733163521, lat: 31.063877074354},
+  {id: 511381, name: "阆中市", parent: 5113, lon: 106.07809314825, lat: 31.602117348886},
+  {id: 511402, name: "东坡区", parent: 5114, lon: 103.74833257305, lat: 30.057372008382},
+  {id: 511403, name: "彭山区", parent: 5114, lon: 103.84644479804, lat: 30.24443648473},
+  {id: 511421, name: "仁寿县", parent: 5114, lon: 104.22551880085, lat: 29.985868914405},
+  {id: 511423, name: "洪雅县", parent: 5114, lon: 103.18015949893, lat: 29.694316499556},
+  {id: 511424, name: "丹棱县", parent: 5114, lon: 103.43451305805, lat: 30.014802935586},
+  {id: 511425, name: "青神县", parent: 5114, lon: 103.83750799161, lat: 29.82275999862},
+  {id: 511502, name: "翠屏区", parent: 5115, lon: 104.69325460374, lat: 28.81581998264},
+  {id: 511503, name: "南溪区", parent: 5115, lon: 104.92244522579, lat: 28.891857434171},
+  {id: 511521, name: "宜宾县", parent: 5115, lon: 104.38270989151, lat: 28.906871431718},
+  {id: 511523, name: "江安县", parent: 5115, lon: 105.12877827717, lat: 28.663532600917},
+  {id: 511524, name: "长宁县", parent: 5115, lon: 104.93114856989, lat: 28.515433786755},
+  {id: 511525, name: "高县", parent: 5115, lon: 104.5930664103, lat: 28.463200492005},
+  {id: 511526, name: "珙县", parent: 5115, lon: 104.8066179908, lat: 28.196990137689},
+  {id: 511527, name: "筠连县", parent: 5115, lon: 104.58843340511, lat: 28.042098884244},
+  {id: 511528, name: "兴文县", parent: 5115, lon: 105.14122589128, lat: 28.255538437302},
+  {id: 511529, name: "屏山县", parent: 5115, lon: 103.99911803649, lat: 28.702428662485},
+  {id: 511602, name: "广安区", parent: 5116, lon: 106.75891196362, lat: 30.599249987199},
+  {id: 511603, name: "前锋区", parent: 5116, lon: 106.86565774045, lat: 30.543834838815},
+  {id: 511621, name: "岳池县", parent: 5116, lon: 106.4208329851, lat: 30.540768629653},
+  {id: 511622, name: "武胜县", parent: 5116, lon: 106.23136624407, lat: 30.373904543993},
+  {id: 511623, name: "邻水县", parent: 5116, lon: 107.00333361946, lat: 30.263283994028},
+  {id: 511681, name: "华蓥市", parent: 5116, lon: 106.75941195402, lat: 30.321832376319},
+  {id: 511702, name: "通川区", parent: 5117, lon: 107.51920394973, lat: 31.238764440346},
+  {id: 511703, name: "达川区", parent: 5117, lon: 107.42129730953, lat: 31.187291385014},
+  {id: 511722, name: "宣汉县", parent: 5117, lon: 107.93603281988, lat: 31.51979762495},
+  {id: 511723, name: "开江县", parent: 5117, lon: 107.89101188441, lat: 31.05158729925},
+  {id: 511724, name: "大竹县", parent: 5117, lon: 107.27987739412, lat: 30.690772377766},
+  {id: 511725, name: "渠县", parent: 5117, lon: 106.98760176612, lat: 30.94881416065},
+  {id: 511781, name: "万源市", parent: 5117, lon: 107.99381097493, lat: 31.986241088206},
+  {id: 511802, name: "雨城区", parent: 5118, lon: 103.03840450831, lat: 29.928506655301},
+  {id: 511803, name: "名山区", parent: 5118, lon: 103.23102630214, lat: 30.117458953474},
+  {id: 511822, name: "荥经县", parent: 5118, lon: 102.69194616494, lat: 29.740877769322},
+  {id: 511823, name: "汉源县", parent: 5118, lon: 102.62513643454, lat: 29.431575643201},
+  {id: 511824, name: "石棉县", parent: 5118, lon: 102.2939695159, lat: 29.235484876512},
+  {id: 511825, name: "天全县", parent: 5118, lon: 102.57830462584, lat: 30.078874542047},
+  {id: 511826, name: "芦山县", parent: 5118, lon: 103.01809878481, lat: 30.440281571631},
+  {id: 511827, name: "宝兴县", parent: 5118, lon: 102.71689365787, lat: 30.567649711279},
+  {id: 511902, name: "巴州区", parent: 5119, lon: 106.739266453, lat: 31.785302790667},
+  {id: 511903, name: "恩阳区", parent: 5119, lon: 106.75791584175, lat: 31.86918915916},
+  {id: 511921, name: "通江县", parent: 5119, lon: 107.35277526385, lat: 32.13640689395},
+  {id: 511922, name: "南江县", parent: 5119, lon: 106.83618103409, lat: 32.337239209081},
+  {id: 511923, name: "平昌县", parent: 5119, lon: 107.16735749976, lat: 31.59771477028},
+  {id: 512002, name: "雁江区", parent: 5120, lon: 104.75541652784, lat: 30.091647255037},
+  {id: 512021, name: "安岳县", parent: 5120, lon: 105.4008757725, lat: 29.999677270422},
+  {id: 512022, name: "乐至县", parent: 5120, lon: 105.02831576248, lat: 30.313944636249},
+  {id: 513201, name: "马尔康市", parent: 5132, lon: 101.9836278113, lat: 32.007871202647},
+  {id: 513221, name: "汶川县", parent: 5132, lon: 103.29431691527, lat: 31.168774069592},
+  {id: 513222, name: "理县", parent: 5132, lon: 103.42033582964, lat: 31.566906370691},
+  {id: 513223, name: "茂县", parent: 5132, lon: 102.8991597236, lat: 30.367480937958},
+  {id: 513224, name: "松潘县", parent: 5132, lon: 103.532712222, lat: 32.625458557695},
+  {id: 513225, name: "九寨沟县", parent: 5132, lon: 103.9340437688, lat: 33.317446497617},
+  {id: 513226, name: "金川县", parent: 5132, lon: 101.80476934386, lat: 31.52757038818},
+  {id: 513227, name: "小金县", parent: 5132, lon: 102.41921664895, lat: 30.969288643982},
+  {id: 513228, name: "黑水县", parent: 5132, lon: 103.01249848065, lat: 32.052158211237},
+  {id: 513230, name: "壤塘县", parent: 5132, lon: 101.05971696123, lat: 32.148226253207},
+  {id: 513231, name: "阿坝县", parent: 5132, lon: 101.70212990273, lat: 32.916574446999},
+  {id: 513232, name: "若尔盖县", parent: 5132, lon: 102.97487609843, lat: 33.584805758741},
+  {id: 513233, name: "红原县", parent: 5132, lon: 102.64115041582, lat: 32.736132092126},
+  {id: 513301, name: "康定市", parent: 5133, lon: 101.75312764174, lat: 29.963390007018},
+  {id: 513322, name: "泸定县", parent: 5133, lon: 102.12006613226, lat: 29.747744290103},
+  {id: 513323, name: "丹巴县", parent: 5133, lon: 101.75239771652, lat: 30.9670743425},
+  {id: 513324, name: "九龙县", parent: 5133, lon: 101.63507969271, lat: 28.917804185231},
+  {id: 513325, name: "雅江县", parent: 5133, lon: 100.96923972469, lat: 29.922924021131},
+  {id: 513326, name: "道孚县", parent: 5133, lon: 101.19484158408, lat: 30.870125609599},
+  {id: 513327, name: "炉霍县", parent: 5133, lon: 100.67587127372, lat: 31.492154542768},
+  {id: 513328, name: "甘孜县", parent: 5133, lon: 99.762676935333, lat: 32.029329338001},
+  {id: 513329, name: "新龙县", parent: 5133, lon: 100.28751803177, lat: 30.945762801068},
+  {id: 513330, name: "德格县", parent: 5133, lon: 98.967480948584, lat: 32.059408545008},
+  {id: 513331, name: "白玉县", parent: 5133, lon: 99.291922023716, lat: 31.052585679081},
+  {id: 513332, name: "石渠县", parent: 5133, lon: 98.204993247891, lat: 33.187627237402},
+  {id: 513333, name: "色达县", parent: 5133, lon: 100.21388463777, lat: 32.356620371592},
+  {id: 513334, name: "理塘县", parent: 5133, lon: 100.18511019101, lat: 29.895282575765},
+  {id: 513335, name: "巴塘县", parent: 5133, lon: 99.300290950528, lat: 29.916287662541},
+  {id: 513336, name: "乡城县", parent: 5133, lon: 99.738451912881, lat: 29.11737591967},
+  {id: 513337, name: "稻城县", parent: 5133, lon: 100.26589077053, lat: 28.766496640591},
+  {id: 513338, name: "得荣县", parent: 5133, lon: 99.324235091425, lat: 28.736358436486},
+  {id: 513401, name: "西昌市", parent: 5134, lon: 102.11788786038, lat: 27.86337739584},
+  {id: 513422, name: "木里藏族自治县", parent: 5134, lon: 100.95305714268, lat: 28.360344107012},
+  {id: 513423, name: "盐源县", parent: 5134, lon: 101.46762448738, lat: 27.603027908142},
+  {id: 513424, name: "德昌县", parent: 5134, lon: 102.19173440069, lat: 27.331194175431},
+  {id: 513425, name: "会理县", parent: 5134, lon: 102.2639270515, lat: 26.591300796186},
+  {id: 513426, name: "会东县", parent: 5134, lon: 102.74296743101, lat: 26.573608339176},
+  {id: 513427, name: "宁南县", parent: 5134, lon: 102.71663446894, lat: 27.091250349517},
+  {id: 513428, name: "普格县", parent: 5134, lon: 102.56809148368, lat: 27.54828572105},
+  {id: 513429, name: "布拖县", parent: 5134, lon: 102.88192797888, lat: 27.599974195145},
+  {id: 513430, name: "金阳县", parent: 5134, lon: 103.20105938361, lat: 27.706169003934},
+  {id: 513431, name: "昭觉县", parent: 5134, lon: 102.83281789781, lat: 28.013719135153},
+  {id: 513432, name: "喜德县", parent: 5134, lon: 102.44996824625, lat: 28.196488558773},
+  {id: 513433, name: "冕宁县", parent: 5134, lon: 102.06891407501, lat: 28.514858657537},
+  {id: 513434, name: "越西县", parent: 5134, lon: 102.6286813356, lat: 28.592190495109},
+  {id: 513435, name: "甘洛县", parent: 5134, lon: 102.76740070722, lat: 28.974853435967},
+  {id: 513436, name: "美姑县", parent: 5134, lon: 103.10172987962, lat: 28.443545061087},
+  {id: 513437, name: "雷波县", parent: 5134, lon: 103.5125046952, lat: 28.279340727749},
+  {id: 520102, name: "南明区", parent: 5201, lon: 106.72417349818, lat: 26.541413272278},
+  {id: 520103, name: "云岩区", parent: 5201, lon: 106.71791401556, lat: 26.6035246503},
+  {id: 520111, name: "花溪区", parent: 5201, lon: 106.66527322287, lat: 26.39791693477},
+  {id: 520112, name: "乌当区", parent: 5201, lon: 106.73344967037, lat: 26.688326312941},
+  {id: 520113, name: "白云区", parent: 5201, lon: 106.68674281438, lat: 26.71973739529},
+  {id: 520115, name: "观山湖区", parent: 5201, lon: 106.59533224014, lat: 26.650328732081},
+  {id: 520121, name: "开阳县", parent: 5201, lon: 107.04688065585, lat: 27.075427307857},
+  {id: 520122, name: "息烽县", parent: 5201, lon: 106.68198036543, lat: 27.150807565921},
+  {id: 520123, name: "修文县", parent: 5201, lon: 106.590592735, lat: 26.931538038107},
+  {id: 520181, name: "清镇市", parent: 5201, lon: 106.35381440326, lat: 26.688621110571},
+  {id: 520201, name: "钟山区", parent: 5202, lon: 104.76254690076, lat: 26.731157002932},
+  {id: 520203, name: "六枝特区", parent: 5202, lon: 105.3830336754, lat: 26.235865065306},
+  {id: 520221, name: "水城县", parent: 5202, lon: 104.93035685319, lat: 26.430546898236},
+  {id: 520222, name: "盘县", parent: 5202, lon: 104.66691307994, lat: 25.772838336514},
+  {id: 520302, name: "红花岗区", parent: 5203, lon: 106.92265113614, lat: 27.670445028837},
+  {id: 520303, name: "汇川区", parent: 5203, lon: 107.00310975556, lat: 27.887590184121},
+  {id: 520304, name: "播州区", parent: 5203, lon: 106.87453374646, lat: 27.634108765721},
+  {id: 520322, name: "桐梓县", parent: 5203, lon: 106.88633093203, lat: 28.414479762728},
+  {id: 520323, name: "绥阳县", parent: 5203, lon: 107.20354220552, lat: 28.146365347962},
+  {id: 520324, name: "正安县", parent: 5203, lon: 107.412773457, lat: 28.506639188144},
+  {id: 520325, name: "道真仡佬族苗族自治县", parent: 5203, lon: 107.61686480802, lat: 28.934154342524},
+  {id: 520326, name: "务川仡佬族苗族自治县", parent: 5203, lon: 107.91993460165, lat: 28.661403914202},
+  {id: 520327, name: "凤冈县", parent: 5203, lon: 107.77157370195, lat: 27.928826877455},
+  {id: 520328, name: "湄潭县", parent: 5203, lon: 107.49167985383, lat: 27.764873370783},
+  {id: 520329, name: "余庆县", parent: 5203, lon: 107.70936003115, lat: 27.394794444136},
+  {id: 520330, name: "习水县", parent: 5203, lon: 106.35892584857, lat: 28.357319781328},
+  {id: 520381, name: "赤水市", parent: 5203, lon: 105.92051307621, lat: 28.493333651299},
+  {id: 520382, name: "仁怀市", parent: 5203, lon: 106.34790800681, lat: 27.839203217967},
+  {id: 520402, name: "西秀区", parent: 5204, lon: 106.0600169739, lat: 26.197376772867},
+  {id: 520403, name: "平坝区", parent: 5204, lon: 106.28653433135, lat: 26.443751196397},
+  {id: 520422, name: "普定县", parent: 5204, lon: 105.74269311886, lat: 26.345747551067},
+  {id: 520423, name: "镇宁布依族苗族自治县", parent: 5204, lon: 105.83355264869, lat: 25.844353005861},
+  {id: 520424, name: "关岭布依族苗族自治县", parent: 5204, lon: 105.56872665252, lat: 25.862190437976},
+  {id: 520425, name: "紫云苗族布依族自治县", parent: 5204, lon: 106.18836244554, lat: 25.700614716072},
+  {id: 520502, name: "七星关区", parent: 5205, lon: 105.42355760084, lat: 27.464053316005},
+  {id: 520521, name: "大方县", parent: 5205, lon: 105.73720221998, lat: 27.253059626031},
+  {id: 520522, name: "黔西县", parent: 5205, lon: 106.14050275681, lat: 27.086384569459},
+  {id: 520523, name: "金沙县", parent: 5205, lon: 106.22685215924, lat: 27.471542677862},
+  {id: 520524, name: "织金县", parent: 5205, lon: 105.73204873021, lat: 26.615333373403},
+  {id: 520525, name: "纳雍县", parent: 5205, lon: 105.26868668571, lat: 26.795102083008},
+  {id: 520526, name: "威宁彝族回族苗族自治县", parent: 5205, lon: 104.22408619137, lat: 26.921382002531},
+  {id: 520527, name: "赫章县", parent: 5205, lon: 104.5980318783, lat: 27.15332246261},
+  {id: 520602, name: "碧江区", parent: 5206, lon: 109.19370501854, lat: 27.716136520691},
+  {id: 520603, name: "万山区", parent: 5206, lon: 109.11781910744, lat: 27.546566730898},
+  {id: 520621, name: "江口县", parent: 5206, lon: 109.16855802826, lat: 27.674902690624},
+  {id: 520622, name: "玉屏侗族自治县", parent: 5206, lon: 109.00175995258, lat: 27.337802674507},
+  {id: 520623, name: "石阡县", parent: 5206, lon: 108.14106368738, lat: 27.496152657798},
+  {id: 520624, name: "思南县", parent: 5206, lon: 108.19797894198, lat: 27.856658927235},
+  {id: 520625, name: "印江土家族苗族自治县", parent: 5206, lon: 108.52830153805, lat: 27.986045252865},
+  {id: 520626, name: "德江县", parent: 5206, lon: 108.06756938624, lat: 28.30284362728},
+  {id: 520627, name: "沿河土家族自治县", parent: 5206, lon: 108.33962765519, lat: 28.642296722444},
+  {id: 520628, name: "松桃苗族自治县", parent: 5206, lon: 109.16855802826, lat: 27.674902690624},
+  {id: 522301, name: "兴义市", parent: 5223, lon: 105.07190822677, lat: 25.236664590554},
+  {id: 522322, name: "兴仁县", parent: 5223, lon: 105.21234670506, lat: 25.436104684385},
+  {id: 522323, name: "普安县", parent: 5223, lon: 105.00016731249, lat: 25.72781408682},
+  {id: 522324, name: "晴隆县", parent: 5223, lon: 105.19013699964, lat: 25.697662011039},
+  {id: 522325, name: "贞丰县", parent: 5223, lon: 105.63574297484, lat: 25.438979713387},
+  {id: 522326, name: "望谟县", parent: 5223, lon: 106.13757227494, lat: 24.936694569809},
+  {id: 522327, name: "册亨县", parent: 5223, lon: 105.79746392761, lat: 24.940047609962},
+  {id: 522328, name: "安龙县", parent: 5223, lon: 105.34855137966, lat: 24.950885976914},
+  {id: 522601, name: "凯里市", parent: 5226, lon: 108.03104164859, lat: 26.670643028177},
+  {id: 522622, name: "黄平县", parent: 5226, lon: 108.08892037089, lat: 26.802372712542},
+  {id: 522623, name: "施秉县", parent: 5226, lon: 108.01532489539, lat: 27.147665744201},
+  {id: 522624, name: "三穗县", parent: 5226, lon: 108.76221698279, lat: 26.940229768581},
+  {id: 522625, name: "镇远县", parent: 5226, lon: 108.48422420195, lat: 26.912627316255},
+  {id: 522626, name: "岑巩县", parent: 5226, lon: 108.95781984971, lat: 27.440109779329},
+  {id: 522627, name: "天柱县", parent: 5226, lon: 109.47993207974, lat: 27.027180472033},
+  {id: 522628, name: "锦屏县", parent: 5226, lon: 109.15647562165, lat: 26.497609137737},
+  {id: 522629, name: "剑河县", parent: 5226, lon: 106.7349961033, lat: 26.902825927797},
+  {id: 522630, name: "台江县", parent: 5226, lon: 108.17122222338, lat: 26.676404735086},
+  {id: 522631, name: "黎平县", parent: 5226, lon: 109.33697304601, lat: 25.938276335425},
+  {id: 522632, name: "榕江县", parent: 5226, lon: 108.43782402746, lat: 26.250544367069},
+  {id: 522633, name: "从江县", parent: 5226, lon: 108.78396090306, lat: 25.758440923722},
+  {id: 522634, name: "雷山县", parent: 5226, lon: 108.09819178205, lat: 26.346498520621},
+  {id: 522635, name: "麻江县", parent: 5226, lon: 107.79954768993, lat: 26.512050397344},
+  {id: 522636, name: "丹寨县", parent: 5226, lon: 108.11538894273, lat: 26.126097716769},
+  {id: 522701, name: "都匀市", parent: 5227, lon: 106.7349961033, lat: 26.902825927797},
+  {id: 522702, name: "福泉市", parent: 5227, lon: 106.7349961033, lat: 26.902825927797},
+  {id: 522722, name: "荔波县", parent: 5227, lon: 107.79056706026, lat: 25.597752027123},
+  {id: 522723, name: "贵定县", parent: 5227, lon: 107.16183225437, lat: 26.262176502508},
+  {id: 522725, name: "瓮安县", parent: 5227, lon: 107.5629905221, lat: 27.189412906689},
+  {id: 522726, name: "独山县", parent: 5227, lon: 107.56375230978, lat: 25.636840589583},
+  {id: 522727, name: "平塘县", parent: 5227, lon: 107.37217138777, lat: 25.850446129607},
+  {id: 522728, name: "罗甸县", parent: 5227, lon: 106.7349961033, lat: 26.902825927797},
+  {id: 522729, name: "长顺县", parent: 5227, lon: 106.40419817264, lat: 26.000476134172},
+  {id: 522730, name: "龙里县", parent: 5227, lon: 107.00653768938, lat: 26.51764181381},
+  {id: 522731, name: "惠水县", parent: 5227, lon: 106.72222309186, lat: 25.98299665897},
+  {id: 522732, name: "三都水族自治县", parent: 5227, lon: 107.95650555321, lat: 25.852864250197},
+  {id: 530102, name: "五华区", parent: 5301, lon: 102.64937733166, lat: 25.261305956605},
+  {id: 530103, name: "盘龙区", parent: 5301, lon: 102.76755633841, lat: 25.274019484219},
+  {id: 530111, name: "官渡区", parent: 5301, lon: 102.82881924705, lat: 25.031310976713},
+  {id: 530112, name: "西山区", parent: 5301, lon: 102.60347769299, lat: 24.983630124462},
+  {id: 530113, name: "东川区", parent: 5301, lon: 103.07856150869, lat: 26.139328854726},
+  {id: 530114, name: "呈贡区", parent: 5301, lon: 102.88428310764, lat: 24.855409037478},
+  {id: 530122, name: "晋宁县", parent: 5301, lon: 102.5796139323, lat: 24.605041073447},
+  {id: 530124, name: "富民县", parent: 5301, lon: 102.58410264122, lat: 25.363439290284},
+  {id: 530125, name: "宜良县", parent: 5301, lon: 103.1928154872, lat: 24.944907933143},
+  {id: 530126, name: "石林彝族自治县", parent: 5301, lon: 103.42733563256, lat: 24.754309493364},
+  {id: 530127, name: "嵩明县", parent: 5301, lon: 103.00652503386, lat: 25.317900180495},
+  {id: 530128, name: "禄劝彝族苗族自治县", parent: 5301, lon: 102.59302748518, lat: 25.943771040548},
+  {id: 530129, name: "寻甸回族彝族自治县", parent: 5301, lon: 103.12781347645, lat: 25.666609835146},
+  {id: 530181, name: "安宁市", parent: 5301, lon: 102.39112679952, lat: 24.852355456268},
+  {id: 530302, name: "麒麟区", parent: 5303, lon: 103.91332638626, lat: 25.360057471573},
+  {id: 530303, name: "沾益区", parent: 5303, lon: 103.86810959342, lat: 25.79421035848},
+  {id: 530321, name: "马龙县", parent: 5303, lon: 103.51309543424, lat: 25.368839999918},
+  {id: 530322, name: "陆良县", parent: 5303, lon: 103.70738599876, lat: 25.037570538056},
+  {id: 530323, name: "师宗县", parent: 5303, lon: 104.12947917517, lat: 24.680198025566},
+  {id: 530324, name: "罗平县", parent: 5303, lon: 104.34927875646, lat: 24.983157127291},
+  {id: 530325, name: "富源县", parent: 5303, lon: 104.36745192446, lat: 25.467214378875},
+  {id: 530326, name: "会泽县", parent: 5303, lon: 103.46854362948, lat: 26.46221827304},
+  {id: 530381, name: "宣威市", parent: 5303, lon: 104.15257073219, lat: 26.276828622628},
+  {id: 530402, name: "红塔区", parent: 5304, lon: 102.49989459797, lat: 24.369853985289},
+  {id: 530403, name: "江川区", parent: 5304, lon: 102.75575323372, lat: 24.367487731796},
+  {id: 530422, name: "澄江县", parent: 5304, lon: 102.94685033975, lat: 24.678380080254},
+  {id: 530423, name: "通海县", parent: 5304, lon: 102.71141640598, lat: 24.117558495247},
+  {id: 530424, name: "华宁县", parent: 5304, lon: 102.99906774243, lat: 24.284812305871},
+  {id: 530425, name: "易门县", parent: 5304, lon: 102.12219715311, lat: 24.6964042729},
+  {id: 530426, name: "峨山彝族自治县", parent: 5304, lon: 102.21924987866, lat: 24.246114547538},
+  {id: 530427, name: "新平彝族傣族自治县", parent: 5304, lon: 101.73913066729, lat: 24.029740767019},
+  {id: 530428, name: "元江哈尼族彝族傣族自治县", parent: 5304, lon: 102.01115013144, lat: 23.605002999101},
+  {id: 530502, name: "隆阳区", parent: 5305, lon: 99.069046057861, lat: 25.205265354944},
+  {id: 530521, name: "施甸县", parent: 5305, lon: 99.157489563481, lat: 24.657220496518},
+  {id: 530523, name: "龙陵县", parent: 5305, lon: 98.842541709908, lat: 24.499046233076},
+  {id: 530524, name: "昌宁县", parent: 5305, lon: 99.591112178323, lat: 24.758162812306},
+  {id: 530581, name: "腾冲市", parent: 5305, lon: 98.43366397623, lat: 25.248177969272},
+  {id: 530602, name: "昭阳区", parent: 5306, lon: 103.60727718737, lat: 27.427583042152},
+  {id: 530621, name: "鲁甸县", parent: 5306, lon: 103.42585557677, lat: 27.205702890521},
+  {id: 530622, name: "巧家县", parent: 5306, lon: 103.13002031079, lat: 27.008327725094},
+  {id: 530623, name: "盐津县", parent: 5306, lon: 104.23053478313, lat: 28.130706512198},
+  {id: 530624, name: "大关县", parent: 5306, lon: 103.91217766939, lat: 27.905095827254},
+  {id: 530625, name: "永善县", parent: 5306, lon: 103.65282254144, lat: 27.953163331681},
+  {id: 530626, name: "绥江县", parent: 5306, lon: 104.01558782767, lat: 28.538865566801},
+  {id: 530627, name: "镇雄县", parent: 5306, lon: 104.83385203039, lat: 27.568915967438},
+  {id: 530628, name: "彝良县", parent: 5306, lon: 104.24144905945, lat: 27.630986376229},
+  {id: 530629, name: "威信县", parent: 5306, lon: 105.05028255746, lat: 27.891462851573},
+  {id: 530630, name: "水富县", parent: 5306, lon: 104.22883253661, lat: 28.510929836359},
+  {id: 530702, name: "古城区", parent: 5307, lon: 100.32859641682, lat: 26.859300417703},
+  {id: 530721, name: "玉龙纳西族自治县", parent: 5307, lon: 99.951633936724, lat: 27.104463367195},
+  {id: 530722, name: "永胜县", parent: 5307, lon: 100.70492052637, lat: 26.491706080711},
+  {id: 530723, name: "华坪县", parent: 5307, lon: 101.25172921237, lat: 26.645807144841},
+  {id: 530724, name: "宁蒗彝族自治县", parent: 5307, lon: 100.7783019296, lat: 27.265588579997},
+  {id: 530802, name: "思茅区", parent: 5308, lon: 100.85525310555, lat: 22.739133092283},
+  {id: 530821, name: "宁洱哈尼族彝族自治县", parent: 5308, lon: 101.19686023959, lat: 23.097350457989},
+  {id: 530822, name: "墨江哈尼族自治县", parent: 5308, lon: 101.55548645512, lat: 23.363251135433},
+  {id: 530823, name: "景东彝族自治县", parent: 5308, lon: 100.79520569746, lat: 24.39672894394},
+  {id: 530824, name: "景谷傣族彝族自治县", parent: 5308, lon: 100.56429126294, lat: 23.368117190796},
+  {id: 530825, name: "镇沅彝族哈尼族拉祜族自治县", parent: 5308, lon: 101.11331766944, lat: 24.011540716931},
+  {id: 530826, name: "江城哈尼族彝族自治县", parent: 5308, lon: 101.79692922563, lat: 22.625657650356},
+  {id: 530827, name: "孟连傣族拉祜族佤族自治县", parent: 5308, lon: 99.580342878181, lat: 22.334366217371},
+  {id: 530828, name: "澜沧拉祜族自治县", parent: 5308, lon: 99.98453733381, lat: 22.665993561569},
+  {id: 530829, name: "西盟佤族自治县", parent: 5308, lon: 99.522119995137, lat: 22.708423462771},
+  {id: 530902, name: "临翔区", parent: 5309, lon: 100.13990768016, lat: 23.849570452879},
+  {id: 530921, name: "凤庆县", parent: 5309, lon: 99.92091022745, lat: 24.610505511987},
+  {id: 530922, name: "云县", parent: 5309, lon: 100.23368014335, lat: 24.32740647676},
+  {id: 530923, name: "永德县", parent: 5309, lon: 99.427631734164, lat: 24.089579787148},
+  {id: 530924, name: "镇康县", parent: 5309, lon: 99.005735747996, lat: 23.901062771813},
+  {id: 530925, name: "双江拉祜族佤族布朗族傣族自治县", parent: 5309, lon: 99.840913908222, lat: 23.476856812064},
+  {id: 530926, name: "耿马傣族佤族自治县", parent: 5309, lon: 99.434265495794, lat: 23.641730399889},
+  {id: 530927, name: "沧源佤族自治县", parent: 5309, lon: 99.270497931724, lat: 23.274581274109},
+  {id: 532301, name: "楚雄市", parent: 5323, lon: 101.32863799918, lat: 24.880252472651},
+  {id: 532322, name: "双柏县", parent: 5323, lon: 101.64032208579, lat: 24.535545259465},
+  {id: 532323, name: "牟定县", parent: 5323, lon: 101.59675770511, lat: 25.407356738979},
+  {id: 532324, name: "南华县", parent: 5323, lon: 101.0380121979, lat: 25.103522672439},
+  {id: 532325, name: "姚安县", parent: 5323, lon: 101.2112377333, lat: 25.516954435787},
+  {id: 532326, name: "大姚县", parent: 5323, lon: 101.24291307892, lat: 25.947669905565},
+  {id: 532327, name: "永仁县", parent: 5323, lon: 101.56019002604, lat: 26.143679315458},
+  {id: 532328, name: "元谋县", parent: 5323, lon: 101.87051082301, lat: 25.783195511954},
+  {id: 532329, name: "武定县", parent: 5323, lon: 102.20117587964, lat: 25.731109547237},
+  {id: 532331, name: "禄丰县", parent: 5323, lon: 102.02612983069, lat: 25.185818987516},
+  {id: 532501, name: "个旧市", parent: 5325, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 532502, name: "开远市", parent: 5325, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 532503, name: "蒙自市", parent: 5325, lon: 103.51669152583, lat: 23.338656934664},
+  {id: 532504, name: "弥勒市", parent: 5325, lon: 103.445318018, lat: 24.251508766722},
+  {id: 532523, name: "屏边苗族自治县", parent: 5325, lon: 103.89743584577, lat: 23.21267768326},
+  {id: 532524, name: "建水县", parent: 5325, lon: 102.79065788154, lat: 23.987913437671},
+  {id: 532525, name: "石屏县", parent: 5325, lon: 102.40773898854, lat: 23.789535774797},
+  {id: 532527, name: "泸西县", parent: 5325, lon: 103.75100845447, lat: 24.539744740964},
+  {id: 532528, name: "元阳县", parent: 5325, lon: 102.73114873474, lat: 23.141055739179},
+  {id: 532529, name: "红河县", parent: 5325, lon: 102.51563446331, lat: 23.211095049214},
+  {id: 532530, name: "金平苗族瑶族傣族自治县", parent: 5325, lon: 103.25176348949, lat: 22.996373389905},
+  {id: 532531, name: "绿春县", parent: 5325, lon: 102.35379214946, lat: 23.091544011399},
+  {id: 532532, name: "河口瑶族自治县", parent: 5325, lon: 103.67125958623, lat: 22.862620371198},
+  {id: 532601, name: "文山市", parent: 5326, lon: 104.03093981246, lat: 23.416009535072},
+  {id: 532622, name: "砚山县", parent: 5326, lon: 104.5218246496, lat: 23.89947126948},
+  {id: 532623, name: "西畴县", parent: 5326, lon: 104.8239553349, lat: 23.49211237168},
+  {id: 532624, name: "麻栗坡县", parent: 5326, lon: 105.06044414168, lat: 23.433721461415},
+  {id: 532625, name: "马关县", parent: 5326, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 532626, name: "丘北县", parent: 5326, lon: 104.34003905514, lat: 24.08610830304},
+  {id: 532627, name: "广南县", parent: 5326, lon: 104.83870730798, lat: 24.222835784674},
+  {id: 532628, name: "富宁县", parent: 5326, lon: 105.60430973793, lat: 23.396160831269},
+  {id: 532801, name: "景洪市", parent: 5328, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 532822, name: "勐海县", parent: 5328, lon: 100.33738150932, lat: 21.960731038528},
+  {id: 532823, name: "勐腊县", parent: 5328, lon: 101.46195902318, lat: 21.736659717735},
+  {id: 532901, name: "大理市", parent: 5329, lon: 100.15242712507, lat: 25.57616489493},
+  {id: 532922, name: "漾濞彝族自治县", parent: 5329, lon: 99.898375043674, lat: 25.605571782134},
+  {id: 532923, name: "祥云县", parent: 5329, lon: 100.57035927192, lat: 25.501610700196},
+  {id: 532924, name: "宾川县", parent: 5329, lon: 100.62753770311, lat: 25.875307433534},
+  {id: 532925, name: "弥渡县", parent: 5329, lon: 100.58186613328, lat: 25.1911077724},
+  {id: 532926, name: "南涧彝族自治县", parent: 5329, lon: 100.42490043802, lat: 24.903013805535},
+  {id: 532927, name: "巍山彝族回族自治县", parent: 5329, lon: 100.26759078972, lat: 25.343492434694},
+  {id: 532928, name: "永平县", parent: 5329, lon: 99.600792211043, lat: 25.374646522171},
+  {id: 532929, name: "云龙县", parent: 5329, lon: 99.310077976062, lat: 25.894118475707},
+  {id: 532930, name: "洱源县", parent: 5329, lon: 100.03831537618, lat: 26.294924841349},
+  {id: 532931, name: "剑川县", parent: 5329, lon: 99.750307802477, lat: 26.439596125001},
+  {id: 532932, name: "鹤庆县", parent: 5329, lon: 100.27717450154, lat: 26.3354536106},
+  {id: 533102, name: "瑞丽市", parent: 5331, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 533103, name: "芒市", parent: 5331, lon: 98.589434287407, lat: 24.441239663008},
+  {id: 533122, name: "梁河县", parent: 5331, lon: 98.322123152856, lat: 24.743716502863},
+  {id: 533123, name: "盈江县", parent: 5331, lon: 97.950762066645, lat: 24.706749398739},
+  {id: 533124, name: "陇川县", parent: 5331, lon: 97.965384779773, lat: 24.381370607265},
+  {id: 533301, name: "泸水市", parent: 5333, lon: 98.86274058298, lat: 26.042265332796},
+  {id: 533323, name: "福贡县", parent: 5333, lon: 98.86865857308, lat: 26.996507466856},
+  {id: 533324, name: "贡山独龙族怒族自治县", parent: 5333, lon: 101.59295163701, lat: 24.864212795483},
+  {id: 533325, name: "兰坪白族普米族自治县", parent: 5333, lon: 99.117417482927, lat: 26.443506114149},
+  {id: 533401, name: "香格里拉市", parent: 5334, lon: 99.85507644287, lat: 27.866680825387},
+  {id: 533422, name: "德钦县", parent: 5334, lon: 99.037553971725, lat: 28.351417174855},
+  {id: 533423, name: "维西傈僳族自治县", parent: 5334, lon: 99.152722827441, lat: 27.45295793965},
+  {id: 540102, name: "城关区", parent: 5401, lon: 91.168729990815, lat: 29.666400338845},
+  {id: 540103, name: "堆龙德庆区", parent: 5401, lon: 90.8294509947, lat: 29.796237760398},
+  {id: 540121, name: "林周县", parent: 5401, lon: 91.347042959548, lat: 30.116477915324},
+  {id: 540122, name: "当雄县", parent: 5401, lon: 90.894814857309, lat: 30.424299479353},
+  {id: 540123, name: "尼木县", parent: 5401, lon: 90.095471065982, lat: 29.603193843519},
+  {id: 540124, name: "曲水县", parent: 5401, lon: 90.714553495792, lat: 29.445004244787},
+  {id: 540126, name: "达孜县", parent: 5401, lon: 91.473900848722, lat: 29.747665564603},
+  {id: 540127, name: "墨竹工卡县", parent: 5401, lon: 92.031891526243, lat: 29.916717538581},
+  {id: 540202, name: "桑珠孜区", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540221, name: "南木林县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540222, name: "江孜县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540223, name: "定日县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540224, name: "萨迦县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540225, name: "拉孜县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540226, name: "昂仁县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540227, name: "谢通门县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540228, name: "白朗县", parent: 5402, lon: 89.113585077496, lat: 28.795794414747},
+  {id: 540229, name: "仁布县", parent: 5402, lon: 90.003352252057, lat: 29.247386928273},
+  {id: 540230, name: "康马县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540231, name: "定结县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540232, name: "仲巴县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540233, name: "亚东县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540234, name: "吉隆县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540235, name: "聂拉木县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540236, name: "萨嘎县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540237, name: "岗巴县", parent: 5402, lon: 88.956062773518, lat: 29.268160032655},
+  {id: 540302, name: "卡若区", parent: 5403, lon: 97.334535331605, lat: 31.529862428285},
+  {id: 540321, name: "江达县", parent: 5403, lon: 98.118022293299, lat: 31.780569180094},
+  {id: 540322, name: "贡觉县", parent: 5403, lon: 98.426429044036, lat: 30.736504388643},
+  {id: 540323, name: "类乌齐县", parent: 5403, lon: 96.391967073454, lat: 31.449065979774},
+  {id: 540324, name: "丁青县", parent: 5403, lon: 95.522471824657, lat: 31.685241377535},
+  {id: 540325, name: "察雅县", parent: 5403, lon: 97.836858866086, lat: 30.618372794064},
+  {id: 540326, name: "八宿县", parent: 5403, lon: 96.879160712332, lat: 30.074689806895},
+  {id: 540327, name: "左贡县", parent: 5403, lon: 97.887595370154, lat: 29.444978973304},
+  {id: 540328, name: "芒康县", parent: 5403, lon: 98.554769564416, lat: 29.51433481024},
+  {id: 540329, name: "洛隆县", parent: 5403, lon: 95.916491128377, lat: 30.698457783096},
+  {id: 540330, name: "边坝县", parent: 5403, lon: 94.483413447372, lat: 30.96906728495},
+  {id: 540402, name: "巴宜区", parent: 5404, lon: 94.375930017941, lat: 29.813114097649},
+  {id: 540421, name: "工布江达县", parent: 5404, lon: 93.262111473599, lat: 30.032418475925},
+  {id: 540422, name: "米林县", parent: 5404, lon: 94.174542402829, lat: 29.25246445514},
+  {id: 540423, name: "墨脱县", parent: 5404, lon: 94.931464872257, lat: 28.754711260372},
+  {id: 540424, name: "波密县", parent: 5404, lon: 95.345896846749, lat: 30.019416163945},
+  {id: 540425, name: "察隅县", parent: 5404, lon: 97.229506149139, lat: 28.653566547177},
+  {id: 540426, name: "朗县", parent: 5404, lon: 93.126863813454, lat: 29.087717194008},
+  {id: 540502, name: "乃东区", parent: 5405, lon: 91.797519071958, lat: 29.167743326287},
+  {id: 540521, name: "扎囊县", parent: 5405, lon: 91.407298324182, lat: 29.266820605393},
+  {id: 540522, name: "贡嘎县", parent: 5405, lon: 90.860869080783, lat: 29.240130838536},
+  {id: 540523, name: "桑日县", parent: 5405, lon: 92.231280965366, lat: 29.42065032555},
+  {id: 540524, name: "琼结县", parent: 5405, lon: 91.584038524668, lat: 29.013065914396},
+  {id: 540525, name: "曲松县", parent: 5405, lon: 92.237345606421, lat: 28.954175694618},
+  {id: 540526, name: "措美县", parent: 5405, lon: 91.551753322243, lat: 28.585924343435},
+  {id: 540527, name: "洛扎县", parent: 5405, lon: 90.897039902791, lat: 28.210518915815},
+  {id: 540528, name: "加查县", parent: 5405, lon: 92.727658842783, lat: 29.275255680226},
+  {id: 540529, name: "隆子县", parent: 5405, lon: 93.019223010095, lat: 28.486722025563},
+  {id: 540530, name: "错那县", parent: 5405, lon: 92.888732384978, lat: 27.66585127009},
+  {id: 540531, name: "浪卡子县", parent: 5405, lon: 90.702914725708, lat: 28.732790957089},
+  {id: 542421, name: "那曲县", parent: 5424, lon: 92.034626453644, lat: 31.252314725152},
+  {id: 542422, name: "嘉黎县", parent: 5424, lon: 92.961316438644, lat: 30.668911708265},
+  {id: 542423, name: "比如县", parent: 5424, lon: 93.493424136652, lat: 31.44713553851},
+  {id: 542424, name: "聂荣县", parent: 5424, lon: 92.642153446415, lat: 32.249649761022},
+  {id: 542425, name: "安多县", parent: 5424, lon: 90.569314254249, lat: 33.321681895077},
+  {id: 542426, name: "申扎县", parent: 5424, lon: 88.735362127732, lat: 31.035234259381},
+  {id: 542427, name: "索县", parent: 5424, lon: 94.312549818243, lat: 31.592787589013},
+  {id: 542428, name: "班戈县", parent: 5424, lon: 90.12340113956, lat: 31.2181120282},
+  {id: 542429, name: "巴青县", parent: 5424, lon: 94.018948797784, lat: 32.198838522007},
+  {id: 542430, name: "尼玛县", parent: 5424, lon: 87.654846646508, lat: 33.536965980784},
+  {id: 542431, name: "双湖县", parent: 5424, lon: 88.221417061569, lat: 34.102579150651},
+  {id: 542521, name: "普兰县", parent: 5425, lon: 81.530582849369, lat: 30.637119738777},
+  {id: 542522, name: "札达县", parent: 5425, lon: 79.552757074516, lat: 31.553648618356},
+  {id: 542523, name: "噶尔县", parent: 5425, lon: 80.315974443536, lat: 32.005501431945},
+  {id: 542524, name: "日土县", parent: 5425, lon: 80.719742169545, lat: 33.984683055318},
+  {id: 542525, name: "革吉县", parent: 5425, lon: 82.03379760961, lat: 32.057883395434},
+  {id: 542526, name: "改则县", parent: 5425, lon: 84.285002167349, lat: 33.841204623772},
+  {id: 542527, name: "措勤县", parent: 5425, lon: 85.210285811396, lat: 30.749850801541},
+  {id: 610102, name: "新城区", parent: 6101, lon: 108.99153865841, lat: 34.271473780191},
+  {id: 610103, name: "碑林区", parent: 6101, lon: 108.96625890407, lat: 34.255484557671},
+  {id: 610104, name: "莲湖区", parent: 6101, lon: 108.91554659362, lat: 34.273192373169},
+  {id: 610111, name: "灞桥区", parent: 6101, lon: 109.10875495118, lat: 34.303915149746},
+  {id: 610112, name: "未央区", parent: 6101, lon: 108.92646199371, lat: 34.331331489423},
+  {id: 610113, name: "雁塔区", parent: 6101, lon: 108.93879042836, lat: 34.221414918471},
+  {id: 610114, name: "阎良区", parent: 6101, lon: 109.31341715315, lat: 34.686373084486},
+  {id: 610115, name: "临潼区", parent: 6101, lon: 109.3104528348, lat: 34.456277329548},
+  {id: 610116, name: "长安区", parent: 6101, lon: 108.87425634018, lat: 34.066898727937},
+  {id: 610117, name: "高陵区", parent: 6101, lon: 109.07152291236, lat: 34.513346424398},
+  {id: 610122, name: "蓝田县", parent: 6101, lon: 109.42339003093, lat: 34.100786931955},
+  {id: 610124, name: "周至县", parent: 6101, lon: 108.11354147874, lat: 33.953602363476},
+  {id: 610125, name: "户县", parent: 6101, lon: 108.59248134192, lat: 34.00383365133},
+  {id: 610202, name: "王益区", parent: 6102, lon: 109.06850448637, lat: 35.070041017281},
+  {id: 610203, name: "印台区", parent: 6102, lon: 109.18538598068, lat: 35.160933883455},
+  {id: 610204, name: "耀州区", parent: 6102, lon: 108.8354996676, lat: 35.032000358937},
+  {id: 610222, name: "宜君县", parent: 6102, lon: 109.20440179145, lat: 35.383901876425},
+  {id: 610302, name: "渭滨区", parent: 6103, lon: 107.10824439064, lat: 34.311027035867},
+  {id: 610303, name: "金台区", parent: 6103, lon: 107.11761362728, lat: 34.40317453128},
+  {id: 610304, name: "陈仓区", parent: 6103, lon: 106.92358089475, lat: 34.482540082479},
+  {id: 610322, name: "凤翔县", parent: 6103, lon: 107.43678881989, lat: 34.577025723794},
+  {id: 610323, name: "岐山县", parent: 6103, lon: 107.68898501373, lat: 34.410705264779},
+  {id: 610324, name: "扶风县", parent: 6103, lon: 107.92510162193, lat: 34.41197448025},
+  {id: 610326, name: "眉县", parent: 6103, lon: 107.83384402175, lat: 34.150539928532},
+  {id: 610327, name: "陇县", parent: 6103, lon: 106.7730643229, lat: 34.876941335239},
+  {id: 610328, name: "千阳县", parent: 6103, lon: 107.17797400373, lat: 34.766951491427},
+  {id: 610329, name: "麟游县", parent: 6103, lon: 107.71077450759, lat: 34.785692691421},
+  {id: 610330, name: "凤县", parent: 6103, lon: 106.76610395886, lat: 33.993251781372},
+  {id: 610331, name: "太白县", parent: 6103, lon: 107.4168652793, lat: 33.94297244023},
+  {id: 610402, name: "秦都区", parent: 6104, lon: 108.68341537696, lat: 34.354285427987},
+  {id: 610403, name: "杨陵区", parent: 6104, lon: 108.05873803758, lat: 34.290198720106},
+  {id: 610404, name: "渭城区", parent: 6104, lon: 108.81731239458, lat: 34.423852572977},
+  {id: 610422, name: "三原县", parent: 6104, lon: 108.98069993821, lat: 34.703211629709},
+  {id: 610423, name: "泾阳县", parent: 6104, lon: 108.78075311312, lat: 34.608867001852},
+  {id: 610424, name: "乾县", parent: 6104, lon: 108.22948289516, lat: 34.527672579796},
+  {id: 610425, name: "礼泉县", parent: 6104, lon: 108.48256879405, lat: 34.597853791406},
+  {id: 610426, name: "永寿县", parent: 6104, lon: 108.13671381859, lat: 34.777655607134},
+  {id: 610427, name: "彬县", parent: 6104, lon: 108.06798630717, lat: 35.051834974906},
+  {id: 610428, name: "长武县", parent: 6104, lon: 107.83479969951, lat: 35.170581688184},
+  {id: 610429, name: "旬邑县", parent: 6104, lon: 108.49412543869, lat: 35.216832056498},
+  {id: 610430, name: "淳化县", parent: 6104, lon: 108.57021884883, lat: 34.869115751197},
+  {id: 610431, name: "武功县", parent: 6104, lon: 108.19099325441, lat: 34.316553316648},
+  {id: 610481, name: "兴平市", parent: 6104, lon: 108.47576040598, lat: 34.307609399651},
+  {id: 610502, name: "临渭区", parent: 6105, lon: 109.56474625615, lat: 34.553520116268},
+  {id: 610503, name: "华州区", parent: 6105, lon: 109.82852431434, lat: 34.420454032973},
+  {id: 610522, name: "潼关县", parent: 6105, lon: 110.29554551613, lat: 34.507137056057},
+  {id: 610523, name: "大荔县", parent: 6105, lon: 110.01194954265, lat: 34.796840374649},
+  {id: 610524, name: "合阳县", parent: 6105, lon: 110.19110357566, lat: 35.208388187296},
+  {id: 610525, name: "澄城县", parent: 6105, lon: 109.90160517601, lat: 35.222564490705},
+  {id: 610526, name: "蒲城县", parent: 6105, lon: 109.62824611949, lat: 34.967696650545},
+  {id: 610527, name: "白水县", parent: 6105, lon: 109.5701661435, lat: 35.271645917395},
+  {id: 610528, name: "富平县", parent: 6105, lon: 109.23593971498, lat: 34.879423511794},
+  {id: 610581, name: "韩城市", parent: 6105, lon: 110.39377368099, lat: 35.582782138309},
+  {id: 610582, name: "华阴市", parent: 6105, lon: 110.05818818766, lat: 34.532717876993},
+  {id: 610602, name: "宝塔区", parent: 6106, lon: 109.64860224516, lat: 36.575992490922},
+  {id: 610603, name: "安塞区", parent: 6106, lon: 109.15556502968, lat: 36.926615808304},
+  {id: 610621, name: "延长县", parent: 6106, lon: 110.13820395785, lat: 36.543668537707},
+  {id: 610622, name: "延川县", parent: 6106, lon: 110.08409714122, lat: 36.88242672637},
+  {id: 610623, name: "子长县", parent: 6106, lon: 109.62229012795, lat: 37.231001638593},
+  {id: 610625, name: "志丹县", parent: 6106, lon: 108.66244666802, lat: 36.753503067474},
+  {id: 610626, name: "吴起县", parent: 6106, lon: 108.12948505986, lat: 36.985223505156},
+  {id: 610627, name: "甘泉县", parent: 6106, lon: 109.18223909796, lat: 36.353544169394},
+  {id: 610628, name: "富县", parent: 6106, lon: 109.04960350294, lat: 36.017427088571},
+  {id: 610629, name: "洛川县", parent: 6106, lon: 109.56098175038, lat: 35.744158257757},
+  {id: 610630, name: "宜川县", parent: 6106, lon: 110.19112656349, lat: 36.071139382475},
+  {id: 610631, name: "黄龙县", parent: 6106, lon: 109.94510069451, lat: 35.702635706301},
+  {id: 610632, name: "黄陵县", parent: 6106, lon: 108.95305831904, lat: 35.62841424749},
+  {id: 610702, name: "汉台区", parent: 6107, lon: 107.04616716185, lat: 33.187204162513},
+  {id: 610721, name: "南郑县", parent: 6107, lon: 106.96974070111, lat: 32.812036143125},
+  {id: 610722, name: "城固县", parent: 6107, lon: 107.26083703889, lat: 33.223582827388},
+  {id: 610723, name: "洋县", parent: 6107, lon: 107.61609308741, lat: 33.371586660725},
+  {id: 610724, name: "西乡县", parent: 6107, lon: 107.75371241439, lat: 32.894902801657},
+  {id: 610725, name: "勉县", parent: 6107, lon: 106.66457828015, lat: 33.243885511916},
+  {id: 610726, name: "宁强县", parent: 6107, lon: 106.14087102725, lat: 32.914183257269},
+  {id: 610727, name: "略阳县", parent: 6107, lon: 106.16283351204, lat: 33.385373533804},
+  {id: 610728, name: "镇巴县", parent: 6107, lon: 107.88277388136, lat: 32.517415574628},
+  {id: 610729, name: "留坝县", parent: 6107, lon: 106.95962831346, lat: 33.612960467486},
+  {id: 610730, name: "佛坪县", parent: 6107, lon: 107.92883622761, lat: 33.549939112272},
+  {id: 610802, name: "榆阳区", parent: 6108, lon: 109.64269245717, lat: 38.386406641165},
+  {id: 610803, name: "横山区", parent: 6108, lon: 109.50067321533, lat: 37.80809785663},
+  {id: 610821, name: "神木县", parent: 6108, lon: 110.33126976909, lat: 38.829035865956},
+  {id: 610822, name: "府谷县", parent: 6108, lon: 110.86693418362, lat: 39.187272466272},
+  {id: 610824, name: "靖边县", parent: 6108, lon: 108.81325925462, lat: 37.484215805492},
+  {id: 610825, name: "定边县", parent: 6108, lon: 107.7542930803, lat: 37.388791134452},
+  {id: 610826, name: "绥德县", parent: 6108, lon: 110.39614377168, lat: 37.520861333414},
+  {id: 610827, name: "米脂县", parent: 6108, lon: 110.18690099232, lat: 37.8285293893},
+  {id: 610828, name: "佳县", parent: 6108, lon: 110.37373997088, lat: 38.078380449363},
+  {id: 610829, name: "吴堡县", parent: 6108, lon: 110.69187682122, lat: 37.594879166095},
+  {id: 610830, name: "清涧县", parent: 6108, lon: 110.28929412737, lat: 37.187443767355},
+  {id: 610831, name: "子洲县", parent: 6108, lon: 109.8772926757, lat: 37.533672486299},
+  {id: 610902, name: "汉滨区", parent: 6109, lon: 108.89624328129, lat: 32.814464034575},
+  {id: 610921, name: "汉阴县", parent: 6109, lon: 108.49695491326, lat: 32.902520654164},
+  {id: 610922, name: "石泉县", parent: 6109, lon: 108.25051841167, lat: 33.065316023116},
+  {id: 610923, name: "宁陕县", parent: 6109, lon: 108.45179634269, lat: 33.536923574813},
+  {id: 610924, name: "紫阳县", parent: 6109, lon: 108.44482568913, lat: 32.448942187958},
+  {id: 610925, name: "岚皋县", parent: 6109, lon: 108.88718069832, lat: 32.242470474479},
+  {id: 610926, name: "平利县", parent: 6109, lon: 109.2703969757, lat: 32.291256567392},
+  {id: 610927, name: "镇坪县", parent: 6109, lon: 109.45671118087, lat: 31.939261564672},
+  {id: 610928, name: "旬阳县", parent: 6109, lon: 109.42357994353, lat: 32.902076990198},
+  {id: 610929, name: "白河县", parent: 6109, lon: 109.91837503137, lat: 32.729864671398},
+  {id: 611002, name: "商州区", parent: 6110, lon: 109.87327053686, lat: 33.895484903711},
+  {id: 611021, name: "洛南县", parent: 6110, lon: 110.27264280953, lat: 34.16568436231},
+  {id: 611022, name: "丹凤县", parent: 6110, lon: 110.44379951579, lat: 33.684553642613},
+  {id: 611023, name: "商南县", parent: 6110, lon: 110.76653283748, lat: 33.411702755168},
+  {id: 611024, name: "山阳县", parent: 6110, lon: 109.98131923576, lat: 33.427684397681},
+  {id: 611025, name: "镇安县", parent: 6110, lon: 109.07737051732, lat: 33.380938764863},
+  {id: 611026, name: "柞水县", parent: 6110, lon: 109.28054880136, lat: 33.695399655075},
+  {id: 620102, name: "城关区", parent: 6201, lon: 103.85157116258, lat: 36.054008131567},
+  {id: 620103, name: "七里河区", parent: 6201, lon: 103.77199449949, lat: 35.992495346876},
+  {id: 620104, name: "西固区", parent: 6201, lon: 103.56267979363, lat: 36.106471763711},
+  {id: 620105, name: "安宁区", parent: 6201, lon: 103.7191558999, lat: 36.11552303805},
+  {id: 620111, name: "红古区", parent: 6201, lon: 103.06027548801, lat: 36.303488391492},
+  {id: 620121, name: "永登县", parent: 6201, lon: 103.25279353462, lat: 36.616923609035},
+  {id: 620122, name: "皋兰县", parent: 6201, lon: 103.89046691011, lat: 36.394687882673},
+  {id: 620123, name: "榆中县", parent: 6201, lon: 104.244289521, lat: 35.999785042711},
+  {id: 620201, name: "嘉峪关市", parent: 62, lon: 98.281634585257, lat: 39.802397326734},
+  {id: 620302, name: "金川区", parent: 6203, lon: 102.32867993808, lat: 38.492171668259},
+  {id: 620321, name: "永昌县", parent: 6203, lon: 102.03431627622, lat: 38.433409665467},
+  {id: 620402, name: "白银区", parent: 6204, lon: 104.2056493285, lat: 36.50182182871},
+  {id: 620403, name: "平川区", parent: 6204, lon: 104.94560896536, lat: 36.690350490926},
+  {id: 620421, name: "靖远县", parent: 6204, lon: 104.73232686762, lat: 36.749103432427},
+  {id: 620422, name: "会宁县", parent: 6204, lon: 105.10186095322, lat: 35.963481743844},
+  {id: 620423, name: "景泰县", parent: 6204, lon: 104.06166772084, lat: 37.14607896393},
+  {id: 620502, name: "秦州区", parent: 6205, lon: 105.58117092709, lat: 34.344448280622},
+  {id: 620503, name: "麦积区", parent: 6205, lon: 106.05204030761, lat: 34.520218471455},
+  {id: 620521, name: "清水县", parent: 6205, lon: 106.14008000664, lat: 34.74252730496},
+  {id: 620522, name: "秦安县", parent: 6205, lon: 105.69804091114, lat: 34.953499919918},
+  {id: 620523, name: "甘谷县", parent: 6205, lon: 105.27453175252, lat: 34.809420550799},
+  {id: 620524, name: "武山县", parent: 6205, lon: 104.88672977677, lat: 34.680181826047},
+  {id: 620525, name: "张家川回族自治县", parent: 6205, lon: 106.28213682392, lat: 34.995955449082},
+  {id: 620602, name: "凉州区", parent: 6206, lon: 102.75947740159, lat: 37.916272406996},
+  {id: 620621, name: "民勤县", parent: 6206, lon: 103.20247261178, lat: 38.827727985281},
+  {id: 620622, name: "古浪县", parent: 6206, lon: 103.34292346491, lat: 37.531271711364},
+  {id: 620623, name: "天祝藏族自治县", parent: 6206, lon: 102.76116389471, lat: 37.280912201076},
+  {id: 620702, name: "甘州区", parent: 6207, lon: 100.52207864992, lat: 39.010620607403},
+  {id: 620721, name: "肃南裕固族自治县", parent: 6207, lon: 99.32677151937, lat: 38.92057106606},
+  {id: 620722, name: "民乐县", parent: 6207, lon: 100.7984292987, lat: 38.473163420728},
+  {id: 620723, name: "临泽县", parent: 6207, lon: 100.19122429388, lat: 39.347031674446},
+  {id: 620724, name: "高台县", parent: 6207, lon: 99.607521373805, lat: 39.54167477275},
+  {id: 620725, name: "山丹县", parent: 6207, lon: 101.23164701727, lat: 38.530221367211},
+  {id: 620802, name: "崆峒区", parent: 6208, lon: 106.74888681637, lat: 35.515774315921},
+  {id: 620821, name: "泾川县", parent: 6208, lon: 107.44140503868, lat: 35.354114511504},
+  {id: 620822, name: "灵台县", parent: 6208, lon: 107.40960562376, lat: 35.074478179591},
+  {id: 620823, name: "崇信县", parent: 6208, lon: 107.0037763949, lat: 35.249102891785},
+  {id: 620824, name: "华亭县", parent: 6208, lon: 106.60867034279, lat: 35.205549578778},
+  {id: 620825, name: "庄浪县", parent: 6208, lon: 106.06568568013, lat: 35.255968489859},
+  {id: 620826, name: "静宁县", parent: 6208, lon: 105.67756247251, lat: 35.434011745999},
+  {id: 620902, name: "肃州区", parent: 6209, lon: 98.802616462619, lat: 39.598374259485},
+  {id: 620921, name: "金塔县", parent: 6209, lon: 99.186587021952, lat: 40.382579195507},
+  {id: 620922, name: "瓜州县", parent: 6209, lon: 95.804712825239, lat: 40.734286870761},
+  {id: 620923, name: "肃北蒙古族自治县", parent: 6209, lon: 96.532550627515, lat: 40.67651966541},
+  {id: 620924, name: "阿克塞哈萨克族自治县", parent: 6209, lon: 94.452300569161, lat: 39.025889605786},
+  {id: 620981, name: "玉门市", parent: 6209, lon: 97.461208851694, lat: 40.225551802072},
+  {id: 620982, name: "敦煌市", parent: 6209, lon: 94.158041766451, lat: 40.388771499344},
+  {id: 621002, name: "西峰区", parent: 6210, lon: 107.67367365978, lat: 35.677201418546},
+  {id: 621021, name: "庆城县", parent: 6210, lon: 107.68254775923, lat: 36.046137555053},
+  {id: 621022, name: "环县", parent: 6210, lon: 107.07217218514, lat: 36.616788638949},
+  {id: 621023, name: "华池县", parent: 6210, lon: 108.03431226296, lat: 36.444471972715},
+  {id: 621024, name: "合水县", parent: 6210, lon: 108.31734058051, lat: 36.014259860237},
+  {id: 621025, name: "正宁县", parent: 6210, lon: 108.37808719083, lat: 35.414731657592},
+  {id: 621026, name: "宁县", parent: 6210, lon: 108.11417335803, lat: 35.571366266826},
+  {id: 621027, name: "镇原县", parent: 6210, lon: 107.17722652653, lat: 35.787953892327},
+  {id: 621102, name: "安定区", parent: 6211, lon: 104.63762366893, lat: 35.644415174266},
+  {id: 621121, name: "通渭县", parent: 6211, lon: 105.19397766216, lat: 35.213473762851},
+  {id: 621122, name: "陇西县", parent: 6211, lon: 104.63291319296, lat: 35.111801691091},
+  {id: 621123, name: "渭源县", parent: 6211, lon: 104.14632784195, lat: 35.139480681839},
+  {id: 621124, name: "临洮县", parent: 6211, lon: 103.91201515484, lat: 35.531078701642},
+  {id: 621125, name: "漳县", parent: 6211, lon: 104.36540253683, lat: 34.726750534701},
+  {id: 621126, name: "岷县", parent: 6211, lon: 104.24672610097, lat: 34.429644403444},
+  {id: 621202, name: "武都区", parent: 6212, lon: 105.13455295643, lat: 33.293917195649},
+  {id: 621221, name: "成县", parent: 6212, lon: 105.68828896242, lat: 33.747296636905},
+  {id: 621222, name: "文县", parent: 6212, lon: 104.78420570271, lat: 32.947265418467},
+  {id: 621223, name: "宕昌县", parent: 6212, lon: 104.45282709018, lat: 34.013488842529},
+  {id: 621224, name: "康县", parent: 6212, lon: 105.63797390347, lat: 33.284990408681},
+  {id: 621225, name: "西和县", parent: 6212, lon: 105.33853139264, lat: 33.919624520579},
+  {id: 621226, name: "礼县", parent: 6212, lon: 105.06409130212, lat: 34.111636708139},
+  {id: 621227, name: "徽县", parent: 6212, lon: 106.03331703965, lat: 33.892851204433},
+  {id: 621228, name: "两当县", parent: 6212, lon: 106.40388517582, lat: 33.911378923592},
+  {id: 622901, name: "临夏市", parent: 6229, lon: 103.2005757611, lat: 35.585834814564},
+  {id: 622921, name: "临夏县", parent: 6229, lon: 103.05079063073, lat: 35.51871940176},
+  {id: 622922, name: "康乐县", parent: 6229, lon: 103.62902014045, lat: 35.258018266344},
+  {id: 622923, name: "永靖县", parent: 6229, lon: 103.22504409432, lat: 36.007874959311},
+  {id: 622924, name: "广河县", parent: 6229, lon: 103.63113999251, lat: 35.478027097747},
+  {id: 622925, name: "和政县", parent: 6229, lon: 103.29856767173, lat: 35.345732331975},
+  {id: 622926, name: "东乡族自治县", parent: 6229, lon: 103.45214513327, lat: 35.698472340993},
+  {id: 622927, name: "积石山保安族东乡族撒拉族自治县", parent: 6229, lon: 102.86781858816, lat: 35.710873026896},
+  {id: 623001, name: "合作市", parent: 6230, lon: 103.08564921659, lat: 34.997259505739},
+  {id: 623021, name: "临潭县", parent: 6230, lon: 103.63190648409, lat: 34.742615145611},
+  {id: 623022, name: "卓尼县", parent: 6230, lon: 103.39362024363, lat: 34.614457775996},
+  {id: 623023, name: "舟曲县", parent: 6230, lon: 104.32632271288, lat: 33.634810419739},
+  {id: 623024, name: "迭部县", parent: 6230, lon: 103.57044621531, lat: 34.005620769228},
+  {id: 623025, name: "玛曲县", parent: 6230, lon: 101.66897741851, lat: 33.850721989423},
+  {id: 623026, name: "碌曲县", parent: 6230, lon: 102.4775472855, lat: 34.392608970483},
+  {id: 623027, name: "夏河县", parent: 6230, lon: 102.50657841215, lat: 35.023030857767},
+  {id: 630102, name: "城东区", parent: 6301, lon: 101.8318647116, lat: 36.602116754388},
+  {id: 630103, name: "城中区", parent: 6301, lon: 101.77736110275, lat: 36.606648708407},
+  {id: 630104, name: "城西区", parent: 6301, lon: 101.72760342157, lat: 36.631635686769},
+  {id: 630105, name: "城北区", parent: 6301, lon: 101.7126636128, lat: 36.686367847542},
+  {id: 630121, name: "大通回族土族自治县", parent: 6301, lon: 101.49047766775, lat: 37.120688447453},
+  {id: 630122, name: "湟中县", parent: 6301, lon: 101.54449443066, lat: 36.579759412822},
+  {id: 630123, name: "湟源县", parent: 6301, lon: 101.16317752228, lat: 36.636354795068},
+  {id: 630202, name: "乐都区", parent: 6302, lon: 102.45288779666, lat: 36.535266451079},
+  {id: 630203, name: "平安区", parent: 6302, lon: 102.00299964296, lat: 36.410605515699},
+  {id: 630222, name: "民和回族土族自治县", parent: 6302, lon: 102.37668874252, lat: 36.312743354178},
+  {id: 630223, name: "互助土族自治县", parent: 6302, lon: 102.25718820705, lat: 36.83096012588},
+  {id: 630224, name: "化隆回族自治县", parent: 6302, lon: 102.19192348838, lat: 36.063668678141},
+  {id: 630225, name: "循化撒拉族自治县", parent: 6302, lon: 102.41213008567, lat: 35.70370031381},
+  {id: 632221, name: "门源回族自治县", parent: 6322, lon: 101.73134392349, lat: 37.45838446475},
+  {id: 632222, name: "祁连县", parent: 6322, lon: 99.711262922683, lat: 38.327948935969},
+  {id: 632223, name: "海晏县", parent: 6322, lon: 100.84335509134, lat: 37.114748322372},
+  {id: 632224, name: "刚察县", parent: 6322, lon: 99.988382638435, lat: 37.556876866897},
+  {id: 632321, name: "同仁县", parent: 6323, lon: 102.07844901848, lat: 35.426828765429},
+  {id: 632322, name: "尖扎县", parent: 6323, lon: 101.8497538518, lat: 35.918696822502},
+  {id: 632323, name: "泽库县", parent: 6323, lon: 101.43544631681, lat: 35.139216924404},
+  {id: 632324, name: "河南蒙古族自治县", parent: 6323, lon: 101.55630729533, lat: 34.511389737869},
+  {id: 632521, name: "共和县", parent: 6325, lon: 100.06487566684, lat: 36.538342364813},
+  {id: 632522, name: "同德县", parent: 6325, lon: 100.60173869992, lat: 35.068401149266},
+  {id: 632523, name: "贵德县", parent: 6325, lon: 101.41576189108, lat: 36.010503374887},
+  {id: 632524, name: "兴海县", parent: 6325, lon: 99.733309029, lat: 35.54029982537},
+  {id: 632525, name: "贵南县", parent: 6325, lon: 100.8846104318, lat: 35.698086207737},
+  {id: 632621, name: "玛沁县", parent: 6326, lon: 99.794261606919, lat: 34.504017087053},
+  {id: 632622, name: "班玛县", parent: 6326, lon: 100.55042865772, lat: 32.909735756429},
+  {id: 632623, name: "甘德县", parent: 6326, lon: 100.1478423084, lat: 34.021807573602},
+  {id: 632624, name: "达日县", parent: 6326, lon: 99.410809497102, lat: 33.482696864248},
+  {id: 632625, name: "久治县", parent: 6326, lon: 101.00550828784, lat: 33.473902951608},
+  {id: 632626, name: "玛多县", parent: 6326, lon: 98.244476788626, lat: 34.79757019551},
+  {id: 632701, name: "玉树市", parent: 6327, lon: 96.712350119487, lat: 32.906574629922},
+  {id: 632722, name: "杂多县", parent: 6327, lon: 94.30131455019, lat: 33.065763568805},
+  {id: 632723, name: "称多县", parent: 6327, lon: 97.001973841494, lat: 33.935171842212},
+  {id: 632724, name: "治多县", parent: 6327, lon: 92.608641864013, lat: 34.884438571607},
+  {id: 632725, name: "囊谦县", parent: 6327, lon: 96.137026010488, lat: 32.178288570852},
+  {id: 632726, name: "曲麻莱县", parent: 6327, lon: 95.140845875343, lat: 34.876865391833},
+  {id: 632801, name: "格尔木市", parent: 6328, lon: 96.202543672261, lat: 35.499761004275},
+  {id: 632802, name: "德令哈市", parent: 6328, lon: 96.202543672261, lat: 35.499761004275},
+  {id: 632821, name: "乌兰县", parent: 6328, lon: 98.672630599729, lat: 36.902366896364},
+  {id: 632822, name: "都兰县", parent: 6328, lon: 97.154434686537, lat: 36.160067040805},
+  {id: 632823, name: "天峻县", parent: 6328, lon: 98.496512304144, lat: 38.051753388375},
+  {id: 640104, name: "兴庆区", parent: 6401, lon: 106.38212078081, lat: 38.464266316255},
+  {id: 640105, name: "西夏区", parent: 6401, lon: 106.05555591606, lat: 38.55328059311},
+  {id: 640106, name: "金凤区", parent: 6401, lon: 106.24264950801, lat: 38.47859072607},
+  {id: 640121, name: "永宁县", parent: 6401, lon: 106.10904802497, lat: 38.295049444356},
+  {id: 640122, name: "贺兰县", parent: 6401, lon: 106.26651804243, lat: 38.687106885054},
+  {id: 640181, name: "灵武市", parent: 6401, lon: 106.53199999229, lat: 37.935174812169},
+  {id: 640202, name: "大武口区", parent: 6402, lon: 106.38721561034, lat: 38.967534270672},
+  {id: 640205, name: "惠农区", parent: 6402, lon: 106.61377347013, lat: 39.108073765064},
+  {id: 640221, name: "平罗县", parent: 6402, lon: 106.54437947509, lat: 38.891511355897},
+  {id: 640302, name: "利通区", parent: 6403, lon: 106.21901163377, lat: 37.76788189318},
+  {id: 640303, name: "红寺堡区", parent: 6403, lon: 106.16687896986, lat: 37.374136412893},
+  {id: 640323, name: "盐池县", parent: 6403, lon: 107.04976116152, lat: 37.625336523188},
+  {id: 640324, name: "同心县", parent: 6403, lon: 106.24738743176, lat: 37.098456634364},
+  {id: 640381, name: "青铜峡市", parent: 6403, lon: 105.96146159918, lat: 37.942124742884},
+  {id: 640402, name: "原州区", parent: 6404, lon: 106.25401126905, lat: 36.206829483476},
+  {id: 640422, name: "西吉县", parent: 6404, lon: 105.72674858688, lat: 35.939934380868},
+  {id: 640423, name: "隆德县", parent: 6404, lon: 106.07361128455, lat: 35.589137720123},
+  {id: 640424, name: "泾源县", parent: 6404, lon: 106.35402263843, lat: 35.529746376118},
+  {id: 640425, name: "彭阳县", parent: 6404, lon: 106.66247325572, lat: 35.972546262958},
+  {id: 640502, name: "沙坡头区", parent: 6405, lon: 105.11127776143, lat: 37.360638517868},
+  {id: 640521, name: "中宁县", parent: 6405, lon: 105.69186958245, lat: 37.360097375108},
+  {id: 640522, name: "海原县", parent: 6405, lon: 105.67964899633, lat: 36.603124838712},
+  {id: 650102, name: "天山区", parent: 6501, lon: 87.632902512248, lat: 43.783860225571},
+  {id: 650103, name: "沙依巴克区", parent: 6501, lon: 87.545631053987, lat: 43.807885738392},
+  {id: 650104, name: "新市区", parent: 6501, lon: 87.549218796363, lat: 43.898324290635},
+  {id: 650105, name: "水磨沟区", parent: 6501, lon: 87.668013771241, lat: 43.843907230143},
+  {id: 650106, name: "头屯河区", parent: 6501, lon: 87.425048810466, lat: 43.925789450498},
+  {id: 650107, name: "达坂城区", parent: 6501, lon: 87.895407243798, lat: 42.840608943765},
+  {id: 650109, name: "米东区", parent: 6501, lon: 87.691186460177, lat: 44.070554173621},
+  {id: 650121, name: "乌鲁木齐县", parent: 6501, lon: 87.360244284205, lat: 43.419107804291},
+  {id: 650202, name: "独山子区", parent: 6502, lon: 84.899916988861, lat: 44.302338209135},
+  {id: 650203, name: "克拉玛依区", parent: 6502, lon: 84.926989634948, lat: 45.203919246039},
+  {id: 650204, name: "白碱滩区", parent: 6502, lon: 85.177828513011, lat: 45.633602431504},
+  {id: 650205, name: "乌尔禾区", parent: 6502, lon: 85.511149264018, lat: 46.006575616849},
+  {id: 650402, name: "高昌区", parent: 6504, lon: 89.227738842032, lat: 42.508199556726},
+  {id: 650421, name: "鄯善县", parent: 6504, lon: 89.266025488642, lat: 42.678924820794},
+  {id: 650422, name: "托克逊县", parent: 6504, lon: 89.266025488642, lat: 42.678924820794},
+  {id: 650502, name: "伊州区", parent: 6505, lon: 93.529373012389, lat: 42.344467104552},
+  {id: 650521, name: "巴里坤哈萨克自治县", parent: 6505, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 650522, name: "伊吾县", parent: 6505, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 652301, name: "昌吉市", parent: 6523, lon: 87.073618053225, lat: 44.175083447891},
+  {id: 652302, name: "阜康市", parent: 6523, lon: 88.305949271281, lat: 44.424103693512},
+  {id: 652323, name: "呼图壁县", parent: 6523, lon: 86.693166111969, lat: 44.380955717336},
+  {id: 652324, name: "玛纳斯县", parent: 6523, lon: 86.137668859258, lat: 44.503551752404},
+  {id: 652325, name: "奇台县", parent: 6523, lon: 90.11026866784, lat: 44.527652368056},
+  {id: 652327, name: "吉木萨尔县", parent: 6523, lon: 89.053073195064, lat: 44.352913670744},
+  {id: 652328, name: "木垒哈萨克自治县", parent: 6523, lon: 90.823487793346, lat: 44.106618870761},
+  {id: 652701, name: "博乐市", parent: 6527, lon: 81.874284679178, lat: 44.844209020588},
+  {id: 652702, name: "阿拉山口市", parent: 6527, lon: 82.895221509025, lat: 45.061386641726},
+  {id: 652722, name: "精河县", parent: 6527, lon: 82.922361700992, lat: 44.557568454509},
+  {id: 652723, name: "温泉县", parent: 6527, lon: 80.952155808353, lat: 44.9688196179},
+  {id: 652801, name: "库尔勒市", parent: 6528, lon: 85.709417601735, lat: 41.705499905674},
+  {id: 652822, name: "轮台县", parent: 6528, lon: 84.57895946698, lat: 41.819287515207},
+  {id: 652823, name: "尉犁县", parent: 6528, lon: 86.866990811172, lat: 40.858795810656},
+  {id: 652824, name: "若羌县", parent: 6528, lon: 89.762772308375, lat: 38.973844089966},
+  {id: 652825, name: "且末县", parent: 6528, lon: 85.506365638195, lat: 38.100709422823},
+  {id: 652826, name: "焉耆回族自治县", parent: 6528, lon: 86.07606847595, lat: 42.096103707937},
+  {id: 652827, name: "和静县", parent: 6528, lon: 85.200093433149, lat: 42.828681293853},
+  {id: 652828, name: "和硕县", parent: 6528, lon: 87.588716477325, lat: 42.141076067327},
+  {id: 652829, name: "博湖县", parent: 6528, lon: 86.88537877372, lat: 41.857897990299},
+  {id: 652901, name: "阿克苏市", parent: 6529, lon: 81.156013147807, lat: 40.349444301113},
+  {id: 652922, name: "温宿县", parent: 6529, lon: 80.461878185727, lat: 41.582084613402},
+  {id: 652923, name: "库车县", parent: 6529, lon: 83.459806782673, lat: 41.781932892776},
+  {id: 652924, name: "沙雅县", parent: 6529, lon: 82.925515505452, lat: 40.406065186743},
+  {id: 652925, name: "新和县", parent: 6529, lon: 81.985216276674, lat: 41.365699703636},
+  {id: 652926, name: "拜城县", parent: 6529, lon: 81.90123535088, lat: 42.04528513577},
+  {id: 652927, name: "乌什县", parent: 6529, lon: 79.281638850531, lat: 41.26184731177},
+  {id: 652928, name: "阿瓦提县", parent: 6529, lon: 80.439931783004, lat: 40.060787890713},
+  {id: 652929, name: "柯坪县", parent: 6529, lon: 78.994696137796, lat: 40.456665812896},
+  {id: 653001, name: "阿图什市", parent: 6530, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 653022, name: "阿克陶县", parent: 6530, lon: 75.814939311182, lat: 39.12880375818},
+  {id: 653023, name: "阿合奇县", parent: 6530, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 653024, name: "乌恰县", parent: 6530, lon: 75.146818569489, lat: 39.971830894544},
+  {id: 653101, name: "喀什市", parent: 6531, lon: 76.014342798943, lat: 39.513110585312},
+  {id: 653121, name: "疏附县", parent: 6531, lon: 75.754898212901, lat: 39.409740997776},
+  {id: 653122, name: "疏勒县", parent: 6531, lon: 76.369990308095, lat: 39.187644733788},
+  {id: 653123, name: "英吉沙县", parent: 6531, lon: 76.368708511974, lat: 38.800015263145},
+  {id: 653124, name: "泽普县", parent: 6531, lon: 77.226408238901, lat: 38.122552699106},
+  {id: 653125, name: "莎车县", parent: 6531, lon: 77.014833164072, lat: 38.322587836687},
+  {id: 653126, name: "叶城县", parent: 6531, lon: 77.223630915245, lat: 36.993013961904},
+  {id: 653127, name: "麦盖提县", parent: 6531, lon: 78.242310158759, lat: 38.848362710463},
+  {id: 653128, name: "岳普湖县", parent: 6531, lon: 76.989631103308, lat: 39.116644959661},
+  {id: 653129, name: "伽师县", parent: 6531, lon: 77.231563046663, lat: 39.599103145624},
+  {id: 653130, name: "巴楚县", parent: 6531, lon: 78.907138995454, lat: 39.618107499846},
+  {id: 653131, name: "塔什库尔干塔吉克自治县", parent: 6531, lon: 75.843222371735, lat: 37.019583155993},
+  {id: 653201, name: "和田市", parent: 6532, lon: 79.915813731039, lat: 37.153349739681},
+  {id: 653221, name: "和田县", parent: 6532, lon: 79.354993072983, lat: 35.68343240637},
+  {id: 653222, name: "墨玉县", parent: 6532, lon: 80.047148111072, lat: 38.384224145853},
+  {id: 653223, name: "皮山县", parent: 6532, lon: 78.521850388972, lat: 37.228318546135},
+  {id: 653224, name: "洛浦县", parent: 6532, lon: 80.741311117244, lat: 38.02421985339},
+  {id: 653225, name: "策勒县", parent: 6532, lon: 81.097995717517, lat: 37.084313855547},
+  {id: 653226, name: "于田县", parent: 6532, lon: 81.995462903271, lat: 37.169130186737},
+  {id: 653227, name: "民丰县", parent: 6532, lon: 83.352763187, lat: 37.173146693576},
+  {id: 654002, name: "伊宁市", parent: 6540, lon: 81.289048071493, lat: 44.020355819309},
+  {id: 654003, name: "奎屯市", parent: 6540, lon: 85.013934401512, lat: 44.559556778997},
+  {id: 654004, name: "霍尔果斯市", parent: 6540, lon: 80.472151391129, lat: 44.452519773233},
+  {id: 654021, name: "伊宁县", parent: 6540, lon: 81.756940142999, lat: 44.008116880627},
+  {id: 654022, name: "察布查尔锡伯自治县", parent: 6540, lon: 81.098298342118, lat: 43.63837704253},
+  {id: 654023, name: "霍城县", parent: 6540, lon: 80.781158528097, lat: 44.309120433611},
+  {id: 654024, name: "巩留县", parent: 6540, lon: 82.445700944329, lat: 43.302460015973},
+  {id: 654025, name: "新源县", parent: 6540, lon: 83.558150188258, lat: 43.376951418093},
+  {id: 654026, name: "昭苏县", parent: 6540, lon: 80.984257123681, lat: 42.776878220953},
+  {id: 654027, name: "特克斯县", parent: 6540, lon: 82.006852355503, lat: 42.925563515093},
+  {id: 654028, name: "尼勒克县", parent: 6540, lon: 83.23110039646, lat: 43.816730949065},
+  {id: 654201, name: "塔城市", parent: 6542, lon: 82.974880583744, lat: 46.75868362968},
+  {id: 654202, name: "乌苏市", parent: 6542, lon: 84.277878264967, lat: 44.40768749824},
+  {id: 654221, name: "额敏县", parent: 6542, lon: 84.20931964579, lat: 46.590663664844},
+  {id: 654223, name: "沙湾县", parent: 6542, lon: 85.474874072005, lat: 44.353744632126},
+  {id: 654224, name: "托里县", parent: 6542, lon: 83.895484795593, lat: 45.656986383852},
+  {id: 654225, name: "裕民县", parent: 6542, lon: 82.814799479048, lat: 46.004456478157},
+  {id: 654226, name: "和布克赛尔蒙古自治县", parent: 6542, lon: 86.217435804622, lat: 46.256702546595},
+  {id: 654301, name: "阿勒泰市", parent: 6543, lon: 87.926214360189, lat: 47.890135725749},
+  {id: 654321, name: "布尔津县", parent: 6543, lon: 87.235518096505, lat: 48.31600661463},
+  {id: 654322, name: "富蕴县", parent: 6543, lon: 89.393483612342, lat: 46.536156506123},
+  {id: 654323, name: "福海县", parent: 6543, lon: 88.050870553487, lat: 46.391693535493},
+  {id: 654324, name: "哈巴河县", parent: 6543, lon: 86.409672960245, lat: 48.316559027363},
+  {id: 654325, name: "青河县", parent: 6543, lon: 90.403028447838, lat: 46.26815068272},
+  {id: 654326, name: "吉木乃县", parent: 6543, lon: 86.208104287811, lat: 47.40631111494},
+  {id: 659001, name: "石河子市", parent: 6590, lon: 85.614899338339, lat: 42.127000957642},
+  {id: 659002, name: "阿拉尔市", parent: 6590, lon: 81.291736550158, lat: 40.615680005185},
+  {id: 659003, name: "图木舒克市", parent: 6590, lon: 79.198155107904, lat: 39.889222881804},
+  {id: 659004, name: "五家渠市", parent: 6590, lon: 87.565448980181, lat: 44.368899479018},
+  {id: 659006, name: "铁门关市", parent: 6590, lon: 85.726306886394, lat: 41.806667022365},
+  {id: 441900003, name: "东城街道办事处", parent: 441900, lon: 113.78983123714, lat: 23.034187558639},
+  {id: 441900004, name: "南城街道办事处", parent: 441900, lon: 113.76343399076, lat: 23.043023815368},
+  {id: 441900005, name: "万江街道办事处", parent: 441900, lon: 113.74487765252, lat: 23.053216729046},
+  {id: 441900006, name: "莞城街道办事处", parent: 441900, lon: 113.75560020347, lat: 23.044807443255},
+  {id: 441900101, name: "石碣镇", parent: 441900, lon: 113.81981570219, lat: 23.105009814264},
+  {id: 441900102, name: "石龙镇", parent: 441900, lon: 113.88072838846, lat: 23.11161544389},
+  {id: 441900103, name: "茶山镇", parent: 441900, lon: 113.87562020652, lat: 23.082481820485},
+  {id: 441900104, name: "石排镇", parent: 441900, lon: 113.94654976997, lat: 23.094860319218},
+  {id: 441900105, name: "企石镇", parent: 441900, lon: 114.02853135589, lat: 23.079042407351},
+  {id: 441900106, name: "横沥镇", parent: 441900, lon: 113.97299506133, lat: 23.024814163604},
+  {id: 441900107, name: "桥头镇", parent: 441900, lon: 114.10677408198, lat: 23.020458678747},
+  {id: 441900108, name: "谢岗镇", parent: 441900, lon: 114.15514140002, lat: 22.967217838002},
+  {id: 441900109, name: "东坑镇", parent: 441900, lon: 113.94045100498, lat: 23.001562568215},
+  {id: 441900110, name: "常平镇", parent: 441900, lon: 113.9995109047, lat: 22.981050796988},
+  {id: 441900111, name: "寮步镇", parent: 441900, lon: 113.88126801675, lat: 23.00371616099},
+  {id: 441900112, name: "樟木头镇", parent: 441900, lon: 114.08977863491, lat: 22.920830687532},
+  {id: 441900113, name: "大朗镇", parent: 441900, lon: 113.95058428998, lat: 22.945659062868},
+  {id: 441900114, name: "黄江镇", parent: 441900, lon: 114.00998764783, lat: 22.921615129208},
+  {id: 441900115, name: "清溪镇", parent: 441900, lon: 114.17089092789, lat: 22.85030931077},
+  {id: 441900116, name: "塘厦镇", parent: 441900, lon: 114.07912123626, lat: 22.812790577997},
+  {id: 441900117, name: "凤岗镇", parent: 441900, lon: 114.14334020333, lat: 22.752715714135},
+  {id: 441900118, name: "大岭山镇", parent: 441900, lon: 113.84869038983, lat: 22.905900630606},
+  {id: 441900119, name: "长安镇", parent: 441900, lon: 113.80903565699, lat: 22.82104526943},
+  {id: 441900121, name: "虎门镇", parent: 441900, lon: 113.67932364446, lat: 22.820652927195},
+  {id: 441900122, name: "厚街镇", parent: 441900, lon: 113.67679510848, lat: 22.941327853433},
+  {id: 441900123, name: "沙田镇", parent: 441900, lon: 113.62408243967, lat: 22.925272079534},
+  {id: 441900124, name: "道滘镇", parent: 441900, lon: 113.6817198771, lat: 23.010254161879},
+  {id: 441900125, name: "洪梅镇", parent: 441900, lon: 113.61544017114, lat: 23.000648523575},
+  {id: 441900126, name: "麻涌镇", parent: 441900, lon: 113.58837988097, lat: 23.057083015858},
+  {id: 441900127, name: "望牛墩镇", parent: 441900, lon: 113.66263830413, lat: 23.061598763352},
+  {id: 441900128, name: "中堂镇", parent: 441900, lon: 113.66393529738, lat: 23.098649541505},
+  {id: 441900129, name: "高埗镇", parent: 441900, lon: 113.75235767092, lat: 23.097244208669},
+  {id: 441900401, name: "松山湖管委会", parent: 441900, lon: 113.90498400265, lat: 22.929023833476},
+  {id: 441900402, name: "虎门港管委会", parent: 441900, lon: 113.5974063853, lat: 22.87760055556},
+  {id: 441900403, name: "东莞生态园", parent: 441900, lon: 113.93401286467, lat: 23.06893955376},
+  {id: 442000001, name: "石岐区街道办事处", parent: 442000, lon: 113.39476330111, lat: 22.543405990677},
+  {id: 442000002, name: "东区街道办事处", parent: 442000, lon: 113.4220600208, lat: 22.545177514513},
+  {id: 442000003, name: "火炬开发区街道办事处", parent: 442000, lon: 113.47638423802, lat: 22.54191612433},
+  {id: 442000004, name: "西区街道办事处", parent: 442000, lon: 113.36301785094, lat: 22.524075818178},
+  {id: 442000005, name: "南区街道办事处", parent: 442000, lon: 113.37678191523, lat: 22.503167561223},
+  {id: 442000006, name: "五桂山街道办事处", parent: 442000, lon: 113.40930659782, lat: 22.451434375841},
+  {id: 442000100, name: "小榄镇", parent: 442000, lon: 113.25710031734, lat: 22.668653892986},
+  {id: 442000101, name: "黄圃镇", parent: 442000, lon: 113.34579765142, lat: 22.716774199156},
+  {id: 442000102, name: "民众镇", parent: 442000, lon: 113.50009575036, lat: 22.627523677586},
+  {id: 442000103, name: "东凤镇", parent: 442000, lon: 113.26390219773, lat: 22.708252148345},
+  {id: 442000104, name: "东升镇", parent: 442000, lon: 113.29799140513, lat: 22.628979044198},
+  {id: 442000105, name: "古镇镇", parent: 442000, lon: 113.19699907493, lat: 22.61867275523},
+  {id: 442000106, name: "沙溪镇", parent: 442000, lon: 113.32782880229, lat: 22.514758626025},
+  {id: 442000107, name: "坦洲镇", parent: 442000, lon: 113.47430653463, lat: 22.260588179755},
+  {id: 442000108, name: "港口镇", parent: 442000, lon: 113.39153101373, lat: 22.591755080708},
+  {id: 442000109, name: "三角镇", parent: 442000, lon: 113.42447628565, lat: 22.682488953575},
+  {id: 442000110, name: "横栏镇", parent: 442000, lon: 113.24834255727, lat: 22.574461443704},
+  {id: 442000111, name: "南头镇", parent: 442000, lon: 113.29828270584, lat: 22.723520491884},
+  {id: 442000112, name: "阜沙镇", parent: 442000, lon: 113.35641695563, lat: 22.672921927334},
+  {id: 442000113, name: "南朗镇", parent: 442000, lon: 113.53783552043, lat: 22.504952068383},
+  {id: 442000114, name: "三乡镇", parent: 442000, lon: 113.44797569368, lat: 22.363791945407},
+  {id: 442000115, name: "板芙镇", parent: 442000, lon: 113.3288721509, lat: 22.422651529649},
+  {id: 442000116, name: "大涌镇", parent: 442000, lon: 113.30718743409, lat: 22.471242810046},
+  {id: 442000117, name: "神湾镇", parent: 442000, lon: 113.3702758154, lat: 22.308297939473},
+  {id: 460400100, name: "那大镇", parent: 460400, lon: 109.552961497, lat: 19.52127763772},
+  {id: 460400101, name: "和庆镇", parent: 460400, lon: 109.64738779153, lat: 19.531275426074},
+  {id: 460400102, name: "南丰镇", parent: 460400, lon: 109.56235340507, lat: 19.415717747276},
+  {id: 460400103, name: "大成镇", parent: 460400, lon: 109.40607236409, lat: 19.513907807686},
+  {id: 460400104, name: "雅星镇", parent: 460400, lon: 109.27567597122, lat: 19.449779604127},
+  {id: 460400105, name: "兰洋镇", parent: 460400, lon: 109.67367138789, lat: 19.466430878427},
+  {id: 460400106, name: "光村镇", parent: 460400, lon: 109.48786919371, lat: 19.823919412162},
+  {id: 460400107, name: "木棠镇", parent: 460400, lon: 109.35673473687, lat: 19.809926770596},
+  {id: 460400108, name: "海头镇", parent: 460400, lon: 108.95966166166, lat: 19.509695855917},
+  {id: 460400109, name: "峨蔓镇", parent: 460400, lon: 109.27331128257, lat: 19.860383433642},
+  {id: 460400110, name: "三都镇", parent: 460400, lon: 109.22582623889, lat: 19.793150845121},
+  {id: 460400111, name: "王五镇", parent: 460400, lon: 109.30218328967, lat: 19.659803263052},
+  {id: 460400112, name: "白马井镇", parent: 460400, lon: 109.33458619886, lat: 19.574787798597},
+  {id: 460400113, name: "中和镇", parent: 460400, lon: 109.35613533713, lat: 19.749465537088},
+  {id: 460400114, name: "排浦镇", parent: 460400, lon: 109.16975400269, lat: 19.644673698003},
+  {id: 460400115, name: "东成镇", parent: 460400, lon: 109.4680333127, lat: 19.709924104042},
+  {id: 460400116, name: "新州镇", parent: 460400, lon: 109.32260133284, lat: 19.720234743232},
+  {id: 460400400, name: "国营西培农场", parent: 460400, lon: 109.4599938961, lat: 19.483502718426},
+  {id: 460400404, name: "国营西联农场", parent: 460400, lon: 109.57014071402, lat: 19.574664060327},
+  {id: 460400405, name: "国营蓝洋农场", parent: 460400, lon: 109.68307796619, lat: 19.463516627749},
+  {id: 460400407, name: "国营八一农场", parent: 460400, lon: 109.31617355538, lat: 19.460913902693},
+  {id: 460400499, name: "洋浦经济开发区", parent: 460400, lon: 109.19229656623, lat: 19.775218244804},
+  {id: 460400500, name: "华南热作学院", parent: 460400, lon: 109.33458619886, lat: 19.574787798597},
+  {id: 620201100, name: "新城镇", parent: 620201, lon: 98.458266361225, lat: 39.880279868432},
+  {id: 620201101, name: "峪泉镇", parent: 620201, lon: 98.23795042668, lat: 39.813928611238},
+  {id: 620201102, name: "文殊镇", parent: 620201, lon: 98.384821213543, lat: 39.700128295254},
+  {id: 620201401, name: "雄关区", parent: 620201, lon: 98.281634585257, lat: 39.802397326734},
+  {id: 620201402, name: "镜铁区", parent: 620201, lon: 98.281634585257, lat: 39.802397326734},
+  {id: 620201403, name: "长城区", parent: 620201, lon: 98.404752795538, lat: 39.914711003026},
+]

+ 168 - 0
app/assets/json/echartsThemes/default.project.json

@@ -0,0 +1,168 @@
+{
+    "version": 1,
+    "themeName": "walden",
+    "theme": {
+        "seriesCnt": "8",
+        "backgroundColor": "rgba(252,252,252,0)",
+        "titleColor": "#666666",
+        "subtitleColor": "#999999",
+        "textColorShow": false,
+        "textColor": "#333",
+        "markTextColor": "#ffffff",
+        "color": [
+            "#509af2",
+            "#3acf7a",
+            "#ffa223",
+            "#d465fb",
+            "#38caf7",
+            "#b3dd07",
+            "#ffd835",
+            "#e5b4fa"
+        ],
+        "borderColor": "#ccc",
+        "borderWidth": 0,
+        "visualMapColor": [
+            "#2a99c9",
+            "#afe8ff"
+        ],
+        "legendTextColor": "#999999",
+        "kColor": "#e6a0d2",
+        "kColor0": "transparent",
+        "kBorderColor": "#e6a0d2",
+        "kBorderColor0": "#3fb1e3",
+        "kBorderWidth": "2",
+        "lineWidth": "3",
+        "symbolSize": "8",
+        "symbolBorderWidth": "2",
+        "lineSmooth": false,
+        "graphLineWidth": "1",
+        "graphLineColor": "#cccccc",
+        "mapLabelColor": "#ffffff",
+        "mapLabelColorE": "rgb(63,177,227)",
+        "mapBorderColor": "#aaaaaa",
+        "mapBorderColorE": "#3fb1e3",
+        "mapBorderWidth": 0.5,
+        "mapBorderWidthE": 1,
+        "mapAreaColor": "#eeeeee",
+        "mapAreaColorE": "rgba(63,177,227,0.25)",
+        "axes": [
+            {
+                "type": "all",
+                "name": "通用坐标轴",
+                "axisLineShow": true,
+                "axisLineColor": "#cccccc",
+                "axisTickShow": false,
+                "axisTickColor": "#333",
+                "axisLabelShow": true,
+                "axisLabelColor": "#999999",
+                "splitLineShow": true,
+                "splitLineColor": [
+                    "#eeeeee"
+                ],
+                "splitAreaShow": false,
+                "splitAreaColor": [
+                    "rgba(250,250,250,0.05)",
+                    "rgba(200,200,200,0.02)"
+                ]
+            },
+            {
+                "type": "category",
+                "name": "类目坐标轴",
+                "axisLineShow": true,
+                "axisLineColor": "#333",
+                "axisTickShow": true,
+                "axisTickColor": "#333",
+                "axisLabelShow": true,
+                "axisLabelColor": "#333",
+                "splitLineShow": false,
+                "splitLineColor": [
+                    "#ccc"
+                ],
+                "splitAreaShow": false,
+                "splitAreaColor": [
+                    "rgba(250,250,250,0.3)",
+                    "rgba(200,200,200,0.3)"
+                ]
+            },
+            {
+                "type": "value",
+                "name": "数值坐标轴",
+                "axisLineShow": true,
+                "axisLineColor": "#333",
+                "axisTickShow": true,
+                "axisTickColor": "#333",
+                "axisLabelShow": true,
+                "axisLabelColor": "#333",
+                "splitLineShow": true,
+                "splitLineColor": [
+                    "#ccc"
+                ],
+                "splitAreaShow": false,
+                "splitAreaColor": [
+                    "rgba(250,250,250,0.3)",
+                    "rgba(200,200,200,0.3)"
+                ]
+            },
+            {
+                "type": "log",
+                "name": "对数坐标轴",
+                "axisLineShow": true,
+                "axisLineColor": "#333",
+                "axisTickShow": true,
+                "axisTickColor": "#333",
+                "axisLabelShow": true,
+                "axisLabelColor": "#333",
+                "splitLineShow": true,
+                "splitLineColor": [
+                    "#ccc"
+                ],
+                "splitAreaShow": false,
+                "splitAreaColor": [
+                    "rgba(250,250,250,0.3)",
+                    "rgba(200,200,200,0.3)"
+                ]
+            },
+            {
+                "type": "time",
+                "name": "时间坐标轴",
+                "axisLineShow": true,
+                "axisLineColor": "#333",
+                "axisTickShow": true,
+                "axisTickColor": "#333",
+                "axisLabelShow": true,
+                "axisLabelColor": "#333",
+                "splitLineShow": true,
+                "splitLineColor": [
+                    "#ccc"
+                ],
+                "splitAreaShow": false,
+                "splitAreaColor": [
+                    "rgba(250,250,250,0.3)",
+                    "rgba(200,200,200,0.3)"
+                ]
+            }
+        ],
+        "axisSeperateSetting": false,
+        "toolboxColor": "#999999",
+        "toolboxEmpasisColor": "#666666",
+        "tooltipAxisColor": "#cccccc",
+        "tooltipAxisWidth": 1,
+        "timelineLineColor": "#626c91",
+        "timelineLineWidth": 1,
+        "timelineItemColor": "#626c91",
+        "timelineItemColorE": "#626c91",
+        "timelineCheckColor": "#3fb1e3",
+        "timelineCheckBorderColor": "rgba(63,177,227,0.15)",
+        "timelineItemBorderWidth": 1,
+        "timelineControlColor": "#626c91",
+        "timelineControlBorderColor": "#626c91",
+        "timelineControlBorderWidth": 0.5,
+        "timelineLabelColor": "#626c91",
+        "datazoomBackgroundColor": "rgba(255,255,255,0)",
+        "datazoomDataColor": "rgba(222,222,222,1)",
+        "datazoomFillColor": "rgba(114,230,212,0.25)",
+        "datazoomHandleColor": "#cccccc",
+        "datazoomHandleWidth": "100",
+        "datazoomLabelColor": "#999999"
+    }
+}

+ 179 - 0
app/assets/json/echartsThemes/macarons.project.json

@@ -0,0 +1,179 @@
+{
+  "version": 1,
+  "themeName": "macarons",
+  "theme": {
+    "seriesCnt": "4",
+    "backgroundColor": "rgba(0,0,0,0)",
+    "titleColor": "#008acd",
+    "subtitleColor": "#aaaaaa",
+    "textColorShow": false,
+    "textColor": "#333",
+    "markTextColor": "#eeeeee",
+    "color": [
+      "#2ec7c9",
+      "#b6a2de",
+      "#5ab1ef",
+      "#ffb980",
+      "#d87a80",
+      "#8d98b3",
+      "#e5cf0d",
+      "#97b552",
+      "#95706d",
+      "#dc69aa",
+      "#07a2a4",
+      "#9a7fd1",
+      "#588dd5",
+      "#f5994e",
+      "#c05050",
+      "#59678c",
+      "#c9ab00",
+      "#7eb00a",
+      "#6f5553",
+      "#c14089"
+    ],
+    "borderColor": "#ccc",
+    "borderWidth": 0,
+    "visualMapColor": [
+      "#5ab1ef",
+      "#e0ffff"
+    ],
+    "legendTextColor": "#333333",
+    "kColor": "#d87a80",
+    "kColor0": "#2ec7c9",
+    "kBorderColor": "#d87a80",
+    "kBorderColor0": "#2ec7c9",
+    "kBorderWidth": 1,
+    "lineWidth": 2,
+    "symbolSize": 3,
+    "symbolBorderWidth": 1,
+    "lineSmooth": true,
+    "graphLineWidth": 1,
+    "graphLineColor": "#aaaaaa",
+    "mapLabelColor": "#d87a80",
+    "mapLabelColorE": "rgb(100,0,0)",
+    "mapBorderColor": "#eeeeee",
+    "mapBorderColorE": "#444444",
+    "mapBorderWidth": 0.5,
+    "mapBorderWidthE": 1,
+    "mapAreaColor": "#dddddd",
+    "mapAreaColorE": "rgba(254,153,78,1)",
+    "axes": [
+      {
+        "type": "all",
+        "name": "通用坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#eeeeee",
+        "axisTickShow": true,
+        "axisTickColor": "#eeeeee",
+        "axisLabelShow": true,
+        "axisLabelColor": "#eeeeee",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#aaaaaa"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "#eeeeee"
+        ]
+      },
+      {
+        "type": "category",
+        "name": "类目坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#008acd",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": false,
+        "splitLineColor": [
+          "#eee"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "value",
+        "name": "数值坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#008acd",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#eee"
+        ],
+        "splitAreaShow": true,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "log",
+        "name": "对数坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#008acd",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#eee"
+        ],
+        "splitAreaShow": true,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "time",
+        "name": "时间坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#008acd",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#eee"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      }
+    ],
+    "axisSeperateSetting": true,
+    "toolboxColor": "#2ec7c9",
+    "toolboxEmpasisColor": "#18a4a6",
+    "tooltipAxisColor": "#008acd",
+    "tooltipAxisWidth": "1",
+    "timelineLineColor": "#008acd",
+    "timelineLineWidth": 1,
+    "timelineItemColor": "#008acd",
+    "timelineItemColorE": "#a9334c",
+    "timelineCheckColor": "#2ec7c9",
+    "timelineCheckBorderColor": "rgba(46,199,201,0.4)",
+    "timelineItemBorderWidth": 1,
+    "timelineControlColor": "#008acd",
+    "timelineControlBorderColor": "#008acd",
+    "timelineControlBorderWidth": 0.5,
+    "timelineLabelColor": "#008acd",
+    "datazoomBackgroundColor": "rgba(47,69,84,0)",
+    "datazoomDataColor": "rgba(239,239,255,1)",
+    "datazoomFillColor": "rgba(182,162,222,0.2)",
+    "datazoomHandleColor": "#008acd",
+    "datazoomHandleWidth": "100",
+    "datazoomLabelColor": "#333333"
+  }
+}

+ 167 - 0
app/assets/json/echartsThemes/walden.project.json

@@ -0,0 +1,167 @@
+{
+  "version": 1,
+  "themeName": "walden",
+  "theme": {
+    "seriesCnt": "3",
+    "backgroundColor": "rgba(252,252,252,0)",
+    "titleColor": "#666666",
+    "subtitleColor": "#999999",
+    "textColorShow": false,
+    "textColor": "#333",
+    "markTextColor": "#ffffff",
+    "color": [
+      "#3fb1e3",
+      "#6be6c1",
+      "#626c91",
+      "#a0a7e6",
+      "#c4ebad",
+      "#96dee8"
+    ],
+    "borderColor": "#ccc",
+    "borderWidth": 0,
+    "visualMapColor": [
+      "#2a99c9",
+      "#afe8ff"
+    ],
+    "legendTextColor": "#999999",
+    "kColor": "#e6a0d2",
+    "kColor0": "transparent",
+    "kBorderColor": "#e6a0d2",
+    "kBorderColor0": "#3fb1e3",
+    "kBorderWidth": "2",
+    "lineWidth": "3",
+    "symbolSize": "8",
+    "symbol": "emptyCircle",
+    "symbolBorderWidth": "2",
+    "lineSmooth": false,
+    "graphLineWidth": "1",
+    "graphLineColor": "#cccccc",
+    "mapLabelColor": "#ffffff",
+    "mapLabelColorE": "rgb(63,177,227)",
+    "mapBorderColor": "#aaaaaa",
+    "mapBorderColorE": "#3fb1e3",
+    "mapBorderWidth": 0.5,
+    "mapBorderWidthE": 1,
+    "mapAreaColor": "#eeeeee",
+    "mapAreaColorE": "rgba(63,177,227,0.25)",
+    "axes": [
+      {
+        "type": "all",
+        "name": "通用坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#cccccc",
+        "axisTickShow": false,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#999999",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#eeeeee"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.05)",
+          "rgba(200,200,200,0.02)"
+        ]
+      },
+      {
+        "type": "category",
+        "name": "类目坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#333",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": false,
+        "splitLineColor": [
+          "#ccc"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "value",
+        "name": "数值坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#333",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#ccc"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "log",
+        "name": "对数坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#333",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#ccc"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      },
+      {
+        "type": "time",
+        "name": "时间坐标轴",
+        "axisLineShow": true,
+        "axisLineColor": "#333",
+        "axisTickShow": true,
+        "axisTickColor": "#333",
+        "axisLabelShow": true,
+        "axisLabelColor": "#333",
+        "splitLineShow": true,
+        "splitLineColor": [
+          "#ccc"
+        ],
+        "splitAreaShow": false,
+        "splitAreaColor": [
+          "rgba(250,250,250,0.3)",
+          "rgba(200,200,200,0.3)"
+        ]
+      }
+    ],
+    "axisSeperateSetting": false,
+    "toolboxColor": "#999999",
+    "toolboxEmpasisColor": "#666666",
+    "tooltipAxisColor": "#cccccc",
+    "tooltipAxisWidth": 1,
+    "timelineLineColor": "#626c91",
+    "timelineLineWidth": 1,
+    "timelineItemColor": "#626c91",
+    "timelineItemColorE": "#626c91",
+    "timelineCheckColor": "#3fb1e3",
+    "timelineCheckBorderColor": "rgba(63,177,227,0.15)",
+    "timelineItemBorderWidth": 1,
+    "timelineControlColor": "#626c91",
+    "timelineControlBorderColor": "#626c91",
+    "timelineControlBorderWidth": 0.5,
+    "timelineLabelColor": "#626c91",
+    "datazoomBackgroundColor": "rgba(255,255,255,0)",
+    "datazoomDataColor": "rgba(222,222,222,1)",
+    "datazoomFillColor": "rgba(114,230,212,0.25)",
+    "datazoomHandleColor": "#cccccc",
+    "datazoomHandleWidth": "100",
+    "datazoomLabelColor": "#999999"
+  }
+}

+ 117 - 0
app/assets/json/slideSettings/chart.json

@@ -0,0 +1,117 @@
+{
+  "name": "chart",
+  "title": "图表",
+  "params": [{
+    "name": "size",
+    "title": "图表尺寸",
+    "items": [{
+      "name": "width",
+      "title": "宽度(像素)",
+      "component": "inputnumber",
+      "default": 200
+    }, {
+      "name": "height",
+      "title": "高度(像素)",
+      "component": "inputnumber",
+      "default": 120
+    }]
+  }, {
+    "name": "position",
+    "title": "图表位置",
+    "items": [{
+      "name": "positionX",
+      "title": "x轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }, {
+      "name": "positionY",
+      "title": "y轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }]
+  }, {
+    "name": "background",
+    "title": "背景",
+    "items": [{
+      "name": "backgroundColor",
+      "title": "背景颜色",
+      "component": "colorPicker",
+      "default": [255,255,255,0],
+      "labelCol": 10
+    }]
+  }, {
+    "name": "border",
+    "title": "边框",
+    "items": [{
+      "name": "borderColor",
+      "title": "边框颜色",
+      "component": "colorPicker",
+      "default": [0,0,0],
+      "labelCol": 10
+    }, {
+      "name": "borderWidth",
+      "title": "边框粗细",
+      "component": "inputnumber",
+      "default": 0,
+      "placeholder": "像素",
+      "labelCol": 10
+    }, {
+      "name": "borderStyle",
+      "title": "边框样式",
+      "component": "select",
+      "values": [{
+        "name": "实线",
+        "value": "solid"
+      }, {
+        "name": "虚线",
+        "value": "dashed"
+      }, {
+        "name": "点线",
+        "value": "dotted"
+      }, {
+        "name": "双框",
+        "value": "double"
+      }],
+      "default": "solid",
+      "labelCol": 10
+    }, {
+      "name": "borderRadius",
+      "title": "圆角半径",
+      "component": "inputnumber",
+      "default": 0,
+      "placeholder": "像素",
+      "labelCol": 10
+    }]
+  }, {
+    "name": "dataRefresh",
+    "title": "数据刷新",
+    "items": [{
+      "name": "polling",
+      "title": "刷新模式",
+      "component": "select",
+      "values": [{
+        "name": "手动刷新",
+        "value": "false"
+      }, {
+        "name": "定时刷新",
+        "value": "true"
+      }],
+      "default": "false",
+      "labelCol": 10
+    }, {
+      "name": "frequency",
+      "title": "时长(秒)",
+      "component": "inputnumber",
+      "default": "60",
+      "min": 1,
+      "placeholder": "秒",
+      "labelCol": 10,
+      "relatedItems": [{
+        "name": "polling",
+        "values": ["true"]
+      }]
+    }]
+  }]
+}

+ 218 - 0
app/assets/json/slideSettings/label.json

@@ -0,0 +1,218 @@
+{
+  "name": "label",
+  "title": "标签",
+  "params": [
+    {
+      "name": "size",
+      "title": "矩形尺寸",
+      "items": [
+        {
+          "name": "width",
+          "title": "宽度(像素)",
+          "component": "inputnumber",
+          "default": 500
+        }
+      ]
+    },
+    {
+      "name": "position",
+      "title": "标签位置",
+      "items": [
+        {
+          "name": "positionX",
+          "title": "x轴位置(像素)",
+          "component": "inputnumber",
+          "labelCol": 15,
+          "wrapperCol": 8
+        },
+        {
+          "name": "positionY",
+          "title": "y轴位置(像素)",
+          "component": "inputnumber",
+          "labelCol": 15,
+          "wrapperCol": 8
+        }
+      ]
+    },
+    {
+      "name": "padding",
+      "title": "内边距(像素)",
+      "items": [
+        {
+          "name": "paddingTop",
+          "tip": "px",
+          "title": "上",
+          "component": "inputnumber",
+          "default": 0,
+          "labelCol": 6,
+          "wrapperCol": 18,
+          "span": 12
+        },
+        {
+          "name": "paddingBottom",
+          "tip": "px",
+          "title": "下",
+          "component": "inputnumber",
+          "default": 0,
+          "labelCol": 6,
+          "wrapperCol": 18,
+          "span": 12
+        },
+        {
+          "name": "paddingLeft",
+          "tip": "px",
+          "title": "左",
+          "component": "inputnumber",
+          "default": 0,
+          "labelCol": 6,
+          "wrapperCol": 18,
+          "span": 12
+        },
+        {
+          "name": "paddingRight",
+          "tip": "px",
+          "title": "右",
+          "component": "inputnumber",
+          "default": 0,
+          "labelCol": 6,
+          "wrapperCol": 18,
+          "span": 12
+        }
+      ]
+    },
+    {
+      "name": "background",
+      "title": "背景",
+      "items": [
+        {
+          "name": "backgroundColor",
+          "title": "背景颜色",
+          "component": "colorPicker",
+          "default": [
+            255,
+            255,
+            255,
+            0
+          ],
+          "labelCol": 10,
+          "wrapperCol": 14
+        }
+      ]
+    },
+    {
+      "name": "border",
+      "title": "边框",
+      "items": [
+        {
+          "name": "borderColor",
+          "title": "边框颜色",
+          "component": "colorPicker",
+          "default": [
+            0,
+            0,
+            0
+          ],
+          "labelCol": 10,
+          "wrapperCol": 14
+        },
+        {
+          "name": "borderWidth",
+          "title": "边框粗细",
+          "component": "inputnumber",
+          "default": 0,
+          "placeholder": "像素",
+          "labelCol": 10,
+          "wrapperCol": 14
+        },
+        {
+          "name": "borderStyle",
+          "title": "边框样式",
+          "component": "select",
+          "values": [
+            {
+              "name": "实线",
+              "value": "solid"
+            },
+            {
+              "name": "虚线",
+              "value": "dashed"
+            },
+            {
+              "name": "点线",
+              "value": "dotted"
+            },
+            {
+              "name": "双框",
+              "value": "double"
+            }
+          ],
+          "default": "solid",
+          "labelCol": 10,
+          "wrapperCol": 14
+        },
+        {
+          "name": "borderRadius",
+          "tip": "px",
+          "title": "圆角半径",
+          "component": "inputnumber",
+          "default": 0,
+          "placeholder": "像素",
+          "labelCol": 10,
+          "wrapperCol": 14
+        }
+      ]
+    },
+    {
+      "name": "content",
+      "title": "文本",
+      "visible": false,
+      "items": [{
+        "name": "richText",
+        "tip": "输入文本",
+        "title": "文本内容",
+        "component": "input",
+        "default": {
+          "content": [{
+            "type": "paragraph",
+            "children": [{
+              "text": "",
+              "fontSize": 40
+            }]
+          }]
+        },
+        "wrapperCol": 24
+      }]
+    },
+    {
+      "name": "font",
+      "title": "文字",
+      "visible": false,
+      "items": [
+      {
+        "name": "fontWeight",
+        "title": "字体粗细",
+        "component": "select",
+        "values": [],
+        "default": "normal",
+        "labelCol": 10,
+        "wrapperCol": 14
+      }, {
+        "name": "lineHeight",
+        "title": "行高",
+        "component": "inputnumber",
+        "default": 40,
+        "placeholder": "像素",
+        "labelCol": 10,
+        "wrapperCol": 14
+      }, {
+        "name": "textIndent",
+        "title": "首行缩进",
+        "component": "inputnumber",
+        "default": 0,
+        "placeholder": "像素",
+        "labelCol": 10,
+        "wrapperCol": 14
+      }]
+    }
+  ]
+}

+ 133 - 0
app/assets/json/slideSettings/rectangle.json

@@ -0,0 +1,133 @@
+{
+  "name": "rectangle",
+  "title": "矩形",
+  "params": [{
+    "name": "size",
+    "title": "矩形尺寸",
+    "items": [{
+      "name": "width",
+      "title": "宽度(像素)",
+      "component": "inputnumber",
+      "default": 200
+    }, {
+      "name": "height",
+      "title": "高度(像素)",
+      "component": "inputnumber",
+      "default": 120
+    }]
+  }, {
+    "name": "position",
+    "title": "矩形位置",
+    "items": [{
+      "name": "positionX",
+      "title": "x轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }, {
+      "name": "positionY",
+      "title": "y轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }]
+  }, {
+    "name": "background",
+    "title": "背景",
+    "items": [{
+      "name": "backgroundColor",
+      "title": "背景颜色",
+      "component": "colorPicker",
+      "default": [255,255,255,0],
+      "labelCol": 10
+    }, {
+      "name": "backgroundImage",
+      "title": "背景图片",
+      "component": "upload",
+      "action": "slide/widget/{layerId}/bgImage",
+      "accept": "image/*",
+      "autoUpdate": true,
+      "labelCol": 12,
+      "wrapperCol": 24
+    }, {
+      "name": "backgroundSize",
+      "title": "图片大小",
+      "component": "select",
+      "values": [{
+        "name": "自动",
+        "value": "auto"
+      }, {
+        "name": "包含",
+        "value": "contain"
+      }, {
+        "name": "铺满",
+        "value": "cover"
+      }],
+      "default": "auto",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "backgroundRepeat",
+      "title": "图片重复",
+      "component": "select",
+      "values": [{
+        "name": "x轴y轴重复",
+        "value": "repeat"
+      }, {
+        "name": "x轴重复",
+        "value": "repeat-x"
+      }, {
+        "name": "y轴重复",
+        "value": "repeat-y"
+      }, {
+        "name": "不重复",
+        "value": "no-repeat"
+      }],
+      "default": "repeat",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }, {
+    "name": "border",
+    "title": "边框",
+    "items": [{
+      "name": "borderColor",
+      "title": "边框颜色",
+      "component": "colorPicker",
+      "default": [0,0,0],
+      "labelCol": 10
+    }, {
+      "name": "borderWidth",
+      "title": "边框粗细",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 10
+    }, {
+      "name": "borderStyle",
+      "title": "边框样式",
+      "component": "select",
+      "values": [{
+        "name": "实线",
+        "value": "solid"
+      }, {
+        "name": "虚线",
+        "value": "dashed"
+      }, {
+        "name": "点线",
+        "value": "dotted"
+      }, {
+        "name": "双框",
+        "value": "double"
+      }],
+      "default": "solid",
+      "labelCol": 10
+    }, {
+      "name": "borderRadius",
+      "tip": "",
+      "title": "圆角半径",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 10
+    }]
+  }]
+}

+ 194 - 0
app/assets/json/slideSettings/slide.json

@@ -0,0 +1,194 @@
+{
+  "name": "slide",
+  "title": "大屏页",
+  "params": [{
+    "name": "slideSize",
+    "title": "屏幕尺寸",
+    "items": [{
+      "name": "width",
+      "title": "宽度(像素)",
+      "component": "inputnumber",
+      "default": 1920
+    }, {
+      "name": "height",
+      "title": "高度(像素)",
+      "component": "inputnumber",
+      "default": 1080
+    }]
+  }, {
+    "name": "background",
+    "title": "背景",
+    "items": [{
+      "name": "backgroundColor",
+      "title": "背景颜色",
+      "component": "colorPicker",
+      "default": [255,255,255,50],
+      "labelCol": 10
+    }, {
+      "name": "backgroundImage",
+      "title": "背景图片",
+      "component": "upload",
+      "action": "slide/{slideId}/upload/bgImage",
+      "accept": "image/*",
+      "autoUpdate": true,
+      "labelCol": 12,
+      "wrapperCol": 24
+    }]
+  }, {
+    "name": "transition",
+    "title": "播放设置",
+    "items": [{
+      "name": "autoSlideGlobal",
+      "title": "跟随全局",
+      "component": "checkbox",
+      "valuePropName": "checked",
+      "default": true,
+      "labelCol": 11,
+      "wrapperCol": 8
+    }, {
+      "name": "autoPlay",
+      "title": "自动播放",
+      "component": "checkbox",
+      "valuePropName": "checked",
+      "default": true,
+      "labelCol": 11,
+      "wrapperCol": 8,
+      "relatedItems": [{
+        "name": "autoSlideGlobal",
+        "values": [false]
+      }]
+    }, {
+      "name": "autoSlide",
+      "title": "停留时间(秒)",
+      "component": "inputnumber",
+      "default": "10",
+      "min": 3,
+      "labelCol": 14,
+      "wrapperCol": 10,
+      "relatedItems": [{
+        "name": "autoSlideGlobal",
+        "values": [false]
+      }, {
+        "name": "autoPlay",
+        "values": [true]
+      }]
+    }]
+  }, {
+    "name": "play",
+    "title": "过渡动画",
+    "items": [{
+      "name": "transitionGlobal",
+      "title": "跟随全局",
+      "component": "checkbox",
+      "valuePropName": "checked",
+      "default": true,
+      "labelCol": 11,
+      "wrapperCol": 8
+    }, {
+      "name": "transitionStyleIn",
+      "title": "出现时动画",
+      "component": "select",
+      "values": [{
+        "name": "无",
+        "value": "none"
+      }, {
+        "name": "淡入",
+        "value": "fade-in"
+      }, {
+        "name": "滑动",
+        "value": "slide-in"
+      }, {
+        "name": "凸镜",
+        "value": "convex-in"
+      }, {
+        "name": "凹镜",
+        "value": "concave-in"
+      }, {
+        "name": "缩放",
+        "value": "zoom-in"
+      }],
+      "default": "none",
+      "labelCol": 11,
+      "wrapperCol": 8,
+      "relatedItems": [{
+        "name": "transitionGlobal",
+        "values": [false]
+      }]
+    }, {
+      "name": "transitionStyleOut",
+      "title": "消失时动画",
+      "component": "select",
+      "values": [{
+        "name": "无",
+        "value": "none"
+      }, {
+        "name": "淡出",
+        "value": "fade-out"
+      }, {
+        "name": "滑动",
+        "value": "slide-out"
+      }, {
+        "name": "凸镜",
+        "value": "convex-out"
+      }, {
+        "name": "凹镜",
+        "value": "concave-out"
+      }, {
+        "name": "缩放",
+        "value": "zoom-out"
+      }],
+      "default": "none",
+      "labelCol": 11,
+      "wrapperCol": 8,
+      "relatedItems": [{
+        "name": "transitionGlobal",
+        "values": [false]
+      }]
+    }, {
+      "name": "transitionSpeed",
+      "title": "动画速度",
+      "component": "select",
+      "values": [{
+        "name": "默认",
+        "value": "default"
+      }, {
+        "name": "快",
+        "value": "fast"
+      }, {
+        "name": "慢",
+        "value": "slow"
+      }],
+      "default": "default",
+      "labelCol": 11,
+      "wrapperCol": 8,
+      "relatedItems": [{
+        "name": "transitionGlobal",
+        "values": [false]
+      }]
+    }]
+  }, {
+    "name": "scale",
+    "title": "缩放",
+    "items": [{
+      "name": "scaleMode",
+      "title": "缩放方式",
+      "component": "radio",
+      "values": [{
+        "name": "等比缩放宽度",
+        "value": "scaleWidth"
+      }, {
+        "name": "等比缩放高度",
+        "value": "scaleHeight"
+      }, {
+        "name": "全屏铺满",
+        "value": "scaleFull"
+      }, {
+        "name": "实际尺寸",
+        "value": "noScale"
+      }],
+      "default": "scaleWidth",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }]
+}

+ 308 - 0
app/assets/json/slideSettings/timer.json

@@ -0,0 +1,308 @@
+{
+  "name": "timer",
+  "title": "时间器",
+  "params": [{
+    "name": "size",
+    "title": "矩形尺寸",
+    "items": [{
+      "name": "width",
+      "title": "宽度(像素)",
+      "component": "inputnumber",
+      "default": 200
+    }, {
+      "name": "height",
+      "title": "高度(像素)",
+      "component": "inputnumber",
+      "default": 120
+    }]
+  }, {
+    "name": "position",
+    "title": "位置",
+    "items": [{
+      "name": "positionX",
+      "title": "x轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }, {
+      "name": "positionY",
+      "title": "y轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }]
+  }, {
+    "name": "format",
+    "title": "时间设置",
+    "items": [{
+      "name": "timeFormat",
+      "tip": "时间格式",
+      "title": "时间格式",
+      "component": "input",
+      "default": "YYYY-MM-DD HH:mm:ss",
+      "labelCol": 8,
+      "wrapperCol": 24
+    }, {
+      "name": "timeDuration",
+      "tip": "间隔时间(ms)",
+      "title": "间隔时间(ms)",
+      "component": "inputnumber",
+      "default": 1000,
+      "min": 1,
+      "labelCol": 14,
+      "wrapperCol": 10
+    }]
+  }, {
+    "name": "font",
+    "title": "文字",
+    "items": [{
+      "name": "fontFamily",
+      "title": "字体",
+      "component": "select",
+      "values": [{
+        "name": "默认",
+        "value": ""
+      }, {
+        "name": "微软雅黑",
+        "value": "Microsoft Yahei"
+      }, {
+        "name": "宋体",
+        "value": "SimSun"
+      }, {
+        "name": "黑体",
+        "value": "Heiti"
+      }, {
+        "name": "华文细黑",
+        "value": "STXihei"
+      }, {
+        "name": "Verdana",
+        "value": "Verdana"
+      }, {
+        "name": "Arial",
+        "value": "Arial"
+      }, {
+        "name": "Times New Roman",
+        "value": "Times New Roman"
+      }, {
+        "name": "Times",
+        "value": "Times"
+      }, {
+        "name": "MS Sans Serif",
+        "value": "MS Sans Serif"
+      }],
+      "default": "",
+      "wrapperCol": 24
+    }, {
+      "name": "fontColor",
+      "title": "字体颜色",
+      "component": "colorPicker",
+      "default": [0,0,0],
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "fontSize",
+      "title": "字体大小",
+      "component": "inputnumber",
+      "default": 40,
+      "placeholder": "像素",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "textAlign",
+      "title": "对齐方式",
+      "component": "select",
+      "values": [{
+        "name": "左对齐",
+        "value": "left"
+      }, {
+        "name": "右对齐",
+        "value": "right"
+      }, {
+        "name": "居中",
+        "value": "center"
+      }, {
+        "name": "两端对齐",
+        "value": "justify"
+      }],
+      "default": "justify",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "fontWeight",
+      "title": "字体粗细",
+      "component": "select",
+      "values": [{
+        "name": "normal",
+        "value": "normal"
+      }, {
+        "name": "bold",
+        "value": "bold"
+      }, {
+        "name": "bolder",
+        "value": "bolder"
+      }, {
+        "name": "lighter",
+        "value": "lighter"
+      }, {
+        "name": "100",
+        "value": "100"
+      }, {
+        "name": "200",
+        "value": "200"
+      }, {
+        "name": "300",
+        "value": "300"
+      }, {
+        "name": "400",
+        "value": "400"
+      }, {
+        "name": "500",
+        "value": "500"
+      }, {
+        "name": "600",
+        "value": "600"
+      }, {
+        "name": "700",
+        "value": "700"
+      }, {
+        "name": "800",
+        "value": "800"
+      }, {
+        "name": "900",
+        "value": "900"
+      }],
+      "default": "normal",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "textStyle",
+      "title": "样式",
+      "component": "checkboxGroup",
+      "values": [{
+        "label": "斜体",
+        "value": "italic"
+      }, {
+        "label": "下划线",
+        "value": "underline"
+      }],
+      "default": [],
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "lineHeight",
+      "title": "行高",
+      "component": "inputnumber",
+      "default": 40,
+      "placeholder": "像素",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "textIndent",
+      "title": "首行缩进",
+      "component": "inputnumber",
+      "default": 0,
+      "placeholder": "像素",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }, {
+    "name": "padding",
+    "title": "内边距(像素)",
+    "items": [{
+      "name": "paddingTop",
+      "tip": "px",
+      "title": "上",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 6,
+      "wrapperCol": 18,
+      "span": 12
+    }, {
+      "name": "paddingBottom",
+      "tip": "px",
+      "title": "下",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 6,
+      "wrapperCol": 18,
+      "span": 12
+    }, {
+      "name": "paddingLeft",
+      "tip": "px",
+      "title": "左",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 6,
+      "wrapperCol": 18,
+      "span": 12
+    }, {
+      "name": "paddingRight",
+      "tip": "px",
+      "title": "右",
+      "component": "inputnumber",
+      "default": 0,
+      "labelCol": 6,
+      "wrapperCol": 18,
+      "span": 12
+    }]
+  }, {
+    "name": "background",
+    "title": "背景",
+    "items": [{
+      "name": "backgroundColor",
+      "title": "背景颜色",
+      "component": "colorPicker",
+      "default": [255,255,255,0],
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }, {
+    "name": "border",
+    "title": "边框",
+    "items": [{
+      "name": "borderColor",
+      "title": "边框颜色",
+      "component": "colorPicker",
+      "default": [0,0,0],
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "borderWidth",
+      "title": "边框粗细",
+      "component": "inputnumber",
+      "default": 0,
+      "placeholder": "像素",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "borderStyle",
+      "title": "边框样式",
+      "component": "select",
+      "values": [{
+        "name": "实线",
+        "value": "solid"
+      }, {
+        "name": "虚线",
+        "value": "dashed"
+      }, {
+        "name": "点线",
+        "value": "dotted"
+      }, {
+        "name": "双框",
+        "value": "double"
+      }],
+      "default": "solid",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }, {
+      "name": "borderRadius",
+      "tip": "px",
+      "title": "圆角半径",
+      "component": "inputnumber",
+      "default": 0,
+      "placeholder": "像素",
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }]
+}

+ 78 - 0
app/assets/json/slideSettings/video.json

@@ -0,0 +1,78 @@
+{
+  "name": "video",
+  "title": "视频",
+  "params": [{
+    "name": "size",
+    "title": "尺寸",
+    "items": [{
+      "name": "width",
+      "title": "宽度(像素)",
+      "component": "inputnumber",
+      "default": 320
+    }, {
+      "name": "height",
+      "title": "高度(像素)",
+      "component": "inputnumber",
+      "default": 240
+    }]
+  }, {
+    "name": "position",
+    "title": "视频位置",
+    "items": [{
+      "name": "positionX",
+      "title": "x轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }, {
+      "name": "positionY",
+      "title": "y轴位置(像素)",
+      "component": "inputnumber",
+      "labelCol": 15,
+      "wrapperCol": 8
+    }]
+  }, {
+    "name": "address",
+    "title": "视频地址",
+    "items": [{
+      "name": "src",
+      "title": "",
+      "component": "input",
+      "labelCol": 0,
+      "wrapperCol": 24
+    }]
+  }, {
+    "name": "control",
+    "title": "播放设置",
+    "items": [{
+      "name": "controlSetting",
+      "title": "播放设置",
+      "component": "checkboxGroup",
+      "values": [{
+        "label": "自动播放",
+        "value": "autoPlay"
+      }, {
+        "label": "循环播放",
+        "value": "loop"
+      }, {
+        "label": "显示播放控制",
+        "value": "controls"
+      }],
+      "default": ["autoPlay", "loop"],
+      "labelCol": 10,
+      "wrapperCol": 14
+    }]
+  }, {
+    "name": "clip",
+    "title": "片段截取",
+    "items": [{
+      "name": "start",
+      "title": "开始播放(秒)",
+      "component": "inputnumber"
+    }, {
+      "name": "end",
+      "title": "结束播放(秒)",
+      "component": "inputnumber"
+    }]
+  }]
+}

+ 49 - 0
app/assets/less/resizer.less

@@ -0,0 +1,49 @@
+:global {
+  .Resizer {
+    z-index: 1;
+    box-sizing: border-box;
+    background-clip: padding-box;
+
+    &:hover {
+      transition: all 2s ease;
+    }
+
+    &.horizontal {
+      height: 11px;
+      margin: -5px 0;
+      cursor: row-resize;
+      width: 100%;
+
+      &:hover {
+        border-top: 5px solid rgba(0, 0, 0, 0.5);
+        border-bottom: 5px solid rgba(0, 0, 0, 0.5);
+      }
+    }
+
+    &.vertical {
+      width: 11px;
+      margin: 0 -5px;
+      cursor: col-resize;
+    }
+
+    &.disabled {
+      cursor: not-allowed;
+
+      &:hover {
+        border-color: transparent;
+      }
+    }
+  }
+
+  .Pane {
+    &.Pane1 {
+      display: flex;
+    }
+
+    &.Pane2 {
+      display: flex;
+      flex: 1;
+      overflow: hidden;
+    }
+  }
+}

+ 35 - 0
app/assets/less/style.less

@@ -0,0 +1,35 @@
+@import './variable.less';
+
+body {
+  background-color: @body-bg;
+}
+
+h1,h2,h3,h4,h5,h6 {
+  margin: 0;
+}
+
+p {
+  margin: 0;
+}
+
+ul {
+  margin: 0;
+  padding: 0;
+}
+
+li {
+  list-style-type: none;
+}
+
+input {
+  padding: 0;
+}
+
+table th {
+  padding: 0;
+  text-align: center;
+}
+
+* {
+  -webkit-overflow-scrolling: touch;
+}

+ 82 - 0
app/assets/less/util.less

@@ -0,0 +1,82 @@
+@import "variable";
+
+.textAlignCenter {
+  text-align: center !important;
+}
+
+.textAlignRight {
+  text-align: right !important;
+}
+
+.textAlignLeft {
+  text-align: left !important;
+}
+
+.hide {
+  display: none !important;
+}
+
+/*** Table ***/
+
+.searchFilterDropdown {
+  background-color: @white;
+  padding: 8px;
+  border-radius: 6px;
+  box-shadow: @popover-box-shadow;
+}
+
+.unSelected {
+  color: @codemirror-placeholder
+}
+// @rich-text
+
+.highlight {
+  color: @primary-color;
+}
+
+/*** Form ***/
+
+.formStepArea {
+  padding: 0 5%;
+  margin: 10px 0 30px;
+}
+
+/*** Modal ***/
+
+.modalLeftButton {
+  float: left;
+  margin-left: 6px;
+}
+
+/*** Breadcrumb ***/
+
+.breadcrumb {
+  a {
+    font-size: 1.25em;
+    line-height: 32px;
+  }
+}
+
+:global {
+  .widget-tooltip-circle {
+    display: inline-block;
+    width: 10px;
+    height: 10px;
+    margin-right: 5px;
+    border-radius: 50%;
+  }
+}
+
+.shortcut {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  a {
+    width: 38px;
+    color: inherit;
+  }
+  i {
+    font-size: 24px;
+    // line-height: 64px;
+  }
+}

+ 93 - 0
app/assets/less/variable.less

@@ -0,0 +1,93 @@
+@import "~antd/lib/style/themes/default";
+
+@blue                               : #1B98E0;
+@white                              : #fff;
+@black                              : #000;
+@light-green                        : #8BC34A;
+@logo-deep                          : #223151;
+@rich-text                          : #444444;
+@codemirror-placeholder             : #b9b9b9;
+
+@body-bg                            : #EAEDF1;
+@light-bg                           : #f7f7f7;
+@primary-color                      : @blue;
+@secondary-color                    : @logo-deep;
+@light-text-color                   : lighten(@text-color, 25%);
+@disabled-text-color                : lighten(@text-color, 35%);
+@disabled-icon-color                : lighten(@text-color, 75%);
+@grey-line-color                   : rgba(0,0,0,.05);
+
+/*** z-index ***/
+@header-index                       : 2;
+
+@popover-box-shadow                 : 0 1px 6px rgba(0, 0, 0, .2);
+@header-box-shadow                  : 0 2px 1px 0 rgba(0, 0, 0, .1);
+@left-side-box-shadow               : 2px 0 1px 0 rgba(0, 0, 0, .1);
+@right-side-box-shadow              : -2px 0 1px 0 rgba(0, 0, 0, .1);
+@block-box-shadow                   : 0 2px 3px 0 rgba(0,0,0,.05);
+@block-active-box-shadow            : 0 7px 21px 0 rgba(0,0,0,.15);
+
+/*** global mixins ***/
+.ellipsis {
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+
+.hideScrollbar {
+  overflow: -moz-scrollbars-none !important;
+  -ms-overflow-style: none !important;
+  &::-webkit-scrollbar {
+    display: none;
+  }
+}
+
+.antFormItemLabelCustom(@fontSize, @lineHeight, @marginBottom) {
+  :global {
+    .ant-form-item {
+      margin-bottom: @marginBottom;
+    }
+    .ant-form-item-label {
+      line-height: @lineHeight;
+  
+      label {
+        color: @disabled-text-color;
+        font-size: @fontSize;
+        font-weight: bold;
+      }
+    }
+    .ant-form-item-required:before {
+      margin-right: 2px;
+      vertical-align: middle;
+    }
+  }
+}
+
+.antFormItemStyleWithoutForm {
+  :global {
+    .ant-select,
+    .ant-input-number {
+      width: 100%;
+    }
+    .ant-input-group {
+      line-height: inherit;
+
+      &.ant-input-group-compact {
+        & > * {
+          vertical-align: baseline
+        }
+      }
+    }
+    .ant-calendar-picker {
+      width: 100% !important;
+      min-width: auto !important;
+    }
+  }
+  &.small {
+    :global {
+      .ant-form-item-control {
+        line-height: 32px;
+      }
+    }
+  }
+}

+ 141 - 0
app/assets/override/antd.css

@@ -0,0 +1,141 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+/**** react-grid *****/
+
+.react-grid-item {
+  background-color: #fff;
+  border-radius: 2px;
+  cursor: move;
+}
+
+.react-grid-item.react-grid-placeholder {
+  background-color: #586b84;
+}
+
+/***** antd *****/
+
+.ant-modal-small > .ant-modal {
+  width: 400px !important;
+}
+
+.ant-modal-medium > .ant-modal {
+  width: 600px !important;
+}
+
+.ant-modal-large > .ant-modal {
+  width: 900px !important;
+}
+
+.ant-modal-xlarge {
+  padding: 20px;
+}
+
+.ant-modal-xlarge > .ant-modal {
+  width: auto !important;
+  height: 100%;
+  padding: 0;
+  margin: 0;
+  top: auto;
+  display: flex;
+  flex-direction: column;
+}
+
+.ant-modal-xlarge > .ant-modal > .ant-modal-content {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  min-height: 0;  /* firefox flex overflow issue */
+}
+
+.ant-modal-xlarge > .ant-modal > .ant-modal-content > .ant-modal-body {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  min-height: 0;  /* firefox flex overflow issue */
+}
+
+.ant-modal-center {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+.ant-modal-center > .ant-modal {
+  padding: 0;
+  margin: 0;
+  top: auto;
+  min-height: 0;
+}
+
+/* 解决 RangePicker 与其他form元素不对齐 */
+.ant-calendar-range-picker-input {
+  vertical-align: baseline;
+}
+
+@media (max-width: 1200px) {
+  .ant-modal-xlarge {
+    padding: 10px;
+  }
+}
+
+@media (max-width: 900px) {
+  .ant-modal-large > .ant-modal {
+    width: auto !important;
+    margin: 10px;
+  }
+}
+
+@media (max-width: 768px) {
+  .ant-modal-small > .ant-modal,
+  .ant-modal-medium > .ant-modal {
+    width: auto !important;
+  }
+}
+
+/* action 栏按钮左右间距 */
+.ant-table-action-column .ant-btn {
+  margin: 0 4px;
+}
+
+/* 缩小默认行高(override variable) */
+/* .ant-table-thead > tr > th,
+.ant-table-tbody > tr > td {
+  padding: 10px 8px;
+} */
+
+/* 调整空列表与 BoxBody 下方间距 */
+.ant-table-empty {
+  margin-bottom: 20px;
+}
+
+/* 调整因字体大小造成的 RangePicker input 位置不对 */
+.ant-calendar-picker-input {
+  line-height: 1;
+}
+
+.ant-tree.ant-tree-show-line li span.ant-tree-switcher {
+  background: inherit;
+}
+
+.ant-page-header-heading-extra {
+  line-height: 32px;
+}

+ 54 - 0
app/assets/override/codemirror_theme.css

@@ -0,0 +1,54 @@
+.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; }
+.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; }
+
+.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; }
+.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; }
+
+.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; }
+.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; }
+.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; }
+.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; }
+
+.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; }
+
+.cm-s-3024-day span.cm-comment { color: #cdab53; }
+.cm-s-3024-day span.cm-atom { color: #a16a94; }
+.cm-s-3024-day span.cm-number { color: #a16a94; }
+
+.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; }
+.cm-s-3024-day span.cm-keyword { color: #1B98E0; }
+.cm-s-3024-day span.cm-string { color: #84A91E; }
+
+.cm-s-3024-day span.cm-variable { color: #01a252; }
+.cm-s-3024-day span.cm-variable-2 { color: #E76F51; }
+.cm-s-3024-day span.cm-def { color: #e8bbd0; }
+.cm-s-3024-day span.cm-bracket { color: #3a3432; }
+.cm-s-3024-day span.cm-tag { color: #db2d20; }
+.cm-s-3024-day span.cm-link { color: #a16a94; }
+.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; }
+
+.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; }
+
+.CodeMirror-hints { z-index: 9999 !important; }
+
+.CodeMirror pre.CodeMirror-placeholder { color: #b9b9b9; }
+
+.CodeMirror {
+  border: 1px solid #eee;
+  height: 100%;
+}
+
+.ant-form-item-control-wrapper {
+  height: 100%;
+}
+
+.ant-form-item-control {
+  height: 100%;
+}
+
+/* add by rh 
+   override 
+*/
+
+.cm-s-3024-day span.cm-error { background: #ef6155; color: #fefefe; }

+ 99 - 0
app/assets/override/datepicker.css

@@ -0,0 +1,99 @@
+.datepicker table tr td.active:focus,
+.datepicker table tr td.active.highlighted:focus,
+.datepicker table tr td.active.focus,
+.datepicker table tr td.active.highlighted.focus {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active.highlighted:hover {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td.active:active,
+.datepicker table tr td.active.highlighted:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active.highlighted.active {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td.active:active:hover,
+.datepicker table tr td.active.highlighted:active:hover,
+.datepicker table tr td.active.active:hover,
+.datepicker table tr td.active.highlighted.active:hover,
+.datepicker table tr td.active:active:focus,
+.datepicker table tr td.active.highlighted:active:focus,
+.datepicker table tr td.active.active:focus,
+.datepicker table tr td.active.highlighted.active:focus,
+.datepicker table tr td.active:active.focus,
+.datepicker table tr td.active.highlighted:active.focus,
+.datepicker table tr td.active.active.focus,
+.datepicker table tr td.active.highlighted.active.focus {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+
+.datepicker table tr td span.active:focus,
+.datepicker table tr td span.active:hover:focus,
+.datepicker table tr td span.active.disabled:focus,
+.datepicker table tr td span.active.disabled:hover:focus,
+.datepicker table tr td span.active.focus,
+.datepicker table tr td span.active:hover.focus,
+.datepicker table tr td span.active.disabled.focus,
+.datepicker table tr td span.active.disabled:hover.focus {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}
+.datepicker table tr td span.active:active:hover,
+.datepicker table tr td span.active:hover:active:hover,
+.datepicker table tr td span.active.disabled:active:hover,
+.datepicker table tr td span.active.disabled:hover:active:hover,
+.datepicker table tr td span.active.active:hover,
+.datepicker table tr td span.active:hover.active:hover,
+.datepicker table tr td span.active.disabled.active:hover,
+.datepicker table tr td span.active.disabled:hover.active:hover,
+.datepicker table tr td span.active:active:focus,
+.datepicker table tr td span.active:hover:active:focus,
+.datepicker table tr td span.active.disabled:active:focus,
+.datepicker table tr td span.active.disabled:hover:active:focus,
+.datepicker table tr td span.active.active:focus,
+.datepicker table tr td span.active:hover.active:focus,
+.datepicker table tr td span.active.disabled.active:focus,
+.datepicker table tr td span.active.disabled:hover.active:focus,
+.datepicker table tr td span.active:active.focus,
+.datepicker table tr td span.active:hover:active.focus,
+.datepicker table tr td span.active.disabled:active.focus,
+.datepicker table tr td span.active.disabled:hover:active.focus,
+.datepicker table tr td span.active.active.focus,
+.datepicker table tr td span.active:hover.active.focus,
+.datepicker table tr td span.active.disabled.active.focus,
+.datepicker table tr td span.active.disabled:hover.active.focus {
+  color: #fff;
+  background-color: #1B98E0;
+  border-color: #1B98E0;
+}

+ 27 - 0
app/assets/override/lessVariables.js

@@ -0,0 +1,27 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+module.exports = {
+  'primary-color': '#1B98E0',
+  'table-padding-vertical': '10px',
+  'table-padding-horizontal': '8px',
+  'page-header-padding-vertical': '8px',
+  'page-header-padding': '12px'
+}

+ 23 - 0
app/assets/override/react-grid.css

@@ -0,0 +1,23 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+.react-grid-item {
+  cursor: default;
+}

+ 17 - 0
app/assets/sqlFunctionName/sqlFns.js

@@ -0,0 +1,17 @@
+export default [
+    {name: 'SUM'},
+    {name: 'AVG'},
+    {name: 'COUNT'},
+    {name: 'MAX'},
+    {name: 'MIN'},
+    {name: 'MEDIAN'},
+    {name: 'STDDEV'},
+    {name: 'STDEV_POP'},
+    {name: 'STDDEV_SAMP'},
+    {name: 'VAR_POP'},
+    {name: 'VAR_SAMP'},
+    {name: 'VARIANCE'},
+    {name: 'PERCENTILES'},
+    {name: 'percentile_cont'},
+    {name: 'percentile_disc'}
+]

+ 88 - 0
app/assets/template/activate.html

@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <meta name="format-detection" content="telephone=no" />
+    <meta content="email=no" name="format-detection" />
+    <title>Title</title>
+    <style>
+      html,body,div,header,h2,article,button,p {
+        margin: 0; padding: 0;
+      }
+      html,body{
+        height: 100%;
+        width: 100%;
+      }
+      .container {
+        width: 100%;
+        height: 100%;
+        background-color: #EAEDF1;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+      }
+      .wrapper {
+        width: 420px;
+        display: flex;
+        flex-direction: column;
+        text-align: center;
+      }
+      header{
+        flex:0;
+        background-color: #1B98E0;
+        border-radius: 2px 2px 0 0;
+        line-height: 56px;
+        height: 56px;
+        color: #fff;
+      }
+      article {
+        flex: 1;
+        background-color: #fff;
+        border-radius: 0 0 2px 2px;
+        padding: 32px;
+      }
+      .title {
+        color: #444444;
+        font-size: 24px;
+        font-weight: 600;
+        margin-bottom: 16px;
+      }
+      .sure{
+        font-size: 16px;
+        outline: none;
+        display: inline-block;
+        margin-bottom: 32px;
+        padding: 8px 48px;
+        border-radius: 4px 4px;
+        background-color: #1B98E0;
+        color: #fff;
+        cursor: pointer;
+        text-decoration:none;
+        -webkit-touch-callout: none;
+        -webkit-user-select: none;
+        -khtml-user-select: none;
+        -moz-user-select: none;
+        -ms-user-select: none;
+        user-select: none;
+      }
+      .detail {
+        font-size: 14px;
+        color: rgba(0,0,0,.59);
+      }
+    </style>
+</head>
+<body>
+<div class="container">
+  <div class="wrapper">
+    <header>
+      <h2>欢迎使用davinci</h2>
+    </header>
+    <article>
+      <div class="title">您好, <span th:text="${username}">username</span></div>
+      <a class="sure" th:href="@{http://localhost:5002/(token=${token})#/activate}">激活davinci</a>
+      <p class="detail">此邮件为注册davinci确认邮件。如非本人操作,只需删除此邮件即可。</p>
+    </article>
+  </div>
+</div>
+</body>
+</html>

+ 116 - 0
app/assets/template/inviteOrgMemberTemplate.html

@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<!--
+  ~ <<
+  ~ Davinci
+  ~ ==
+  ~ Copyright (C) 2016 - 2018 EDP
+  ~ ==
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  ~ >>
+  -->
+
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+  <meta charset="UTF-8">
+  <meta name="format-detection" content="telephone=no" />
+  <meta content="email=no" name="format-detection" />
+  <title>Join</title>
+  <style>
+    html,body,div,header,h2,article,button,p {
+      margin: 0; padding: 0;
+    }
+    html,body{
+      height: 100%;
+      width: 100%;
+    }
+    .container {
+      width: 100%;
+      height: 100%;
+      background-color: #EAEDF1;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .wrapper {
+      margin: 48px auto;
+      width: 420px;
+      display: flex;
+      flex-direction: column;
+    }
+    header{
+      flex:0;
+      background-color: #1B98E0;
+      border-radius: 2px 2px 0 0;
+      line-height: 56px;
+      height: 56px;
+      color: #fff;
+    }
+    article {
+      flex: 1;
+      background-color: #fff;
+      border-radius: 0 0 2px 2px;
+      padding: 32px;
+    }
+    .hi {
+      text-align: left;
+    }
+    .title {
+      text-align: center;
+    }
+    .commonTitle {
+      color: #444444;
+      font-size: 18px;
+      font-weight: 600;
+      margin-bottom: 20px;
+    }
+    .sure{
+      font-size: 16px;
+      outline: none;
+      display: inline-block;
+      margin-bottom: 16px;
+      padding: 8px 48px;
+      border-radius: 4px 4px;
+      background-color: #1B98E0;
+      color: #fff;
+      cursor: pointer;
+      text-decoration:none;
+      -webkit-touch-callout: none;
+      -webkit-user-select: none;
+      -khtml-user-select: none;
+      -moz-user-select: none;
+      -ms-user-select: none;
+      user-select: none;
+      text-align: center;
+    }
+    .detail {
+      font-size: 12px;
+      color: rgba(0,0,0,.59);
+      text-align: center;
+    }
+  </style>
+</head>
+<body>
+<div class="container">
+  <div class="wrapper">
+    <header class="title">
+      <h2>欢迎使用davinci</h2>
+    </header>
+    <article>
+      <div class="hi commonTitle">Hi,<span th:text="${username}">username</span>!</div>
+      <div class="title commonTitle"> <span th:text="${inviter}">inviter</span>邀请您加入<span th:text="${orgName}">organization</span></div>
+      <a class="sure" th:href="@{http://localhost:5002/#/joinOrganization(token=${token})}">接受邀请<span th:text="${orgName}">organization</span></a>
+      <!--<a class="sure" th:href="@{{host}/#/joinOrganization(token=${token},host=${host})}">接受邀请<span th:text="${orgName}">organization</span></a>-->
+      <p class="detail">此邮件为确认邀请邮件。如拒绝加入或已加入该组织,请忽略。</p>
+    </article>
+  </div>
+</div>
+</body>
+</html>

+ 73 - 0
app/components/Avatar/Avatar.less

@@ -0,0 +1,73 @@
+@import '~assets/less/variable';
+
+.largeWrapper {
+  width: 160px;
+  height: 160px;
+  line-height: 160px;
+}
+
+.profileWrapper {
+  width: 120px;
+  height: 120px;
+  line-height: 120px;
+}
+
+.defaultWrapper {
+  width: 80px;
+  height: 80px;
+  line-height: 80px;
+}
+
+.smallWrapper {
+  width: 40px;
+  height: 40px;
+  line-height: 40px;
+}
+
+.largeWrapper,
+.profileWrapper,
+.smallWrapper {
+  display: table-cell;
+  vertical-align: middle;
+  text-align: center;
+  img {
+    width: 100%;
+    height: 100%;
+    max-width: 100%;
+    max-height: 100%;
+    display: block;
+    margin: auto;
+    overflow: hidden;
+    line-height: 1;
+  }
+}
+
+.border {
+  border: 1px solid rgba(0, 0, 0, 0.05);
+}
+.large {
+  border-radius: 6px;
+}
+.profile {
+  border-radius: 6px;
+}
+.default {
+  border-radius: 8px;
+}
+.small {
+  border-radius: 6px;
+}
+.sourceSrc {
+  padding: 32px;
+  height: 100%;
+  width: 100%;
+}
+.isEnlarge {
+  cursor: pointer;
+}
+.height0 {
+  height: 0!important;
+}
+.height1 {
+  height: 100%!important;
+}

+ 121 - 0
app/components/Avatar/index.tsx

@@ -0,0 +1,121 @@
+import React, { useState, useCallback, useMemo, useRef, useEffect } from 'react'
+import classnames from 'classnames'
+import styles from './Avatar.less'
+const logo = require('assets/images/profile.png')
+import { Modal, Spin } from 'antd'
+import { IAvatarProps, TSize, TImageState } from './types'
+import { useIntersectionObserver } from './useIntersectionObserver'
+
+export const Avatar: React.FC<IAvatarProps> = ({
+  path,
+  size,
+  enlarge,
+  border
+}) => {
+  const elementRef = useRef(null)
+  const [formVisible, setFormVisible] = useState(false)
+  const [inView, entry] = useIntersectionObserver(elementRef, {
+    threshold: 0,
+    rootMargin: '0%',
+    root: null
+  })
+  const [status, setStatus] = useState<TImageState>('loading')
+  const loading = useMemo(() => {
+    return size === 'profile' ? (
+      <Spin size="large" />
+    ) : (
+      <Spin size={size as TSize} />
+    )
+  }, [size, status])
+
+  const showEnlarge = useCallback(() => {
+    setFormVisible(true)
+  }, [formVisible])
+
+  const hideEnlarge = useCallback(() => {
+    setFormVisible(false)
+  }, [formVisible])
+
+  const itemClass = useMemo(() => {
+    return classnames({
+      [styles.isEnlarge]: enlarge,
+      [styles.large]: size === 'large',
+      [styles.small]: size === 'small',
+      [styles.profile]: size === 'profile',
+      [styles.default]: size === 'default',
+      [styles.height0]: status === 'loading',
+      [styles.height1]: status !== 'loading'
+    })
+  }, [size, enlarge, status])
+
+  const imgContent = useMemo(() => {
+    const img = enlarge ? (
+      <img className={itemClass} ref={elementRef} onClick={showEnlarge} />
+    ) : (
+      <img className={itemClass} ref={elementRef} />
+    )
+    return (
+      <>
+        {status === 'loading' ? loading : ''}
+        {img}
+      </>
+    )
+  }, [enlarge, showEnlarge, status])
+
+  const wrapper = useMemo(() => {
+    return classnames({
+      [styles.profileWrapper]: size === 'profile',
+      [styles.defaultWrapper]: size === 'default',
+      [styles.smallWrapper]: size === 'small',
+      [styles.largeWrapper]: size === 'large',
+      [styles.border]: border
+    })
+  }, [size])
+
+  const loaded = useCallback(() => {
+    if (logo !== elementRef.current.src) {
+      setStatus('loaded')
+    }
+  }, [status])
+
+  const loadFail = useCallback(() => {
+    elementRef.current.src = logo
+    setStatus('loadFail')
+  }, [status])
+
+  useEffect(() => {
+    if (!inView) {
+      return
+    }
+    if (!elementRef.current.src || elementRef.current.src !== path) {
+      elementRef.current.src = path
+    }
+    elementRef.current.addEventListener('load', loaded, false)
+    elementRef.current.addEventListener('error', loadFail, false)
+
+    return () => {
+      elementRef.current.removeEventListener('load', loaded)
+      elementRef.current.removeEventListener('error', loadFail)
+    }
+  }, [inView, status, path])
+
+  const modalSrc = useMemo(() => {
+    return status === 'loaded' ? path : logo
+  }, [path, status])
+
+  return (
+    <div className={wrapper}>
+      {imgContent}
+      <Modal
+        title={null}
+        footer={null}
+        visible={formVisible}
+        onCancel={hideEnlarge}
+      >
+        <img src={modalSrc} className={styles.sourceSrc} />
+      </Modal>
+    </div>
+  )
+}
+
+export default Avatar

+ 9 - 0
app/components/Avatar/types.ts

@@ -0,0 +1,9 @@
+export type TSize = 'large' | 'default' | 'small'
+export interface IAvatarProps {
+  path?: string
+  size?: 'profile' | TSize
+  enlarge?: boolean
+  border?: boolean
+}
+
+export type TImageState = 'loading' | 'loaded' | 'loadFail'

+ 69 - 0
app/components/Avatar/useIntersectionObserver.ts

@@ -0,0 +1,69 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { useEffect, useState } from 'react'
+
+interface IntersectionObserverState {
+  inView: boolean
+  triggered: boolean
+  entry: object
+}
+
+const defaultState: IntersectionObserverState = {
+  inView: false,
+  triggered: false,
+  entry: null
+}
+
+export const useIntersectionObserver = (ref, { threshold, root, rootMargin }) => {
+  const [state, setState] = useState<IntersectionObserverState>(defaultState)
+
+  const observeInstance = new IntersectionObserver(
+    (entries, instance) => {
+      if (entries[0].intersectionRatio > 0) {
+        setState({
+          inView: true,
+          triggered: true,
+          entry: instance
+        })
+
+        observeInstance.unobserve(ref.current)
+      }
+      return
+    },
+    {
+      threshold: threshold || 0,
+      root: root || null,
+      rootMargin: rootMargin || '0%'
+    }
+  )
+
+  useEffect(() => {
+    if (ref.current && !state.triggered) {
+      observeInstance.observe(ref.current)
+    }
+    return () => {
+      if (ref.current) {
+        observeInstance.disconnect()
+      }
+    }
+  }, [ref, state])
+  return [state.inView, state.entry]
+}

+ 41 - 0
app/components/Box/Box.less

@@ -0,0 +1,41 @@
+@import "~assets/less/variable";
+
+.box {
+  background-color: @body-background;
+  //border-top: @primary-color 2px solid;
+  border-radius: 2px;
+  box-shadow: 0 1px 2px 0 rgba(0,0,0,.12),
+    0 -1px 0 0 rgba(0,0,0,.03);
+
+  .header {
+    padding: 0 20px;
+    position: relative;
+
+    .title {
+      padding: 15px 0;
+      font-size: 1.25em;
+      font-weight: normal;
+
+      i {
+        margin-right: 5px;
+      }
+    }
+
+    .tools {
+      position: absolute;
+      top: 11px;
+      right: 20px;
+
+      button {
+        margin-left: 8px;
+
+        i + span {
+          margin-left: .5em;
+        }
+      }
+    }
+  }
+  .body {
+    padding: 0 20px;
+  }
+}

+ 64 - 0
app/components/Box/index.tsx

@@ -0,0 +1,64 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React from 'react'
+
+const styles = require('./Box.less')
+
+interface IBoxProps {
+  children: React.ReactNode
+}
+
+export class Box extends React.Component<IBoxProps, {}> {
+
+  public static Header = (props) => (
+    <div className={styles.header}>
+      {props.children}
+    </div>
+  )
+
+  public static Title = (props) => (
+    <h3 className={styles.title}>
+      {props.children}
+    </h3>
+  )
+
+  public static Tools = (props) => (
+    <div className={styles.tools}>
+      {props.children}
+    </div>
+  )
+
+  public static Body = (props) => (
+    <div className={styles.body}>
+      {props.children}
+    </div>
+  )
+
+  public render () {
+    return (
+      <div className={styles.box}>
+        {this.props.children}
+      </div>
+    )
+  }
+}
+
+export default Box

+ 73 - 0
app/components/CheckPanel/CheckPanel.less

@@ -0,0 +1,73 @@
+@minHeight: 400px;
+@maxHeight: 600px;
+
+.highlight {
+  color: rgb(255, 85, 0);
+}
+
+.checkPanelWrapper {
+  display: flex;
+  border: 1px solid #ececec;
+  border-radius: 4px;
+
+  .leftWrapper {
+    width: calc(50% - 1px);
+    border-right: 1px solid #ececec;
+  }
+
+  .rightWrapper {
+    width: 50%;
+  }
+
+  .headWrapper {
+    display: flex;
+    height: 40px;
+    padding: 0 12px;
+    align-items: center;
+    justify-content: space-between;
+    border-bottom: 1px solid #ececec;
+  }
+
+  .contentWrapper, .tagWrapper {
+    padding: 12px;
+  }
+
+  .optionRow {
+    min-height: calc(@minHeight - 40px - 32px - 12px);
+    max-height: calc(@maxHeight - 40px - 32px - 12px);
+    margin-top: 12px;
+    overflow-y: scroll;
+  
+    :global(.ant-checkbox-wrapper) {
+      width: calc(25% - 8px);
+      margin-bottom: 10px;
+    }
+  
+    :global(.ant-checkbox-wrapper + .ant-checkbox-wrapper) {
+      margin-left: 0;
+    }
+  }
+
+  .tagWrapper {
+    min-height: calc(@minHeight - 40px);
+    max-height: calc(@maxHeight - 40px);
+    overflow-y: scroll;
+  }
+
+  :global(.ant-tag) {
+    font-size: 14px;
+    margin-bottom: 12px;
+    .highlight {
+      color: #fff;
+    }
+  }
+
+  :global(.ant-checkbox + span) {
+    width: calc(100% - 16px);
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: inline-block;
+    white-space: nowrap;
+    vertical-align: bottom;
+  }
+}

+ 177 - 0
app/components/CheckPanel/index.tsx

@@ -0,0 +1,177 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
+import { Input, Checkbox, Tag, Tooltip } from 'antd'
+import { ICheckPanelProps } from './types'
+import { getSeparatedContent } from './utils'
+import debounce from 'lodash/debounce'
+import concat from 'lodash/concat'
+
+import styles from './CheckPanel.less'
+
+const CheckPanel: React.FC<ICheckPanelProps> = (
+  {
+    dataSource,
+    defaultKeys,
+    placeholder,
+    labelKey,
+    valueKey,
+    labelInValue,
+    closableByTag,
+    tokenSeparators,
+    onChange,
+  }
+) => {
+
+  const label = labelKey || 'label'
+  const value = valueKey || 'value'
+
+  const [checkedKeys, setCheckedKeys] = useState<any[]>([])
+  const [targets, setTargets] = useState<any[]>([])
+  const [filterValue, setFilterValue] = useState<string>('')
+
+  useEffect(() => {
+    if (defaultKeys && defaultKeys.length) {
+      setCheckedKeys(defaultKeys)
+      setTargets(dataSource.filter(v => defaultKeys.some(key => key === v[value])))
+    }
+  }, [])
+
+  const filterDataSource = useMemo(() => {
+    if (tokenSeparators && tokenSeparators.length) {
+      const separatedContent = getSeparatedContent(filterValue, tokenSeparators)
+      const pathLabels = separatedContent && separatedContent.length ? separatedContent : [filterValue]
+      return dataSource
+        .filter(data => pathLabels.some(key => data[label].includes(key)))
+    }
+
+    return dataSource
+      .filter((data) => data[label].includes(filterValue))
+  }, [filterValue])
+
+  const debouncedSearch = useCallback(
+    debounce((searchValue: string) => {
+      setFilterValue(searchValue)
+    }, 300),
+    []
+  )
+
+  const panel = useMemo(() => ({
+    indeterminate: !!checkedKeys.length && checkedKeys.length < dataSource.length,
+    checkAll: checkedKeys.length === dataSource.length,
+  }), [checkedKeys])
+
+  const checkOrNot = useCallback(
+    (value) => checkedKeys.some(key => key === value),
+    [checkedKeys]
+  )
+
+  const handleChange = useCallback((key: string | number, checked: boolean) => {
+    const holderKeys = concat([], checkedKeys)
+    const holderTargets = concat([], targets)
+
+    if (checked) {
+      const index = dataSource.findIndex(item => item[value] === key)
+      holderTargets.push(dataSource[index])
+      holderKeys.push(key)
+    } else {
+      holderKeys.splice(holderKeys.findIndex(k => k === key), 1)
+      holderTargets.splice(holderTargets.findIndex(tag => tag[value] === key), 1)
+    }
+
+    setCheckedKeys(holderKeys)
+    setTargets(holderTargets)
+    if (onChange) {
+      onChange(labelInValue ? holderTargets : holderKeys)
+    }
+  }, [checkedKeys, targets, onChange])
+
+  const onCheckAllChange = useCallback((checked: boolean) => {
+    const keys = dataSource.map(item => item[value])
+    const items = [...dataSource]
+
+    setCheckedKeys(checked ? keys : [])
+    setTargets(checked ? items : [])
+    if (onChange) {
+      onChange(labelInValue ? items : keys)
+    }
+  }, [onChange])
+
+  return (
+    <div className={styles.checkPanelWrapper}>
+      <div className={styles.leftWrapper}>
+        <div className={styles.headWrapper}>
+          <Checkbox
+            indeterminate={panel.indeterminate}
+            checked={panel.checkAll}
+            onChange={e => onCheckAllChange(e.target.checked)}
+          >{filterDataSource.length} 项</Checkbox>
+          <div>列表</div>
+        </div>
+        <div className={styles.contentWrapper}>
+          <Input.Search
+            placeholder={placeholder || '请输入关键词'}
+            onChange={e => debouncedSearch(e.target.value)}
+          />
+          {/* <div className={styles.tips}></div> */}
+          <div className={styles.optionRow}>
+            {filterDataSource.length ? filterDataSource.map((item, index) => (
+              <Checkbox
+                key={`${item[value]}-${index}`}
+                checked={checkOrNot(item[value])}
+                value={item[value]}
+                onChange={e => handleChange(e.target.value, e.target.checked)}
+              >
+                <Tooltip title={item[label]}>
+                  {item[label]}
+                </Tooltip>
+              </Checkbox>
+            )) : null}
+          </div>
+        </div>
+      </div>
+      <div className={styles.rightWrapper}>
+        <div className={styles.headWrapper}>
+          <div>{targets.length} 项</div>
+          <div>已选</div>
+        </div>
+        <div className={styles.tagWrapper}>
+          {
+            targets.length ? targets.map((tag, index) => (
+              <Tag
+                key={`${tag[value]}-${index}`}
+                color="#108ee9"
+                closable={closableByTag}
+                onClose={e => {
+                  e.preventDefault()
+                  handleChange(tag[value], false)
+                }}
+              >
+                {tag[label]}
+              </Tag>
+            )) : null
+          }
+        </div>
+      </div>
+    </div>
+  )
+}
+
+export default CheckPanel

+ 11 - 0
app/components/CheckPanel/types.ts

@@ -0,0 +1,11 @@
+export interface ICheckPanelProps {
+  dataSource: any[]
+  defaultKeys?: any[]
+  labelKey?: string
+  valueKey?: string
+  placeholder?: string
+  labelInValue?: boolean
+  closableByTag?: boolean
+  tokenSeparators?: string[]
+  onChange?: (targets: any[]) => any
+}

+ 23 - 0
app/components/CheckPanel/utils.ts

@@ -0,0 +1,23 @@
+export function getSeparatedContent(text: string, tokens: string[]): string[] {
+  if (!tokens || !tokens.length) {
+    return null;
+  }
+
+  let match = false;
+
+  function separate(str: string, [token, ...restTokens]: string[]) {
+    if (!token) {
+      return [str];
+    }
+
+    const list = str.split(token);
+    match = match || list.length > 1;
+
+    return list
+      .reduce((prevList, unitStr) => [...prevList, ...separate(unitStr, restTokens)], [])
+      .filter(unit => unit);
+  }
+
+  const list = separate(text, tokens);
+  return match ? list : null;
+}

+ 43 - 0
app/components/ColorPicker/ColorPicker.less

@@ -0,0 +1,43 @@
+@import "~assets/less/variable";
+
+:global {
+  .sketch-picker {
+    user-select: none;
+  }
+}
+
+.picker {
+  height: 28px;
+  border: 1px solid @border-color-base;
+  border-radius: 4px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  cursor: pointer;
+
+  &:global(-sm) {
+    height: 24px;
+    width: 24px;
+
+    .colorIndicator {
+      height: 12px;
+      width: 12px;
+    }
+  }
+
+  &:global(-lg) {
+    height: 40px;
+    width: 40px;
+
+    .colorIndicator {
+      height: 20px;
+      width: 20px;
+    }
+  }
+}
+
+.colorIndicator {
+  width: 14px;
+  height: 14px;
+  display: block;
+}

+ 83 - 0
app/components/ColorPicker/index.tsx

@@ -0,0 +1,83 @@
+import React, {
+  useCallback,
+  RefForwardingComponent,
+  PropsWithChildren,
+  useMemo
+} from 'react'
+import classnames from 'classnames'
+import { SketchPicker, ColorResult } from 'react-color'
+import { Popover } from 'antd'
+const styles = require('./ColorPicker.less')
+
+const defaultTheme = require('assets/json/echartsThemes/default.project.json')
+const defaultThemeColors = defaultTheme.theme.color
+
+interface IColorPickerProps {
+  value?: string | [number, number, number, number]
+  size?: 'default' | 'small' | 'large'
+  preset?: boolean
+  disableAlpha?: boolean
+  rawValue?: boolean
+  className?: string
+  onChange?: (value: string | [number, number, number, number]) => void
+}
+
+const ColorPicker: RefForwardingComponent<
+  Popover,
+  PropsWithChildren<IColorPickerProps>
+> = (props, ref) => {
+  const { value, size, preset, disableAlpha, rawValue, className, onChange } = props
+
+  const cls = classnames({
+    [styles.picker]: true,
+    [className]: !!className,
+    [`${styles.picker}-sm`]: size && size === 'small',
+    [`${styles.picker}-lg`]: size && size === 'large'
+  })
+
+  const colorChange = useCallback(
+    (e: ColorResult) => {
+      const { r, g, b, a } = e.rgb
+      onChange(rawValue ? [r, g, b, a] : `rgba(${r}, ${g}, ${b}, ${a})`)
+    },
+    [onChange, rawValue]
+  )
+
+  const color = useMemo(
+    (): string =>
+      rawValue && value
+        ? `rgba(${(value as [number, number, number, number]).join()})`
+        : (value as string),
+    [value, rawValue]
+  )
+
+  return (
+    <Popover
+      ref={ref}
+      content={
+        <div style={{ margin: '-8px -16px' }}>
+          <SketchPicker
+            color={color}
+            presetColors={preset ? defaultThemeColors : []}
+            onChangeComplete={colorChange}
+            disableAlpha={disableAlpha}
+          />
+        </div>
+      }
+      trigger="click"
+      placement="right"
+    >
+      {props.children || (
+        <div className={cls}>
+          <span
+            className={styles.colorIndicator}
+            style={{ background: color }}
+          />
+        </div>
+      )}
+    </Popover>
+  )
+}
+
+export type ColorPickerProps = IColorPickerProps
+export default React.forwardRef(ColorPicker)

+ 24 - 0
app/components/ConditionValuesControl/ConditionValuesControl.less

@@ -0,0 +1,24 @@
+.rowBlock {
+  min-height: 40px;
+}
+
+.colDivider {
+  text-align: center;
+}
+
+.tagList {
+  padding-top: 8px;
+
+  .tag {
+    margin-bottom: 8px;
+  }
+
+  .tagInput {
+    margin-right: 8px;
+    margin-bottom: 8px;
+  }
+
+  .tagBtn {
+    margin-bottom: 8px;
+  }
+}

+ 359 - 0
app/components/ConditionValuesControl/index.tsx

@@ -0,0 +1,359 @@
+import React from 'react'
+import classnames from 'classnames'
+import moment, { Moment } from 'moment'
+import OperatorTypes from 'utils/operatorTypes'
+
+import { Row, Col, Input, InputNumber, DatePicker, Button, Tag, Switch } from 'antd'
+import { DEFAULT_DATETIME_FORMAT } from 'app/globalConstants'
+import Styles from './ConditionValuesControl.less'
+
+export type ConditionValueTypes = string | number | boolean
+
+interface IConditionValuesControlProps {
+  className?: string
+  size: 'small' | 'default'
+  visualType: string
+  operatorType: OperatorTypes
+  conditionValues: ConditionValueTypes[]
+  onChange: (values: ConditionValueTypes[]) => void
+}
+
+
+interface IConditionValuesControlStates {
+  localValues: ConditionValueTypes[]
+  tagInputting: boolean
+  tagInputValue: ConditionValueTypes
+}
+
+export class ConditionValuesControl extends React.PureComponent<IConditionValuesControlProps, IConditionValuesControlStates> {
+
+  public static defaultProps: Partial<IConditionValuesControlProps> = { size: 'default' }
+
+  private controlStyle: React.CSSProperties = { width: '100%' }
+
+  public constructor (props: IConditionValuesControlProps) {
+    super(props)
+    this.state = {
+      localValues: [],
+      tagInputting: false,
+      tagInputValue: ''
+    }
+  }
+
+  public componentDidMount () {
+    const { operatorType, visualType, conditionValues } = this.props
+    this.initLocalValues(operatorType, visualType, conditionValues)
+  }
+
+  public componentWillReceiveProps (nextProps: IConditionValuesControlProps) {
+    const { visualType, operatorType, conditionValues } = nextProps
+    this.initLocalValues(operatorType, visualType, conditionValues)
+  }
+
+  private initLocalValues (
+    operatorType: OperatorTypes,
+    visualType: string,
+    conditionValues: ConditionValueTypes[]
+  ) {
+    const values = []
+    const initValue = this.getInitValueByVisualType(visualType)
+    let valuesCount = 0
+    switch (operatorType) {
+      case OperatorTypes.Contain:
+      case OperatorTypes.Equal:
+      case OperatorTypes.GreaterThan:
+      case OperatorTypes.GreaterThanOrEqual:
+      case OperatorTypes.LessThan:
+      case OperatorTypes.LessThanOrEqual:
+      case OperatorTypes.NotEqual:
+        valuesCount = 1
+        break
+      case OperatorTypes.Between:
+        valuesCount = 2
+        break
+      case OperatorTypes.In:
+        valuesCount = conditionValues.length
+        break
+    }
+
+    for (let idx = 0; idx < valuesCount; idx++) {
+      if (conditionValues[idx] && typeof conditionValues[idx] === typeof initValue) {
+        values.push(conditionValues[idx])
+      } else {
+        values.push(initValue)
+      }
+    }
+
+    this.setState({ localValues: values })
+  }
+
+  private getInitValueByVisualType (visualType: string): ConditionValueTypes {
+    switch (visualType) {
+      case 'string':
+      case 'geoCountry':
+      case 'geoProvince':
+      case 'geoCity':
+        return ''
+      case 'number':
+        return 0
+      case 'date':
+        return moment().format('YYYY-MM-DD')
+      case 'boolean':
+        return false
+      default:
+        return null
+    }
+  }
+
+  private getControlValueByVisualType (visualType: string, args: any[]) {
+    let value: ConditionValueTypes
+    switch (visualType) {
+      case 'string':
+      case 'geoCountry':
+      case 'geoProvince':
+      case 'geoCity':
+        value = (args[0] as React.ChangeEvent<HTMLInputElement>).target.value
+        break
+      case 'number':
+      case 'boolean':
+        value = args[0]
+        break
+      case 'date':
+        value = args[1]
+        break
+    }
+    return value
+  }
+
+  private localValuesChange = (idx: number) => (...args: any[]) => {
+    const { onChange, visualType } = this.props
+    const value = this.getControlValueByVisualType(visualType, args)
+    const { localValues } = this.state
+    const values = [...localValues]
+    values.splice(idx, 1, value)
+    onChange(values)
+  }
+
+  private renderControl = (idx: number) => {
+    const { visualType, size } = this.props
+    const { localValues } = this.state
+
+    let control: React.ReactNode
+    switch (visualType) {
+      case 'string':
+      case 'geoCountry':
+      case 'geoProvince':
+      case 'geoCity':
+        const stringValue = localValues[idx] as string
+        control = (
+          <Input
+            style={this.controlStyle}
+            size={size}
+            value={stringValue}
+            onChange={this.localValuesChange(idx)}
+          />
+        )
+        break
+      case 'number':
+        const numberValue = localValues[idx] as number
+        control = (
+          <InputNumber
+            style={this.controlStyle}
+            size={size}
+            value={numberValue}
+            onChange={this.localValuesChange(idx)}
+          />
+        )
+        break
+      case 'date':
+        const dateValue = moment(localValues[idx] as string)
+        control = (
+          <DatePicker
+            style={this.controlStyle}
+            size={size}
+            format={DEFAULT_DATETIME_FORMAT}
+            showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}
+            value={dateValue}
+            onChange={this.localValuesChange(idx)}
+          />
+        )
+        break
+      case 'boolean':
+        const booleanValue = localValues[idx] as boolean
+        control = (
+          <Switch
+            size={size}
+            checkedChildren="是"
+            unCheckedChildren="否"
+            checked={booleanValue}
+            onChange={this.localValuesChange(idx)}
+          />
+        )
+    }
+
+    return control
+  }
+
+  private renderRow = () => {
+    const { operatorType } = this.props
+
+    let controls: React.ReactNode
+    switch (operatorType) {
+      case OperatorTypes.Contain:
+      case OperatorTypes.Equal:
+      case OperatorTypes.GreaterThan:
+      case OperatorTypes.GreaterThanOrEqual:
+      case OperatorTypes.LessThan:
+      case OperatorTypes.LessThanOrEqual:
+      case OperatorTypes.NotEqual:
+        controls = this.renderControl(0)
+        break
+      case OperatorTypes.Between:
+        controls = (
+          <Row key="between" type="flex" align="middle" className={Styles.rowBlock}>
+            <Col span={11}>
+              {this.renderControl(0)}
+            </Col>
+            <Col span={2} className={Styles.colDivider}>-</Col>
+            <Col span={11}>
+              {this.renderControl(1)}
+            </Col>
+          </Row>
+        )
+        break
+      case OperatorTypes.In:
+        controls = this.renderTags()
+        break
+    }
+
+    return controls
+  }
+
+  private renderTags = () => {
+    const { visualType, size } = this.props
+    const { localValues, tagInputting, tagInputValue } = this.state
+
+    const tagList = localValues.map((val) => (
+      <Tag key={val.toString()} className={Styles.tag} closable onClose={this.removeTag(val)}>{val}</Tag>
+    ))
+
+    const tagInputControl = []
+    if (tagInputting) {
+      switch (visualType) {
+        case 'string':
+        case 'geoCountry':
+        case 'geoProvince':
+        case 'geoCity':
+          tagInputControl.push(
+            <Input
+              key="input"
+              type="text"
+              size="small"
+              className={Styles.tagInput}
+              value={(tagInputValue as string)}
+              onChange={this.tagInputValueChange}
+              onBlur={this.addTag}
+              onPressEnter={this.addTag}
+            />
+          )
+          break
+        case 'number':
+          tagInputControl.push(
+            <InputNumber
+              key="inputNumber"
+              size="small"
+              className={Styles.tagInput}
+              value={(tagInputValue as number)}
+              onChange={this.tagInputValueChange}
+            />
+          )
+          break
+        case 'date':
+          const dateValue = moment((tagInputValue || moment().format('YYYY-MM-DD')) as string)
+          tagInputControl.push(
+            <DatePicker
+              key="datePicker"
+              size="small"
+              className={Styles.tagInput}
+              value={dateValue}
+              onChange={this.tagInputValueChange}
+            />
+          )
+          break
+      }
+      tagInputControl.push(
+        <Button
+          key="saveTag"
+          className={Styles.tagBtn}
+          size="small"
+          type="dashed"
+          onClick={this.addTag}
+        >
+          确定
+        </Button>)
+    } else {
+      tagInputControl.push(
+        <Button
+          key="addTag"
+          className={Styles.tagBtn}
+          size="small"
+          type="dashed"
+          onClick={this.showTagInput}
+        >
+          + 添加
+        </Button>)
+    }
+
+    const rowCls = classnames({
+      [Styles.rowBlock]: true,
+      [Styles.tagList]: true
+    })
+
+    return (
+      <Row key="tag" type="flex" align="middle" className={rowCls}>
+        {tagList}{tagInputControl}
+      </Row>
+    )
+  }
+
+  private showTagInput = () => {
+    this.setState({
+      tagInputting: true
+    })
+  }
+
+  private addTag = () => {
+    const { tagInputValue, localValues } = this.state
+    if (tagInputValue) {
+      const { onChange, visualType, operatorType } = this.props
+      onChange([...localValues.filter((val) => val !== tagInputValue), tagInputValue])
+      this.setState({
+        tagInputting: false,
+        tagInputValue: this.getInitValueByVisualType(visualType)
+      })
+    }
+  }
+
+  private removeTag = (tag) => () => {
+    const { onChange } = this.props
+    const { localValues } = this.state
+    onChange(localValues.filter((val) => val !== tag))
+  }
+
+  private tagInputValueChange = (...args: any[]) => {
+    const { visualType } = this.props
+    const tagInputValue = this.getControlValueByVisualType(visualType, args)
+    this.setState({ tagInputValue })
+  }
+
+  public render () {
+    const { className } = this.props
+    return (
+      <div className={className}>
+        {this.renderRow()}
+      </div>
+    )
+  }
+}
+
+export default ConditionValuesControl

+ 42 - 0
app/components/Container/Body.tsx

@@ -0,0 +1,42 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, forwardRef } from 'react'
+import classnames from 'classnames'
+import styles from './Container.less'
+
+interface IContainerBodyProps {
+  grid?: boolean
+  children: React.ReactNode
+}
+
+const Body: FC<IContainerBodyProps> = ({ grid, children }, ref) => {
+  const bodyClass = classnames({
+    [styles.body]: true,
+    [styles.grid]: grid
+  })
+  return (
+    <div className={bodyClass} ref={ref}>
+      {children}
+    </div>
+  )
+}
+
+export default forwardRef(Body)

+ 25 - 0
app/components/Container/Container.less

@@ -0,0 +1,25 @@
+.container {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .title {
+    flex-shrink: 0;
+    padding: 16px;
+  }
+
+  .body {
+    flex: 1;
+    padding: 5px 16px 66px;
+    overflow-y: auto;
+
+    &:first-child {
+      padding-top: 20px;
+    }
+
+    &.grid {
+      padding: 0;
+    }
+  }
+}

+ 37 - 0
app/components/Container/Title.tsx

@@ -0,0 +1,37 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, forwardRef } from 'react'
+import styles from './Container.less'
+
+interface IContainerTitleProps {
+  grid?: boolean
+  children: React.ReactNode
+}
+
+const Title: FC<IContainerTitleProps> = ({ grid, children }, ref) => {
+  return (
+    <div className={styles.title} ref={ref}>
+      {children}
+    </div>
+  )
+}
+
+export default forwardRef(Title)

+ 35 - 0
app/components/Container/index.tsx

@@ -0,0 +1,35 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC } from 'react'
+import styles from './Container.less'
+
+interface IContainerProps {
+  children: React.ReactNode
+}
+
+const Container: FC<IContainerProps> = ({ children }) => {
+  return <div className={styles.container}>{children}</div>
+}
+
+export default Container
+
+export { default as ContainerTitle } from './Title'
+export { default as ContainerBody } from './Body'

+ 380 - 0
app/components/Control/Config/ControlForm/BaseForm.tsx

@@ -0,0 +1,380 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, useCallback, memo } from 'react'
+import {
+  Form,
+  Row,
+  Col,
+  Input,
+  InputNumber,
+  Radio,
+  Select,
+  Divider
+} from 'antd'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import Condition from './Condition'
+import {
+  ControlTypesLocale,
+  ControlTypes,
+  DatePickerFormatsLocale,
+  ControlVisibilityTypes,
+  SHOULD_LOAD_OPTIONS
+} from '../../constants'
+import { IControl } from '../../types'
+import { getDatePickerFormatOptions } from '../../util'
+import utilStyles from 'assets/less/util.less'
+const FormItem = Form.Item
+const Option = Select.Option
+const RadioGroup = Radio.Group
+const RadioButton = Radio.Button
+
+interface IBaseFormProps {
+  form: WrappedFormUtils
+  controls: IControl[]
+  controlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  onControlTypeChange: (value) => void
+  onMultipleSettingChange: (e: CheckboxChangeEvent) => void
+  onSliderPropChange: (min: number, max: number, step: number) => void
+  onCommonPropChange: (propName: string, value) => void
+}
+
+const BaseForm: FC<IBaseFormProps> = ({
+  form,
+  controls,
+  controlBase,
+  onControlTypeChange,
+  onMultipleSettingChange,
+  onSliderPropChange,
+  onCommonPropChange
+}) => {
+  const { getFieldDecorator } = form
+  const { key, type, multiple, visibility } = controlBase
+  const datePickerFormatOptions = getDatePickerFormatOptions(type, multiple)
+  const colSpan = { xxl: 12, xl: 18 }
+  const itemCols = {
+    labelCol: { span: 8 },
+    wrapperCol: { span: 12 }
+  }
+
+  const radioTypeChange = useCallback(
+    (e: RadioChangeEvent) => {
+      onCommonPropChange('radioType', e.target.value)
+    },
+    [onCommonPropChange]
+  )
+  const visibilityChange = useCallback(
+    (e: RadioChangeEvent) => {
+      onCommonPropChange('visibility', e.target.value)
+    },
+    [onCommonPropChange]
+  )
+
+  const minChange = useCallback(
+    (value) => {
+      const { max, step } = form.getFieldsValue()
+      onSliderPropChange(value, max, step)
+    },
+    [form, onSliderPropChange]
+  )
+  const maxChange = useCallback(
+    (value) => {
+      const { min, step } = form.getFieldsValue()
+      onSliderPropChange(min, value, step)
+    },
+    [form, onSliderPropChange]
+  )
+  const stepChange = useCallback(
+    (value) => {
+      const { min, max } = form.getFieldsValue()
+      onSliderPropChange(min, max, value)
+    },
+    [form, onSliderPropChange]
+  )
+  const labelChange = useCallback(
+    (e: CheckboxChangeEvent) => {
+      onCommonPropChange('label', e.target.checked)
+    },
+    [onCommonPropChange]
+  )
+
+  const minValidator = useCallback(
+    (rule, value, callback) => {
+      if (typeof value === 'number') {
+        const max = form.getFieldValue('max')
+        if (typeof max === 'number' && value > max) {
+          callback('最小值不能大于最大值')
+        } else {
+          callback()
+        }
+      } else {
+        callback()
+      }
+    },
+    [form]
+  )
+  const maxValidator = useCallback(
+    (rule, value, callback) => {
+      form.validateFields(['min'], { force: true }, () => void 0)
+      callback()
+    },
+    [form]
+  )
+
+  const getDateFormatComponent = useCallback(
+    () => (
+      <Row key="dateFormat">
+        <Col {...colSpan}>
+          <FormItem label="日期格式" {...itemCols}>
+            {getFieldDecorator(
+              'dateFormat',
+              {}
+            )(
+              <Select>
+                {datePickerFormatOptions.map((format) => {
+                  const title = DatePickerFormatsLocale[format]
+                  return (
+                    <Option key={title} value={format}>
+                      {title}
+                    </Option>
+                  )
+                })}
+              </Select>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+    ),
+    [datePickerFormatOptions]
+  )
+
+  const getMultipleComponent = useCallback(
+    () => (
+      <Row key="multiple">
+        <Col {...colSpan}>
+          <FormItem label="多选" {...itemCols}>
+            {getFieldDecorator('multiple', { valuePropName: 'checked' })(
+              <Checkbox onChange={onMultipleSettingChange} />
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+    ),
+    [onMultipleSettingChange]
+  )
+
+  let controlPropComponents
+  switch (type) {
+    case ControlTypes.Date:
+      controlPropComponents = [getDateFormatComponent(), getMultipleComponent()]
+      break
+    case ControlTypes.DateRange:
+      controlPropComponents = [getDateFormatComponent()]
+      break
+    case ControlTypes.Select:
+    case ControlTypes.TreeSelect:
+      controlPropComponents = [getMultipleComponent()]
+      break
+    case ControlTypes.Radio:
+      controlPropComponents = (
+        <Row key="radioType">
+          <Col {...colSpan}>
+            <FormItem label="按钮样式" {...itemCols}>
+              {getFieldDecorator(
+                'radioType',
+                {}
+              )(
+                <RadioGroup onChange={radioTypeChange}>
+                  <RadioButton value="normal">常规</RadioButton>
+                  <RadioButton value="button">按钮</RadioButton>
+                </RadioGroup>
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.Slider:
+      controlPropComponents = (
+        <>
+          <Row key="min">
+            <Col {...colSpan}>
+              <FormItem label="最小值" {...itemCols}>
+                {getFieldDecorator('min', {
+                  rules: [
+                    { required: true, message: '最小值不能为空' },
+                    { validator: minValidator }
+                  ]
+                })(<InputNumber onChange={minChange} />)}
+              </FormItem>
+            </Col>
+          </Row>
+          <Row key="max">
+            <Col {...colSpan}>
+              <FormItem label="最大值" {...itemCols}>
+                {getFieldDecorator('max', {
+                  rules: [
+                    { required: true, message: '最大值不能为空' },
+                    { validator: maxValidator }
+                  ]
+                })(<InputNumber onChange={maxChange} />)}
+              </FormItem>
+            </Col>
+          </Row>
+          <Row key="step">
+            <Col {...colSpan}>
+              <FormItem label="步长" {...itemCols}>
+                {getFieldDecorator('step', { initialValue: 1 })(
+                  <InputNumber min={1} onChange={stepChange} />
+                )}
+              </FormItem>
+            </Col>
+          </Row>
+          <Row key="label">
+            <Col {...colSpan}>
+              <FormItem label="显示标签" {...itemCols}>
+                {getFieldDecorator('label', { valuePropName: 'checked' })(
+                  <Checkbox onChange={labelChange} />
+                )}
+              </FormItem>
+            </Col>
+          </Row>
+        </>
+      )
+      break
+  }
+
+  const selectTypeControls = controls.filter(
+    (c) => c.type === ControlTypes.Select && c.key !== key
+  )
+
+  return (
+    <>
+      <Divider orientation="left">控制器配置</Divider>
+      <Row>
+        <Col {...colSpan}>
+          <FormItem className={utilStyles.hide}>
+            {getFieldDecorator('key', {})(<Input />)}
+          </FormItem>
+          <FormItem label="类型" {...itemCols}>
+            {getFieldDecorator(
+              'type',
+              {}
+            )(
+              <Select onChange={onControlTypeChange}>
+                {Object.values(ControlTypes).map((controlType) => (
+                  <Option key={controlType} value={controlType}>
+                    {ControlTypesLocale[controlType]}
+                  </Option>
+                ))}
+              </Select>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+      {controlPropComponents}
+      {SHOULD_LOAD_OPTIONS[type] && (
+        <>
+          <Row key="cache">
+            <Col {...colSpan}>
+              <FormItem label="缓存" {...itemCols}>
+                {getFieldDecorator(
+                  'cache',
+                  {}
+                )(
+                  <RadioGroup>
+                    <RadioButton value={true}>开启</RadioButton>
+                    <RadioButton value={false}>关闭</RadioButton>
+                  </RadioGroup>
+                )}
+              </FormItem>
+            </Col>
+          </Row>
+          <Row key="expired">
+            <Col {...colSpan}>
+              <FormItem label="有效期(秒)" {...itemCols}>
+                {getFieldDecorator('expired', {})(<InputNumber />)}
+              </FormItem>
+            </Col>
+          </Row>
+        </>
+      )}
+      <Row>
+        <Col {...colSpan}>
+          <FormItem label="宽度" {...itemCols}>
+            {getFieldDecorator(
+              'width',
+              {}
+            )(
+              <Select>
+                <Option value={0}>自动适应</Option>
+                <Option value={24}>100%</Option>
+                <Option value={12}>50%</Option>
+                <Option value={8}>33.33% (1/3)</Option>
+                <Option value={6}>25% (1/4)</Option>
+                <Option value={4}>16.67% (1/6)</Option>
+                <Option value={3}>12.5% (1/8)</Option>
+                <Option value={2}>8.33% (1/12)</Option>
+              </Select>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+      <Row>
+        <Col {...colSpan}>
+          <FormItem label="是否可见" {...itemCols}>
+            {getFieldDecorator(
+              'visibility',
+              {}
+            )(
+              <RadioGroup onChange={visibilityChange}>
+                <RadioButton value={ControlVisibilityTypes.Visible}>
+                  显示
+                </RadioButton>
+                <RadioButton value={ControlVisibilityTypes.Hidden}>
+                  隐藏
+                </RadioButton>
+                <RadioButton value={ControlVisibilityTypes.Conditional}>
+                  条件
+                </RadioButton>
+              </RadioGroup>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+      {visibility === ControlVisibilityTypes.Conditional && (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="显示条件" {...itemCols}>
+              {getFieldDecorator(
+                'conditions[0]',
+                {}
+              )(<Condition controls={selectTypeControls} />)}
+            </FormItem>
+          </Col>
+        </Row>
+      )}
+    </>
+  )
+}
+
+export default memo(BaseForm)

+ 146 - 0
app/components/Control/Config/ControlForm/Condition.tsx

@@ -0,0 +1,146 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, {
+  PureComponent,
+  GetDerivedStateFromProps,
+  ChangeEvent
+} from 'react'
+import { Input, Select } from 'antd'
+import { IControl, IControlCondition } from '../../types'
+import { getOperatorOptions } from '../../util'
+import OperatorTypes, { OperatorTypesLocale } from 'app/utils/operatorTypes'
+const InputGroup = Input.Group
+const Option = Select.Option
+
+interface IConditionProps {
+  controls: IControl[]
+  value?: IControlCondition
+  onChange?: (value: IControlCondition) => void
+}
+
+interface IConditionStates {
+  operatorOptions: OperatorTypes[]
+  previousValue: IControlCondition
+}
+
+class Condition extends PureComponent<IConditionProps, IConditionStates> {
+  public state: IConditionStates = {
+    operatorOptions: [],
+    previousValue: void 0
+  }
+
+  public static getDerivedStateFromProps: GetDerivedStateFromProps<
+    IConditionProps,
+    IConditionStates
+  > = (props, state) => {
+    const { controls, value } = props
+    let nextState: Partial<IConditionStates> = {}
+    if (props.value !== state.previousValue) {
+      nextState = { previousValue: props.value }
+    }
+    if (value?.control && value?.control !== state.previousValue?.control) {
+      const control = controls.find((c) => c.key === value.control)
+      if (control) {
+        nextState = {
+          ...nextState,
+          operatorOptions: getOperatorOptions(control.type, control.multiple)
+        }
+      }
+    }
+    return nextState
+  }
+
+  private controlChange = (val) => {
+    const { controls, value, onChange } = this.props
+    const currentControlKey = value?.control
+    let operator = value?.operator
+    if (currentControlKey && val) {
+      const currentControl = controls.find((c) => c.key === currentControlKey)
+      const selectedControl = controls.find((c) => c.key === val)
+      if (
+        currentControl &&
+        !!currentControl.multiple !== !!selectedControl.multiple
+      ) {
+        operator = void 0
+      }
+    }
+    onChange({ ...value, control: val, operator })
+  }
+
+  private operatorChange = (val) => {
+    const { value, onChange } = this.props
+    onChange({ ...value, operator: val })
+  }
+
+  private valueChange = (e: ChangeEvent<HTMLInputElement>) => {
+    const { value, onChange } = this.props
+    onChange({ ...value, value: e.target.value })
+  }
+
+  public render() {
+    const { controls, value } = this.props
+    const { operatorOptions } = this.state
+    const controlKey = value?.control
+    const operator = value?.operator
+    const conditionValue = value?.value
+
+    return (
+      <InputGroup compact>
+        <Select
+          placeholder="关联控件"
+          value={controlKey}
+          dropdownMatchSelectWidth={false}
+          style={{ width: '40%' }}
+          onChange={this.controlChange}
+          allowClear
+        >
+          {controls.map(({ key, name }) => (
+            <Option key={key} value={key}>
+              {name}
+            </Option>
+          ))}
+        </Select>
+        <Select
+          placeholder="关系"
+          value={operator}
+          dropdownMatchSelectWidth={false}
+          style={{ width: '30%' }}
+          onChange={this.operatorChange}
+          allowClear
+        >
+          {operatorOptions.map((o) => (
+            <Option key={o} value={o}>
+              {OperatorTypesLocale[o]}
+            </Option>
+          ))}
+        </Select>
+        <Input
+          placeholder="值"
+          value={conditionValue}
+          style={{ width: '30%' }}
+          onChange={this.valueChange}
+        />
+      </InputGroup>
+    )
+  }
+}
+
+export default Condition

+ 293 - 0
app/components/Control/Config/ControlForm/DefaultValue.tsx

@@ -0,0 +1,293 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, Suspense } from 'react'
+import classnames from 'classnames'
+import { Form, Row, Col, Radio as AntRadio, Icon } from 'antd'
+import RelativeDatePicker from 'components/RelativeDatePicker'
+import Select from '../../Control/Select'
+import Radio from '../../Control/Radio'
+import Date from '../../Control/Date'
+import DateRange from '../../Control/DateRange'
+import InputText from '../../Control/InputText'
+import TreeSelect from '../../Control/TreeSelect'
+import Slider from '../../Control/Slider'
+import NumberRange from 'components/NumberRange'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { TreeNode } from 'antd/lib/tree-select'
+import { IControl, IControlOption } from '../../types'
+import {
+  ControlTypes,
+  ControlDefaultValueTypes,
+  ControlOptionTypes,
+  IS_DATE_TYPE
+} from '../../constants'
+import utilStyles from 'assets/less/util.less'
+const FormItem = Form.Item
+const RadioGroup = AntRadio.Group
+const RadioButton = AntRadio.Button
+
+interface IDefaultValueProps {
+  form: WrappedFormUtils
+  controlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  defaultValueOptions: Array<IControlOption | object>
+  defaultValueLoading: boolean
+  onDefaultValueTypeChange: (e: RadioChangeEvent) => void
+  onGetDefaultValueOptions: () => void
+}
+
+const DefaultValue: FC<IDefaultValueProps> = ({
+  form,
+  controlBase,
+  defaultValueOptions,
+  defaultValueLoading,
+  onDefaultValueTypeChange,
+  onGetDefaultValueOptions
+}) => {
+  const { getFieldDecorator } = form
+  const {
+    type,
+    multiple,
+    optionType,
+    defaultValueType,
+    customOptions
+  } = controlBase
+
+  const colSpan = { xxl: 12, xl: 18 }
+  const itemCols = {
+    labelCol: { span: 8 },
+    wrapperCol: { span: 12 }
+  }
+
+  let component
+
+  switch (type) {
+    case ControlTypes.Select:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {[ControlOptionTypes.Auto, ControlOptionTypes.Manual].includes(
+                optionType
+              ) && (
+                <a onClick={onGetDefaultValueOptions}>
+                  {`点击加载 `}
+                  {defaultValueLoading && <Icon type="loading" />}
+                </a>
+              )}
+              {getFieldDecorator(
+                'defaultValue',
+                {}
+              )(
+                <Select
+                  control={controlBase}
+                  options={
+                    optionType === ControlOptionTypes.Custom
+                      ? customOptions || []
+                      : (defaultValueOptions as IControlOption[])
+                  }
+                />
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.Radio:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {[ControlOptionTypes.Auto, ControlOptionTypes.Manual].includes(
+                optionType
+              ) && (
+                <a onClick={onGetDefaultValueOptions}>
+                  {`点击加载 `}
+                  {defaultValueLoading && <Icon type="loading" />}
+                </a>
+              )}
+              {getFieldDecorator('defaultValue', {
+                rules: [{ required: true, message: '单选按钮默认值不能为空' }]
+              })(
+                <Radio
+                  control={controlBase}
+                  options={
+                    optionType === ControlOptionTypes.Custom
+                      ? customOptions || []
+                      : (defaultValueOptions as IControlOption[])
+                  }
+                />
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.Date:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {defaultValueType === ControlDefaultValueTypes.Fixed ? (
+                <Suspense fallback={null}>
+                  {getFieldDecorator(
+                    'defaultValue',
+                    {}
+                  )(<Date control={controlBase} size="default" />)}
+                </Suspense>
+              ) : (
+                getFieldDecorator('defaultValue', {})(<RelativeDatePicker />)
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.DateRange:
+      component =
+        defaultValueType === ControlDefaultValueTypes.Fixed ? (
+          <Row>
+            <Col {...colSpan}>
+              <FormItem label="默认值" {...itemCols}>
+                {getFieldDecorator(
+                  'defaultValue',
+                  {}
+                )(<DateRange control={controlBase} />)}
+              </FormItem>
+            </Col>
+          </Row>
+        ) : (
+          <>
+            <Row>
+              <Col {...colSpan}>
+                <FormItem label="默认值-起始" {...itemCols}>
+                  {getFieldDecorator(
+                    'defaultValueStart',
+                    {}
+                  )(<RelativeDatePicker />)}
+                </FormItem>
+              </Col>
+            </Row>
+            <Row>
+              <Col {...colSpan}>
+                <FormItem label="默认值-结束" {...itemCols}>
+                  {getFieldDecorator(
+                    'defaultValueEnd',
+                    {}
+                  )(<RelativeDatePicker />)}
+                </FormItem>
+              </Col>
+            </Row>
+          </>
+        )
+      break
+    case ControlTypes.InputText:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {getFieldDecorator('defaultValue', {})(<InputText />)}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.NumberRange:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {getFieldDecorator('defaultValue', {})(<NumberRange />)}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.Slider:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              {getFieldDecorator('defaultValue', {
+                rules: [{ required: true, message: '数字滑块默认值不能为空' }]
+              })(<Slider control={controlBase} />)}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+    case ControlTypes.TreeSelect:
+      component = (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="默认值" {...itemCols}>
+              <a onClick={onGetDefaultValueOptions}>
+                {`点击加载 `}
+                {defaultValueLoading && <Icon type="loading" />}
+              </a>
+              {getFieldDecorator(
+                'defaultValue',
+                {}
+              )(
+                <TreeSelect
+                  control={controlBase}
+                  options={defaultValueOptions as TreeNode[]}
+                />
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )
+      break
+  }
+
+  return (
+    <>
+      <Row>
+        <Col
+          className={classnames({
+            [utilStyles.hide]: !(IS_DATE_TYPE[type] && !multiple)
+          })}
+          {...colSpan}
+        >
+          <FormItem label="默认值类型" {...itemCols}>
+            {getFieldDecorator(
+              'defaultValueType',
+              {}
+            )(
+              <RadioGroup onChange={onDefaultValueTypeChange}>
+                <RadioButton value={ControlDefaultValueTypes.Fixed}>
+                  固定值
+                </RadioButton>
+                <RadioButton value={ControlDefaultValueTypes.Dynamic}>
+                  动态值
+                </RadioButton>
+              </RadioGroup>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+      {component}
+    </>
+  )
+}
+
+export default DefaultValue

+ 78 - 0
app/components/Control/Config/ControlForm/GlobalControlRelatedItemForm.tsx

@@ -0,0 +1,78 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, memo } from 'react'
+import { Checkbox, Input } from 'antd'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import { CheckboxChangeEvent } from 'antd/lib/checkbox'
+import { IFlatRelatedItem } from './types'
+import utilStyles from 'assets/less/util.less'
+import styles from '../../Control.less'
+
+interface IGlobalControlRelatedItemFormProps {
+  form: WrappedFormUtils
+  relatedItems: IFlatRelatedItem[]
+  onItemCheck: (id: number) => () => void
+  onCheckAll: (e: CheckboxChangeEvent) => void
+}
+
+const GlobalControlRelatedItemForm: FC<IGlobalControlRelatedItemFormProps> = ({
+  form,
+  relatedItems,
+  onItemCheck,
+  onCheckAll
+}) => {
+  const { getFieldDecorator } = form
+  const checkAll = relatedItems.every((item) => item.checked)
+
+  return (
+    <div className={styles.itemContainer}>
+      <div className={styles.title}>
+        <h2>关联图表</h2>
+        <Checkbox
+          className={`${styles.checkAll} ${styles.action}`}
+          checked={checkAll}
+          onChange={onCheckAll}
+        >
+          全选
+        </Checkbox>
+      </div>
+      <ul>
+        {relatedItems.map(({ id, name }) => (
+          <li key={id}>
+            {getFieldDecorator(
+              `relatedItems[${id}].viewId`,
+              {}
+            )(<Input className={utilStyles.hide} />)}
+            {getFieldDecorator(`relatedItems[${id}].checked`, {
+              valuePropName: 'checked'
+            })(
+              <Checkbox className={styles.checkbox} onChange={onItemCheck(id)}>
+                {name}
+              </Checkbox>
+            )}
+          </li>
+        ))}
+      </ul>
+    </div>
+  )
+}
+
+export default memo(GlobalControlRelatedItemForm)

+ 184 - 0
app/components/Control/Config/ControlForm/GlobalControlRelatedViewForm.tsx

@@ -0,0 +1,184 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, memo, useCallback } from 'react'
+import classnames from 'classnames'
+import { Form, Row, Col, Select, Radio, Empty } from 'antd'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { IViewModelProps } from 'app/containers/View/types'
+import { ControlFieldTypes, ControlTypes, IS_RANGE_TYPE } from '../../constants'
+import { IFlatRelatedView } from './types'
+import { filterSelectOption } from 'app/utils/util'
+import styles from '../../Control.less'
+const FormItem = Form.Item
+const Option = Select.Option
+const RadioButton = Radio.Button
+const RadioGroup = Radio.Group
+
+interface IGlobalControlRelatedViewFormProps {
+  form: WrappedFormUtils
+  relatedViews: IFlatRelatedView[]
+  controlType: ControlTypes
+  optionWithVariable: boolean
+  onFieldTypeChange: (id: number) => (e: RadioChangeEvent) => void
+}
+
+const GlobalControlRelatedViewForm: FC<IGlobalControlRelatedViewFormProps> = ({
+  form,
+  relatedViews,
+  controlType,
+  optionWithVariable,
+  onFieldTypeChange
+}) => {
+  const { getFieldDecorator } = form
+
+  const viewsClass = classnames({
+    [styles.views]: true,
+    [styles.empty]: !relatedViews.length
+  })
+
+  const columnValidator = useCallback(
+    (rule, value, callback) => {
+      if (
+        (Array.isArray(value) && !!value.length) ||
+        (!Array.isArray(value) && value !== void 0)
+      ) {
+        const { field } = rule
+        const viewId = field.substring(
+          field.indexOf('[') + 1,
+          field.indexOf(']')
+        )
+        const { fieldType, models, variables } = relatedViews.find(
+          (v) => v.id === Number(viewId)
+        )
+        const selectedModel =
+          fieldType === ControlFieldTypes.Column
+            ? models.find((m) => m.name === value)
+            : Array.isArray(value)
+            ? value.every((v) => variables.find((vr) => vr.name === v))
+            : variables.find((vr) => vr.name === value)
+        if (!selectedModel) {
+          callback('数据模型已变化,请重新选择')
+        } else {
+          callback()
+        }
+      } else {
+        callback()
+      }
+    },
+    [form, relatedViews]
+  )
+
+  return (
+    <div className={styles.viewContainer}>
+      <div className={styles.title}>
+        <h2>关联数据视图</h2>
+      </div>
+      <div className={viewsClass}>
+        {relatedViews.length ? (
+          relatedViews.map(({ id, name, fieldType, models, variables }) => {
+            const isMultiple =
+              IS_RANGE_TYPE[controlType] &&
+              fieldType === ControlFieldTypes.Variable
+            const fieldValues =
+              form.getFieldValue(`relatedViews[${id}].fields`) || []
+            return (
+              <div key={id} className={styles.relatedView}>
+                <div className={styles.name}>
+                  <h4>{name}</h4>
+                  {getFieldDecorator(
+                    `relatedViews[${id}].fieldType`,
+                    {}
+                  )(
+                    <RadioGroup
+                      size="small"
+                      className={styles.fieldType}
+                      disabled={optionWithVariable}
+                      onChange={onFieldTypeChange(id)}
+                    >
+                      <RadioButton value={ControlFieldTypes.Column}>
+                        字段
+                      </RadioButton>
+                      <RadioButton value={ControlFieldTypes.Variable}>
+                        变量
+                      </RadioButton>
+                    </RadioGroup>
+                  )}
+                </div>
+                <Row gutter={8}>
+                  <Col span={24}>
+                    <FormItem>
+                      {getFieldDecorator(`relatedViews[${id}].fields`, {
+                        rules: [
+                          {
+                            required: true,
+                            message: `关联${
+                              fieldType === ControlFieldTypes.Column
+                                ? '字段'
+                                : '变量'
+                            }不能为空`
+                          },
+                          { validator: columnValidator }
+                        ]
+                      })(
+                        <Select
+                          showSearch
+                          placeholder="请选择"
+                          filterOption={filterSelectOption}
+                          {...(isMultiple && { mode: 'multiple' })}
+                          disabled={optionWithVariable}
+                        >
+                          {fieldType === ControlFieldTypes.Column
+                            ? models.map((m: IViewModelProps) => (
+                                <Option key={m.name} value={m.name}>
+                                  {m.name}
+                                </Option>
+                              ))
+                            : variables.map((v) => (
+                                <Option
+                                  key={v.name}
+                                  value={v.name}
+                                  disabled={
+                                    isMultiple &&
+                                    fieldValues.length === 2 &&
+                                    !fieldValues.includes(v.name)
+                                  }
+                                >
+                                  {v.name}
+                                </Option>
+                              ))}
+                        </Select>
+                      )}
+                    </FormItem>
+                  </Col>
+                </Row>
+              </div>
+            )
+          })
+        ) : (
+          <Empty key="empty" image={Empty.PRESENTED_IMAGE_SIMPLE} />
+        )}
+      </div>
+    </div>
+  )
+}
+
+export default memo(GlobalControlRelatedViewForm)

+ 160 - 0
app/components/Control/Config/ControlForm/LocalControlRelatedInfoForm.tsx

@@ -0,0 +1,160 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, useCallback, useMemo, memo } from 'react'
+import { Form, Row, Col, Radio, Select, Divider } from 'antd'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { IFlatRelatedView } from './types'
+import { ControlFieldTypes, ControlTypes, IS_RANGE_TYPE } from '../../constants'
+import { filterSelectOption } from 'app/utils/util'
+import { IViewModelProps } from 'app/containers/View/types'
+const FormItem = Form.Item
+const Option = Select.Option
+const RadioGroup = Radio.Group
+const RadioButton = Radio.Button
+
+interface ILocalControlRelatedInfoFormProps {
+  form: WrappedFormUtils
+  relatedView: IFlatRelatedView
+  controlType: ControlTypes
+  optionWithVariable: boolean
+  onFieldTypeChange: (id: number) => (e: RadioChangeEvent) => void
+}
+
+const LocalControlRelatedInfoForm: FC<ILocalControlRelatedInfoFormProps> = ({
+  form,
+  relatedView,
+  controlType,
+  optionWithVariable,
+  onFieldTypeChange
+}) => {
+  const { getFieldDecorator } = form
+  const { id, fieldType, models, variables } = relatedView
+  const isMultiple =
+    IS_RANGE_TYPE[controlType] && fieldType === ControlFieldTypes.Variable
+  const fieldValues = form.getFieldValue(`relatedViews[${id}].fields`) || []
+  const colSpan = { xxl: 12, xl: 18 }
+  const itemCols = {
+    labelCol: { span: 8 },
+    wrapperCol: { span: 12 }
+  }
+
+  const columnValidator = useCallback(
+    (rule, value, callback) => {
+      if (
+        (Array.isArray(value) && !!value.length) ||
+        (!Array.isArray(value) && value !== void 0)
+      ) {
+        const selectedModel =
+          fieldType === ControlFieldTypes.Column
+            ? models.find((m) => m.name === value)
+            : Array.isArray(value)
+            ? value.every((v) => variables.find((vr) => vr.name === v))
+            : variables.find((vr) => vr.name === value)
+        if (!selectedModel) {
+          callback('数据模型已变化,请重新选择')
+        } else {
+          callback()
+        }
+      } else {
+        callback()
+      }
+    },
+    [form, fieldType, models, variables]
+  )
+
+  const fieldTypeText = useMemo(
+    () => (fieldType === ControlFieldTypes.Column ? '字段' : '变量'),
+    [fieldType]
+  )
+
+  return (
+    <>
+      <Divider orientation="left">关联设置</Divider>
+      <Row>
+        <Col {...colSpan}>
+          <FormItem label="关联类型" {...itemCols}>
+            {getFieldDecorator(
+              `relatedViews[${id}].fieldType`,
+              {}
+            )(
+              <RadioGroup
+                size="small"
+                disabled={optionWithVariable}
+                onChange={onFieldTypeChange(id)}
+              >
+                <RadioButton value={ControlFieldTypes.Column}>字段</RadioButton>
+                <RadioButton value={ControlFieldTypes.Variable}>
+                  变量
+                </RadioButton>
+              </RadioGroup>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+      <Row>
+        <Col {...colSpan}>
+          <FormItem label={`关联${fieldTypeText}`} {...itemCols}>
+            {getFieldDecorator(`relatedViews[${id}].fields`, {
+              rules: [
+                {
+                  required: true,
+                  message: `关联${fieldTypeText}不能为空`
+                },
+                { validator: columnValidator }
+              ]
+            })(
+              <Select
+                showSearch
+                placeholder="请选择"
+                filterOption={filterSelectOption}
+                {...(isMultiple && { mode: 'multiple' })}
+                disabled={optionWithVariable}
+              >
+                {fieldType === ControlFieldTypes.Column
+                  ? models.map((m: IViewModelProps) => (
+                      <Option key={m.name} value={m.name}>
+                        {m.name}
+                      </Option>
+                    ))
+                  : variables.map((v) => (
+                      <Option
+                        key={v.name}
+                        value={v.name}
+                        disabled={
+                          isMultiple &&
+                          fieldValues.length === 2 &&
+                          !fieldValues.includes(v.name)
+                        }
+                      >
+                        {v.name}
+                      </Option>
+                    ))}
+              </Select>
+            )}
+          </FormItem>
+        </Col>
+      </Row>
+    </>
+  )
+}
+
+export default memo(LocalControlRelatedInfoForm)

+ 380 - 0
app/components/Control/Config/ControlForm/ValueForm.tsx

@@ -0,0 +1,380 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, useMemo, useCallback, memo } from 'react'
+import classnames from 'classnames'
+import {
+  Form,
+  Row,
+  Col,
+  Input,
+  Checkbox,
+  Select,
+  Radio,
+  Icon,
+  Table,
+  Divider,
+  Tooltip,
+  Popconfirm,
+  Button
+} from 'antd'
+import DefaultValue from './DefaultValue'
+import { WrappedFormUtils } from 'antd/lib/form/Form'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { CheckboxChangeEvent } from 'antd/lib/checkbox'
+import {
+  SHOULD_LOAD_OPTIONS,
+  ControlOptionTypes,
+  ControlTypes
+} from '../../constants'
+import { IControl, IControlOption } from '../../types'
+import { IViewBase, IFormedViews } from 'app/containers/View/types'
+import { OperatorTypesLocale } from 'app/utils/operatorTypes'
+import { getOperatorOptions } from '../../util'
+import { filterSelectOption } from 'app/utils/util'
+import { TreeNode } from 'antd/lib/tree-select'
+import utilStyles from 'assets/less/util.less'
+import { ColumnProps } from 'antd/lib/table'
+const FormItem = Form.Item
+const Option = Select.Option
+const RadioGroup = Radio.Group
+
+interface IValueFormProps {
+  form: WrappedFormUtils
+  views: IViewBase[]
+  formedViews: IFormedViews
+  controlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  defaultValueOptions: Array<IControlOption | TreeNode>
+  defaultValueLoading: boolean
+  onOptionTypeChange: (e: RadioChangeEvent) => void
+  onValueViewChange: (viewId: number) => void
+  onDefaultValueTypeChange: (e: RadioChangeEvent) => void
+  onGetDefaultValueOptions: () => void
+  onCommonPropChange: (propName: string, value) => void
+  onOpenOptionModal: (index?: number) => void
+  onDeleteOption: (value: string) => () => void
+}
+
+const ValueForm: FC<IValueFormProps> = ({
+  form,
+  views,
+  formedViews,
+  controlBase,
+  defaultValueOptions,
+  defaultValueLoading,
+  onOptionTypeChange,
+  onValueViewChange,
+  onDefaultValueTypeChange,
+  onGetDefaultValueOptions,
+  onCommonPropChange,
+  onOpenOptionModal,
+  onDeleteOption
+}) => {
+  const { getFieldDecorator } = form
+  const {
+    type,
+    multiple,
+    optionType,
+    valueViewId,
+    customOptions,
+    optionWithVariable
+  } = controlBase
+  const operatorOptions = useMemo(() => getOperatorOptions(type, multiple), [
+    type,
+    multiple
+  ])
+
+  const fieldOptions = useMemo(
+    () =>
+      optionType === ControlOptionTypes.Manual && valueViewId
+        ? Object.keys(formedViews[valueViewId].model).map((name) => (
+            <Option key={name} value={name}>
+              {name}
+            </Option>
+          ))
+        : [],
+    [formedViews, optionType, valueViewId]
+  )
+
+  const optionWithVariableChange = useCallback(
+    (e: CheckboxChangeEvent) => {
+      onCommonPropChange('optionWithVariable', e.target.checked)
+    },
+    [onCommonPropChange]
+  )
+
+  const addOption = useCallback(() => {
+    onOpenOptionModal()
+  }, [onOpenOptionModal])
+
+  const editOption = useCallback(
+    (index) => () => {
+      onOpenOptionModal(index)
+    },
+    [onOpenOptionModal]
+  )
+
+  const columns: Array<ColumnProps<IControlOption>> = [
+    {
+      title: '文本',
+      key: 'text',
+      dataIndex: 'text',
+      render: (text) => (text.length > 10 ? `${text.substr(0, 10)}...` : text)
+    },
+    {
+      title: '值',
+      key: 'value',
+      dataIndex: 'value',
+      render: (value) =>
+        value.length > 10 ? `${value.substr(0, 10)}...` : value
+    }
+  ]
+
+  if (optionWithVariable) {
+    columns.push({
+      title: '关联变量',
+      key: 'variables',
+      dataIndex: 'variables',
+      render: (variables) => variables && Object.values(variables)
+    })
+  }
+
+  columns.push({
+    title: '操作',
+    width: 100,
+    className: utilStyles.textAlignCenter,
+    render: (_, record, index) => (
+      <span className="ant-table-action-column">
+        <Tooltip title="修改">
+          <Button
+            icon="edit"
+            shape="circle"
+            type="ghost"
+            onClick={editOption(index)}
+          />
+        </Tooltip>
+        <Popconfirm
+          title="确定删除?"
+          placement="bottom"
+          onConfirm={onDeleteOption(record.value)}
+        >
+          <Tooltip title="删除">
+            <Button icon="delete" shape="circle" type="ghost" />
+          </Tooltip>
+        </Popconfirm>
+      </span>
+    )
+  })
+
+  const colSpan = { xxl: 12, xl: 18 }
+  const itemCols = {
+    labelCol: { span: 8 },
+    wrapperCol: { span: 12 }
+  }
+
+  return (
+    <>
+      <Divider orientation="left">取值配置</Divider>
+      {!!operatorOptions.length && (
+        <Row>
+          <Col {...colSpan}>
+            <FormItem label="对应关系" {...itemCols}>
+              {getFieldDecorator('operator', {
+                rules: [{ required: true, message: '对应关系不能为空' }]
+              })(
+                <Select>
+                  {operatorOptions.map((o) => (
+                    <Option key={o} value={o}>
+                      {OperatorTypesLocale[o]}
+                    </Option>
+                  ))}
+                </Select>
+              )}
+            </FormItem>
+          </Col>
+        </Row>
+      )}
+      {SHOULD_LOAD_OPTIONS[type] && (
+        <>
+          <Row
+            key="optionType"
+            className={classnames({
+              [utilStyles.hide]: type === ControlTypes.TreeSelect
+            })}
+          >
+            <Col {...colSpan}>
+              <FormItem label="下拉菜单项" {...itemCols}>
+                {getFieldDecorator(
+                  'optionType',
+                  {}
+                )(
+                  <RadioGroup onChange={onOptionTypeChange}>
+                    <Radio value={ControlOptionTypes.Auto}>自动关联</Radio>
+                    <Radio value={ControlOptionTypes.Manual}>手动</Radio>
+                    <Radio value={ControlOptionTypes.Custom}>自定义</Radio>
+                  </RadioGroup>
+                )}
+              </FormItem>
+            </Col>
+          </Row>
+          {optionType === ControlOptionTypes.Manual && (
+            <>
+              <Row key="valueViewId">
+                <Col {...colSpan}>
+                  <FormItem label="数据视图" {...itemCols}>
+                    {getFieldDecorator('valueViewId', {
+                      rules: [{ required: true, message: '数据视图不能为空' }]
+                    })(
+                      <Select
+                        showSearch
+                        placeholder="请手动关联数据视图"
+                        onChange={onValueViewChange}
+                        filterOption={filterSelectOption}
+                      >
+                        {views.map(({ id, name }) => (
+                          <Option key={id} value={id}>
+                            {name}
+                          </Option>
+                        ))}
+                      </Select>
+                    )}
+                  </FormItem>
+                </Col>
+              </Row>
+              <Row key="valueField">
+                <Col {...colSpan}>
+                  <FormItem label="取值字段" {...itemCols}>
+                    {getFieldDecorator('valueField', {
+                      rules: [{ required: true, message: '取值字段不能为空' }]
+                    })(
+                      <Select
+                        showSearch
+                        placeholder="请选择取值字段"
+                        filterOption={filterSelectOption}
+                      >
+                        {fieldOptions}
+                      </Select>
+                    )}
+                  </FormItem>
+                </Col>
+              </Row>
+              {type === ControlTypes.TreeSelect && (
+                <Row key="parentField">
+                  <Col {...colSpan}>
+                    <FormItem label="父ID字段" {...itemCols}>
+                      {getFieldDecorator('parentField', {
+                        rules: [{ required: true, message: '父ID字段不能为空' }]
+                      })(
+                        <Select
+                          showSearch
+                          placeholder="请选择父ID字段"
+                          filterOption={filterSelectOption}
+                        >
+                          {fieldOptions}
+                        </Select>
+                      )}
+                    </FormItem>
+                  </Col>
+                </Row>
+              )}
+              <Row key="textField">
+                <Col {...colSpan}>
+                  <FormItem
+                    label="文本字段"
+                    {...itemCols}
+                    help="如不设置文本字段,下拉菜单项则默认显示取值字段的值"
+                  >
+                    {getFieldDecorator(
+                      'textField',
+                      {}
+                    )(
+                      <Select
+                        showSearch
+                        placeholder="请选择文本字段"
+                        filterOption={filterSelectOption}
+                        allowClear
+                      >
+                        {fieldOptions}
+                      </Select>
+                    )}
+                  </FormItem>
+                </Col>
+              </Row>
+            </>
+          )}
+          {optionType === ControlOptionTypes.Custom && (
+            <>
+              <Row>
+                <Col {...colSpan}>
+                  <FormItem label="选项关联变量" {...itemCols}>
+                    {getFieldDecorator('optionWithVariable', {
+                      valuePropName: 'checked'
+                    })(<Checkbox onChange={optionWithVariableChange} />)}
+                  </FormItem>
+                </Col>
+              </Row>
+              <Row>
+                <Col {...colSpan}>
+                  <FormItem label=" " colon={false} {...itemCols}>
+                    <a onClick={addOption}>
+                      <Icon type="plus" /> 点击添加
+                    </a>
+                  </FormItem>
+                  <FormItem className={utilStyles.hide}>
+                    {getFieldDecorator('customOptions', {})(<Input />)}
+                  </FormItem>
+                </Col>
+              </Row>
+              <Row>
+                <Col span={24}>
+                  <FormItem
+                    label=" "
+                    colon={false}
+                    labelCol={{ xxl: 4, xl: 6, span: 8 }}
+                    wrapperCol={{ xxl: 16, xl: 14, span: 12 }}
+                  >
+                    <Table
+                      size="small"
+                      rowKey="value"
+                      dataSource={customOptions}
+                      columns={columns}
+                      pagination={false}
+                      bordered
+                    />
+                  </FormItem>
+                </Col>
+              </Row>
+            </>
+          )}
+        </>
+      )}
+      <DefaultValue
+        form={form}
+        controlBase={controlBase}
+        defaultValueOptions={defaultValueOptions}
+        defaultValueLoading={defaultValueLoading}
+        onDefaultValueTypeChange={onDefaultValueTypeChange}
+        onGetDefaultValueOptions={onGetDefaultValueOptions}
+      />
+    </>
+  )
+}
+
+export default memo(ValueForm)

+ 227 - 0
app/components/Control/Config/ControlForm/index.tsx

@@ -0,0 +1,227 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { PureComponent } from 'react'
+import SplitPane from 'components/SplitPane'
+import GlobalControlRelatedItemForm from './GlobalControlRelatedItemForm'
+import GlobalControlRelatedViewForm from './GlobalControlRelatedViewForm'
+import LocalControlRelatedInfoForm from './LocalControlRelatedInfoForm'
+import BaseForm from './BaseForm'
+import ValueForm from './ValueForm'
+import { Form } from 'antd'
+import { FormComponentProps } from 'antd/lib/form/Form'
+import { CheckboxChangeEvent } from 'antd/lib/checkbox'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { TreeNode } from 'antd/lib/tree-select'
+import { IControl, IControlOption } from '../../types'
+import { IViewBase, IFormedViews } from 'app/containers/View/types'
+import { IFlatRelatedItem, IFlatRelatedView } from './types'
+import { parseDefaultValue } from '../../util'
+import {
+  ControlFieldTypes,
+  ControlPanelTypes,
+  IS_RANGE_TYPE
+} from '../../constants'
+import styles from '../../Control.less'
+
+interface IControlFormProps extends FormComponentProps {
+  type: ControlPanelTypes
+  views: IViewBase[]
+  formedViews: IFormedViews
+  controls: IControl[]
+  controlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  relatedItemList: IFlatRelatedItem[]
+  relatedViewList: IFlatRelatedView[]
+  defaultValueOptions: Array<IControlOption | TreeNode>
+  defaultValueLoading: boolean
+  formWillChangeValues: Partial<IControl>
+  onItemCheck: (id: number) => () => void
+  onCheckAll: (e: CheckboxChangeEvent) => void
+  onFieldTypeChange: (id: number) => (e: RadioChangeEvent) => void
+  onControlTypeChange: (value: string) => void
+  onMultipleSettingChange: (e: CheckboxChangeEvent) => void
+  onSliderPropChange: (min: number, max: number, step: number) => void
+  onOptionTypeChange: (e: RadioChangeEvent) => void
+  onValueViewChange: (viewId: number) => void
+  onDefaultValueTypeChange: (e: RadioChangeEvent) => void
+  onGetDefaultValueOptions: () => void
+  onCommonPropChange: (propName: string, value) => void
+  onOpenOptionModal: (index?: number) => void
+  onDeleteOption: (value: string) => () => void
+}
+
+class ControlForm extends PureComponent<IControlFormProps> {
+  public componentDidMount() {
+    const { controlBase, relatedItemList, relatedViewList } = this.props
+    this.initControlForm(controlBase, relatedItemList, relatedViewList)
+  }
+
+  public componentDidUpdate(prevProps: IControlFormProps) {
+    const {
+      form,
+      controlBase,
+      relatedItemList,
+      relatedViewList,
+      formWillChangeValues
+    } = this.props
+    if (controlBase.key !== prevProps.controlBase.key) {
+      this.initControlForm(controlBase, relatedItemList, relatedViewList)
+    }
+    if (formWillChangeValues !== prevProps.formWillChangeValues) {
+      form.setFieldsValue(formWillChangeValues)
+    }
+  }
+
+  private initControlForm(
+    controlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>,
+    relatedItemList: IFlatRelatedItem[],
+    relatedViewList: IFlatRelatedView[]
+  ) {
+    const { form } = this.props
+    const relatedItemFormValues = relatedItemList.reduce(
+      (values, { id, checked, viewId }) => ({
+        ...values,
+        [`relatedItems[${id}].checked`]: checked,
+        [`relatedItems[${id}].viewId`]: viewId
+      }),
+      {}
+    )
+    const relatedViewFormValues = relatedViewList.reduce(
+      (values, { id, fieldType, fields }) => ({
+        ...values,
+        [`relatedViews[${id}].fieldType`]: fieldType,
+        [`relatedViews[${id}].fields`]: fields
+          ? IS_RANGE_TYPE[controlBase.type] &&
+            fieldType === ControlFieldTypes.Variable
+            ? fields
+            : fields[0]
+          : void 0
+      }),
+      {}
+    )
+    form.resetFields()
+    form.setFieldsValue({
+      ...controlBase,
+      ...parseDefaultValue(controlBase),
+      ...relatedItemFormValues,
+      ...relatedViewFormValues
+    })
+  }
+
+  public render() {
+    const {
+      form,
+      type,
+      views,
+      formedViews,
+      controls,
+      controlBase,
+      relatedItemList,
+      relatedViewList,
+      defaultValueOptions,
+      defaultValueLoading,
+      onItemCheck,
+      onCheckAll,
+      onFieldTypeChange,
+      onControlTypeChange,
+      onMultipleSettingChange,
+      onSliderPropChange,
+      onOptionTypeChange,
+      onValueViewChange,
+      onDefaultValueTypeChange,
+      onGetDefaultValueOptions,
+      onCommonPropChange,
+      onOpenOptionModal,
+      onDeleteOption
+    } = this.props
+
+    const commonForm = (
+      <>
+        <BaseForm
+          form={form}
+          controls={controls}
+          controlBase={controlBase}
+          onControlTypeChange={onControlTypeChange}
+          onMultipleSettingChange={onMultipleSettingChange}
+          onSliderPropChange={onSliderPropChange}
+          onCommonPropChange={onCommonPropChange}
+        />
+        <ValueForm
+          form={form}
+          views={views}
+          formedViews={formedViews}
+          controlBase={controlBase}
+          defaultValueOptions={defaultValueOptions}
+          defaultValueLoading={defaultValueLoading}
+          onOptionTypeChange={onOptionTypeChange}
+          onValueViewChange={onValueViewChange}
+          onDefaultValueTypeChange={onDefaultValueTypeChange}
+          onGetDefaultValueOptions={onGetDefaultValueOptions}
+          onCommonPropChange={onCommonPropChange}
+          onOpenOptionModal={onOpenOptionModal}
+          onDeleteOption={onDeleteOption}
+        />
+      </>
+    )
+    const compositeForm =
+      type === ControlPanelTypes.Global ? (
+        <SplitPane
+          type="horizontal"
+          initialSize={300}
+          minSize={300}
+          maxSize={480}
+          className={styles.splitPanel}
+          spliter
+        >
+          <div className={styles.relatedForm}>
+            <GlobalControlRelatedItemForm
+              form={form}
+              relatedItems={relatedItemList}
+              onItemCheck={onItemCheck}
+              onCheckAll={onCheckAll}
+            />
+            <GlobalControlRelatedViewForm
+              form={form}
+              relatedViews={relatedViewList}
+              controlType={controlBase.type}
+              optionWithVariable={controlBase.optionWithVariable}
+              onFieldTypeChange={onFieldTypeChange}
+            />
+          </div>
+          <div className={styles.commonForm}>{commonForm}</div>
+        </SplitPane>
+      ) : (
+        <div className={styles.commonForm}>
+          <LocalControlRelatedInfoForm
+            form={form}
+            relatedView={relatedViewList[0]}
+            controlType={controlBase.type}
+            optionWithVariable={controlBase.optionWithVariable}
+            onFieldTypeChange={onFieldTypeChange}
+          />
+          {commonForm}
+        </div>
+      )
+
+    return <Form className={styles.controlForm}>{compositeForm}</Form>
+  }
+}
+
+export default Form.create<IControlFormProps>()(ControlForm)

+ 34 - 0
app/components/Control/Config/ControlForm/types.ts

@@ -0,0 +1,34 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import { IControlRelatedItem, IControlRelatedView } from '../../types'
+import { IViewModelProps, IViewVariable } from 'app/containers/View/types'
+
+export interface IFlatRelatedItem extends IControlRelatedItem {
+  id: number
+  name: string
+}
+
+export interface IFlatRelatedView extends IControlRelatedView {
+  id: number
+  name: string
+  models: IViewModelProps[]
+  variables: IViewVariable[]
+}

+ 184 - 0
app/components/Control/Config/ControlList.tsx

@@ -0,0 +1,184 @@
+import React, { PureComponent, GetDerivedStateFromProps } from 'react'
+import { fromJS } from 'immutable'
+
+import { IControl, IRenderTreeItem } from '../types'
+import { getControlRenderTree, getAllChildren } from '../util'
+import { ListItem } from 'components/ListFormLayout'
+
+import styles from '../Control.less'
+
+import { Icon, Tree } from 'antd'
+const { TreeNode } = Tree
+
+interface IControlListProps {
+  list: IControl[]
+  selected: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  onSelect: (key: string) => void
+  onDelete: (keys: string[], selectKey: string) => void
+  onNameChange: (key: string, name: string) => void
+  onParentChange: (
+    key: string,
+    parentKey: string,
+    type: string,
+    dropNextKey?: string
+  ) => void
+}
+
+interface IControlListStates {
+  renderTree: IRenderTreeItem[]
+  flatTree: {
+    [key: string]: IRenderTreeItem
+  }
+  selectedKeys: string[]
+  prevList: IControl[]
+  prevSelected: Omit<IControl, 'relatedItems' | 'relatedViews'>
+}
+
+class ControlList extends PureComponent<IControlListProps, IControlListStates> {
+  constructor(props) {
+    super(props)
+    this.state = {
+      renderTree: [],
+      flatTree: {},
+      selectedKeys: [],
+      prevList: [],
+      prevSelected: null
+    }
+  }
+
+  public static getDerivedStateFromProps: GetDerivedStateFromProps<
+    IControlListProps,
+    IControlListStates
+  > = (props, state) => {
+    let nextState: Partial<IControlListStates> = {}
+    if (props.list !== state.prevList) {
+      const replica = fromJS(props.list).toJS()
+      nextState = {
+        ...getControlRenderTree(replica),
+        prevList: props.list
+      }
+    }
+    if (props.selected !== state.prevSelected) {
+      nextState.selectedKeys = props.selected ? [props.selected.key] : []
+      nextState.prevSelected = props.selected
+    }
+    return nextState
+  }
+
+  private delete = (key: string) => {
+    const { selected } = this.props
+    const { renderTree, flatTree } = this.state
+    const delKeys = [key].concat(getAllChildren(key, flatTree))
+    let selectedKey: string
+
+    if (selected.key === key) {
+      if (selected.parent) {
+        const parentTree = flatTree[selected.parent]
+        if (parentTree.children.length === 1) {
+          selectedKey = parentTree.key
+        } else {
+          const delIndex = parentTree.children.findIndex((c) => c.key === key)
+          selectedKey =
+            delIndex === parentTree.children.length - 1
+              ? parentTree.children[delIndex - 1].key
+              : parentTree.children[delIndex + 1].key
+        }
+      } else {
+        if (renderTree.length !== 1) {
+          const delIndex = renderTree.findIndex((n) => n.key === key)
+          selectedKey =
+            delIndex === renderTree.length - 1
+              ? renderTree[delIndex - 1].key
+              : renderTree[delIndex + 1].key
+        }
+      }
+    } else {
+      selectedKey = selected.key
+    }
+
+    this.props.onDelete(delKeys, selectedKey)
+  }
+
+  private select = (selectedKeys: string[]) => {
+    if (selectedKeys.length) {
+      this.props.onSelect(selectedKeys[0])
+    }
+  }
+
+  private dragEnter = (info) => {
+
+  }
+
+  private drop = (info) => {
+    const dropKey = info.node.props.eventKey
+    const dragKey = info.dragNode.props.eventKey
+    const dropPos = info.node.props.pos.split('-')
+    const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1])
+
+    const { onParentChange } = this.props
+    const { flatTree } = this.state
+
+    let parentKey
+    let type
+    let dropNextKey
+
+    if (!info.dropToGap) {
+      parentKey = dropKey
+      type = 'append'
+    } else if (
+      (info.node.props.children || []).length > 0 &&
+      info.node.props.expanded &&
+      dropPosition === 1
+    ) {
+      parentKey = dropKey
+      type = 'prepend'
+    } else {
+      const dropped = flatTree[dropKey]
+      parentKey = dropped.parent
+      dropNextKey = dropKey
+      type = dropPosition === -1 ? 'prepend' : 'append'
+    }
+    onParentChange(dragKey, parentKey, type, dropNextKey)
+  }
+
+  private renderTreeNodes = (renderTree: IRenderTreeItem[]) =>
+    renderTree.map((node) => {
+      const { key, name, children } = node
+      const title = (
+        <ListItem
+          id={key}
+          name={name}
+          onChange={this.props.onNameChange}
+          onDelete={this.delete}
+        />
+      )
+      if (children) {
+        return (
+          <TreeNode title={title} key={key} dataRef={node}>
+            {this.renderTreeNodes(node.children)}
+          </TreeNode>
+        )
+      }
+      return <TreeNode title={title} key={key} dataRef={node} />
+    })
+
+  public render() {
+    const { renderTree, selectedKeys } = this.state
+    return (
+      <Tree
+        className={styles.tree}
+        selectedKeys={selectedKeys}
+        onSelect={this.select}
+        onDragEnter={this.dragEnter}
+        onDrop={this.drop}
+        defaultExpandAll
+        draggable
+        blockNode
+      >
+        {this.renderTreeNodes(renderTree)}
+      </Tree>
+    )
+  }
+}
+
+export default ControlList

+ 119 - 0
app/components/Control/Config/OptionSettingForm.tsx

@@ -0,0 +1,119 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { PureComponent } from 'react'
+
+import { Form, Input, Modal, Select, Divider } from 'antd'
+import { FormComponentProps } from 'antd/lib/form/Form'
+import { IFlatRelatedView } from './ControlForm/types'
+import { IControlOption } from '../types'
+import styles from '../Control.less'
+const FormItem = Form.Item
+const Option = Select.Option
+
+interface IOptionSettingFormProps extends FormComponentProps {
+  visible: boolean
+  values: IControlOption
+  customOptions: IControlOption[]
+  optionWithVariable: boolean
+  relatedViewList: IFlatRelatedView[]
+  onSave: () => void
+  onCancel: () => void
+  afterClose: () => void
+}
+
+class OptionSettingForm extends PureComponent<IOptionSettingFormProps> {
+  public componentDidUpdate(prevProps: IOptionSettingFormProps) {
+    const { form, values, optionWithVariable } = this.props
+    if (values !== prevProps.values) {
+      if (!values) {
+        form.resetFields()
+      } else {
+        form.setFieldsValue({
+          ...values,
+          ...(optionWithVariable && values.variables)
+        })
+      }
+    }
+  }
+
+  public render() {
+    const {
+      form,
+      visible,
+      optionWithVariable,
+      relatedViewList,
+      onSave,
+      onCancel,
+      afterClose
+    } = this.props
+    const { getFieldDecorator } = form
+
+    const itemCols = {
+      labelCol: { span: 8 },
+      wrapperCol: { span: 12 }
+    }
+
+    return (
+      <Modal
+        title="编辑自定义选项"
+        visible={visible}
+        wrapClassName={`ant-modal-small ${styles.optionsModal}`}
+        onOk={onSave}
+        onCancel={onCancel}
+        afterClose={afterClose}
+      >
+        <Form>
+          <FormItem label="值" {...itemCols}>
+            {getFieldDecorator('value', {
+              rules: [{ required: true, message: '值不能为空' }]
+            })(<Input />)}
+          </FormItem>
+          <FormItem label="文本" {...itemCols}>
+            {getFieldDecorator('text', {})(<Input />)}
+          </FormItem>
+          {optionWithVariable && (
+            <>
+              <Divider>关联变量</Divider>
+              {relatedViewList.map(({ id, name, variables }) => (
+                <FormItem key={id} label={name} {...itemCols}>
+                  {getFieldDecorator(
+                    `${id}`,
+                    {}
+                  )(
+                    <Select placeholder="请选择" allowClear>
+                      {variables.map((v) => (
+                        <Option key={v.name} value={v.name}>
+                          {v.name}
+                        </Option>
+                      ))}
+                    </Select>
+                  )}
+                </FormItem>
+              ))}
+            </>
+          )}
+        </Form>
+      </Modal>
+    )
+  }
+}
+
+export default Form.create<IOptionSettingFormProps>()(OptionSettingForm)

+ 1046 - 0
app/components/Control/Config/index.tsx

@@ -0,0 +1,1046 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { PureComponent, GetDerivedStateFromProps } from 'react'
+import {
+  IControl,
+  IDistinctValueReqeustParams,
+  IControlRelatedViewFormValue,
+  IControlOption,
+  IControlRelatedView
+} from '../types'
+import {
+  getDefaultGlobalControl,
+  getDefaultLocalControl,
+  getEditingControlFormValues,
+  getDefaultRelatedView,
+  getValidOperator,
+  getValidDatePickerFormat,
+  stringifyDefaultValue,
+  transformOptions,
+  getRelatedViewModels
+} from '../util'
+import {
+  ControlTypes,
+  IS_RANGE_TYPE,
+  ControlQueryMode,
+  ControlFieldTypes,
+  SHOULD_LOAD_OPTIONS,
+  ControlOptionTypes,
+  ControlDefaultValueTypes,
+  ControlPanelTypes
+} from '../constants'
+
+import { ListFormLayout, List } from 'components/ListFormLayout'
+import ControlList from './ControlList'
+import ControlForm from './ControlForm'
+import OptionSettingForm from './OptionSettingForm'
+import { Button, Modal, Radio, message } from 'antd'
+import FormType from 'antd/lib/form/Form'
+import { RadioChangeEvent } from 'antd/lib/radio'
+import { CheckboxChangeEvent } from 'antd/lib/checkbox'
+import { TreeNode } from 'antd/lib/tree-select'
+import { IDashboardItem } from 'containers/Dashboard/types'
+import { IFormedViews, IViewBase, IView } from 'app/containers/View/types'
+import { IWidgetFormed } from 'app/containers/Widget/types'
+import { IFlatRelatedItem, IFlatRelatedView } from './ControlForm/types'
+import { DEFAULT_CACHE_EXPIRED } from 'app/globalConstants'
+import { getDefaultRelativeDate } from 'app/components/RelativeDatePicker/util'
+import styles from '../Control.less'
+const RadioGroup = Radio.Group
+const RadioButton = Radio.Button
+
+interface IControlConfigProps {
+  type: ControlPanelTypes
+  originalControls: IControl[]
+  currentItems?: IDashboardItem[]
+  widgets?: IWidgetFormed[]
+  relatedViewId?: number
+  views: IViewBase[]
+  formedViews: IFormedViews
+  visible: boolean
+  loading?: boolean
+  queryMode: ControlQueryMode
+  onCancel: () => void
+  onSave: (controls: IControl[], queryMode: ControlQueryMode) => void
+  onLoadViews: () => void
+  onLoadViewDetail: (
+    viewIds: number[],
+    resolve?: (views: IView[]) => void
+  ) => void
+  onGetOptions: (
+    paramsByViewId: {
+      [viewId: string]: Omit<IDistinctValueReqeustParams, 'cache' | 'expired'>
+    },
+    callback: (options?: object[]) => void
+  ) => void
+}
+
+interface IControlConfigStates {
+  controls: IControl[]
+  editingControlBase: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  editingRelatedItemList: IFlatRelatedItem[]
+  editingRelatedViewList: IFlatRelatedView[]
+  defaultValueOptions: Array<IControlOption | TreeNode>
+  defaultValueLoading: boolean
+  optionModalVisible: boolean
+  optionSettingFormValues: IControlOption
+  editingOptionIndex: number
+  queryMode: ControlQueryMode
+  controlFormWillChangeValues: Partial<IControl>
+  prevVisible: boolean
+}
+
+export class ControlConfig extends PureComponent<
+  IControlConfigProps,
+  IControlConfigStates
+> {
+  public state: IControlConfigStates = {
+    controls: [],
+    editingControlBase: null,
+    editingRelatedItemList: [],
+    editingRelatedViewList: [],
+    defaultValueOptions: [],
+    defaultValueLoading: false,
+    optionModalVisible: false,
+    optionSettingFormValues: null,
+    editingOptionIndex: -1,
+    queryMode: ControlQueryMode.Immediately,
+    controlFormWillChangeValues: null,
+    prevVisible: false
+  }
+
+  private controlForm: FormType = null
+  private optionSettingForm: FormType = null
+  private refHandles = {
+    controlForm: (ref) => (this.controlForm = ref),
+    optionSettingForm: (ref) => (this.optionSettingForm = ref)
+  }
+
+  constructor(props) {
+    super(props)
+    this.props.onLoadViews()
+  }
+
+  public static getDerivedStateFromProps: GetDerivedStateFromProps<
+    IControlConfigProps,
+    IControlConfigStates
+  > = (props, state) => {
+    const {
+      type: panelType,
+      originalControls,
+      currentItems,
+      widgets,
+      formedViews,
+      visible,
+      queryMode,
+      onLoadViewDetail
+    } = props
+    const { prevVisible } = state
+    let nextState: Partial<IControlConfigStates> = {
+      prevVisible: visible
+    }
+
+    if (visible && !prevVisible && originalControls) {
+      const controls = []
+      const relatedViewIds = []
+      let editingControl
+
+      try {
+        originalControls.forEach((origin) => {
+          const control: IControl = JSON.parse(JSON.stringify(origin))
+          const { type, optionType, valueViewId, relatedItems } = control
+
+          if (panelType === ControlPanelTypes.Global) {
+            Object.keys(relatedItems).forEach((itemId) => {
+              if (!currentItems.find((ci) => ci.id === Number(itemId))) {
+                delete relatedItems[itemId]
+              }
+            })
+          }
+
+          if (
+            SHOULD_LOAD_OPTIONS[type] &&
+            optionType === ControlOptionTypes.Manual &&
+            !formedViews[valueViewId]
+          ) {
+            relatedViewIds.push(valueViewId)
+          }
+
+          if (!editingControl && !control.parent) {
+            editingControl = control
+          }
+
+          controls.push(control)
+        })
+      } catch (error) {
+        message.error('控制器配置解析失败')
+        throw error
+      }
+
+      if (relatedViewIds.length) {
+        onLoadViewDetail(relatedViewIds)
+      }
+
+      nextState = {
+        ...nextState,
+        controls,
+        queryMode,
+        ...getEditingControlFormValues(
+          editingControl,
+          formedViews,
+          currentItems,
+          widgets
+        )
+      }
+    }
+
+    return nextState
+  }
+
+  private selectControl = (key: string) => {
+    const { currentItems, widgets, formedViews } = this.props
+
+    this.mergeEditingControl((mergedControls) => {
+      this.setState({
+        controls: mergedControls,
+        defaultValueOptions: [],
+        ...getEditingControlFormValues(
+          mergedControls.find((c) => c.key === key),
+          formedViews,
+          currentItems,
+          widgets
+        )
+      })
+      this.controlForm.props.form.setFieldsValue({ defaultValue: void 0 })
+    })
+  }
+
+  private addControl = () => {
+    const {
+      type,
+      relatedViewId,
+      currentItems,
+      widgets,
+      formedViews
+    } = this.props
+    const { controls, editingControlBase } = this.state
+
+    let control
+    if (type === ControlPanelTypes.Global) {
+      control = getDefaultGlobalControl()
+    } else {
+      if (relatedViewId && formedViews[relatedViewId]) {
+        control = getDefaultLocalControl(formedViews[relatedViewId])
+      } else {
+        return
+      }
+    }
+
+    if (editingControlBase) {
+      this.mergeEditingControl((mergedControls) => {
+        this.setState({
+          controls: [...mergedControls, control],
+          defaultValueOptions: [],
+          ...getEditingControlFormValues(
+            control,
+            formedViews,
+            currentItems,
+            widgets
+          )
+        })
+        this.controlForm.props.form.setFieldsValue({ defaultValue: void 0 })
+      })
+    } else {
+      this.setState({
+        controls: [...controls, control],
+        ...getEditingControlFormValues(
+          control,
+          formedViews,
+          currentItems,
+          widgets
+        )
+      })
+    }
+  }
+
+  private deleteControl = (keys: string[], reselectedKey: string) => {
+    const { currentItems, widgets, formedViews } = this.props
+    const { controls } = this.state
+
+    const reselected = reselectedKey
+      ? controls.find((c) => c.key === reselectedKey)
+      : null
+
+    this.setState({
+      controls: controls.filter((c) => !keys.includes(c.key)),
+      defaultValueOptions: [],
+      ...getEditingControlFormValues(
+        reselected,
+        formedViews,
+        currentItems,
+        widgets
+      )
+    })
+    this.controlForm.props.form.setFieldsValue({ defaultValue: void 0 })
+  }
+
+  private changeParent = (
+    key: string,
+    parentKey: string,
+    type: string,
+    dropNextKey?: string
+  ) => {
+    const { editingControlBase, controls } = this.state
+    let dragged
+    let changedControls = controls.reduce((ctrls, ctrl) => {
+      if (ctrl.key === key) {
+        dragged = ctrl
+        return ctrls
+      }
+      return ctrls.concat(ctrl)
+    }, [])
+    let parent = null
+    let parentIndex
+    let dropNextIndex
+
+    for (let i = 0, l = changedControls.length; i < l; i += 1) {
+      const control = changedControls[i]
+      if (control.key === parentKey) {
+        parent = control
+        parentIndex = i
+      }
+      if (dropNextKey && control.key === dropNextKey) {
+        dropNextIndex = i
+      }
+    }
+
+    dragged.parent = parent && parent.key
+
+    if (dropNextKey) {
+      changedControls =
+        type === 'append'
+          ? [
+              ...changedControls.slice(0, dropNextIndex + 1),
+              dragged,
+              ...changedControls.slice(dropNextIndex + 1)
+            ]
+          : [
+              ...changedControls.slice(0, dropNextIndex),
+              dragged,
+              ...changedControls.slice(dropNextIndex)
+            ]
+    } else {
+      changedControls = parent
+        ? [
+            ...changedControls.slice(0, parentIndex + 1),
+            dragged,
+            ...changedControls.slice(parentIndex + 1)
+          ]
+        : type === 'append'
+        ? [...changedControls, dragged]
+        : [dragged, ...changedControls]
+    }
+    this.setState({
+      controls: changedControls,
+      ...(dragged.key === editingControlBase.key && {
+        editingControlBase: {
+          ...editingControlBase,
+          parent: dragged.parent
+        }
+      })
+    })
+  }
+
+  private changeName = (key: string, name: string) => {
+    this.setState({
+      controls: this.state.controls.map((c) => {
+        return c.key === key ? { ...c, name } : c
+      })
+    })
+  }
+
+  private itemCheck = (id: number) => () => {
+    const editingRelatedItemList = this.state.editingRelatedItemList.map(
+      (item) =>
+        item.id === id
+          ? {
+              ...item,
+              checked: !item.checked
+            }
+          : item
+    )
+    const editingRelatedViewList = this.getEditingRelatedViewList(
+      editingRelatedItemList
+    )
+    this.setState({
+      editingRelatedItemList,
+      editingRelatedViewList,
+      controlFormWillChangeValues: {
+        ...editingRelatedItemList.reduce(
+          (values, { id, checked, viewId }) => ({
+            ...values,
+            [`relatedItems[${id}].checked`]: checked,
+            [`relatedItems[${id}].viewId`]: viewId
+          }),
+          {}
+        ),
+        ...editingRelatedViewList.reduce(
+          (values, { id, fieldType }) => ({
+            ...values,
+            [`relatedViews[${id}].fieldType`]: fieldType
+          }),
+          {}
+        )
+      }
+    })
+  }
+
+  private checkAll = (e: CheckboxChangeEvent) => {
+    const { editingRelatedItemList } = this.state
+    const allChecked = e.target.checked
+    const checkedRelatedItemList = editingRelatedItemList.map((v) => ({
+      ...v,
+      checked: allChecked
+    }))
+    const editingRelatedViewList = allChecked
+      ? this.getEditingRelatedViewList(checkedRelatedItemList)
+      : []
+    this.setState({
+      editingRelatedItemList: checkedRelatedItemList,
+      editingRelatedViewList,
+      controlFormWillChangeValues: {
+        ...checkedRelatedItemList.reduce(
+          (values, { id, checked, viewId }) => ({
+            ...values,
+            [`relatedItems[${id}].checked`]: checked,
+            [`relatedItems[${id}].viewId`]: viewId
+          }),
+          {}
+        ),
+        ...editingRelatedViewList.reduce(
+          (values, { id, fieldType }) => ({
+            ...values,
+            [`relatedViews[${id}].fieldType`]: fieldType
+          }),
+          {}
+        )
+      }
+    })
+  }
+
+  private getEditingRelatedViewList = (
+    relatedItemList: IFlatRelatedItem[]
+  ): IFlatRelatedView[] => {
+    const { formedViews } = this.props
+    const {
+      editingControlBase: { type },
+      editingRelatedViewList
+    } = this.state
+    return Array.from(
+      new Set(
+        relatedItemList
+          .filter((item) => item.checked)
+          .map((item) => item.viewId)
+      )
+    ).reduce((mergedRelatedViewList, viewId) => {
+      const relatedView = editingRelatedViewList.find((r) => r.id === viewId)
+      const view = formedViews[viewId]
+      return relatedView
+        ? mergedRelatedViewList.concat(relatedView)
+        : mergedRelatedViewList.concat(getDefaultRelatedView(view, type))
+    }, [])
+  }
+
+  private fieldTypeChange = (viewId: number) => (e: RadioChangeEvent) => {
+    const {
+      editingControlBase: { type },
+      editingRelatedViewList
+    } = this.state
+    const fieldType = e.target.value
+
+    const changedRelatedViewList = editingRelatedViewList.map((relatedView) => {
+      return relatedView.id === viewId
+        ? {
+            ...relatedView,
+            fieldType,
+            fields: relatedView.fields
+          }
+        : relatedView
+    })
+    this.setState({
+      editingRelatedViewList: changedRelatedViewList,
+      controlFormWillChangeValues: {
+        [`relatedViews[${viewId}].fields`]: []
+      }
+    })
+  }
+
+  private controlTypeChange = (value) => {
+    const { formedViews } = this.props
+    const { editingControlBase, editingRelatedViewList } = this.state
+    const { multiple } = editingControlBase
+
+    const changedControlBase: Partial<IControl> = {
+      type: value,
+      multiple: void 0,
+      optionWithVariable: false,
+      defaultValueType: ControlDefaultValueTypes.Fixed
+    }
+    const changedFields: Partial<IControl> = {
+      operator: getValidOperator(editingControlBase.operator, value, false),
+      multiple: void 0,
+      optionWithVariable: false,
+      defaultValueType: ControlDefaultValueTypes.Fixed
+    }
+
+    switch (value) {
+      case ControlTypes.Select:
+        changedControlBase.optionType = ControlOptionTypes.Auto
+        changedFields.cache = false
+        changedFields.expired = DEFAULT_CACHE_EXPIRED
+        changedFields.optionType = ControlOptionTypes.Auto
+        break
+      case ControlTypes.Radio:
+        changedControlBase.radioType = 'normal'
+        changedFields.radioType = 'normal'
+        break
+      case ControlTypes.TreeSelect:
+        changedControlBase.optionType = ControlOptionTypes.Manual
+        changedFields.cache = false
+        changedFields.expired = DEFAULT_CACHE_EXPIRED
+        changedFields.optionType = ControlOptionTypes.Manual
+        break
+      case ControlTypes.Date:
+      case ControlTypes.DateRange:
+        changedFields.dateFormat = getValidDatePickerFormat(
+          editingControlBase.dateFormat,
+          value,
+          multiple
+        )
+        break
+    }
+
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        ...changedControlBase
+      },
+      editingRelatedViewList: editingRelatedViewList.map(
+        ({ fieldType, fields, ...rest }) => ({
+          ...rest,
+          models: getRelatedViewModels(formedViews[rest.id], value),
+          fieldType,
+          fields
+        })
+      ),
+      controlFormWillChangeValues: changedFields
+    })
+
+    this.controlForm.props.form.setFieldsValue({ defaultValue: void 0 })
+  }
+
+  private multipleSettingChange = (e: CheckboxChangeEvent) => {
+    const { editingControlBase } = this.state
+    const { type } = editingControlBase
+    const changedFields: Partial<IControl> = {
+      operator: getValidOperator(
+        editingControlBase.operator,
+        type,
+        e.target.checked
+      ),
+      defaultValueType: ControlDefaultValueTypes.Fixed,
+      defaultValue: void 0
+    }
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        multiple: e.target.checked,
+        defaultValueType: ControlDefaultValueTypes.Fixed
+      },
+      controlFormWillChangeValues: changedFields
+    })
+  }
+
+  private sliderPropChange = (
+    min: number = 0,
+    max: number = 0,
+    step: number
+  ) => {
+    const { editingControlBase } = this.state
+    min = Number(min)
+    max = Number(max)
+    const adjustedMin = Math.min(min, max)
+    const adjustedMax = Math.max(min, max)
+    const { defaultValue } = this.controlForm.props.form.getFieldsValue()
+    const adjustedDefaultValue = defaultValue && [
+      defaultValue[0] >= adjustedMin && defaultValue[0] <= adjustedMax
+        ? defaultValue[0]
+        : adjustedMin,
+      defaultValue[1] >= adjustedMin && defaultValue[1] <= adjustedMax
+        ? defaultValue[1]
+        : adjustedMax
+    ]
+
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        min: adjustedMin,
+        max: adjustedMax,
+        step
+      }
+    })
+    this.controlForm.props.form.setFieldsValue({
+      defaultValue: adjustedDefaultValue
+    })
+  }
+
+  private optionTypeChange = (e: RadioChangeEvent) => {
+    const { editingControlBase } = this.state
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        optionType: e.target.value,
+        optionWithVariable: false
+      },
+      controlFormWillChangeValues: { defaultValue: void 0 }
+    })
+  }
+
+  private valueViewChange = (viewId: number) => {
+    const { formedViews, onLoadViewDetail } = this.props
+    const { editingControlBase } = this.state
+
+    if (!formedViews[viewId]) {
+      onLoadViewDetail([viewId])
+    }
+
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        valueViewId: viewId
+      }
+    })
+  }
+
+  private defaultValueTypeChange = (e: RadioChangeEvent) => {
+    const { editingControlBase } = this.state
+
+    let changedFields
+    if (e.target.value === ControlDefaultValueTypes.Dynamic) {
+      switch (editingControlBase.type) {
+        case ControlTypes.Date:
+          changedFields = { defaultValue: getDefaultRelativeDate() }
+          break
+        case ControlTypes.DateRange:
+          changedFields = {
+            defaultValueStart: getDefaultRelativeDate(),
+            defaultValueEnd: getDefaultRelativeDate()
+          }
+          break
+        default:
+          changedFields = { defaultValue: void 0 }
+          break
+      }
+    } else {
+      changedFields = { defaultValue: void 0 }
+    }
+
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        defaultValueType: e.target.value
+      },
+      controlFormWillChangeValues: changedFields
+    })
+  }
+
+  private commonControlPropChange = (propName: string, value) => {
+    const { editingControlBase } = this.state
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        [propName]: value
+      }
+    })
+  }
+
+  private loadDefaultValueOptions = () => {
+    const { onGetOptions } = this.props
+    const { editingControlBase, defaultValueLoading } = this.state
+    const { type, optionType } = editingControlBase
+    this.controlForm.props.form.validateFieldsAndScroll(
+      ['relatedViews', 'valueViewId', 'valueField', 'textField', 'parentField'],
+      (err, values) => {
+        if (err) {
+          return
+        }
+        if (SHOULD_LOAD_OPTIONS[type] && !defaultValueLoading) {
+          switch (optionType) {
+            case ControlOptionTypes.Auto:
+              const relatedViewValues = this.convertFieldFormValues({
+                ...values.relatedViews
+              })
+              const relatedViewMap = Object.entries(relatedViewValues)
+              if (relatedViewMap.length) {
+                const paramsByViewId = relatedViewMap.reduce(
+                  (obj, [viewId, { fieldType, fields }]) => {
+                    if (fieldType === ControlFieldTypes.Column) {
+                      obj[viewId] = { columns: fields }
+                    }
+                    return obj
+                  },
+                  {}
+                )
+                if (Object.keys(paramsByViewId).length) {
+                  this.setState({ defaultValueLoading: true })
+                  onGetOptions(paramsByViewId, (options) => {
+                    message.success('加载成功!')
+                    this.setState({ defaultValueLoading: false })
+                    if (options) {
+                      this.setState({
+                        defaultValueOptions: transformOptions(
+                          {
+                            ...editingControlBase,
+                            ...values,
+                            relatedViews: relatedViewValues
+                          },
+                          options
+                        )
+                      })
+                    }
+                  })
+                }
+              }
+              break
+            case ControlOptionTypes.Manual:
+              const { valueViewId, valueField, textField, parentField } = values
+              const paramsByViewId = {
+                [valueViewId]: {
+                  columns: [valueField, textField, parentField].filter(
+                    (s) => !!s
+                  )
+                }
+              }
+              this.setState({ defaultValueLoading: true })
+              onGetOptions(paramsByViewId, (options) => {
+                message.success('加载成功!')
+                this.setState({ defaultValueLoading: false })
+                if (options) {
+                  this.setState({
+                    defaultValueOptions: transformOptions(
+                      {
+                        ...editingControlBase,
+                        ...values,
+                        relatedViews: relatedViewValues
+                      },
+                      options
+                    )
+                  })
+                }
+              })
+              break
+          }
+        }
+      }
+    )
+  }
+
+  private mergeEditingControl = (resolve: (mergedControls) => void) => {
+    const { type } = this.props
+    const { controls, editingControlBase } = this.state
+    this.controlForm.props.form.validateFieldsAndScroll((err, values) => {
+      if (err) {
+        return
+      }
+      const {
+        relatedItems,
+        relatedViews,
+        defaultValue,
+        defaultValueStart,
+        defaultValueEnd,
+        ...restFormValues
+      } = values
+      const mergedControls = controls.map((control) => {
+        const { key, name, parent } = control
+        if (key === editingControlBase.key) {
+          return {
+            key,
+            name,
+            ...(parent && { parent }),
+            ...restFormValues,
+            defaultValue: stringifyDefaultValue(
+              values,
+              defaultValue,
+              defaultValueStart,
+              defaultValueEnd
+            ),
+            ...(type === ControlPanelTypes.Global && {
+              relatedItems: { ...relatedItems }
+            }),
+            relatedViews: this.convertFieldFormValues({ ...relatedViews })
+          }
+        } else {
+          return control
+        }
+      })
+      resolve(mergedControls)
+    })
+  }
+
+  private convertFieldFormValues = (relatedViewFormValues: {
+    [viewId: string]: IControlRelatedViewFormValue
+  }): { [viewId: string]: IControlRelatedView } => {
+    return Object.entries(relatedViewFormValues).reduce(
+      (obj, [viewId, { fieldType, fields }]) => {
+        obj[viewId] = {
+          fieldType,
+          fields: [].concat(fields)
+        }
+        return obj
+      },
+      {}
+    )
+  }
+
+  private save = () => {
+    const { onSave } = this.props
+    const { controls, queryMode } = this.state
+    if (controls.length > 0) {
+      this.mergeEditingControl((mergedControls) => {
+        onSave(mergedControls, queryMode)
+      })
+    } else {
+      onSave([], queryMode)
+    }
+  }
+
+  private resetForm = () => {
+    this.setState({
+      ...getEditingControlFormValues(null)
+    })
+  }
+
+  private openOptionModal = (index?) => {
+    const { customOptions } = this.state.editingControlBase
+    this.setState({
+      optionModalVisible: true,
+      optionSettingFormValues:
+        index !== void 0 && customOptions ? customOptions[index] : null,
+      ...(index !== void 0 && { editingOptionIndex: index })
+    })
+  }
+
+  private closeOptionModal = () => {
+    this.setState({ optionModalVisible: false })
+  }
+
+  private afterOptionModalClose = () => {
+    this.setState({
+      optionSettingFormValues: null,
+      editingOptionIndex: -1
+    })
+    this.optionSettingForm.props.form.resetFields()
+  }
+
+  private saveOptions = () => {
+    this.optionSettingForm.props.form.validateFieldsAndScroll((err, values) => {
+      if (err) {
+        return
+      }
+      const {
+        editingControlBase,
+        editingRelatedViewList,
+        editingOptionIndex
+      } = this.state
+
+      let customOptions = editingControlBase.customOptions || []
+      const editingOption: IControlOption = {
+        value: values.value,
+        text: values.text || values.value,
+        ...(editingControlBase.optionWithVariable && {
+          variables: editingRelatedViewList.reduce((obj, { id }) => {
+            if (values[id]) {
+              obj[id] = values[id]
+            }
+            return obj
+          }, {})
+        })
+      }
+      if (editingOptionIndex === -1) {
+        customOptions = customOptions.concat(editingOption)
+      } else {
+        customOptions = customOptions.map((option, index) => {
+          return index === editingOptionIndex ? editingOption : option
+        })
+      }
+
+      this.controlForm.props.form.setFieldsValue({ customOptions })
+      this.setState({
+        editingControlBase: {
+          ...editingControlBase,
+          customOptions
+        }
+      })
+      this.closeOptionModal()
+    })
+  }
+
+  private deleteOption = (value) => () => {
+    const { editingControlBase } = this.state
+    const customOptions = editingControlBase.customOptions.filter(
+      (o) => o.value !== value
+    )
+    this.setState({
+      editingControlBase: {
+        ...editingControlBase,
+        customOptions
+      }
+    })
+    this.controlForm.props.form.setFieldsValue({ customOptions })
+  }
+
+  private changeQueryMode = (e: RadioChangeEvent) => {
+    this.setState({
+      queryMode: e.target.value
+    })
+  }
+
+  public render() {
+    const { type, views, formedViews, loading, visible, onCancel } = this.props
+    const {
+      controls,
+      editingControlBase,
+      editingRelatedItemList,
+      editingRelatedViewList,
+      defaultValueOptions,
+      defaultValueLoading,
+      controlFormWillChangeValues,
+      optionModalVisible,
+      optionSettingFormValues,
+      queryMode
+    } = this.state
+
+    const modalFooter = [
+      <RadioGroup
+        key="queryMode"
+        className={styles.queryMode}
+        value={queryMode}
+        onChange={this.changeQueryMode}
+      >
+        <RadioButton value={ControlQueryMode.Immediately}>立即查询</RadioButton>
+        <RadioButton value={ControlQueryMode.Manually}>手动查询</RadioButton>
+      </RadioGroup>,
+      <Button key="cancel" size="large" onClick={onCancel}>
+        取 消
+      </Button>,
+      <Button
+        key="submit"
+        size="large"
+        type="primary"
+        loading={loading}
+        disabled={loading}
+        onClick={this.save}
+      >
+        保 存
+      </Button>
+    ]
+
+    return (
+      <Modal
+        wrapClassName="ant-modal-xlarge"
+        title={`${
+          type === ControlPanelTypes.Global ? '全局' : '组件'
+        }控制器配置`}
+        maskClosable={false}
+        visible={visible}
+        footer={modalFooter}
+        onCancel={onCancel}
+        afterClose={this.resetForm}
+        destroyOnClose
+      >
+        <ListFormLayout
+          type="horizontal"
+          initialSize={300}
+          minSize={300}
+          maxSize={480}
+          className={styles.container}
+          spliter
+        >
+          <List
+            title="控制器列表"
+            className={styles.treeContainer}
+            onAddItem={this.addControl}
+          >
+            <ControlList
+              list={controls}
+              selected={editingControlBase}
+              onSelect={this.selectControl}
+              onDelete={this.deleteControl}
+              onNameChange={this.changeName}
+              onParentChange={this.changeParent}
+            />
+          </List>
+          {editingControlBase && (
+            <ControlForm
+              type={type}
+              views={views}
+              formedViews={formedViews}
+              controls={controls}
+              controlBase={editingControlBase}
+              relatedItemList={editingRelatedItemList}
+              relatedViewList={editingRelatedViewList}
+              defaultValueOptions={defaultValueOptions}
+              defaultValueLoading={defaultValueLoading}
+              formWillChangeValues={controlFormWillChangeValues}
+              onItemCheck={this.itemCheck}
+              onCheckAll={this.checkAll}
+              onFieldTypeChange={this.fieldTypeChange}
+              onControlTypeChange={this.controlTypeChange}
+              onMultipleSettingChange={this.multipleSettingChange}
+              onSliderPropChange={this.sliderPropChange}
+              onOptionTypeChange={this.optionTypeChange}
+              onValueViewChange={this.valueViewChange}
+              onDefaultValueTypeChange={this.defaultValueTypeChange}
+              onGetDefaultValueOptions={this.loadDefaultValueOptions}
+              onCommonPropChange={this.commonControlPropChange}
+              onOpenOptionModal={this.openOptionModal}
+              onDeleteOption={this.deleteOption}
+              wrappedComponentRef={this.refHandles.controlForm}
+            />
+          )}
+        </ListFormLayout>
+        <OptionSettingForm
+          visible={optionModalVisible}
+          values={optionSettingFormValues}
+          customOptions={editingControlBase?.customOptions}
+          optionWithVariable={editingControlBase?.optionWithVariable}
+          relatedViewList={editingRelatedViewList}
+          onSave={this.saveOptions}
+          onCancel={this.closeOptionModal}
+          afterClose={this.afterOptionModalClose}
+          wrappedComponentRef={this.refHandles.optionSettingForm}
+        />
+      </Modal>
+    )
+  }
+}
+
+export default ControlConfig

+ 184 - 0
app/components/Control/Control.less

@@ -0,0 +1,184 @@
+@import "~assets/less/variable";
+
+.container {
+  flex: 1;
+
+  .controlForm {
+    flex: 1;
+    display: flex;
+
+    .splitPanel {
+      flex: 1;
+      display: flex;
+    }
+  }
+}
+
+.treeContainer {
+  padding: 4px 0;
+}
+
+.tree {
+  // :global(li) {
+  //   padding: 2px 0;
+  // }
+  :global(li span.ant-tree-switcher),
+  :global(li span.ant-tree-iconEle) {
+    height: 28px;
+    line-height: 28px;
+  }
+  :global(li .ant-tree-node-content-wrapper) {
+    height: 28px;
+    line-height: 24px;
+  }
+  :global(.ant-tree-child-tree > li:first-child) {
+    padding-top: 2px;
+  }
+  // :global(li .ant-tree-node-content-wrapper:hover),
+  // :global(li .ant-tree-node-content-wrapper.ant-tree-node-selected) {
+  //   background-color: transparent;
+  // }
+  // :global(li .ant-tree-node-content-wrapper.ant-tree-node-selected) {
+  //   color: @primary-color;
+  //   font-weight: bold;
+  // }
+}
+
+.relatedForm {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  min-width: 0;
+
+  .title {
+    flex-shrink: 0;
+    padding: 0 8px;
+    display: flex;
+    align-items: center;
+
+    h2 {
+      flex: 1;
+      color: @light-text-color;
+      font-size: 1.143em;
+      line-height: 3em;
+    }
+
+    .action {
+      flex-shrink: 0;
+    }
+  }
+
+  .itemContainer {
+    flex: 3;
+    display: flex;
+    flex-direction: column;
+    min-height: 0;
+
+    .title {
+      .checkAll {
+        color: @light-text-color;
+      }
+    }
+
+    ul {
+      flex: 1;
+      overflow-y: auto;
+    }
+
+    li {
+      height: 30px;
+      display: flex;
+      align-items: center;
+    }
+
+    .checkbox {
+      padding: 0 16px;
+      .ellipsis;
+    }
+  }
+
+  .viewContainer {
+    flex: 2;
+    display: flex;
+    flex-direction: column;
+    min-height: 0;
+
+    .title {
+      border-top: 1px solid @border-color-split;
+    }
+
+    .views {
+      flex: 1;
+      overflow-y: auto;
+
+      &.empty {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+      }
+    }
+  }
+}
+
+.relatedView {
+  padding: 8px 0;
+  margin: 0 16px;
+
+  .name {
+    height: 40px;
+    display: flex;
+    align-items: center;
+
+    h4 {
+      flex: 1;
+      color: @light-text-color;
+      .ellipsis;
+    }
+
+    .fieldType {
+      flex-shrink: 0;
+    }
+  }
+
+  :global {
+    .ant-form-item {
+      margin-bottom: 0;
+    }
+  }
+}
+
+.commonForm {
+  flex: 1;
+  overflow-y: auto;
+
+  :global {
+    .ant-form-item {
+      margin-bottom: 8px;
+    }
+    .ant-divider {
+      color: @light-text-color !important;
+    }
+  }
+}
+
+.optionsModal {
+  :global {
+    .ant-form-item {
+      margin-bottom: 0;
+    }
+    .ant-modal-header,
+    .ant-modal-body  {
+      padding: 16px;
+    }
+    .ant-divider {
+      color: @light-text-color !important;
+      font-size: 1em !important;
+    }
+  }
+}
+
+.queryMode {
+  margin-top: 4px;
+  float: left;
+}

+ 93 - 0
app/components/Control/Control/Date.tsx

@@ -0,0 +1,93 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, useCallback, forwardRef } from 'react'
+import moment from 'moment'
+import { IControl } from '../types'
+import { DatePicker } from 'antd'
+const { WeekPicker, MonthPicker } = DatePicker
+const MultiDatePicker = React.lazy(() => import('components/MultiDatePicker'))
+import { DatePickerFormats } from '../constants'
+
+interface IDateProps {
+  control: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  value?: any
+  size?: 'large' | 'small' | 'default'
+  onChange?: (value) => void
+}
+
+const Date: FC<IDateProps> = ({ control, value, size, onChange }, ref) => {
+  const { Week, Month, Year, Datetime, DatetimeMinute } = DatePickerFormats
+  const { multiple, dateFormat } = control
+
+  const controlled = !!onChange
+  if (multiple) {
+    value = value || ''
+    return (
+      <MultiDatePicker
+        ref={ref}
+        placeholder="请选择"
+        format={dateFormat}
+        {...(size && { size })}
+        {...(controlled && { value, onChange })}
+      />
+    )
+  } else {
+    value = moment.isMoment(value) ? value : null
+    switch (dateFormat) {
+      case Week:
+        return (
+          <WeekPicker
+            ref={ref}
+            placeholder="请选择"
+            {...(size && { size })}
+            {...(controlled && { value, onChange })}
+          />
+        )
+      case Month:
+      case Year:
+        return (
+          <MonthPicker
+            ref={ref}
+            placeholder="请选择"
+            format={dateFormat}
+            {...(size && { size })}
+            {...(controlled && { value, onChange })}
+          />
+        )
+      default:
+        const isDatetimePicker = [Datetime, DatetimeMinute].includes(dateFormat)
+        return (
+          <DatePicker
+            ref={ref}
+            placeholder="请选择"
+            showTime={isDatetimePicker}
+            format={dateFormat}
+            {...(size && { size })}
+            {...(controlled && { value })}
+            {...(controlled && { onChange })}
+            {...(controlled && { onOk: onChange })}
+          />
+        )
+    }
+  }
+}
+
+export default forwardRef(Date)

+ 57 - 0
app/components/Control/Control/DateRange.tsx

@@ -0,0 +1,57 @@
+/*
+ * <<
+ * Davinci
+ * ==
+ * Copyright (C) 2016 - 2017 EDP
+ * ==
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * >>
+ */
+
+import React, { FC, forwardRef } from 'react'
+import { IControl } from '../types'
+import { DatePicker } from 'antd'
+const { RangePicker } = DatePicker
+import { DatePickerFormats } from '../constants'
+
+interface IDateRangeProps {
+  control: Omit<IControl, 'relatedItems' | 'relatedViews'>
+  value?: any
+  size?: 'large' | 'small' | 'default'
+  onChange?: (value) => void
+}
+
+const DateRange: FC<IDateRangeProps> = (
+  { control, value, size, onChange },
+  ref
+) => {
+  const { dateFormat } = control
+  const placeholder: [string, string] = ['从', '到']
+  const { Datetime, DatetimeMinute } = DatePickerFormats
+  const isDatetimePicker = [Datetime, DatetimeMinute].includes(dateFormat)
+
+  return (
+    <RangePicker
+      placeholder={placeholder}
+      value={value}
+      showTime={isDatetimePicker}
+      format={dateFormat}
+      {...(size && { size })}
+      onChange={onChange}
+      onOk={onChange}
+      ref={ref}
+    />
+  )
+}
+
+export default forwardRef(DateRange)

Some files were not shown because too many files changed in this diff