sunyuhang 4 سال پیش
کامیت
214fc5a85d

+ 373 - 0
css/common.css

@@ -0,0 +1,373 @@
+@charset "utf-8";
+* {
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+*, body {
+    padding: 0;
+    margin: 0;
+    font-family: "微软雅黑"
+}
+
+body {
+    color: #666;
+    font-size: 16px;
+    background: #010103 url('../images/bg.png') no-repeat top center;
+}
+
+li {
+    list-style-type: none
+}
+
+i {
+    margin: 0;
+    padding: 0;
+    text-indent: 0
+}
+
+img {
+    border: 0;
+    max-width: 100%
+}
+
+a {
+    text-decoration: none;
+    color: #399bff
+}
+
+a.active, a:focus {
+    outline: none !important;
+    text-decoration: none
+}
+
+ol, ul, p, h1, h2, h3, h4, h5, h6 {
+    padding: 0;
+    margin: 0
+}
+
+a:hover {
+    color: #06c;
+    text-decoration: none !important
+}
+
+.clearfix:after, .clearfix:before {
+    display: table;
+    content: " "
+}
+
+.clearfix:after {
+    clear: both
+}
+
+@font-face {
+    font-family: 'numfonts';
+    src: url('fonts/yjsz.TTF'); /* IE9+,可以是具体的实际链接 */
+}
+
+/*加载动画*/
+.loading {
+    position: fixed;
+    left: 0;
+    top: 0;
+    font-size: 16px;
+    z-index: 100000000;
+    width: 100%;
+    height: 100%;
+    background: #1a1a1c;
+    text-align: center
+}
+
+.loadbox {
+    position: absolute;
+    width: 160px;
+    height: 150px;
+    color: rgba(255, 255, 255, .6);
+    left: 50%;
+    top: 50%;
+    margin-top: -100px;
+    margin-left: -75px
+}
+
+.loadbox img {
+    margin: 10px auto;
+    display: block;
+    width: 40px
+}
+
+/*主体大屏*/
+.map {
+    padding: 0px 20px 0 20px
+}
+
+.mainbox {
+    padding: 10px 20px 0 20px
+}
+
+.mainbox > ul {
+    margin-left: -.4rem;
+    margin-right: -.4rem
+}
+
+.mainbox > ul > li {
+    float: left;
+    padding: 0 .4rem
+}
+
+.mainbox > ul > li {
+    width: 20%
+}
+
+.mainbox > ul > li:nth-child(2) {
+    width: 60%
+}
+
+.boxall {
+    padding: 13px;
+    position: relative;
+    margin-bottom: 15px;
+   /* background: rgba(0, 1, 2, 0.1);*/
+    z-index: 10;
+}
+
+.boxmap {
+    width: 100%;
+    position: absolute;
+    left: 0;
+    right: 0;
+    margin: auto;
+}
+
+.boxmap > .boxsub {
+    margin: 0 auto;
+    text-align: center;
+    padding-top: 10px;
+
+}
+
+.alltitle {
+    font-size: 16px;
+    color: #fff;
+    text-align: center;
+    padding: 5px;
+    border-radius: 5px;
+    background: rgba(26, 72, 78, 0.2);
+    margin-bottom: 10px
+}
+
+.navboxall {
+    height: calc(100% - 30px)
+}
+
+/*标题*/
+
+.norm {
+    width: 100%;
+    text-align: center;
+    margin: 0 auto;
+}
+
+.norm h1 {
+    color: rgba(255, 255, 255, 1);
+}
+
+.norm h1 img {
+    width: 32px;
+    margin: 0 10px;
+    vertical-align: middle;
+}
+
+.norm h1 img:hover {
+    opacity: .6;
+}
+
+.times {
+    margin: 10px auto;
+}
+
+.times img {
+    width: 14px;
+    margin: 0 10px;
+}
+
+.times span {
+    color: rgba(255, 255, 255, .9) !important;
+    font-size: 1.2vw;
+}
+
+/*数据指标*/
+.num {
+    height: 100%;
+    width: 100%;
+}
+
+.numbt {
+    width: 20%;
+    margin: 0px auto;
+    padding: 5px;
+    font-size: 16px;
+    color: #fff;
+    border-radius: 5px;
+    background: rgba(26, 72, 78, 0.2);
+}
+
+.numtxt {
+    color: #fef000;
+    font-size: 24px;
+    font-family: 'numfonts';
+    margin: 5px auto;
+    letter-spacing: 4px
+}
+
+.numtxt label {
+    color: #fff;
+    font-size: 12px;
+}
+
+/*列表信息*/
+.table1 th {
+    border-bottom: 1px solid rgba(255, 255, 255, .2);
+    font-size: 16px;
+    color: rgba(255, 255, 255, .6);
+    font-weight: normal;
+    padding: 0 0 10px 0
+}
+
+.table1 td {
+    font-size: 14px;
+    color: rgba(255, 255, 255, .4);
+    padding: 15px 0 0 0;
+    text-align: center;
+
+}
+
+.table1 span {
+    width: 24px;
+    height: 24px;
+    border-radius: 50%;
+    display: block;
+    background: #878787;
+    color: #fff;
+    line-height: 24px;
+    text-align: center
+}
+
+.table1 tr:nth-child(2) span {
+    background: #3fa4f4
+}
+
+.table1 tr:nth-child(3) span {
+    background: #01c3dd
+}
+
+.table1 tr:nth-child(4) span {
+    background: #008198
+}
+
+/*滚动信息*/
+.wrap {
+    height: 90%;
+    overflow: hidden
+}
+
+.wrap li {
+    line-height: 40px;
+    height: 40px
+}
+
+.wrap li p, .wraptit {
+    font-size: 0
+}
+
+.wrap li span, .wraptit span {
+    display: inline-block;
+    font-size: 14px;
+    color: rgba(255, 255, 255, .6)
+}
+
+.wraptit {
+    border-bottom: 1px solid rgba(255, 255, 255, .2);
+    padding: 0 0 10px 0;
+    margin-bottom: 10px
+}
+
+.wrap li span:nth-child(1), .wraptit span:nth-child(1) {
+    width: 30%;
+    text-align: center;
+}
+
+.wrap li span:nth-child(2), .wraptit span:nth-child(2) {
+    width: 20%;
+    text-align: center;
+}
+
+.wrap li span:nth-child(3), .wraptit span:nth-child(3) {
+    width: 20%;
+    text-align: center;
+}
+
+.wrap li span:nth-child(4), .wraptit span:nth-child(4) {
+    width: 30%;
+    text-align: center;
+}
+
+.str_wrap {
+    overflow: hidden;
+    width: 100%;
+    position: relative;
+    -moz-user-select: none;
+    -khtml-user-select: none;
+    user-select: none;
+    white-space: nowrap
+}
+
+.str_move {
+    white-space: nowrap;
+    position: absolute;
+    top: 0;
+    left: 0;
+    cursor: move
+}
+
+.str_move_clone {
+    display: inline-block;
+    vertical-align: top;
+    position: absolute;
+    left: 100%;
+    top: 0
+}
+
+.str_vertical .str_move_clone {
+    left: 0;
+    top: 100%
+}
+
+.str_down .str_move_clone {
+    left: 0;
+    bottom: 100%
+}
+
+.str_vertical .str_move, .str_down .str_move {
+    white-space: normal;
+    width: 100%
+}
+
+.str_static .str_move, .no_drag .str_move, .noStop .str_move {
+    cursor: inherit
+}
+
+.str_wrap img {
+    max-width: none !important
+}
+
+.inputx{
+    outline-style: none ; border: 1px solid #ccc; border-radius: 3px; padding: 3px 3px; margin:8px 8px;width: 60px; font-size: 14px; background-color: transparent;
+  }
+  .inputx:focus{
+    border:1px solid #1229a7;
+  }
+
+#map{
+    background-color: transparent;
+}

BIN
css/fonts/yjsz.TTF


+ 11538 - 0
dist/classic/iclient-classic-es6.js

@@ -0,0 +1,11538 @@
+/*!
+ * 
+ *          iclient-classic.(https://iclient.supermap.io)
+ *          Copyright© 2000 - 2021 SuperMap Software Co.Ltd
+ *          license: Apache-2.0
+ *          version: v10.1.1
+ *
+ */
+/******/ (() => { // webpackBootstrap
+/******/ 	var __webpack_modules__ = ({
+
+/***/ 693:
+/***/ (function(module) {
+
+(function(self) {
+  'use strict';
+
+  // if __disableNativeFetch is set to true, the it will always polyfill fetch
+  // with Ajax.
+  if (!self.__disableNativeFetch && self.fetch) {
+    return
+  }
+
+  function normalizeName(name) {
+    if (typeof name !== 'string') {
+      name = String(name)
+    }
+    if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
+      throw new TypeError('Invalid character in header field name')
+    }
+    return name.toLowerCase()
+  }
+
+  function normalizeValue(value) {
+    if (typeof value !== 'string') {
+      value = String(value)
+    }
+    return value
+  }
+
+  function Headers(headers) {
+    this.map = {}
+
+    if (headers instanceof Headers) {
+      headers.forEach(function(value, name) {
+        this.append(name, value)
+      }, this)
+
+    } else if (headers) {
+      Object.getOwnPropertyNames(headers).forEach(function(name) {
+        this.append(name, headers[name])
+      }, this)
+    }
+  }
+
+  Headers.prototype.append = function(name, value) {
+    name = normalizeName(name)
+    value = normalizeValue(value)
+    var list = this.map[name]
+    if (!list) {
+      list = []
+      this.map[name] = list
+    }
+    list.push(value)
+  }
+
+  Headers.prototype['delete'] = function(name) {
+    delete this.map[normalizeName(name)]
+  }
+
+  Headers.prototype.get = function(name) {
+    var values = this.map[normalizeName(name)]
+    return values ? values[0] : null
+  }
+
+  Headers.prototype.getAll = function(name) {
+    return this.map[normalizeName(name)] || []
+  }
+
+  Headers.prototype.has = function(name) {
+    return this.map.hasOwnProperty(normalizeName(name))
+  }
+
+  Headers.prototype.set = function(name, value) {
+    this.map[normalizeName(name)] = [normalizeValue(value)]
+  }
+
+  Headers.prototype.forEach = function(callback, thisArg) {
+    Object.getOwnPropertyNames(this.map).forEach(function(name) {
+      this.map[name].forEach(function(value) {
+        callback.call(thisArg, value, name, this)
+      }, this)
+    }, this)
+  }
+
+  function consumed(body) {
+    if (body.bodyUsed) {
+      return Promise.reject(new TypeError('Already read'))
+    }
+    body.bodyUsed = true
+  }
+
+  function fileReaderReady(reader) {
+    return new Promise(function(resolve, reject) {
+      reader.onload = function() {
+        resolve(reader.result)
+      }
+      reader.onerror = function() {
+        reject(reader.error)
+      }
+    })
+  }
+
+  function readBlobAsArrayBuffer(blob) {
+    var reader = new FileReader()
+    reader.readAsArrayBuffer(blob)
+    return fileReaderReady(reader)
+  }
+
+  function readBlobAsText(blob, options) {
+    var reader = new FileReader()
+    var contentType = options.headers.map['content-type'] ? options.headers.map['content-type'].toString() : ''
+    var regex = /charset\=[0-9a-zA-Z\-\_]*;?/
+    var _charset = blob.type.match(regex) || contentType.match(regex)
+    var args = [blob]
+
+    if(_charset) {
+      args.push(_charset[0].replace(/^charset\=/, '').replace(/;$/, ''))
+    }
+
+    reader.readAsText.apply(reader, args)
+    return fileReaderReady(reader)
+  }
+
+  var support = {
+    blob: 'FileReader' in self && 'Blob' in self && (function() {
+      try {
+        new Blob();
+        return true
+      } catch(e) {
+        return false
+      }
+    })(),
+    formData: 'FormData' in self,
+    arrayBuffer: 'ArrayBuffer' in self
+  }
+
+  function Body() {
+    this.bodyUsed = false
+
+
+    this._initBody = function(body, options) {
+      this._bodyInit = body
+      if (typeof body === 'string') {
+        this._bodyText = body
+      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
+        this._bodyBlob = body
+        this._options = options
+      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
+        this._bodyFormData = body
+      } else if (!body) {
+        this._bodyText = ''
+      } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {
+        // Only support ArrayBuffers for POST method.
+        // Receiving ArrayBuffers happens via Blobs, instead.
+      } else {
+        throw new Error('unsupported BodyInit type')
+      }
+    }
+
+    if (support.blob) {
+      this.blob = function() {
+        var rejected = consumed(this)
+        if (rejected) {
+          return rejected
+        }
+
+        if (this._bodyBlob) {
+          return Promise.resolve(this._bodyBlob)
+        } else if (this._bodyFormData) {
+          throw new Error('could not read FormData body as blob')
+        } else {
+          return Promise.resolve(new Blob([this._bodyText]))
+        }
+      }
+
+      this.arrayBuffer = function() {
+        return this.blob().then(readBlobAsArrayBuffer)
+      }
+
+      this.text = function() {
+        var rejected = consumed(this)
+        if (rejected) {
+          return rejected
+        }
+
+        if (this._bodyBlob) {
+          return readBlobAsText(this._bodyBlob, this._options)
+        } else if (this._bodyFormData) {
+          throw new Error('could not read FormData body as text')
+        } else {
+          return Promise.resolve(this._bodyText)
+        }
+      }
+    } else {
+      this.text = function() {
+        var rejected = consumed(this)
+        return rejected ? rejected : Promise.resolve(this._bodyText)
+      }
+    }
+
+    if (support.formData) {
+      this.formData = function() {
+        return this.text().then(decode)
+      }
+    }
+
+    this.json = function() {
+      return this.text().then(JSON.parse)
+    }
+
+    return this
+  }
+
+  // HTTP methods whose capitalization should be normalized
+  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
+
+  function normalizeMethod(method) {
+    var upcased = method.toUpperCase()
+    return (methods.indexOf(upcased) > -1) ? upcased : method
+  }
+
+  function Request(input, options) {
+    options = options || {}
+    var body = options.body
+    if (Request.prototype.isPrototypeOf(input)) {
+      if (input.bodyUsed) {
+        throw new TypeError('Already read')
+      }
+      this.url = input.url
+      this.credentials = input.credentials
+      if (!options.headers) {
+        this.headers = new Headers(input.headers)
+      }
+      this.method = input.method
+      this.mode = input.mode
+      if (!body) {
+        body = input._bodyInit
+        input.bodyUsed = true
+      }
+    } else {
+      this.url = input
+    }
+
+    this.credentials = options.credentials || this.credentials || 'omit'
+    if (options.headers || !this.headers) {
+      this.headers = new Headers(options.headers)
+    }
+    this.method = normalizeMethod(options.method || this.method || 'GET')
+    this.mode = options.mode || this.mode || null
+    this.referrer = null
+
+    if ((this.method === 'GET' || this.method === 'HEAD') && body) {
+      throw new TypeError('Body not allowed for GET or HEAD requests')
+    }
+    this._initBody(body, options)
+  }
+
+  Request.prototype.clone = function() {
+    return new Request(this)
+  }
+
+  function decode(body) {
+    var form = new FormData()
+    body.trim().split('&').forEach(function(bytes) {
+      if (bytes) {
+        var split = bytes.split('=')
+        var name = split.shift().replace(/\+/g, ' ')
+        var value = split.join('=').replace(/\+/g, ' ')
+        form.append(decodeURIComponent(name), decodeURIComponent(value))
+      }
+    })
+    return form
+  }
+
+  function headers(xhr) {
+    var head = new Headers()
+    var pairs = xhr.getAllResponseHeaders().trim().split('\n')
+    pairs.forEach(function(header) {
+      var split = header.trim().split(':')
+      var key = split.shift().trim()
+      var value = split.join(':').trim()
+      head.append(key, value)
+    })
+    return head
+  }
+
+  Body.call(Request.prototype)
+
+  function Response(bodyInit, options) {
+    if (!options) {
+      options = {}
+    }
+
+    this._initBody(bodyInit, options)
+    this.type = 'default'
+    this.status = options.status
+    this.ok = this.status >= 200 && this.status < 300
+    this.statusText = options.statusText
+    this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)
+    this.url = options.url || ''
+  }
+
+  Body.call(Response.prototype)
+
+  Response.prototype.clone = function() {
+    return new Response(this._bodyInit, {
+      status: this.status,
+      statusText: this.statusText,
+      headers: new Headers(this.headers),
+      url: this.url
+    })
+  }
+
+  Response.error = function() {
+    var response = new Response(null, {status: 0, statusText: ''})
+    response.type = 'error'
+    return response
+  }
+
+  var redirectStatuses = [301, 302, 303, 307, 308]
+
+  Response.redirect = function(url, status) {
+    if (redirectStatuses.indexOf(status) === -1) {
+      throw new RangeError('Invalid status code')
+    }
+
+    return new Response(null, {status: status, headers: {location: url}})
+  }
+
+  self.Headers = Headers;
+  self.Request = Request;
+  self.Response = Response;
+
+  self.fetch = function(input, init) {
+    return new Promise(function(resolve, reject) {
+      var request
+      if (Request.prototype.isPrototypeOf(input) && !init) {
+        request = input
+      } else {
+        request = new Request(input, init)
+      }
+
+      var xhr = new XMLHttpRequest()
+
+      function responseURL() {
+        if ('responseURL' in xhr) {
+          return xhr.responseURL
+        }
+
+        // Avoid security warnings on getResponseHeader when not allowed by CORS
+        if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
+          return xhr.getResponseHeader('X-Request-URL')
+        }
+
+        return;
+      }
+
+      var __onLoadHandled = false;
+
+      function onload() {
+        if (xhr.readyState !== 4) {
+          return
+        }
+        var status = (xhr.status === 1223) ? 204 : xhr.status
+        if (status < 100 || status > 599) {
+          if (__onLoadHandled) { return; } else { __onLoadHandled = true; }
+          reject(new TypeError('Network request failed'))
+          return
+        }
+        var options = {
+          status: status,
+          statusText: xhr.statusText,
+          headers: headers(xhr),
+          url: responseURL()
+        }
+        var body = 'response' in xhr ? xhr.response : xhr.responseText;
+
+        if (__onLoadHandled) { return; } else { __onLoadHandled = true; }
+        resolve(new Response(body, options))
+      }
+      xhr.onreadystatechange = onload;
+      xhr.onload = onload;
+      xhr.onerror = function() {
+        if (__onLoadHandled) { return; } else { __onLoadHandled = true; }
+        reject(new TypeError('Network request failed'))
+      }
+
+      xhr.open(request.method, request.url, true)
+
+      // `withCredentials` should be setted after calling `.open` in IE10
+      // http://stackoverflow.com/a/19667959/1219343
+      try {
+        if (request.credentials === 'include') {
+          if ('withCredentials' in xhr) {
+            xhr.withCredentials = true;
+          } else {
+            console && console.warn && console.warn('withCredentials is not supported, you can ignore this warning');
+          }
+        }
+      } catch (e) {
+        console && console.warn && console.warn('set withCredentials error:' + e);
+      }
+
+      if ('responseType' in xhr && support.blob) {
+        xhr.responseType = 'blob'
+      }
+
+      request.headers.forEach(function(value, name) {
+        xhr.setRequestHeader(name, value)
+      })
+
+      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
+    })
+  }
+  self.fetch.polyfill = true
+
+  // Support CommonJS
+  if ( true && module.exports) {
+    module.exports = self.fetch;
+  }
+})(typeof self !== 'undefined' ? self : this);
+
+
+/***/ }),
+
+/***/ 144:
+/***/ (function(module, exports) {
+
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
+  if (true) {
+    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
+		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  } else { var mod; }
+})(this, function (exports, module) {
+  'use strict';
+
+  var defaultOptions = {
+    timeout: 5000,
+    jsonpCallback: 'callback',
+    jsonpCallbackFunction: null
+  };
+
+  function generateCallbackFunction() {
+    return 'jsonp_' + Date.now() + '_' + Math.ceil(Math.random() * 100000);
+  }
+
+  function clearFunction(functionName) {
+    // IE8 throws an exception when you try to delete a property on window
+    // http://stackoverflow.com/a/1824228/751089
+    try {
+      delete window[functionName];
+    } catch (e) {
+      window[functionName] = undefined;
+    }
+  }
+
+  function removeScript(scriptId) {
+    var script = document.getElementById(scriptId);
+    if (script) {
+      document.getElementsByTagName('head')[0].removeChild(script);
+    }
+  }
+
+  function fetchJsonp(_url) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    // to avoid param reassign
+    var url = _url;
+    var timeout = options.timeout || defaultOptions.timeout;
+    var jsonpCallback = options.jsonpCallback || defaultOptions.jsonpCallback;
+
+    var timeoutId = undefined;
+
+    return new Promise(function (resolve, reject) {
+      var callbackFunction = options.jsonpCallbackFunction || generateCallbackFunction();
+      var scriptId = jsonpCallback + '_' + callbackFunction;
+
+      window[callbackFunction] = function (response) {
+        resolve({
+          ok: true,
+          // keep consistent with fetch API
+          json: function json() {
+            return Promise.resolve(response);
+          }
+        });
+
+        if (timeoutId) clearTimeout(timeoutId);
+
+        removeScript(scriptId);
+
+        clearFunction(callbackFunction);
+      };
+
+      // Check if the user set their own params, and if not add a ? to start a list of params
+      url += url.indexOf('?') === -1 ? '?' : '&';
+
+      var jsonpScript = document.createElement('script');
+      jsonpScript.setAttribute('src', '' + url + jsonpCallback + '=' + callbackFunction);
+      if (options.charset) {
+        jsonpScript.setAttribute('charset', options.charset);
+      }
+      jsonpScript.id = scriptId;
+      document.getElementsByTagName('head')[0].appendChild(jsonpScript);
+
+      timeoutId = setTimeout(function () {
+        reject(new Error('JSONP request to ' + _url + ' timed out'));
+
+        clearFunction(callbackFunction);
+        removeScript(scriptId);
+        window[callbackFunction] = function () {
+          clearFunction(callbackFunction);
+        };
+      }, timeout);
+
+      // Caught if got 404/500
+      jsonpScript.onerror = function () {
+        reject(new Error('JSONP request to ' + _url + ' failed'));
+
+        clearFunction(callbackFunction);
+        removeScript(scriptId);
+        if (timeoutId) clearTimeout(timeoutId);
+      };
+    });
+  }
+
+  // export as global function
+  /*
+  let local;
+  if (typeof global !== 'undefined') {
+    local = global;
+  } else if (typeof self !== 'undefined') {
+    local = self;
+  } else {
+    try {
+      local = Function('return this')();
+    } catch (e) {
+      throw new Error('polyfill failed because global object is unavailable in this environment');
+    }
+  }
+  local.fetchJsonp = fetchJsonp;
+  */
+
+  module.exports = fetchJsonp;
+});
+
+/***/ }),
+
+/***/ 107:
+/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
+
+(function (global, factory) {
+	 true ? factory() :
+	0;
+}(this, (function () { 'use strict';
+
+/**
+ * @this {Promise}
+ */
+function finallyConstructor(callback) {
+  var constructor = this.constructor;
+  return this.then(
+    function(value) {
+      // @ts-ignore
+      return constructor.resolve(callback()).then(function() {
+        return value;
+      });
+    },
+    function(reason) {
+      // @ts-ignore
+      return constructor.resolve(callback()).then(function() {
+        // @ts-ignore
+        return constructor.reject(reason);
+      });
+    }
+  );
+}
+
+// Store setTimeout reference so promise-polyfill will be unaffected by
+// other code modifying setTimeout (like sinon.useFakeTimers())
+var setTimeoutFunc = setTimeout;
+
+function isArray(x) {
+  return Boolean(x && typeof x.length !== 'undefined');
+}
+
+function noop() {}
+
+// Polyfill for Function.prototype.bind
+function bind(fn, thisArg) {
+  return function() {
+    fn.apply(thisArg, arguments);
+  };
+}
+
+/**
+ * @constructor
+ * @param {Function} fn
+ */
+function Promise(fn) {
+  if (!(this instanceof Promise))
+    throw new TypeError('Promises must be constructed via new');
+  if (typeof fn !== 'function') throw new TypeError('not a function');
+  /** @type {!number} */
+  this._state = 0;
+  /** @type {!boolean} */
+  this._handled = false;
+  /** @type {Promise|undefined} */
+  this._value = undefined;
+  /** @type {!Array<!Function>} */
+  this._deferreds = [];
+
+  doResolve(fn, this);
+}
+
+function handle(self, deferred) {
+  while (self._state === 3) {
+    self = self._value;
+  }
+  if (self._state === 0) {
+    self._deferreds.push(deferred);
+    return;
+  }
+  self._handled = true;
+  Promise._immediateFn(function() {
+    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
+    if (cb === null) {
+      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
+      return;
+    }
+    var ret;
+    try {
+      ret = cb(self._value);
+    } catch (e) {
+      reject(deferred.promise, e);
+      return;
+    }
+    resolve(deferred.promise, ret);
+  });
+}
+
+function resolve(self, newValue) {
+  try {
+    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+    if (newValue === self)
+      throw new TypeError('A promise cannot be resolved with itself.');
+    if (
+      newValue &&
+      (typeof newValue === 'object' || typeof newValue === 'function')
+    ) {
+      var then = newValue.then;
+      if (newValue instanceof Promise) {
+        self._state = 3;
+        self._value = newValue;
+        finale(self);
+        return;
+      } else if (typeof then === 'function') {
+        doResolve(bind(then, newValue), self);
+        return;
+      }
+    }
+    self._state = 1;
+    self._value = newValue;
+    finale(self);
+  } catch (e) {
+    reject(self, e);
+  }
+}
+
+function reject(self, newValue) {
+  self._state = 2;
+  self._value = newValue;
+  finale(self);
+}
+
+function finale(self) {
+  if (self._state === 2 && self._deferreds.length === 0) {
+    Promise._immediateFn(function() {
+      if (!self._handled) {
+        Promise._unhandledRejectionFn(self._value);
+      }
+    });
+  }
+
+  for (var i = 0, len = self._deferreds.length; i < len; i++) {
+    handle(self, self._deferreds[i]);
+  }
+  self._deferreds = null;
+}
+
+/**
+ * @constructor
+ */
+function Handler(onFulfilled, onRejected, promise) {
+  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
+  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
+  this.promise = promise;
+}
+
+/**
+ * Take a potentially misbehaving resolver function and make sure
+ * onFulfilled and onRejected are only called once.
+ *
+ * Makes no guarantees about asynchrony.
+ */
+function doResolve(fn, self) {
+  var done = false;
+  try {
+    fn(
+      function(value) {
+        if (done) return;
+        done = true;
+        resolve(self, value);
+      },
+      function(reason) {
+        if (done) return;
+        done = true;
+        reject(self, reason);
+      }
+    );
+  } catch (ex) {
+    if (done) return;
+    done = true;
+    reject(self, ex);
+  }
+}
+
+Promise.prototype['catch'] = function(onRejected) {
+  return this.then(null, onRejected);
+};
+
+Promise.prototype.then = function(onFulfilled, onRejected) {
+  // @ts-ignore
+  var prom = new this.constructor(noop);
+
+  handle(this, new Handler(onFulfilled, onRejected, prom));
+  return prom;
+};
+
+Promise.prototype['finally'] = finallyConstructor;
+
+Promise.all = function(arr) {
+  return new Promise(function(resolve, reject) {
+    if (!isArray(arr)) {
+      return reject(new TypeError('Promise.all accepts an array'));
+    }
+
+    var args = Array.prototype.slice.call(arr);
+    if (args.length === 0) return resolve([]);
+    var remaining = args.length;
+
+    function res(i, val) {
+      try {
+        if (val && (typeof val === 'object' || typeof val === 'function')) {
+          var then = val.then;
+          if (typeof then === 'function') {
+            then.call(
+              val,
+              function(val) {
+                res(i, val);
+              },
+              reject
+            );
+            return;
+          }
+        }
+        args[i] = val;
+        if (--remaining === 0) {
+          resolve(args);
+        }
+      } catch (ex) {
+        reject(ex);
+      }
+    }
+
+    for (var i = 0; i < args.length; i++) {
+      res(i, args[i]);
+    }
+  });
+};
+
+Promise.resolve = function(value) {
+  if (value && typeof value === 'object' && value.constructor === Promise) {
+    return value;
+  }
+
+  return new Promise(function(resolve) {
+    resolve(value);
+  });
+};
+
+Promise.reject = function(value) {
+  return new Promise(function(resolve, reject) {
+    reject(value);
+  });
+};
+
+Promise.race = function(arr) {
+  return new Promise(function(resolve, reject) {
+    if (!isArray(arr)) {
+      return reject(new TypeError('Promise.race accepts an array'));
+    }
+
+    for (var i = 0, len = arr.length; i < len; i++) {
+      Promise.resolve(arr[i]).then(resolve, reject);
+    }
+  });
+};
+
+// Use polyfill for setImmediate for performance gains
+Promise._immediateFn =
+  // @ts-ignore
+  (typeof setImmediate === 'function' &&
+    function(fn) {
+      // @ts-ignore
+      setImmediate(fn);
+    }) ||
+  function(fn) {
+    setTimeoutFunc(fn, 0);
+  };
+
+Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
+  if (typeof console !== 'undefined' && console) {
+    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
+  }
+};
+
+/** @suppress {undefinedVars} */
+var globalNS = (function() {
+  // the only reliable means to get the global object is
+  // `Function('return this')()`
+  // However, this causes CSP violations in Chrome apps.
+  if (typeof self !== 'undefined') {
+    return self;
+  }
+  if (typeof window !== 'undefined') {
+    return window;
+  }
+  if (typeof __webpack_require__.g !== 'undefined') {
+    return __webpack_require__.g;
+  }
+  throw new Error('unable to locate global object');
+})();
+
+if (!('Promise' in globalNS)) {
+  globalNS['Promise'] = Promise;
+} else if (!globalNS.Promise.prototype['finally']) {
+  globalNS.Promise.prototype['finally'] = finallyConstructor;
+}
+
+})));
+
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		if(__webpack_module_cache__[moduleId]) {
+/******/ 			return __webpack_module_cache__[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/compat get default export */
+/******/ 	(() => {
+/******/ 		// getDefaultExport function for compatibility with non-harmony modules
+/******/ 		__webpack_require__.n = (module) => {
+/******/ 			var getter = module && module.__esModule ?
+/******/ 				() => module['default'] :
+/******/ 				() => module;
+/******/ 			__webpack_require__.d(getter, { a: getter });
+/******/ 			return getter;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/global */
+/******/ 	(() => {
+/******/ 		__webpack_require__.g = (function() {
+/******/ 			if (typeof globalThis === 'object') return globalThis;
+/******/ 			try {
+/******/ 				return this || new Function('return this')();
+/******/ 			} catch (e) {
+/******/ 				if (typeof window === 'object') return window;
+/******/ 			}
+/******/ 		})();
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+(() => {
+"use strict";
+
+// UNUSED EXPORTS: AddressMatchService, BuffersAnalystJobsParameter, ElasticSearch, GeoCodingParameter, GeoDecodingParameter, KernelDensityJobParameter, MapVLayer, MapVRenderer, MappingParameters, OutputSetting, OverlayGeoJobParameter, ProcessingService, SecurityManager, SingleObjectQueryJobsParameter, SummaryAttributesJobsParameter, SummaryMeshJobParameter, SummaryRegionJobParameter, SuperMap, TopologyValidatorJobsParameter
+
+;// CONCATENATED MODULE: ./src/common/SuperMap.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+var SuperMap = window.SuperMap = window.SuperMap || {};
+SuperMap.Components = window.SuperMap.Components || {};
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Pixel.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.Pixel
+ * @category BaseTypes Geometry
+ * @classdesc 此类用 x,y 坐标描绘屏幕坐标(像素点)。
+ * @param {number} [x=0.0] - x 坐标。
+ * @param {number} [y=0.0] - y 坐标。
+ * @param {SuperMap.Pixel.Mode} [mode=SuperMap.Pixel.Mode.LeftTop] - 坐标模式。
+ *
+ * @example
+ * //单独创建一个对象
+ * var pixcel = new SuperMap.Pixel(100,50);
+ *
+ * //依据 size 创建
+ *  var size = new SuperMap.Size(21,25);
+ *  var offset = new SuperMap.Pixel(-(size.w/2), -size.h);
+ */
+class Pixel {
+
+
+    constructor(x, y, mode) {
+        /**
+         * @member {number} [SuperMap.Pixel.prototype.x=0.0]
+         * @description x 坐标。
+         */
+        this.x = x ? parseFloat(x) : 0.0;
+
+        /**
+         * @member {number} [SuperMap.Pixel.prototype.y=0.0]
+         * @description y 坐标。
+         */
+        this.y = y ? parseFloat(y) : 0.0;
+
+        /**
+         * @member {SuperMap.Pixel.Mode} [SuperMap.Pixel.prototype.mode=SuperMap.Pixel.Mode.LeftTop]
+         * @description 坐标模式,有左上、右上、右下、左下这几种模式,分别表示相对于左上角、右上角、右下角、左下角的坐标。 
+         */ 
+        this.mode = mode;
+        this.CLASS_NAME = "SuperMap.Pixel";
+        /**
+         * @enum SuperMap.Pixel.Mode
+         * @readonly
+         * @description 模式。
+         * @type {string}
+         */
+
+        SuperMap.Pixel.Mode = {
+            /** 左上模式。*/
+            LeftTop: "lefttop",
+            /** 右上模式。 */
+            RightTop: "righttop",
+            /** 右下模式。 */
+            RightBottom: "rightbottom",
+            /** 左下模式。 */
+            LeftBottom: "leftbottom"
+        };
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.toString
+     * @description 返回此对象的字符串形式。
+     * @example
+     *
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var str = pixcel.toString();
+     *
+     * @returns {string} 例如: "x=200.4,y=242.2"
+     */
+    toString() {
+        return ("x=" + this.x + ",y=" + this.y);
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.clone
+     * @description 克隆当前的 pixel 对象。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = pixcel.clone();
+     * @returns {SuperMap.Pixel} 返回一个新的与当前 pixel 对象有相同 x、y 坐标的 pixel 对象。
+     */
+    clone() {
+        return new Pixel(this.x, this.y, this.mode);
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.equals
+     * @description 比较两 pixel 是否相等。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(100,50);
+     * var isEquals = pixcel.equals(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 用于比较相等的 pixel 对象。
+     * @returns {boolean} 如果传入的像素点和当前像素点相同返回 true,如果不同或传入参数为 NULL 则返回 false。
+     */
+    equals(px) {
+        var equals = false;
+        if (px != null) {
+            equals = ((this.x == px.x && this.y == px.y) ||
+                (isNaN(this.x) && isNaN(this.y) && isNaN(px.x) && isNaN(px.y)));
+        }
+        return equals;
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.distanceTo
+     * @description 返回两个 pixel 的距离。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(110,30);
+     * var distance = pixcel.distanceTo(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 用于计算的一个 pixel。
+     * @returns {float} 作为参数传入的像素与当前像素点的距离。
+     */
+    distanceTo(px) {
+        return Math.sqrt(
+            Math.pow(this.x - px.x, 2) +
+            Math.pow(this.y - px.y, 2)
+        );
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.add
+     * @description 在原来像素坐标基础上,x 值加上传入的 x 参数,y 值加上传入的 y 参数。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * //pixcel2是新的对象
+     * var pixcel2 = pixcel.add(20,30);
+     *
+     * @param {number} x - 传入的 x 值。
+     * @param {number} y - 传入的 y 值。
+     * @returns {SuperMap.Pixel} 返回一个新的 pixel 对象,该 pixel 是由当前的 pixel 与传入的 x,y 相加得到。
+     */
+    add(x, y) {
+        if ((x == null) || (y == null)) {
+            throw new TypeError('Pixel.add cannot receive null values');
+        }
+        return new Pixel(this.x + x, this.y + y);
+    }
+
+    /**
+     * @function SuperMap.Pixel.prototype.offset
+     * @description 通过传入的 {@link SuperMap.Pixel} 参数对原屏幕坐标进行偏移。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(130,20);
+     * //pixcel3 是新的对象
+     * var pixcel3 = pixcel.offset(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 传入的 <SuperMap.Pixel> 对象。
+     * @returns {SuperMap.Pixel} 返回一个新的 pixel,该 pixel 是由当前的 pixel 对象的 x,y 值与传入的 Pixel 对象的 x,y 值相加得到。
+     */
+    offset(px) {
+        var newPx = this.clone();
+        if (px) {
+            newPx = this.add(px.x, px.y);
+        }
+        return newPx;
+    }
+
+    /**
+     *
+     * @function SuperMap.Pixel.prototype.destroy
+     * @description 销毁此对象。销毁后此对象的所有属性为 null,而不是初始值。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * pixcel.destroy();
+     */
+    destroy() {
+        this.x = null;
+        this.y = null;
+        this.mode = null;
+    }
+}
+
+SuperMap.Pixel = Pixel;
+
+
+;// CONCATENATED MODULE: ./src/common/commontypes/BaseTypes.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+/**
+ *@namespace SuperMap
+ *@category BaseTypes Namespace
+ */
+
+/**
+ * @function SuperMap.inherit
+ * @description 除了 C 和 P 两个必要参数外,可以传递任意数量的对象,这些对象都将继承C。
+ * @memberOf SuperMap
+ * @param {Object} C - 继承的类。
+ * @param {Object} P - 被继承的父类。
+ */
+SuperMap.inherit = function (C, P) {
+    var F = function () {
+    };
+    F.prototype = P.prototype;
+    C.prototype = new F;
+    var i, l, o;
+    for (i = 2, l = arguments.length; i < l; i++) {
+        o = arguments[i];
+        if (typeof o === "function") {
+            o = o.prototype;
+        }
+        SuperMap.Util.extend(C.prototype, o);
+    }
+};
+
+
+/**
+ * @function SuperMap.mixin 
+ * @description 实现多重继承。
+ * @memberOf SuperMap
+ * @param {Class|Object} ...mixins - 继承的类。
+ */
+SuperMap.mixin = function (...mixins) {
+
+    class Mix {
+        constructor(options) {
+            for (var index = 0; index < mixins.length; index++) {
+                copyProperties(this, new mixins[index](options));
+            }
+        }
+    }
+
+    for (var index = 0; index < mixins.length; index++) {
+        var mixin = mixins[index];
+        copyProperties(Mix, mixin);
+        copyProperties(Mix.prototype, mixin.prototype);
+        copyProperties(Mix.prototype, new mixin());
+    }
+    return Mix;
+
+    function copyProperties(target, source) {
+        var ownKeys = Object.getOwnPropertyNames(source);
+        if (Object.getOwnPropertySymbols) {
+            ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source));
+        }
+        for (var index = 0; index < ownKeys.length; index++) {
+            var key = ownKeys[index];
+            if (key !== "constructor"
+                && key !== "prototype"
+                && key !== "name" && key !== "length") {
+                let desc = Object.getOwnPropertyDescriptor(source, key);
+                if (window["ActiveXObject"]) {
+                    Object.defineProperty(target, key, desc || {});
+                } else {
+                    Object.defineProperty(target, key, desc);
+                }
+            }
+        }
+    }
+};
+
+/**
+ * @name String
+ * @namespace
+ * @memberOf SuperMap
+ * @category BaseTypes Util
+ * @description 字符串操作的一系列常用扩展函数。
+ */
+var StringExt = SuperMap.String = {
+
+    /**
+     * @function SuperMap.String.startsWith
+     * @description 判断目标字符串是否以指定的子字符串开头。
+     * @param {string} str - 目标字符串。
+     * @param {string} sub - 查找的子字符串。
+     * @returns {boolean} 目标字符串以指定的子字符串开头,则返回 true;否则返回 false。
+     */
+    startsWith: function (str, sub) {
+        return (str.indexOf(sub) == 0);
+    },
+
+    /**
+     * @function SuperMap.String.contains
+     * @description 判断目标字符串是否包含指定的子字符串。
+     * @param {string} str - 目标字符串。
+     * @param {string} sub - 查找的子字符串。
+     * @returns {boolean} 目标字符串中包含指定的子字符串,则返回 true;否则返回 false。
+     */
+    contains: function (str, sub) {
+        return (str.indexOf(sub) != -1);
+    },
+
+    /**
+     * @function SuperMap.String.trim
+     * @description 删除一个字符串的开头和结尾处的所有空白字符。
+     * @param {string} str - (可能)存在空白字符填塞的字符串。
+     * @returns {string} 删除开头和结尾处空白字符后的字符串。
+     */
+    trim: function (str) {
+        return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+    },
+
+    /**
+     * @function SuperMap.String.camelize
+     * @description 骆驼式("-")连字符的字符串处理。
+     * 例如:"chicken-head" becomes "chickenHead",
+     *       "-chicken-head" becomes "ChickenHead"。
+     * @param {string} str - 要处理的字符串,原始内容不应被修改。
+     * @returns {string}
+     */
+    camelize: function (str) {
+        var oStringList = str.split('-');
+        var camelizedString = oStringList[0];
+        for (var i = 1, len = oStringList.length; i < len; i++) {
+            var s = oStringList[i];
+            camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
+        }
+        return camelizedString;
+    },
+
+    /**
+     * @function SuperMap.String.format
+     * @description 提供带 ${token} 标记的字符串, 返回 context 对象属性中指定标记的属性值。
+     * @example
+     * 示例:
+     * (code)
+     * 1、template = "${value,getValue}";
+     *         context = {value: {getValue:function(){return Math.max.apply(null,argument);}}};
+     *         args = [2,23,12,36,21];
+     *       返回值:36
+     * (end)
+     * 示例:
+     * (code)
+     * 2、template = "$${{value,getValue}}";
+     *         context = {value: {getValue:function(){return Math.max.apply(null,argument);}}};
+     *         args = [2,23,12,36,21];
+     *       返回值:"${36}"
+     * (end)
+     * 示例:
+     * (code)
+     * 3、template = "${a,b}";
+     *         context = {a: {b:"format"}};
+     *         args = null;
+     *       返回值:"format"
+     * (end)
+     * 示例:
+     * (code)
+     * 3、template = "${a,b}";
+     *         context = null;
+     *         args = null;
+     *       返回值:"${a.b}"
+     * (end)
+     * @param {string} template - 带标记的字符串将要被替换。参数 template 格式为"${token}",此处的 token 标记会替换为 context["token"] 属性的值。
+     * @param {Object} [context=window] - 带有属性的可选对象的属性用于匹配格式化字符串中的标记。如果该参数为空,将使用 window 对象。
+     * @param {Array} [args] - 可选参数传递给在 context 对象上找到的函数。
+     * @returns {string} 从 context 对象属性中替换字符串标记位的字符串。 
+     */
+    format: function (template, context, args) {
+        if (!context) {
+            context = window;
+        }
+
+        // Example matching:
+        // str   = ${foo.bar}
+        // match = foo.bar
+        var replacer = function (str, match) {
+            var replacement;
+
+            // Loop through all subs. Example: ${a.b.c}
+            // 0 -> replacement = context[a];
+            // 1 -> replacement = context[a][b];
+            // 2 -> replacement = context[a][b][c];
+            var subs = match.split(/\.+/);
+            for (var i = 0; i < subs.length; i++) {
+                if (i == 0) {
+                    replacement = context;
+                }
+
+                replacement = replacement[subs[i]];
+            }
+
+            if (typeof replacement === "function") {
+                replacement = args ?
+                    replacement.apply(null, args) :
+                    replacement();
+            }
+
+            // If replacement is undefined, return the string 'undefined'.
+            // This is a workaround for a bugs in browsers not properly
+            // dealing with non-participating groups in regular expressions:
+            // http://blog.stevenlevithan.com/archives/npcg-javascript
+            if (typeof replacement == 'undefined') {
+                return 'undefined';
+            } else {
+                return replacement;
+            }
+        };
+
+        return template.replace(SuperMap.String.tokenRegEx, replacer);
+    },
+
+    /**
+     * @member {RegExp} [SuperMap.String.tokenRegEx]
+     * @description 寻找带 token 的字符串,默认为 tokenRegEx=/\$\{([\w.]+?)\}/g。
+     * @example
+     * Examples: ${a}, ${a.b.c}, ${a-b}, ${5}
+     */
+    tokenRegEx: /\$\{([\w.]+?)\}/g,
+
+    /**
+     * @member {RegExp} [SuperMap.String.numberRegEx]
+     * @description 判断一个字符串是否只包含一个数值,默认为 numberRegEx=/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/。
+     */
+    numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/,
+
+    /**
+     * @function SuperMap.String.isNumeric
+     * @description 判断一个字符串是否只包含一个数值。
+     * @example
+     * (code)
+     * SuperMap.String.isNumeric("6.02e23") // true
+     * SuperMap.String.isNumeric("12 dozen") // false
+     * SuperMap.String.isNumeric("4") // true
+     * SuperMap.String.isNumeric(" 4 ") // false
+     * (end)
+     * @returns {boolean} 字符串包含唯一的数值,返回 true;否则返回 false。
+     */
+    isNumeric: function (value) {
+        return SuperMap.String.numberRegEx.test(value);
+    },
+
+    /**
+     * @function SuperMap.String.numericIf
+     * @description 把一个看似数值型的字符串转化为一个数值。
+     * @returns {(number|string)} 如果能转换为数值则返回数值,否则返回字符串本身。
+     */
+    numericIf: function (value) {
+        return SuperMap.String.isNumeric(value) ? parseFloat(value) : value;
+    }
+
+};
+
+/**
+ * @name Number
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 数值操作的一系列常用扩展函数。
+ */
+var NumberExt = SuperMap.Number = {
+
+    /**
+     * @member {string} [SuperMap.Number.decimalSeparator='.']
+     * @description 格式化数字时默认的小数点分隔符。
+     * @constant
+     */
+    decimalSeparator: ".",
+
+    /**
+     * @member {string} [SuperMap.Number.thousandsSeparator=',']
+     * @description 格式化数字时默认的千位分隔符。
+     * @constant
+     */
+    thousandsSeparator: ",",
+
+    /**
+     * @function SuperMap.Number.limitSigDigs
+     * @description 限制浮点数的有效数字位数。
+     * @param {number} num - 浮点数。
+     * @param {integer} sig - 有效位数。
+     * @returns {number} 将数字四舍五入到指定数量的有效位数。
+     */
+    limitSigDigs: function (num, sig) {
+        var fig = 0;
+        if (sig > 0) {
+            fig = parseFloat(num.toPrecision(sig));
+        }
+        return fig;
+    },
+
+    /**
+     * @function SuperMap.Number.format
+     * @description 数字格式化输出。
+     * @param {number} num - 数字。
+     * @param {integer} [dec=0]  - 数字的小数部分四舍五入到指定的位数。设置为 null 值时小数部分不变。
+     * @param {string} [tsep=','] - 千位分隔符。
+     * @param {string} [dsep='.'] - 小数点分隔符。
+     * @returns {string} 数字格式化后的字符串。
+     */
+    format: function (num, dec, tsep, dsep) {
+        dec = (typeof dec != "undefined") ? dec : 0;
+        tsep = (typeof tsep != "undefined") ? tsep :
+            SuperMap.Number.thousandsSeparator;
+        dsep = (typeof dsep != "undefined") ? dsep :
+            SuperMap.Number.decimalSeparator;
+
+        if (dec != null) {
+            num = parseFloat(num.toFixed(dec));
+        }
+
+        var parts = num.toString().split(".");
+        if (parts.length === 1 && dec == null) {
+            // integer where we do not want to touch the decimals
+            dec = 0;
+        }
+
+        var integer = parts[0];
+        if (tsep) {
+            var thousands = /(-?[0-9]+)([0-9]{3})/;
+            while (thousands.test(integer)) {
+                integer = integer.replace(thousands, "$1" + tsep + "$2");
+            }
+        }
+
+        var str;
+        if (dec == 0) {
+            str = integer;
+        } else {
+            var rem = parts.length > 1 ? parts[1] : "0";
+            if (dec != null) {
+                rem = rem + new Array(dec - rem.length + 1).join("0");
+            }
+            str = integer + dsep + rem;
+        }
+        return str;
+    }
+};
+
+if (!Number.prototype.limitSigDigs) {
+    /**
+     * APIMethod: Number.limitSigDigs
+     * 限制浮点数的有效数字位数.
+     * @param {integer} sig -有效位数。
+     * @returns {integer} 将数字四舍五入到指定数量的有效位数。
+     *           如果传入值 为 null、0、或者是负数, 返回值 0。
+     */
+    Number.prototype.limitSigDigs = function (sig) {
+        return NumberExt.limitSigDigs(this, sig);
+    };
+}
+
+/**
+ * @name Function
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 函数操作的一系列常用扩展函数。
+ */
+var FunctionExt = SuperMap.Function = {
+    /**
+     * @function SuperMap.Function.bind
+     * @description 绑定函数到对象。方便创建 this 的作用域。
+     * @param {function} func - 输入函数。
+     * @param {Object} object - 对象绑定到输入函数(作为输入函数的 this 对象)。
+     * @returns {function} object 参数作为 func 函数的 this 对象。
+     */
+    bind: function (func, object) {
+        // create a reference to all arguments past the second one
+        var args = Array.prototype.slice.apply(arguments, [2]);
+        return function () {
+            // Push on any additional arguments from the actual function call.
+            // These will come after those sent to the bind call.
+            var newArgs = args.concat(
+                Array.prototype.slice.apply(arguments, [0])
+            );
+            return func.apply(object, newArgs);
+        };
+    },
+
+    /**
+     * @function SuperMap.Function.bindAsEventListener
+     * @description 绑定函数到对象,在调用该函数时配置并使用事件对象作为第一个参数。
+     * @param {function} func - 用于监听事件的函数。
+     * @param {Object} object - this 对象的引用。
+     * @returns {function}
+     */
+    bindAsEventListener: function (func, object) {
+        return function (event) {
+            return func.call(object, event || window.event);
+        };
+    },
+
+    /**
+     * @function SuperMap.Function.False
+     * @description 该函数仅仅返回 false。该函数主要是避免在 IE8 以下浏览中 DOM 事件句柄的匿名函数问题。
+     * @example
+     * document.onclick = SuperMap.Function.False;
+     * @returns {boolean}
+     */
+    False: function () {
+        return false;
+    },
+
+    /**
+     * @function SuperMap.Function.True
+     * @description 该函数仅仅返回 true。该函数主要是避免在 IE8 以下浏览中 DOM 事件句柄的匿名函数问题。
+     * @example
+     * document.onclick = SuperMap.Function.True;
+     * @returns {boolean}
+     */
+    True: function () {
+        return true;
+    },
+
+    /**
+     * @function SuperMap.Function.Void
+     * @description 可重用函数,仅仅返回 "undefined"。
+     * @returns {undefined}
+     */
+    Void: function () {
+    }
+
+};
+
+/**
+ * @name Array
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 数组操作的一系列常用扩展函数。
+ */
+var ArrayExt = SuperMap.Array = {
+
+    /**
+     * @function SuperMap.Array.filter
+     * @description 过滤数组,提供了 ECMA-262 标准中 Array.prototype.filter 函数的扩展。详见:{@link http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter}
+     * @param {Array} array - 要过滤的数组。
+     * @param {function} callback - 数组中的每一个元素调用该函数。</br>
+     *     如果函数的返回值为 true,该元素将包含在返回的数组中。该函数有三个参数: 数组中的元素,元素的索引,数组自身。</br>
+     *     如果设置了可选参数 caller,在调用 callback 时,使用可选参数 caller 设置为 callback 的参数。</br>
+     * @param {Object} [caller] - 在调用 callback 时,使用参数 caller 设置为 callback 的参数。
+     * @returns {Array} callback 函数返回 true 时的元素将作为返回数组中的元素。
+     */
+    filter: function (array, callback, caller) {
+        var selected = [];
+        if (Array.prototype.filter) {
+            selected = array.filter(callback, caller);
+        } else {
+            var len = array.length;
+            if (typeof callback != "function") {
+                throw new TypeError();
+            }
+            for (var i = 0; i < len; i++) {
+                if (i in array) {
+                    var val = array[i];
+                    if (callback.call(caller, val, i, array)) {
+                        selected.push(val);
+                    }
+                }
+            }
+        }
+        return selected;
+    }
+
+};
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Util.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+var Util = SuperMap.Util = SuperMap.Util || {};
+/**
+ * @name Util
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description common 工具类。
+ */
+
+/**
+ * @description 复制源对象的所有属性到目标对象上,源对象上的没有定义的属性在目标对象上也不会被设置。
+ * @example
+ * 要复制 SuperMap.Size 对象的所有属性到自定义对象上,使用方法如下:
+ *     var size = new SuperMap.Size(100, 100);
+ *     var obj = {};
+ *     SuperMap.Util.extend(obj, size);
+ * @param {Object} [destination] - 目标对象。
+ * @param {Object} source - 源对象,其属性将被设置到目标对象上。
+ * @returns {Object} 目标对象。
+ */
+
+SuperMap.Util.extend = function (destination, source) {
+    destination = destination || {};
+    if (source) {
+        for (var property in source) {
+            var value = source[property];
+            if (value !== undefined) {
+                destination[property] = value;
+            }
+        }
+
+        /**
+         * IE doesn't include the toString property when iterating over an object's
+         * properties with the for(property in object) syntax.  Explicitly check if
+         * the source has its own toString property.
+         */
+
+        /*
+         * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative
+         * prototype object" when calling hawOwnProperty if the source object
+         * is an instance of window.Event.
+         */
+
+        var sourceIsEvt = typeof window.Event === "function"
+            && source instanceof window.Event;
+
+        if (!sourceIsEvt
+            && source.hasOwnProperty && source.hasOwnProperty("toString")) {
+            destination.toString = source.toString;
+        }
+    }
+    return destination;
+};
+/**
+ * @description 对象拷贝。
+ * @param {Object} [des] - 目标对象。
+ * @param {Object} soc - 源对象。
+ */
+SuperMap.Util.copy = function (des, soc) {
+    des = des || {};
+    var v;
+    if (soc) {
+        for (var p in des) {
+            v = soc[p];
+            if (typeof v !== 'undefined') {
+                des[p] = v;
+            }
+        }
+    }
+};
+/**
+ * @description 销毁对象,将其属性置空。
+ * @param {Object} [obj] - 目标对象。
+ */
+SuperMap.Util.reset = function (obj) {
+    obj = obj || {};
+    for (var p in obj) {
+        if (obj.hasOwnProperty(p)) {
+            if (typeof obj[p] === "object" && obj[p] instanceof Array) {
+                for (var i in obj[p]) {
+                    if (obj[p][i].destroy) {
+                        obj[p][i].destroy();
+                    }
+                }
+                obj[p].length = 0;
+            } else if (typeof obj[p] === "object" && obj[p] instanceof Object) {
+                if (obj[p].destroy) {
+                    obj[p].destroy();
+                }
+            }
+            obj[p] = null;
+        }
+    }
+};
+
+/**
+ * @description 获取 HTML 元素数组。
+ * @returns {Array.<HTMLElement>} HTML 元素数组。
+ */
+SuperMap.Util.getElement = function () {
+    var elements = [];
+
+    for (var i = 0, len = arguments.length; i < len; i++) {
+        var element = arguments[i];
+        if (typeof element === 'string') {
+            element = document.getElementById(element);
+        }
+        if (arguments.length === 1) {
+            return element;
+        }
+        elements.push(element);
+    }
+    return elements;
+};
+
+/**
+ * @description instance of 的跨浏览器实现。
+ * @param {Object} o - 对象。
+ * @returns {boolean} 是否是页面元素。
+ */
+SuperMap.Util.isElement = function (o) {
+    return !!(o && o.nodeType === 1);
+};
+
+/**
+ * @description 判断一个对象是否是数组。
+ * @param {Object} a - 对象。
+ * @returns {boolean} 是否是数组。
+ */
+SuperMap.Util.isArray = function (a) {
+    return (Object.prototype.toString.call(a) === '[object Array]');
+};
+
+
+/**
+ * @description 从数组中删除某一项。
+ * @param {Array} array - 数组。
+ * @param {Object} item - 数组中要删除的一项。
+ * @returns {Array} 执行删除操作后的数组。
+ */
+SuperMap.Util.removeItem = function (array, item) {
+    for (var i = array.length - 1; i >= 0; i--) {
+        if (array[i] === item) {
+            array.splice(i, 1);
+            //break;more than once??
+        }
+    }
+    return array;
+};
+
+/**
+ * @description 获取某对象再数组中的索引值。
+ * @param {Array} array - 数组。
+ * @param {Object} obj - 对象。
+ * @returns {number} 某对象再数组中的索引值。
+ */
+SuperMap.Util.indexOf = function (array, obj) {
+    if (array == null) {
+        return -1;
+    } else {
+        // use the build-in function if available.
+        if (typeof array.indexOf === "function") {
+            return array.indexOf(obj);
+        } else {
+            for (var i = 0, len = array.length; i < len; i++) {
+                if (array[i] === obj) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+    }
+};
+
+
+/**
+ * @description 修改某 DOM 元素的许多属性。
+ * @param {HTMLElement} element - 待修改的 DOM 元素。
+ * @param {string} [id] - DOM 元素的 ID。
+ * @param {SuperMap.Pixel} [px] - 包含 DOM 元素的 style 属性的 left 和 top 属性。
+ * @param {SuperMap.Size} [sz] - 包含 DOM 元素的 width 和 height 属性。
+ * @param {string} [position] - DOM 元素的 position 属性。
+ * @param {string} [border] - DOM 元素的 style 属性的 border 属性。
+ * @param {string} [overflow] - DOM 元素的 style 属性的 overflow 属性。
+ * @param {number} [opacity] - 不透明度值。取值范围为(0.0 - 1.0)。
+ */
+SuperMap.Util.modifyDOMElement = function (element, id, px, sz, position,
+                                           border, overflow, opacity) {
+
+    if (id) {
+        element.id = id;
+    }
+    if (px) {
+        element.style.left = px.x + "px";
+        element.style.top = px.y + "px";
+    }
+    if (sz) {
+        element.style.width = sz.w + "px";
+        element.style.height = sz.h + "px";
+    }
+    if (position) {
+        element.style.position = position;
+    }
+    if (border) {
+        element.style.border = border;
+    }
+    if (overflow) {
+        element.style.overflow = overflow;
+    }
+    if (parseFloat(opacity) >= 0.0 && parseFloat(opacity) < 1.0) {
+        element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
+        element.style.opacity = opacity;
+    } else if (parseFloat(opacity) === 1.0) {
+        element.style.filter = '';
+        element.style.opacity = '';
+    }
+};
+
+
+/**
+ * @description Takes an object and copies any properties that don't exist from
+ *     another properties, by analogy with SuperMap.Util.extend() from
+ *     Prototype.js.
+ *
+ * @param {Object} [to] - 目标对象。
+ * @param {Object} from - 源对象。Any properties of this object that
+ *     are undefined in the to object will be set on the to object.
+ *
+ * @returns {Object} A reference to the to object.  Note that the to argument is modified
+ *     in place and returned by this function.
+ */
+SuperMap.Util.applyDefaults = function (to, from) {
+    to = to || {};
+    /*
+     * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative
+     * prototype object" when calling hawOwnProperty if the source object is an
+     * instance of window.Event.
+     */
+    var fromIsEvt = typeof window.Event === "function"
+        && from instanceof window.Event;
+
+    for (var key in from) {
+        if (to[key] === undefined ||
+            (!fromIsEvt && from.hasOwnProperty
+                && from.hasOwnProperty(key) && !to.hasOwnProperty(key))) {
+            to[key] = from[key];
+        }
+    }
+    /**
+     * IE doesn't include the toString property when iterating over an object's
+     * properties with the for(property in object) syntax.  Explicitly check if
+     * the source has its own toString property.
+     */
+    if (!fromIsEvt && from && from.hasOwnProperty
+        && from.hasOwnProperty('toString') && !to.hasOwnProperty('toString')) {
+        to.toString = from.toString;
+    }
+
+    return to;
+};
+
+
+/**
+ * @description 将参数对象转换为 HTTP 的 GET 请求中的参数字符串。例如:"key1=value1&key2=value2&key3=value3"。
+ * @param {Object} params - 参数对象。
+ * @returns {string} HTTP 的 GET 请求中的参数字符串。
+ */
+SuperMap.Util.getParameterString = function (params) {
+    var paramsArray = [];
+
+    for (var key in params) {
+        var value = params[key];
+        if ((value != null) && (typeof value !== 'function')) {
+            var encodedValue;
+            if (Array.isArray(value) || value.toString() === '[object Object]') {
+                encodedValue = encodeURIComponent(JSON.stringify(value));
+            } else {
+                /* value is a string; simply encode */
+                encodedValue = encodeURIComponent(value);
+            }
+            paramsArray.push(encodeURIComponent(key) + "=" + encodedValue);
+        }
+    }
+
+    return paramsArray.join("&");
+};
+
+/**
+ * @description 给 URL 追加查询参数。
+ * @param {string} url - 待追加参数的 URL 字符串。
+ * @param {string} paramStr - 待追加的查询参数。
+ * @returns {string} 新的 URL。
+ */
+SuperMap.Util.urlAppend = function (url, paramStr) {
+    var newUrl = url;
+    if (paramStr) {
+        if(paramStr.indexOf('?') === 0){
+            paramStr = paramStr.substring(1);
+        }
+        var parts = (url + " ").split(/[?&]/);
+        newUrl += (parts.pop() === " " ?
+            paramStr :
+            parts.length ? "&" + paramStr : "?" + paramStr);
+    }
+    return newUrl;
+};
+
+/**
+ * @description 给 URL 追加 path 参数。
+ * @param {string} url - 待追加参数的 URL 字符串。
+ * @param {string} paramStr - 待追加的path参数。
+ * @returns {string} 新的 URL。
+ */
+SuperMap.Util.urlPathAppend = function (url, pathStr) {
+    let newUrl = url;
+    if (!pathStr) {
+        return newUrl;
+    }
+    if (pathStr.indexOf('/') === 0) {
+        pathStr = pathStr.substring(1);
+    }
+    const parts = url.split('?');
+    if(parts[0].indexOf('/', parts[0].length - 1) < 0){
+        parts[0] += '/'
+    }
+    newUrl = `${parts[0]}${pathStr}${parts.length > 1 ? `?${parts[1]}` : ''}`;
+    return newUrl;
+};
+
+/**
+ * @description 为了避免浮点精度错误而保留的有效位数。
+ * @type {number}
+ * @default 14
+ */
+SuperMap.Util.DEFAULT_PRECISION = 14;
+
+/**
+ * @description 将字符串以接近的精度转换为数字。
+ * @param {string} number - 字符串。
+ * @param {number} [precision=14] - 精度。
+ * @returns {number} 数字。
+ */
+SuperMap.Util.toFloat = function (number, precision) {
+    if (precision == null) {
+        precision = SuperMap.Util.DEFAULT_PRECISION;
+    }
+    if (typeof number !== "number") {
+        number = parseFloat(number);
+    }
+    return precision === 0 ? number :
+        parseFloat(number.toPrecision(precision));
+};
+
+/**
+ * @description 角度转弧度。
+ * @param {number} x - 角度。
+ * @returns {number} 弧度。
+ */
+SuperMap.Util.rad = function (x) {
+    return x * Math.PI / 180;
+};
+
+/**
+ * @description 从 URL 字符串中解析出参数对象。
+ * @param {string} url - URL。
+ * @returns {Object} 解析出的参数对象。
+ */
+SuperMap.Util.getParameters = function (url) {
+    // if no url specified, take it from the location bar
+    url = (url === null || url === undefined) ? window.location.href : url;
+
+    //parse out parameters portion of url string
+    var paramsString = "";
+    if (SuperMap.String.contains(url, '?')) {
+        var start = url.indexOf('?') + 1;
+        var end = SuperMap.String.contains(url, "#") ?
+            url.indexOf('#') : url.length;
+        paramsString = url.substring(start, end);
+    }
+
+    var parameters = {};
+    var pairs = paramsString.split(/[&;]/);
+    for (var i = 0, len = pairs.length; i < len; ++i) {
+        var keyValue = pairs[i].split('=');
+        if (keyValue[0]) {
+
+            var key = keyValue[0];
+            try {
+                key = decodeURIComponent(key);
+            } catch (err) {
+                key = unescape(key);
+            }
+
+            // being liberal by replacing "+" with " "
+            var value = (keyValue[1] || '').replace(/\+/g, " ");
+
+            try {
+                value = decodeURIComponent(value);
+            } catch (err) {
+                value = unescape(value);
+            }
+
+            // follow OGC convention of comma delimited values
+            value = value.split(",");
+
+            //if there's only one value, do not return as array                    
+            if (value.length == 1) {
+                value = value[0];
+            }
+
+            parameters[key] = value;
+        }
+    }
+    return parameters;
+};
+
+/**
+ * @description 不断递增计数变量,用于生成唯一 ID。
+ * @type {number}
+ * @default 0
+ */
+SuperMap.Util.lastSeqID = 0;
+
+/**
+ * @description 创建唯一 ID 值。
+ * @param {string} [prefix] - 前缀。
+ * @returns {string} 唯一的 ID 值。
+ */
+SuperMap.Util.createUniqueID = function (prefix) {
+    if (prefix == null) {
+        prefix = "id_";
+    }
+    SuperMap.Util.lastSeqID += 1;
+    return prefix + SuperMap.Util.lastSeqID;
+};
+
+/**
+ * @memberOf SuperMap
+ * @description 每单位的英尺数。
+ * @type {Object}
+ * @constant
+ */
+SuperMap.INCHES_PER_UNIT = {
+    'inches': 1.0,
+    'ft': 12.0,
+    'mi': 63360.0,
+    'm': 39.3701,
+    'km': 39370.1,
+    'dd': 4374754,
+    'yd': 36
+};
+SuperMap.INCHES_PER_UNIT.in = SuperMap.INCHES_PER_UNIT.inches;
+SuperMap.INCHES_PER_UNIT.degrees = SuperMap.INCHES_PER_UNIT.dd;
+SuperMap.INCHES_PER_UNIT.nmi = 1852 * SuperMap.INCHES_PER_UNIT.m;
+
+// Units from CS-Map
+SuperMap.METERS_PER_INCH = 0.02540005080010160020;
+SuperMap.Util.extend(SuperMap.INCHES_PER_UNIT, {
+    "Inch": SuperMap.INCHES_PER_UNIT.inches,
+    "Meter": 1.0 / SuperMap.METERS_PER_INCH,   //EPSG:9001
+    "Foot": 0.30480060960121920243 / SuperMap.METERS_PER_INCH,   //EPSG:9003
+    "IFoot": 0.30480000000000000000 / SuperMap.METERS_PER_INCH,   //EPSG:9002
+    "ClarkeFoot": 0.3047972651151 / SuperMap.METERS_PER_INCH,   //EPSG:9005
+    "SearsFoot": 0.30479947153867624624 / SuperMap.METERS_PER_INCH,   //EPSG:9041
+    "GoldCoastFoot": 0.30479971018150881758 / SuperMap.METERS_PER_INCH,   //EPSG:9094
+    "IInch": 0.02540000000000000000 / SuperMap.METERS_PER_INCH,
+    "MicroInch": 0.00002540000000000000 / SuperMap.METERS_PER_INCH,
+    "Mil": 0.00000002540000000000 / SuperMap.METERS_PER_INCH,
+    "Centimeter": 0.01000000000000000000 / SuperMap.METERS_PER_INCH,
+    "Kilometer": 1000.00000000000000000000 / SuperMap.METERS_PER_INCH,   //EPSG:9036
+    "Yard": 0.91440182880365760731 / SuperMap.METERS_PER_INCH,
+    "SearsYard": 0.914398414616029 / SuperMap.METERS_PER_INCH,   //EPSG:9040
+    "IndianYard": 0.91439853074444079983 / SuperMap.METERS_PER_INCH,   //EPSG:9084
+    "IndianYd37": 0.91439523 / SuperMap.METERS_PER_INCH,   //EPSG:9085
+    "IndianYd62": 0.9143988 / SuperMap.METERS_PER_INCH,   //EPSG:9086
+    "IndianYd75": 0.9143985 / SuperMap.METERS_PER_INCH,   //EPSG:9087
+    "IndianFoot": 0.30479951 / SuperMap.METERS_PER_INCH,   //EPSG:9080
+    "IndianFt37": 0.30479841 / SuperMap.METERS_PER_INCH,   //EPSG:9081
+    "IndianFt62": 0.3047996 / SuperMap.METERS_PER_INCH,   //EPSG:9082
+    "IndianFt75": 0.3047995 / SuperMap.METERS_PER_INCH,   //EPSG:9083
+    "Mile": 1609.34721869443738887477 / SuperMap.METERS_PER_INCH,
+    "IYard": 0.91440000000000000000 / SuperMap.METERS_PER_INCH,   //EPSG:9096
+    "IMile": 1609.34400000000000000000 / SuperMap.METERS_PER_INCH,   //EPSG:9093
+    "NautM": 1852.00000000000000000000 / SuperMap.METERS_PER_INCH,   //EPSG:9030
+    "Lat-66": 110943.316488932731 / SuperMap.METERS_PER_INCH,
+    "Lat-83": 110946.25736872234125 / SuperMap.METERS_PER_INCH,
+    "Decimeter": 0.10000000000000000000 / SuperMap.METERS_PER_INCH,
+    "Millimeter": 0.00100000000000000000 / SuperMap.METERS_PER_INCH,
+    "Dekameter": 10.00000000000000000000 / SuperMap.METERS_PER_INCH,
+    "Decameter": 10.00000000000000000000 / SuperMap.METERS_PER_INCH,
+    "Hectometer": 100.00000000000000000000 / SuperMap.METERS_PER_INCH,
+    "GermanMeter": 1.0000135965 / SuperMap.METERS_PER_INCH,   //EPSG:9031
+    "CaGrid": 0.999738 / SuperMap.METERS_PER_INCH,
+    "ClarkeChain": 20.1166194976 / SuperMap.METERS_PER_INCH,   //EPSG:9038
+    "GunterChain": 20.11684023368047 / SuperMap.METERS_PER_INCH,   //EPSG:9033
+    "BenoitChain": 20.116782494375872 / SuperMap.METERS_PER_INCH,   //EPSG:9062
+    "SearsChain": 20.11676512155 / SuperMap.METERS_PER_INCH,   //EPSG:9042
+    "ClarkeLink": 0.201166194976 / SuperMap.METERS_PER_INCH,   //EPSG:9039
+    "GunterLink": 0.2011684023368047 / SuperMap.METERS_PER_INCH,   //EPSG:9034
+    "BenoitLink": 0.20116782494375872 / SuperMap.METERS_PER_INCH,   //EPSG:9063
+    "SearsLink": 0.2011676512155 / SuperMap.METERS_PER_INCH,   //EPSG:9043
+    "Rod": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+    "IntnlChain": 20.1168 / SuperMap.METERS_PER_INCH,   //EPSG:9097
+    "IntnlLink": 0.201168 / SuperMap.METERS_PER_INCH,   //EPSG:9098
+    "Perch": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+    "Pole": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+    "Furlong": 201.1684023368046 / SuperMap.METERS_PER_INCH,
+    "Rood": 3.778266898 / SuperMap.METERS_PER_INCH,
+    "CapeFoot": 0.3047972615 / SuperMap.METERS_PER_INCH,
+    "Brealey": 375.00000000000000000000 / SuperMap.METERS_PER_INCH,
+    "ModAmFt": 0.304812252984505969011938 / SuperMap.METERS_PER_INCH,
+    "Fathom": 1.8288 / SuperMap.METERS_PER_INCH,
+    "NautM-UK": 1853.184 / SuperMap.METERS_PER_INCH,
+    "50kilometers": 50000.0 / SuperMap.METERS_PER_INCH,
+    "150kilometers": 150000.0 / SuperMap.METERS_PER_INCH
+});
+
+//unit abbreviations supported by PROJ.4
+SuperMap.Util.extend(SuperMap.INCHES_PER_UNIT, {
+    "mm": SuperMap.INCHES_PER_UNIT.Meter / 1000.0,
+    "cm": SuperMap.INCHES_PER_UNIT.Meter / 100.0,
+    "dm": SuperMap.INCHES_PER_UNIT.Meter * 100.0,
+    "km": SuperMap.INCHES_PER_UNIT.Meter * 1000.0,
+    "kmi": SuperMap.INCHES_PER_UNIT.nmi,    //International Nautical Mile
+    "fath": SuperMap.INCHES_PER_UNIT.Fathom, //International Fathom
+    "ch": SuperMap.INCHES_PER_UNIT.IntnlChain,  //International Chain
+    "link": SuperMap.INCHES_PER_UNIT.IntnlLink, //International Link
+    "us-in": SuperMap.INCHES_PER_UNIT.inches, //U.S. Surveyor's Inch
+    "us-ft": SuperMap.INCHES_PER_UNIT.Foot,    //U.S. Surveyor's Foot
+    "us-yd": SuperMap.INCHES_PER_UNIT.Yard,    //U.S. Surveyor's Yard
+    "us-ch": SuperMap.INCHES_PER_UNIT.GunterChain, //U.S. Surveyor's Chain
+    "us-mi": SuperMap.INCHES_PER_UNIT.Mile,   //U.S. Surveyor's Statute Mile
+    "ind-yd": SuperMap.INCHES_PER_UNIT.IndianYd37,  //Indian Yard
+    "ind-ft": SuperMap.INCHES_PER_UNIT.IndianFt37,  //Indian Foot
+    "ind-ch": 20.11669506 / SuperMap.METERS_PER_INCH  //Indian Chain
+});
+
+/**
+ * @memberOf SuperMap
+ * @member [SuperMap.DOTS_PER_INCH=96]
+ * @description 分辨率与比例尺之间转换的常量。
+ * @type {Object}
+ */
+SuperMap.DOTS_PER_INCH = 96;
+
+/**
+ * @param {number} scale - 比例尺。
+ * @returns {number} 返回正常的 scale 值。
+ */
+SuperMap.Util.normalizeScale = function (scale) {
+    var normScale = (scale > 1.0) ? (1.0 / scale) : scale;
+    return normScale;
+};
+
+/**
+ * @description 比例尺转分辨率。
+ * @param {number} scale - 比例尺。
+ * @param {string} [units='degrees'] - 比例尺单位。
+ * @returns {number} 分辨率。
+ */
+SuperMap.Util.getResolutionFromScale = function (scale, units) {
+    var resolution;
+    if (scale) {
+        if (units == null) {
+            units = "degrees";
+        }
+        var normScale = SuperMap.Util.normalizeScale(scale);
+        resolution = 1 / (normScale * SuperMap.INCHES_PER_UNIT[units]
+            * SuperMap.DOTS_PER_INCH);
+    }
+    return resolution;
+};
+
+/**
+ * @description 分辨率转比例尺。
+ * @param {number} resolution - 分辨率。
+ * @param {string} [units='degrees'] - 分辨率单位。
+ * @returns {number} 比例尺。
+ */
+SuperMap.Util.getScaleFromResolution = function (resolution, units) {
+
+    if (units == null) {
+        units = "degrees";
+    }
+
+    var scale = resolution * SuperMap.INCHES_PER_UNIT[units] *
+        SuperMap.DOTS_PER_INCH;
+    return scale;
+};
+
+/**
+ * @memberOf SuperMap
+ * @description 如果 userAgent 捕获到浏览器使用的是 Gecko 引擎则返回 true。
+ * @constant
+ */
+SuperMap.IS_GECKO = (function () {
+    var ua = navigator.userAgent.toLowerCase();
+    return ua.indexOf("webkit") === -1 && ua.indexOf("gecko") !== -1;
+})();
+
+/**
+ * @memberOf SuperMap
+ * @description 浏览器名称,依赖于 userAgent 属性,BROWSER_NAME 可以是空,或者以下浏览器:
+ *     * "opera" -- Opera
+ *     * "msie"  -- Internet Explorer
+ *     * "safari" -- Safari
+ *     * "firefox" -- Firefox
+ *     * "mozilla" -- Mozilla
+ * @constant
+ */
+SuperMap.Browser = (function () {
+    var name = '', version = '', device = 'pc', uaMatch;
+    //以下进行测试
+    var ua = navigator.userAgent.toLowerCase();
+    if (ua.indexOf("msie") > -1 || (ua.indexOf("trident") > -1 && ua.indexOf("rv") > -1)) {
+        name = 'msie';
+        uaMatch = ua.match(/msie ([\d.]+)/) || ua.match(/rv:([\d.]+)/);
+    } else if (ua.indexOf("chrome") > -1) {
+        name = 'chrome';
+        uaMatch = ua.match(/chrome\/([\d.]+)/);
+    } else if (ua.indexOf("firefox") > -1) {
+        name = 'firefox';
+        uaMatch = ua.match(/firefox\/([\d.]+)/);
+    } else if (ua.indexOf("opera") > -1) {
+        name = 'opera';
+        uaMatch = ua.match(/version\/([\d.]+)/);
+    } else if (ua.indexOf("safari") > -1) {
+        name = 'safari';
+        uaMatch = ua.match(/version\/([\d.]+)/);
+    }
+    version = uaMatch ? uaMatch[1] : '';
+
+    if (ua.indexOf("ipad") > -1 || ua.indexOf("ipod") > -1 || ua.indexOf("iphone") > -1) {
+        device = 'apple';
+    } else if (ua.indexOf("android") > -1) {
+        uaMatch = ua.match(/version\/([\d.]+)/);
+        version = uaMatch ? uaMatch[1] : '';
+        device = 'android';
+    }
+    return {name: name, version: version, device: device};
+})();
+
+/**
+ * @description 获取浏览器相关信息。支持的浏览器包括:Opera,Internet Explorer,Safari,Firefox。
+ * @returns {Object} 获取浏览器名称、版本、设备名称。对应的属性分别为 name, version, device。
+ */
+SuperMap.Util.getBrowser = function () {
+    return SuperMap.Browser;
+};
+
+/**
+ * @description 浏览器是否支持 Canvas。
+ * @returns {boolean} 获取当前浏览器是否支持 HTML5 Canvas。
+ */
+SuperMap.Util.isSupportCanvas = (function () {
+    var checkRes = true, broz = SuperMap.Util.getBrowser();
+    if (document.createElement("canvas").getContext) {
+        if (broz.name === 'firefox' && parseFloat(broz.version) < 5) {
+            checkRes = false;
+        }
+        if (broz.name === 'safari' && parseFloat(broz.version) < 4) {
+            checkRes = false;
+        }
+        if (broz.name === 'opera' && parseFloat(broz.version) < 10) {
+            checkRes = false;
+        }
+        if (broz.name === 'msie' && parseFloat(broz.version) < 9) {
+            checkRes = false;
+        }
+    } else {
+        checkRes = false;
+    }
+    return checkRes;
+})();
+
+/**
+ * @description 判断;浏览器是否支持 Canvas。
+ * @returns {boolean} 获取当前浏览器是否支持 HTML5 Canvas 。
+ */
+SuperMap.Util.supportCanvas = function () {
+    return SuperMap.Util.isSupportCanvas;
+};
+
+//将服务端的地图单位转成SuperMap的地图单位
+SuperMap.INCHES_PER_UNIT.degree = SuperMap.INCHES_PER_UNIT.dd;
+SuperMap.INCHES_PER_UNIT.meter = SuperMap.INCHES_PER_UNIT.m;
+SuperMap.INCHES_PER_UNIT.foot = SuperMap.INCHES_PER_UNIT.ft;
+SuperMap.INCHES_PER_UNIT.inch = SuperMap.INCHES_PER_UNIT.inches;
+SuperMap.INCHES_PER_UNIT.mile = SuperMap.INCHES_PER_UNIT.mi;
+SuperMap.INCHES_PER_UNIT.kilometer = SuperMap.INCHES_PER_UNIT.km;
+SuperMap.INCHES_PER_UNIT.yard = SuperMap.INCHES_PER_UNIT.yd;
+
+/**
+ * @description 判断一个 URL 请求是否在当前域中。
+ * @param {string} url - URL 请求字符串。
+ * @returns {boolean} URL 请求是否在当前域中。
+ */
+SuperMap.Util.isInTheSameDomain = function (url) {
+    if (!url) {
+        return true;
+    }
+    var index = url.indexOf("//");
+    var documentUrl = document.location.toString();
+    var documentIndex = documentUrl.indexOf("//");
+    if (index === -1) {
+        return true;
+    } else {
+        var protocol;
+        var substring = protocol = url.substring(0, index);
+        var documentSubString = documentUrl.substring(documentIndex + 2);
+        documentIndex = documentSubString.indexOf("/");
+        var documentPortIndex = documentSubString.indexOf(":");
+        var documentDomainWithPort = documentSubString.substring(0, documentIndex);
+        //var documentPort;
+
+        var documentprotocol = document.location.protocol;
+        if (documentPortIndex !== -1) {
+            // documentPort = +documentSubString.substring(documentPortIndex, documentIndex);
+        } else {
+            documentDomainWithPort += ':' + (documentprotocol.toLowerCase() === 'http:' ? 80 : 443);
+        }
+        if (documentprotocol.toLowerCase() !== substring.toLowerCase()) {
+            return false;
+        }
+        substring = url.substring(index + 2);
+        var portIndex = substring.indexOf(":");
+        index = substring.indexOf("/");
+        var domainWithPort = substring.substring(0, index);
+        var domain;
+        if (portIndex !== -1) {
+            domain = substring.substring(0, portIndex);
+        } else {
+            domain = substring.substring(0, index);
+            domainWithPort += ':' + (protocol.toLowerCase() === 'http:' ? 80 : 443);
+        }
+        var documentDomain = document.domain;
+        if (domain === documentDomain && domainWithPort === documentDomainWithPort) {
+            return true;
+        }
+    }
+    return false;
+};
+
+/**
+ * @description 计算 iServer 服务的 REST 图层的显示分辨率,需要从 iServer 的 REST 图层表述中获取 viewBounds、viewer、scale、coordUnit、datumAxis 五个参数,来进行计算。
+ * @param {SuperMap.Bounds} viewBounds - 地图的参照可视范围,即地图初始化时默认的地图显示范围。
+ * @param {SuperMap.Size} viewer - 地图初始化时默认的地图图片的尺寸。
+ * @param {number} scale - 地图初始化时默认的显示比例尺。
+ * @param {string} [coordUnit='degrees'] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则系统默认为 WGS84 参考系的椭球体长半轴 6378137。
+ * @returns {number} 返回图层显示分辨率。
+ */
+SuperMap.Util.calculateDpi = function (viewBounds, viewer, scale, coordUnit, datumAxis) {
+    //10000 是 0.1毫米与米的转换。DPI的计算公式:Viewer / DPI *  0.0254 * 10000 = ViewBounds * scale ,公式中的10000是为了提高计算结果的精度,以下出现的ratio皆为如此。
+    if (!viewBounds || !viewer || !scale) {
+        return;
+    }
+    var ratio = 10000,
+        rvbWidth = viewBounds.getWidth(),
+        rvbHeight = viewBounds.getHeight(),
+        rvWidth = viewer.w,
+        rvHeight = viewer.h;
+    //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+    datumAxis = datumAxis || 6378137;
+    coordUnit = coordUnit || "degrees";
+    var dpi;
+    if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+        let num1 = rvbWidth / rvWidth,
+            num2 = rvbHeight / rvHeight,
+            resolution = num1 > num2 ? num1 : num2;
+        dpi = 0.0254 * ratio / resolution / scale / ((Math.PI * 2 * datumAxis) / 360) / ratio;
+
+    } else {
+        let resolution = rvbWidth / rvWidth;
+        dpi = 0.0254 * ratio / resolution / scale / ratio;
+    }
+    return dpi;
+};
+
+/**
+ * @description 将对象转换成 JSON 字符串。
+ * @param {Object} obj - 要转换成 JSON 的 Object 对象。
+ * @returns {string} 返回转换后的 JSON 对象。
+ */
+SuperMap.Util.toJSON = function (obj) {
+    var objInn = obj;
+    if (objInn == null) {
+        return null;
+    }
+    switch (objInn.constructor) {
+        case String:
+            //s = "'" + str.replace(/(["\\])/g, "\\$1") + "'";   string含有单引号出错
+            objInn = '"' + objInn.replace(/(["\\])/g, '\\$1') + '"';
+            objInn = objInn.replace(/\n/g, "\\n");
+            objInn = objInn.replace(/\r/g, "\\r");
+            objInn = objInn.replace("<", "&lt;");
+            objInn = objInn.replace(">", "&gt;");
+            objInn = objInn.replace(/%/g, "%25");
+            objInn = objInn.replace(/&/g, "%26");
+            return objInn;
+        case Array:
+            var arr = [];
+            for (var i = 0, len = objInn.length; i < len; i++) {
+                arr.push(SuperMap.Util.toJSON(objInn[i]));
+            }
+            return "[" + arr.join(",") + "]";
+        case Number:
+            return isFinite(objInn) ? String(objInn) : null;
+        case Boolean:
+            return String(objInn);
+        case Date:
+            var dateStr = "{" + "'__type':\"System.DateTime\"," +
+                "'Year':" + objInn.getFullYear() + "," +
+                "'Month':" + (objInn.getMonth() + 1) + "," +
+                "'Day':" + objInn.getDate() + "," +
+                "'Hour':" + objInn.getHours() + "," +
+                "'Minute':" + objInn.getMinutes() + "," +
+                "'Second':" + objInn.getSeconds() + "," +
+                "'Millisecond':" + objInn.getMilliseconds() + "," +
+                "'TimezoneOffset':" + objInn.getTimezoneOffset() + "}";
+            return dateStr;
+        default:
+            if (objInn["toJSON"] != null && typeof objInn["toJSON"] === "function") {
+                return objInn.toJSON();
+            }
+            if (typeof objInn === "object") {
+                if (objInn.length) {
+                    let arr = [];
+                    for (let i = 0, len = objInn.length; i < len; i++) {
+                        arr.push(SuperMap.Util.toJSON(objInn[i]));
+                    }
+                    return "[" + arr.join(",") + "]";
+                }
+                let arr = [];
+                for (let attr in objInn) {
+                    //为解决SuperMap.Geometry类型头json时堆栈溢出的问题,attr == "parent"时不进行json转换
+                    if (typeof objInn[attr] !== "function" && attr !== "CLASS_NAME" && attr !== "parent") {
+                        arr.push("'" + attr + "':" + SuperMap.Util.toJSON(objInn[attr]));
+                    }
+                }
+
+                if (arr.length > 0) {
+                    return "{" + arr.join(",") + "}";
+                } else {
+                    return "{}";
+                }
+            }
+            return objInn.toString();
+    }
+};
+
+/**
+ * @description 根据比例尺和 dpi 计算屏幕分辨率。
+ * @param {number} scale - 比例尺。
+ * @param {number} dpi - 图像分辨率,表示每英寸内的像素个数。
+ * @param {string} [coordUnit] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则 DPI 默认按照 WGS84 参考系的椭球体长半轴 6378137 来计算。
+ * @returns {number} 返回当前比例尺下的屏幕分辨率。
+ */
+SuperMap.Util.getResolutionFromScaleDpi = function (scale, dpi, coordUnit, datumAxis) {
+    var resolution = null,
+        ratio = 10000;
+    //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+    datumAxis = datumAxis || 6378137;
+    coordUnit = coordUnit || "";
+    if (scale > 0 && dpi > 0) {
+        scale = SuperMap.Util.normalizeScale(scale);
+        if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+            //scale = SuperMap.Util.normalizeScale(scale);
+            resolution = 0.0254 * ratio / dpi / scale / ((Math.PI * 2 * datumAxis) / 360) / ratio;
+            return resolution;
+        } else {
+            resolution = 0.0254 * ratio / dpi / scale / ratio;
+            return resolution;
+        }
+    }
+    return -1;
+};
+
+/**
+ * @description 根据 resolution、dpi、coordUnit 和 datumAxis 计算比例尺。
+ * @param {number} resolution - 用于计算比例尺的地图分辨率。
+ * @param {number} dpi - 图像分辨率,表示每英寸内的像素个数。
+ * @param {string} [coordUnit] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则 DPI 默认按照 WGS84 参考系的椭球体长半轴 6378137 来计算。
+ * @returns {number} 返回当前屏幕分辨率下的比例尺。
+ */
+SuperMap.Util.getScaleFromResolutionDpi = function (resolution, dpi, coordUnit, datumAxis) {
+    var scale = null,
+        ratio = 10000;
+    //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+    datumAxis = datumAxis || 6378137;
+    coordUnit = coordUnit || "";
+    if (resolution > 0 && dpi > 0) {
+        if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+            scale = 0.0254 * ratio / dpi / resolution / ((Math.PI * 2 * datumAxis) / 360) / ratio;
+            return scale;
+        } else {
+            scale = 0.0254 * ratio / dpi / resolution / ratio;
+            return scale;
+        }
+    }
+    return -1;
+};
+
+/**
+ * @description 转换查询结果。
+ * @param {Object} result - 查询结果。
+ * @returns {Object} 转换后的查询结果。
+ */
+SuperMap.Util.transformResult = function (result) {
+    if (result.responseText && typeof result.responseText === "string") {
+        result = JSON.parse(result.responseText);
+    }
+    return result;
+};
+
+/**
+ * @description 属性拷贝,不拷贝方法类名(CLASS_NAME)等。
+ * @param {Object} [destination] - 拷贝目标。
+ * @param {Object} source - 源对象。
+ *
+ */
+SuperMap.Util.copyAttributes = function (destination, source) {
+    destination = destination || {};
+    if (source) {
+        for (var property in source) {
+            var value = source[property];
+            if (value !== undefined && property !== "CLASS_NAME" && typeof value !== "function") {
+                destination[property] = value;
+            }
+        }
+    }
+    return destination;
+};
+
+/**
+ * @description 将源对象上的属性拷贝到目标对象上。(不拷贝 CLASS_NAME 和方法)
+ * @param {Object} [destination] - 目标对象。
+ * @param {Object} source - 源对象。
+ * @param {Array.<string>} clip - 源对象中禁止拷贝到目标对象的属性,目的是防止目标对象上不可修改的属性被篡改。
+ *
+ */
+SuperMap.Util.copyAttributesWithClip = function (destination, source, clip) {
+    destination = destination || {};
+    if (source) {
+        for (var property in source) {
+            //去掉禁止拷贝的属性
+            var isInClip = false;
+            if (clip && clip.length) {
+                for (var i = 0, len = clip.length; i < len; i++) {
+                    if (property === clip[i]) {
+                        isInClip = true;
+                        break;
+                    }
+                }
+            }
+            if (isInClip === true) {
+                continue;
+            }
+
+            var value = source[property];
+            if (value !== undefined && property !== "CLASS_NAME" && typeof value !== "function") {
+                destination[property] = value;
+            }
+        }
+    }
+    return destination;
+};
+
+/**
+ * @description 克隆一个 Object 对象
+ * @param {Object} obj - 需要克隆的对象。
+ * @returns {Object} 返回对象的拷贝对象,注意是新的对象,不是指向。
+ */
+SuperMap.Util.cloneObject = function (obj) {
+    // Handle the 3 simple types, and null or undefined
+    if (null === obj || "object" !== typeof obj) {
+        return obj;
+    }
+
+    // Handle Date
+    if (obj instanceof Date) {
+        let copy = new Date();
+        copy.setTime(obj.getTime());
+        return copy;
+    }
+
+    // Handle Array
+    if (obj instanceof Array) {
+        let copy = obj.slice(0);
+        return copy;
+    }
+
+    // Handle Object
+    if (obj instanceof Object) {
+        let copy = {};
+        for (var attr in obj) {
+            if (obj.hasOwnProperty(attr)) {
+                copy[attr] = SuperMap.Util.cloneObject(obj[attr]);
+            }
+        }
+        return copy;
+    }
+
+    throw new Error("Unable to copy obj! Its type isn't supported.");
+};
+
+/**
+ * @description 判断两条线段是不是有交点。
+ * @param {SuperMap.Geometry.Point} a1 - 第一条线段的起始节点。
+ * @param {SuperMap.Geometry.Point} a2 - 第一条线段的结束节点。
+ * @param {SuperMap.Geometry.Point} b1 - 第二条线段的起始节点。
+ * @param {SuperMap.Geometry.Point} b2 - 第二条线段的结束节点。
+ * @returns {Object} 如果相交返回交点,如果不相交返回两条线段的位置关系。
+ */
+SuperMap.Util.lineIntersection = function (a1, a2, b1, b2) {
+    var intersectValue = null;
+    var k1;
+    var k2;
+    var b = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);
+    var a = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);
+    var ab = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);
+    //ab==0代表两条线断的斜率一样
+    if (ab != 0) {
+        k1 = b / ab;
+        k2 = a / ab;
+
+        if (k1 >= 0 && k2 <= 1 && k1 <= 1 && k2 >= 0) {
+            intersectValue = new SuperMap.Geometry.Point(a1.x + k1 * (a2.x - a1.x), a1.y + k1 * (a2.y - a1.y));
+        } else {
+            intersectValue = "No Intersection";
+        }
+    } else {
+
+        if (b == 0 && a == 0) {
+            var maxy = Math.max(a1.y, a2.y);
+            var miny = Math.min(a1.y, a2.y);
+            var maxx = Math.max(a1.x, a2.x);
+            var minx = Math.min(a1.x, a2.x);
+            if (((b1.y >= miny && b1.y <= maxy) || (b2.y >= miny && b2.y <= maxy)) &&
+                (b1.x >= minx && b1.x <= maxx) || (b2.x >= minx && b2.x <= maxx)) {
+                intersectValue = "Coincident";//重合
+            } else {
+                intersectValue = "Parallel";//平行
+            }
+
+        } else {
+            intersectValue = "Parallel";//平行
+        }
+    }
+    return intersectValue;
+};
+
+/**
+ * @description 获取文本外接矩形宽度与高度。
+ * @param {SuperMap.ThemeStyle} style - 文本样式。
+ * @param {string} text - 文本内容。
+ * @param {Object} element - DOM 元素。
+ * @returns {Object} 返回裁剪后的宽度,高度信息。
+ */
+SuperMap.Util.getTextBounds = function (style, text, element) {
+    document.body.appendChild(element);
+    element.style.width = 'auto';
+    element.style.height = 'auto';
+    if (style.fontSize) {
+        element.style.fontSize = style.fontSize;
+    }
+    if (style.fontFamily) {
+        element.style.fontFamily = style.fontFamily;
+    }
+    if (style.fontWeight) {
+        element.style.fontWeight = style.fontWeight;
+    }
+    element.style.position = 'relative';
+    element.style.visibility = 'hidden';
+    //fix 在某些情况下,element内的文本变成竖起排列,导致宽度计算不正确的bug
+    element.style.display = 'inline-block';
+    element.innerHTML = text;
+    var textWidth = element.clientWidth;
+    var textHeight = element.clientHeight;
+    document.body.removeChild(element);
+    return {
+        textWidth: textWidth,
+        textHeight: textHeight
+    };
+};
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Event.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @name Event
+ * @memberOf SuperMap
+ * @namespace
+ * @description 事件处理函数.
+ */
+var Event = SuperMap.Event = {
+
+    /**
+     * @description  A hash table cache of the event observers. Keyed by element._eventCacheID
+     * @type {boolean}
+     * @default false
+     */
+    observers: false,
+
+    /**
+     * @description KEY_SPACE
+     * @type {number}
+     * @default 32
+     */
+    KEY_SPACE: 32,
+
+    /**
+     * @description KEY_BACKSPACE
+     * @type {number}
+     * @default 8
+     */
+    KEY_BACKSPACE: 8,
+
+    /**
+     * @description KEY_TAB
+     * @type {number}
+     * @default 9
+     */
+    KEY_TAB: 9,
+
+    /**
+     * @description KEY_RETURN
+     * @type {number}
+     * @default 13
+     */
+    KEY_RETURN: 13,
+
+    /**
+     * @description KEY_ESC
+     * @type {number}
+     * @default 27
+     */
+    KEY_ESC: 27,
+
+    /**
+     * @description KEY_LEFT
+     * @type {number}
+     * @default 37
+     */
+    KEY_LEFT: 37,
+
+    /**
+     * @description KEY_UP
+     * @type {number}
+     * @default 38
+     */
+    KEY_UP: 38,
+
+    /**
+     * @description KEY_RIGHT
+     * @type {number}
+     * @default 39
+     */
+    KEY_RIGHT: 39,
+
+    /**
+     * @description KEY_DOWN
+     * @type {number}
+     * @default 40
+     */
+    KEY_DOWN: 40,
+
+    /**
+     * @description KEY_DELETE
+     * @type {number}
+     * @default 46
+     */
+    KEY_DELETE: 46,
+
+
+    /**
+     * @description Cross browser event element detection.
+     * @param {Event} event - The event
+     * @returns {HTMLElement} The element that caused the event
+     */
+    element: function (event) {
+        return event.target || event.srcElement;
+    },
+
+    /**
+     * @description Determine whether event was caused by a single touch
+     * @param {Event} event - The event
+     * @returns {boolean}
+     */
+    isSingleTouch: function (event) {
+        return event.touches && event.touches.length === 1;
+    },
+
+    /**
+     * @description Determine whether event was caused by a multi touch
+     * @param {Event} event - The event
+     * @returns {boolean}
+     */
+    isMultiTouch: function (event) {
+        return event.touches && event.touches.length > 1;
+    },
+
+    /**
+     * @description Determine whether event was caused by a left click.
+     * @param {Event} event - The event
+     * @returns {boolean}
+     */
+    isLeftClick: function (event) {
+        return (((event.which) && (event.which === 1)) ||
+            ((event.button) && (event.button === 1)));
+    },
+
+    /**
+     * @description Determine whether event was caused by a right mouse click.
+     * @param {Event} event - The event
+     * @returns {boolean}
+     */
+    isRightClick: function (event) {
+        return (((event.which) && (event.which === 3)) ||
+            ((event.button) && (event.button === 2)));
+    },
+
+    /**
+     * @description Stops an event from propagating.
+     * @param {Event} event - The event
+     * @param {boolean} allowDefault - If true, we stop the event chain but still allow the default browser  behaviour (text selection, radio-button clicking, etc) Default false
+     */
+    stop: function (event, allowDefault) {
+
+        if (!allowDefault) {
+            if (event.preventDefault) {
+                event.preventDefault();
+            } else {
+                event.returnValue = false;
+            }
+        }
+
+        if (event.stopPropagation) {
+            event.stopPropagation();
+        } else {
+            event.cancelBubble = true;
+        }
+    },
+
+    /**
+     * @param {Event} event - The event。
+     * @param {string} tagName - html 标签名。
+     * @returns {HTMLElement} The first node with the given tagName, starting from the node the event was triggered on and traversing the DOM upwards
+     */
+    findElement: function (event, tagName) {
+        var element = SuperMap.Event.element(event);
+        while (element.parentNode && (!element.tagName ||
+            (element.tagName.toUpperCase() != tagName.toUpperCase()))) {
+            element = element.parentNode;
+        }
+        return element;
+    },
+
+    /**
+     * @description 监听事件,注册事件处理方法。
+     * @param {(HTMLElement|string)} elementParam - 待监听的 DOM 对象或者其 ID 标识。
+     * @param {string} name - 监听事件的类别名称。
+     * @param {function} observer - 注册的事件处理方法。
+     * @param {boolean} [useCapture=false] - 是否捕获。
+     */
+    observe: function (elementParam, name, observer, useCapture) {
+        var element = Util.getElement(elementParam);
+        useCapture = useCapture || false;
+
+        if (name === 'keypress' &&
+            (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+                || element.attachEvent)) {
+            name = 'keydown';
+        }
+
+        //if observers cache has not yet been created, create it
+        if (!this.observers) {
+            this.observers = {};
+        }
+
+        //if not already assigned, make a new unique cache ID
+        if (!element._eventCacheID) {
+            var idPrefix = "eventCacheID_";
+            if (element.id) {
+                idPrefix = element.id + "_" + idPrefix;
+            }
+            element._eventCacheID = Util.createUniqueID(idPrefix);
+        }
+
+        var cacheID = element._eventCacheID;
+
+        //if there is not yet a hash entry for this element, add one
+        if (!this.observers[cacheID]) {
+            this.observers[cacheID] = [];
+        }
+
+        //add a new observer to this element's list
+        this.observers[cacheID].push({
+            'element': element,
+            'name': name,
+            'observer': observer,
+            'useCapture': useCapture
+        });
+
+        //add the actual browser event listener
+        if (element.addEventListener) {
+            if(name === 'mousewheel'){
+                // https://www.chromestatus.com/features/6662647093133312
+                element.addEventListener(name, observer, {useCapture: useCapture, passive: false} );
+            } else {
+                element.addEventListener(name, observer, useCapture);
+            }
+        } else if (element.attachEvent) {
+            element.attachEvent('on' + name, observer);
+        }
+    },
+
+    /**
+     * @description Given the id of an element to stop observing, cycle through the
+     *   element's cached observers, calling stopObserving on each one,
+     *   skipping those entries which can no longer be removed.
+     *
+     * @param {(HTMLElement|string)} elementParam - 
+     */
+    stopObservingElement: function (elementParam) {
+        var element = Util.getElement(elementParam);
+        var cacheID = element._eventCacheID;
+
+        this._removeElementObservers(SuperMap.Event.observers[cacheID]);
+    },
+
+    /**
+     * @param {Array.<Object>} elementObservers - Array of (element, name,
+     *                                         observer, usecapture) objects,
+     *                                         taken directly from hashtable
+     */
+    _removeElementObservers: function (elementObservers) {
+        if (elementObservers) {
+            for (var i = elementObservers.length - 1; i >= 0; i--) {
+                var entry = elementObservers[i];
+                var args = new Array(entry.element, entry.name, entry.observer, entry.useCapture);
+                SuperMap.Event.stopObserving.apply(this, args);
+            }
+        }
+    },
+
+    /**
+     * @description 移除事件监听和注册的事件处理方法。注意:事件的移除和监听相对应,移除时的各属性信息必须监听时
+     * 保持一致才能确保事件移除成功。
+     * @param {(HTMLElement|string)} elementParam - 被监听的 DOM 元素或者其 ID。
+     * @param {string} name - 需要移除的被监听事件名称。
+     * @param {function} observer - 需要移除的事件处理方法。
+     * @param {boolean} [useCapture=false] - 是否捕获。
+     * @returns {boolean} Whether or not the event observer was removed
+     */
+    stopObserving: function (elementParam, name, observer, useCapture) {
+        useCapture = useCapture || false;
+
+        var element = Util.getElement(elementParam);
+        var cacheID = element._eventCacheID;
+
+        if (name === 'keypress') {
+            if (navigator.appVersion.match(/Konqueror|Safari|KHTML/) ||
+                element.detachEvent) {
+                name = 'keydown';
+            }
+        }
+
+        // find element's entry in this.observers cache and remove it
+        var foundEntry = false;
+        var elementObservers = SuperMap.Event.observers[cacheID];
+        if (elementObservers) {
+
+            // find the specific event type in the element's list
+            var i = 0;
+            while (!foundEntry && i < elementObservers.length) {
+                var cacheEntry = elementObservers[i];
+
+                if ((cacheEntry.name === name) &&
+                    (cacheEntry.observer === observer) &&
+                    (cacheEntry.useCapture === useCapture)) {
+
+                    elementObservers.splice(i, 1);
+                    if (elementObservers.length == 0) {
+                        delete SuperMap.Event.observers[cacheID];
+                    }
+                    foundEntry = true;
+                    break;
+                }
+                i++;
+            }
+        }
+
+        //actually remove the event listener from browser
+        if (foundEntry) {
+            if (element.removeEventListener) {
+                element.removeEventListener(name, observer, useCapture);
+            } else if (element && element.detachEvent) {
+                element.detachEvent('on' + name, observer);
+            }
+        }
+        return foundEntry;
+    },
+
+    /**
+     * @description Cycle through all the element entries in the events cache and call
+     *   stopObservingElement on each.
+     */
+    unloadCache: function () {
+        // check for SuperMap.Event before checking for observers, because
+        // SuperMap.Event may be undefined in IE if no map instance was
+        // created
+        if (SuperMap.Event && SuperMap.Event.observers) {
+            for (var cacheID in SuperMap.Event.observers) {
+                var elementObservers = SuperMap.Event.observers[cacheID];
+                SuperMap.Event._removeElementObservers.apply(this,
+                    [elementObservers]);
+            }
+            SuperMap.Event.observers = false;
+        }
+    },
+
+    CLASS_NAME: "SuperMap.Event"
+};
+SuperMap.Event = Event;
+/* prevent memory leaks in IE */
+SuperMap.Event.observe(window, 'unload', SuperMap.Event.unloadCache, false);
+
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Events.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.Events
+ * @classdesc 事件类。
+ * @param {Object} object - 当前事件对象被添加到的 JS 对象。
+ * @param {HTMLElement} element - 响应浏览器事件的 DOM 元素。
+ * @param {Array.<string>} eventTypes - 自定义应用事件的数组。
+ * @param {boolean} [fallThrough=false] - 是否允许事件处理之后向上传递(冒泡),为 false 的时候阻止事件冒泡。
+ * @param {Object} options - 事件对象选项。
+ */
+class Events {
+
+
+    constructor(object, element, eventTypes, fallThrough, options) {
+        /**
+         * @member {Array.<string>} SuperMap.Events.prototype.BROWSER_EVENTS
+         * @description 支持的事件。
+         * @constant
+         * @default [
+         "mouseover", "mouseout","mousedown", "mouseup", "mousemove",
+         "click", "dblclick", "rightclick", "dblrightclick","resize",
+         "focus", "blur","touchstart", "touchmove", "touchend","keydown",
+         "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup",
+         "MSGestureStart", "MSGestureChange", "MSGestureEnd","contextmenu"
+         ]
+         */
+        this.BROWSER_EVENTS = [
+            "mouseover", "mouseout",
+            "mousedown", "mouseup", "mousemove",
+            "click", "dblclick", "rightclick", "dblrightclick",
+            "resize", "focus", "blur",
+            "touchstart", "touchmove", "touchend",
+            "keydown", "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup",
+            "MSGestureStart", "MSGestureChange", "MSGestureEnd",
+            "contextmenu"
+        ];
+
+        /**
+         * @member {Object} SuperMap.Events.prototype.listeners
+         * @description Hashtable of Array(function): events listener functions
+         */
+        this.listeners = {};
+
+        /**
+         * @member {Object} SuperMap.Events.prototype.object
+         * @description  发布应用程序事件的对象。
+         */
+        this.object = object;
+
+        /**
+         * @member {HTMLElement} SuperMap.Events.prototype.element
+         * @description 接受浏览器事件的 DOM 节点。
+         */
+        this.element = null;
+
+        /**
+         * @member {Array.<string>} SuperMap.Events.prototype.eventTypes
+         * @description 支持的事件类型列表。
+         */
+        this.eventTypes = [];
+
+        /**
+         * @member {function} SuperMap.Events.prototype.eventHandler
+         * @description 绑定在元素上的事件处理器对象。
+         */
+        this.eventHandler = null;
+
+        /**
+         * @member {boolean} [SuperMap.Events.prototype.fallThrough=false]
+         * @description 是否允许事件处理之后向上传递(冒泡),为 false 的时候阻止事件冒泡。
+         */
+        this.fallThrough = fallThrough;
+
+        /**
+         * @member {boolean} [SuperMap.Events.prototype.includeXY=false]
+         * @description 判断是否让 xy 属性自动创建到浏览器上的鼠标事件,一般设置为 false,如果设置为 true,鼠标事件将会在事件传递过程中自动产生 xy 属性。
+         *              可根据事件对象的 'evt.object' 属性在相关的事件句柄上调用 getMousePosition 函数。这个选项习惯默认为 false 的原因在于,当创建一个
+         *              事件对象,其主要目的是管理。在一个 div 的相对定位的鼠标事件,将其设为 true 也是有意义的。这个选项也可以用来控制是否抵消缓存。如果
+         *              设为 false 不抵消,如果设为 true,用 this.clearMouseCache() 清除缓存偏移(边界元素偏移,元素在页面的位置偏移)。
+         * @example
+         *  function named(evt) {
+         *        this.xy = this.object.events.getMousePosition(evt);
+         *  }
+         */
+        this.includeXY = false;
+
+        /**
+         * @member {Object} SuperMap.Events.prototype.extensions
+         * @description 事件扩展。Keys 代表事件类型,values 代表事件对象。
+         * @example
+         * 以扩展 "foostart" 和 "fooend" 事件为例。展示替换 css 属性为 foo 的元素的 click 事件。
+         *
+         *   SuperMap.Events.foostart = SuperMap.Class({
+     *       initialize: function(target) {
+     *           this.target = target;
+     *           this.target.register("click", this, this.doStuff, {extension: true});
+     *           // only required if extension provides more than one event type
+     *           this.target.extensions["foostart"] = true;
+     *           this.target.extensions["fooend"] = true;
+     *       },
+     *       destroy: function() {
+     *           var target = this.target;
+     *           target.unregister("click", this, this.doStuff);
+     *           delete this.target;
+     *           // only required if extension provides more than one event type
+     *           delete target.extensions["foostart"];
+     *           delete target.extensions["fooend"];
+     *       },
+     *       doStuff: function(evt) {
+     *           var propagate = true;
+     *           if (SuperMap.Event.element(evt).className === "foo") {
+     *               propagate = false;
+     *               var target = this.target;
+     *               target.triggerEvent("foostart");
+     *               window.setTimeout(function() {
+     *                   target.triggerEvent("fooend");
+     *               }, 1000);
+     *           }
+     *           return propagate;
+     *       }
+     *   });
+         *   // only required if extension provides more than one event type
+         *   SuperMap.Events.fooend = SuperMap.Events.foostart;
+         */
+        this.extensions = {};
+
+        /**
+         * @member {Object} SuperMap.Events.prototype.extensionCount
+         */
+        this.extensionCount = {};
+        /**
+         * @member {Object} SuperMap.Events.prototype.clearMouseListener
+         */
+        this.clearMouseListener = null;
+
+        Util.extend(this, options);
+
+        if (eventTypes != null) {
+            for (var i = 0, len = eventTypes.length; i < len; i++) {
+                this.addEventType(eventTypes[i]);
+            }
+        }
+
+        if (element != null) {
+            this.attachToElement(element);
+        }
+
+        this.CLASS_NAME = "SuperMap.Events";
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.destroy
+     * @description 移除当前要素 element 上的所有事件监听和处理。
+     */
+    destroy() {
+        for (var e in this.extensions) {
+            if (typeof this.extensions[e] !== "boolean") {
+                this.extensions[e].destroy();
+            }
+        }
+        this.extensions = null;
+        if (this.element) {
+            Event.stopObservingElement(this.element);
+            if (this.element.hasScrollEvent) {
+                Event.stopObserving(
+                    window, "scroll", this.clearMouseListener
+                );
+            }
+        }
+        this.element = null;
+
+        this.listeners = null;
+        this.object = null;
+        this.eventTypes = null;
+        this.fallThrough = null;
+        this.eventHandler = null;
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.addEventType
+     * @description 在此事件对象中添加新的事件类型,如果这个事件类型已经添加过了,则不做任何事情。
+     * @param {string} eventName - 事件名。
+     */
+    addEventType(eventName) {
+        if (!this.listeners[eventName]) {
+            this.eventTypes.push(eventName);
+            this.listeners[eventName] = [];
+        }
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.attachToElement
+     * @description 给 DOM 元素绑定浏览器事件。
+     * @param {HTMLDOMElement} element - 绑定浏览器事件的 DOM 元素。
+     */
+    attachToElement(element) {
+        if (this.element) {
+            Event.stopObservingElement(this.element);
+        } else {
+            // keep a bound copy of handleBrowserEvent() so that we can
+            // pass the same function to both Event.observe() and .stopObserving()
+            this.eventHandler = FunctionExt.bindAsEventListener(
+                this.handleBrowserEvent, this
+            );
+
+            // to be used with observe and stopObserving
+            this.clearMouseListener = FunctionExt.bind(
+                this.clearMouseCache, this
+            );
+        }
+        this.element = element;
+        for (var i = 0, len = this.BROWSER_EVENTS.length; i < len; i++) {
+            var eventType = this.BROWSER_EVENTS[i];
+
+            // every browser event has a corresponding application event
+            // (whether it's listened for or not).
+            this.addEventType(eventType);
+
+            // use Prototype to register the event cross-browser
+            Event.observe(element, eventType, this.eventHandler);
+        }
+        // disable dragstart in IE so that mousedown/move/up works normally
+        Event.observe(element, "dragstart", Event.stop);
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.on
+     * @description 在一个相同的范围内注册监听器的方法,此方法调用 register 函数。
+     * @example
+     * // 注册一个 "loadstart" 监听事件
+     * events.on({"loadstart": loadStartListener});
+     *
+     * // 同样注册一个 "loadstart" 监听事件
+     * events.register("loadstart", undefined, loadStartListener);
+     *
+     * // 同时为对象注册多个监听事件
+     * events.on({
+     *     "loadstart": loadStartListener,
+     *     "loadend": loadEndListener,
+     *     scope: object
+     * });
+     *
+     * // 同时为对象注册多个监听事件,多次调用 register 方法
+     * events.register("loadstart", object, loadStartListener);
+     * events.register("loadend", object, loadEndListener);
+     *
+     *
+     * @param {Object} object - 添加监听的对象。
+     */
+    on(object) {
+        for (var type in object) {
+            if (type !== "scope" && object.hasOwnProperty(type)) {
+                this.register(type, object.scope, object[type]);
+            }
+        }
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.register
+     * @description 在事件对象上注册一个事件。当事件被触发时,'func' 函数被调用,假设我们触发一个事件,
+     *              指定 SuperMap.Bounds 作为 "obj",当事件被触发时,回调函数的上下文作为 Bounds 对象。
+     * @param {string} type - 事件注册者的名字。
+     * @param {Object} [obj=this.object] - 对象绑定的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     * @param {(boolean|Object)} [priority] - 当为 true 时将新的监听加在事件队列的前面。
+     */
+    register(type, obj, func, priority) {
+        if (type in Events && !this.extensions[type]) {
+            this.extensions[type] = new Events[type](this);
+        }
+        if ((func != null) &&
+            (Util.indexOf(this.eventTypes, type) !== -1)) {
+
+            if (obj == null) {
+                obj = this.object;
+            }
+            var listeners = this.listeners[type];
+            if (!listeners) {
+                listeners = [];
+                this.listeners[type] = listeners;
+                this.extensionCount[type] = 0;
+            }
+            var listener = {obj: obj, func: func};
+            if (priority) {
+                listeners.splice(this.extensionCount[type], 0, listener);
+                if (typeof priority === "object" && priority.extension) {
+                    this.extensionCount[type]++;
+                }
+            } else {
+                listeners.push(listener);
+            }
+        }
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.registerPriority
+     * @description 相同的注册方法,但是在前面增加新的监听者事件查询而代替到方法的结束。
+     * @param {string} type - 事件注册者的名字。
+     * @param {Object} [obj=this.object] - 对象绑定方面的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     */
+    registerPriority(type, obj, func) {
+        this.register(type, obj, func, true);
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.un
+     * @description 在一个相同的范围内取消注册监听器的方法,此方法调用 unregister 函数。
+     * @example
+     * // 移除 "loadstart" 事件监听
+     * events.un({"loadstart": loadStartListener});
+     *
+     * // 使用 "unregister" 方法移除 "loadstart" 事件监听
+     * events.unregister("loadstart", undefined, loadStartListener);
+     *
+     * // 取消对象多个事件监听
+     * events.un({
+     *     "loadstart": loadStartListener,
+     *     "loadend": loadEndListener,
+     *     scope: object
+     * });
+     *
+     * // 取消对象多个事件监听,多次调用unregister方法。
+     * events.unregister("loadstart", object, loadStartListener);
+     * events.unregister("loadend", object, loadEndListener);
+     *
+     * @param {Object} object - 移除监听的对象。
+     */
+    un(object) {
+        for (var type in object) {
+            if (type !== "scope" && object.hasOwnProperty(type)) {
+                this.unregister(type, object.scope, object[type]);
+            }
+        }
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.unregister
+     * @description 取消注册。
+     * @param {string} type - 事件类型。
+     * @param {Object} [obj=this.object] - 对象绑定方面的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     */
+    unregister(type, obj, func) {
+        if (obj == null) {
+            obj = this.object;
+        }
+        var listeners = this.listeners[type];
+        if (listeners != null) {
+            for (var i = 0, len = listeners.length; i < len; i++) {
+                if (listeners[i].obj === obj && listeners[i].func === func) {
+                    listeners.splice(i, 1);
+                    break;
+                }
+            }
+        }
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.remove
+     * @description 删除某个事件类型的所有监听,如果该事件类型没有注册,则不做任何操作。
+     * @param {string} type - 事件类型。
+     */
+    remove(type) {
+        if (this.listeners[type] != null) {
+            this.listeners[type] = [];
+        }
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.triggerEvent
+     * @description 触发一个特定的注册事件。
+     * @param {string} type - 触发事件类型。
+     * @param {Event} evt - 事件对象。
+     * @returns {boolean} 返回监听对象,如果返回是 false,则停止监听。
+     */
+    triggerEvent(type, evt) {
+        var listeners = this.listeners[type];
+
+        // fast path
+        if (!listeners || listeners.length == 0) {
+            return undefined;
+        }
+
+        // prep evt object with object & div references
+        if (evt == null) {
+            evt = {};
+        }
+        evt.object = this.object;
+        evt.element = this.element;
+        if (!evt.type) {
+            evt.type = type;
+        }
+
+        // execute all callbacks registered for specified type
+        // get a clone of the listeners array to
+        // allow for splicing during callbacks
+        listeners = listeners.slice();
+        var continueChain;
+        for (var i = 0, len = listeners.length; i < len; i++) {
+            var callback = listeners[i];
+            // bind the context to callback.obj
+            continueChain = callback.func.apply(callback.obj, [evt]);
+
+            if ((continueChain != undefined) && (continueChain === false)) {
+                // if callback returns false, execute no more callbacks.
+                break;
+            }
+        }
+        // don't fall through to other DOM elements
+        if (!this.fallThrough) {
+            Event.stop(evt, true);
+        }
+        return continueChain;
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.handleBrowserEvent
+     * @description 对 triggerEvent 函数的包装,给事件对象设置了 xy 属性(即当前鼠标点的 xy 坐标)。
+     * @param {Event} evt - 事件对象。
+     */
+    handleBrowserEvent(evt) {
+        var type = evt.type, listeners = this.listeners[type];
+        if (!listeners || listeners.length == 0) {
+            // noone's listening, bail out
+            return;
+        }
+        // add clientX & clientY to all events - corresponds to average x, y
+        var touches = evt.touches;
+        if (touches && touches[0]) {
+            var x = 0;
+            var y = 0;
+            var num = touches.length;
+            var touch;
+            for (var i = 0; i < num; ++i) {
+                touch = touches[i];
+                x += touch.clientX;
+                y += touch.clientY;
+            }
+            evt.clientX = x / num;
+            evt.clientY = y / num;
+        }
+        if (this.includeXY) {
+            evt.xy = this.getMousePosition(evt);
+        }
+        this.triggerEvent(type, evt);
+    }
+
+
+    /**
+     * @function SuperMap.Events.prototype.clearMouseCache
+     * @description 清除鼠标缓存。
+     */
+    clearMouseCache() {
+        this.element.scrolls = null;
+        this.element.lefttop = null;
+        var body = document.body;
+        if (body && !((body.scrollTop != 0 || body.scrollLeft != 0) &&
+                navigator.userAgent.match(/iPhone/i))) {
+            this.element.offsets = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.Events.prototype.getMousePosition
+     * @param {Event} evt - 事件对象。
+     * @returns {SuperMap.Pixel} 当前的鼠标的 xy 坐标点。
+     */
+    getMousePosition(evt) {
+        if (!this.includeXY) {
+            this.clearMouseCache();
+        } else if (!this.element.hasScrollEvent) {
+            Event.observe(window, "scroll", this.clearMouseListener);
+            this.element.hasScrollEvent = true;
+        }
+
+        if (!this.element.scrolls) {
+            var viewportElement = Util.getViewportElement();
+            this.element.scrolls = [
+                viewportElement.scrollLeft,
+                viewportElement.scrollTop
+            ];
+        }
+
+        if (!this.element.lefttop) {
+            this.element.lefttop = [
+                (document.documentElement.clientLeft || 0),
+                (document.documentElement.clientTop || 0)
+            ];
+        }
+
+        if (!this.element.offsets) {
+            this.element.offsets = Util.pagePosition(this.element);
+        }
+
+        return new Pixel(
+            (evt.clientX + this.element.scrolls[0]) - this.element.offsets[0]
+            - this.element.lefttop[0],
+            (evt.clientY + this.element.scrolls[1]) - this.element.offsets[1]
+            - this.element.lefttop[1]
+        );
+    }
+
+}
+
+SuperMap.Events = Events;
+SuperMap.Events.prototype.BROWSER_EVENTS = [
+    "mouseover", "mouseout",
+    "mousedown", "mouseup", "mousemove",
+    "click", "dblclick", "rightclick", "dblrightclick",
+    "resize", "focus", "blur",
+    "touchstart", "touchmove", "touchend",
+    "keydown", "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup",
+    "MSGestureStart", "MSGestureChange", "MSGestureEnd",
+    "contextmenu"
+];
+;// CONCATENATED MODULE: external "function(){try{return elasticsearch}catch(e){return {}}}()"
+const external_function_try_return_elasticsearch_catch_e_return_namespaceObject = function(){try{return elasticsearch}catch(e){return {}}}();
+var external_function_try_return_elasticsearch_catch_e_return_default = /*#__PURE__*/__webpack_require__.n(external_function_try_return_elasticsearch_catch_e_return_namespaceObject);
+;// CONCATENATED MODULE: ./src/common/thirdparty/elasticsearch/ElasticSearch.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.ElasticSearch
+ * @classdesc ElasticSearch服务类。
+ * @category ElasticSearch
+ * @param {string} url - ElasticSearch服务地址。
+ * @param {Object} options - 参数。
+ * @param {function} [options.change] - 服务器返回数据后执行的函数。废弃,不建议使用。使用search或msearch方法。
+ * @param {boolean} [options.openGeoFence=false] - 是否开启地理围栏验证,默认为不开启。
+ * @param {function} [options.outOfGeoFence] - 数据超出地理围栏后执行的函数。
+ * @param {Object} [options.geoFence] - 地理围栏。
+ */
+
+class ElasticSearch {
+
+    constructor(url, options) {
+        options = options || {};
+        /**
+         *  @member {string} SuperMap.ElasticSearch.prototype.url 
+         *  @description ElasticSearch服务地址
+         */
+        this.url = url;
+        /**
+         *  @member {Object} SuperMap.ElasticSearch.prototype.client
+         *  @description client ES客户端
+         */
+        this.client = new (external_function_try_return_elasticsearch_catch_e_return_default()).Client({
+            host: this.url
+        });
+        /**
+         *  @deprecated
+         *  @member {function} [SuperMap.ElasticSearch.prototype.change]
+         *  @description 服务器返回数据后执行的函数。废弃,不建议使用。使用search或msearch方法。
+         */
+        this.change = null;
+        /**
+         *  @member {boolean} [SuperMap.ElasticSearch.prototype.openGeoFence=false]
+         *  @description 是否开启地理围栏验证,默认为不开启。
+         */
+        this.openGeoFence = false;
+        /**
+         *  @member {function} [SuperMap.ElasticSearch.prototype.outOfGeoFence]
+         *  @description 数据超出地理围栏后执行的函数
+         */
+        this.outOfGeoFence = null;
+
+        /**
+         * @member {Object} [SuperMap.ElasticSearch.prototype.geoFence]
+         * @description 地理围栏
+         * @example {
+     *    radius: 1000,//单位是m
+     *    center: [104.40, 30.43],
+     *    unit: 'meter|degree'
+     *  }
+         */
+        this.geoFence = null;
+
+        /*
+         * Constant: EVENT_TYPES
+         * {Array.<String>}
+         * 此类支持的事件类型。
+         *
+         */
+        this.EVENT_TYPES = ['change', 'error', 'outOfGeoFence'];
+
+        /**
+         * @member {SuperMap.Events} SuperMap.ElasticSearch.prototype.events
+         * @description 事件
+         */
+        this.events = new Events(this, null, this.EVENT_TYPES);
+
+        /**
+         * @member {Object} SuperMap.ElasticSearch.prototype.eventListeners
+         * @description 听器对象,在构造函数中设置此参数(可选),对 MapService 支持的两个事件 processCompleted 、processFailed 进行监听,
+         * 相当于调用 SuperMap.Events.on(eventListeners)。
+         */
+        this.eventListeners = null;
+        Util.extend(this, options);
+        if (this.eventListeners instanceof Object) {
+            this.events.on(this.eventListeners);
+        }
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.setGeoFence
+     * @description 设置地理围栏,openGeoFence参数为true的时候,设置的地理围栏才生效。
+     * @param {SuperMap.Geometry} geoFence - 地理围栏。
+     */
+
+    setGeoFence(geoFence) {
+        this.geoFence = geoFence;
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.bulk
+     * @description 批量操作API,允许执行多个索引/删除操作。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-bulk}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    bulk(params, callback) {
+        return this.client.bulk(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.clearScroll
+     * @description 通过指定scroll参数进行查询来清除已经创建的scroll请求。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-clearscroll}</br>
+     *更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    clearScroll(params, callback) {
+        return this.client.clearScroll(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.count
+     * @description 获取集群、索引、类型或查询的文档个数。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-count}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-count.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    count(params, callback) {
+        return this.client.count(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.count
+     * @description 在特定索引中添加一个类型化的JSON文档,使其可搜索。如果具有相同index,type且id已经存在的文档将发生错误。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-create}
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html}
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    create(params, callback) {
+        return this.client.create(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID从特定索引中删除键入的JSON文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-delete}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    delete(params, callback) {
+        return this.client.delete(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID从特定索引中删除键入的JSON文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletebyquery}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    deleteByQuery(params, callback) {
+        return this.client.deleteByQuery(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID删除脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletescript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    deleteScript(params, callback) {
+        return this.client.deleteScript(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.deleteTemplate
+     * @description 根据其ID删除模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletetemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    deleteTemplate(params, callback) {
+        return this.client.deleteTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.exists
+     * @description 检查给定文档是否存在。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-exists}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    exists(params, callback) {
+        return this.client.exists(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.existsSource
+     * @description 检查资源是否存在。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-existssource}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+    existsSource(params, callback) {
+        return this.client.existsSource(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.explain
+     * @description 提供与特定查询相关的特定文档分数的详细信息。它还会告诉您文档是否与指定的查询匹配。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-explain}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    explain(params, callback) {
+        return this.client.explain(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.fieldCaps
+     * @description 允许检索多个索引之间的字段的功能。(实验性API,可能会在未来版本中删除)</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-fieldcaps}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-field-caps.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    fieldCaps(params, callback) {
+        return this.client.fieldCaps(params, callback);
+    }
+
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.get
+     * @description 从索引获取一个基于其id的类型的JSON文档。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-get}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    get(params, callback) {
+        return this.client.get(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getScript
+     * @description 获取脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-getscript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    getScript(params, callback) {
+        return this.client.getScript(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getSource
+     * @description 通过索引,类型和ID获取文档的源。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-getsource}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    getSource(params, callback) {
+        return this.client.getSource(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getTemplate
+     * @description 获取模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-gettemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    getTemplate(params, callback) {
+        return this.client.getTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.index
+     * @description 在索引中存储一个键入的JSON文档,使其可搜索。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-index}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    index(params, callback) {
+        return this.client.index(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.info
+     * @description 从当前集群获取基本信息。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-info}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/index.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    info(params, callback) {
+        return this.client.info(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.mget
+     * @description 根据索引,类型(可选)和ids来获取多个文档。mget所需的主体可以采用两种形式:文档位置数组或文档ID数组。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-mget}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    mget(params, callback) {
+        return this.client.mget(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.msearch
+     * @description 在同一请求中执行多个搜索请求。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-msearch}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 请求返回的回调函数。也可以使用then表达式获取返回结果。
+     *     回调参数:error,response。结果存储在response.responses中
+     */
+    msearch(params, callback) {
+        let me = this;
+
+        return me.client.msearch(params)
+            .then(function (resp) {
+                me._update(resp.responses, callback);
+                return resp;
+            }, function (err) {
+                callback(err);
+                me.events.triggerEvent('error', {error: err});
+                return err;
+            });
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.msearchTemplate
+     * @description 在同一请求中执行多个搜索模板请求。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-msearchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    msearchTemplate(params, callback) {
+        return this.client.msearchTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.mtermvectors
+     * @description 多termvectors API允许一次获得多个termvectors。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-mtermvectors}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-termvectors.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    mtermvectors(params, callback) {
+        return this.client.mtermvectors(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.ping
+     * @description 测试连接。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-ping}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/index.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    ping(params, callback) {
+        return this.client.ping(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.putScript
+     * @description 添加脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-putscript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    putScript(params, callback) {
+        return this.client.putScript(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.putTemplate
+     * @description 添加模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-puttemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    putTemplate(params, callback) {
+        return this.client.putTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.reindex
+     * @description 重新索引。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-reindex}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    reindex(params, callback) {
+        return this.client.reindex(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.reindexRessrottle
+     * @description 重新索引。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-reindexrethrottle}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    reindexRessrottle(params, callback) {
+        return this.client.reindexRessrottle(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.renderSearchTemplate
+     * @description 搜索模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-rendersearchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    renderSearchTemplate(params, callback) {
+        return this.client.renderSearchTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.scroll
+     * @description  在search()调用中指定滚动参数之后,滚动搜索请求(检索下一组结果)。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-scroll}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    scroll(params, callback) {
+        return this.client.scroll(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.search
+     * @description  在search()调用中指定滚动参数之后,滚动搜索请求(检索下一组结果)。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-search}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 请求返回的回调函数。也可以使用then表达式获取返回结果。
+     *     回调参数:error,response,结果存储在response.responses中
+     */
+    search(params, callback) {
+        let me = this;
+        return me.client.search(params)
+            .then(function (resp) {
+                me._update(resp.responses, callback);
+                return resp;
+            }, function (err) {
+                callback(err);
+                me.events.triggerEvent('error', {error: err});
+                return err;
+            });
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.searchShards
+     * @description  返回要执行搜索请求的索引和分片。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-searchshards}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-shards.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    searchShards(params, callback) {
+        return this.client.searchShards(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.searchTemplate
+     * @description  搜索模板。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-searchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    searchTemplate(params, callback) {
+        return this.client.searchTemplate(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.suggest
+     * @description 该建议功能通过使用特定的建议者,基于所提供的文本来建议类似的术语。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-suggest}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    suggest(params, callback) {
+        return this.client.suggest(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.termvectors
+     * @description 返回有关特定文档字段中的术语的信息和统计信息。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-termvectors}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    termvectors(params, callback) {
+        return this.client.termvectors(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.update
+     * @description 更新文档的部分。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-update}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    update(params, callback) {
+        return this.client.update(params, callback);
+    }
+
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.update
+     * @description 通过查询API来更新文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-updatebyquery}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+    updateByQuery(params, callback) {
+        return this.client.updateByQuery(params, callback);
+    }
+
+    _update(data, callback) {
+        let me = this;
+        if (!data) {
+            return;
+        }
+        me.data = data;
+        if (me.openGeoFence && me.geoFence) {
+            me._validateDatas(data);
+        }
+        me.events.triggerEvent('change', {data: me.data});
+        //change方法已废弃,不建议使用。建议使用search方法的第二个参数传入请求成功的回调
+        if (me.change) {
+            me.change && me.change(data);
+        } else {
+            //加responses是为了保持跟原来es自身的数据结构一致
+            callback && callback(undefined, {responses: data});
+        }
+    }
+
+    _validateDatas(datas) {
+        if (!datas) {
+            return;
+        }
+        if (!(datas instanceof Array)) {
+            datas = [datas];
+        }
+        var i, len = datas.length;
+        for (i = 0; i < len; i++) {
+            this._validateData(datas[i]);
+        }
+    }
+
+    _validateData(data) {
+        let me = this;
+        data.hits.hits.map(function (source) {
+            let content = source._source;
+            let meterUnit = me._getMeterPerMapUnit(me.geoFence.unit);
+            let geoFenceCX = me.geoFence.center[0] * meterUnit;
+            let geoFenceCY = me.geoFence.center[1] * meterUnit;
+            let contentX = content.x * meterUnit;
+            let contentY = content.y * meterUnit;
+            let distance = me._distance(contentX, contentY, geoFenceCX, geoFenceCY);
+            let radius = me.geoFence.radius;
+            if (distance > radius) {
+                me.outOfGeoFence && me.outOfGeoFence(data);
+                me.events.triggerEvent('outOfGeoFence', {data: data});
+            }
+            return source;
+        });
+    }
+
+    _distance(x1, y1, x2, y2) {
+        return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+    }
+
+    _getMeterPerMapUnit(mapUnit) {
+        let earchRadiusInMeters = 6378137;
+        let meterPerMapUnit;
+        if (mapUnit === 'meter') {
+            meterPerMapUnit = 1;
+        } else if (mapUnit === 'degree') {
+            // 每度表示多少米。
+            meterPerMapUnit = Math.PI * 2 * earchRadiusInMeters / 360;
+        }
+        return meterPerMapUnit;
+    }
+
+}
+
+SuperMap.ElasticSearch = ElasticSearch;
+
+// EXTERNAL MODULE: ./node_modules/promise-polyfill/dist/polyfill.js
+var polyfill = __webpack_require__(107);
+// EXTERNAL MODULE: ./node_modules/fetch-ie8/fetch.js
+var fetch = __webpack_require__(693);
+// EXTERNAL MODULE: ./node_modules/fetch-jsonp/build/fetch-jsonp.js
+var fetch_jsonp = __webpack_require__(144);
+var fetch_jsonp_default = /*#__PURE__*/__webpack_require__.n(fetch_jsonp);
+;// CONCATENATED MODULE: ./src/common/util/FetchRequest.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+let FetchRequest_fetch = window.fetch;
+var setFetch = function (newFetch) {
+    FetchRequest_fetch = newFetch;
+}
+/**
+ * @function SuperMap.setCORS
+ * @description 设置是否允许跨域请求,全局配置,优先级低于 service 下的 crossOring 参数。
+ * @param {boolean} cors - 是否允许跨域请求。
+ */
+var setCORS = SuperMap.setCORS = function (cors) {
+    SuperMap.CORS = cors;
+}
+/**
+ * @function SuperMap.isCORS
+ * @description 是是否允许跨域请求。
+ * @returns {boolean} 是否允许跨域请求。
+ */
+var isCORS = SuperMap.isCORS = function () {
+    if (SuperMap.CORS != undefined) {
+        return SuperMap.CORS;
+    }
+    return window.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest();
+}
+/**
+ * @function SuperMap.setRequestTimeout
+ * @description 设置请求超时时间。
+ * @param {number} [timeout=45] - 请求超时时间,单位秒。
+ */
+var setRequestTimeout = SuperMap.setRequestTimeout = function (timeout) {
+    return SuperMap.RequestTimeout = timeout;
+}
+/**
+ * @function SuperMap.getRequestTimeout
+ * @description 获取请求超时时间。
+ * @returns {number} 请求超时时间。
+ */
+var getRequestTimeout = SuperMap.getRequestTimeout = function () {
+    return SuperMap.RequestTimeout || 45000;
+}
+var FetchRequest = SuperMap.FetchRequest = {
+    commit: function (method, url, params, options) {
+        method = method ? method.toUpperCase() : method;
+        switch (method) {
+            case 'GET':
+                return this.get(url, params, options);
+            case 'POST':
+                return this.post(url, params, options);
+            case 'PUT':
+                return this.put(url, params, options);
+            case 'DELETE':
+                return this.delete(url, params, options);
+            default:
+                return this.get(url, params, options);
+        }
+    },
+    supportDirectRequest: function (url, options) {
+        if (Util.isInTheSameDomain(url)) {
+            return true;
+        }
+        if (options.crossOrigin != undefined) {
+            return options.crossOrigin;
+        } else {
+            return isCORS() || options.proxy;
+        }
+    },
+    get: function (url, params, options) {
+        options = options || {};
+        var type = 'GET';
+        url = Util.urlAppend(url, this._getParameterString(params || {}));
+        url = this._processUrl(url, options);
+        if (!this.supportDirectRequest(url, options)) {
+            url = url.replace('.json', '.jsonp');
+            var config = {
+                url: url,
+                data: params
+            };
+            return SuperMap.Util.RequestJSONPPromise.GET(config);
+        }
+        if (!this.urlIsLong(url)) {
+            return this._fetch(url, params, options, type);
+        } else {
+            return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
+        }
+    },
+
+    delete: function (url, params, options) {
+        options = options || {};
+        var type = 'DELETE';
+        url = Util.urlAppend(url, this._getParameterString(params || {}));
+        url = this._processUrl(url, options);
+        if (!this.supportDirectRequest(url, options)) {
+            url = url.replace('.json', '.jsonp');
+            var config = {
+                url: url += "&_method=DELETE",
+                data: params
+            };
+            return SuperMap.Util.RequestJSONPPromise.DELETE(config);
+        }
+        if (this.urlIsLong(url)) {
+            return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
+        }
+        return this._fetch(url, params, options, type);
+    },
+    post: function (url, params, options) {
+        options = options || {};
+        if (!this.supportDirectRequest(url, options)) {
+            url = url.replace('.json', '.jsonp');
+            var config = {
+                url: url += "&_method=POST",
+                data: params
+            };
+            return SuperMap.Util.RequestJSONPPromise.POST(config);
+        }
+        return this._fetch(this._processUrl(url, options), params, options, 'POST');
+    },
+
+    put: function (url, params, options) {
+        options = options || {};
+        url = this._processUrl(url, options);
+        if (!this.supportDirectRequest(url, options)) {
+            url = url.replace('.json', '.jsonp');
+            var config = {
+                url: url += "&_method=PUT",
+                data: params
+            };
+            return SuperMap.Util.RequestJSONPPromise.PUT(config);
+        }
+        return this._fetch(url, params, options, 'PUT');
+    },
+    urlIsLong: function (url) {
+        //当前url的字节长度。
+        var totalLength = 0,
+            charCode = null;
+        for (var i = 0, len = url.length; i < len; i++) {
+            //转化为Unicode编码
+            charCode = url.charCodeAt(i);
+            if (charCode < 0x007f) {
+                totalLength++;
+            } else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) {
+                totalLength += 2;
+            } else if ((0x0800 <= charCode) && (charCode <= 0xffff)) {
+                totalLength += 3;
+            }
+        }
+        return totalLength < 2000 ? false : true;
+    },
+    _postSimulatie: function (type, url, params, options) {
+        var separator = url.indexOf('?') > -1 ? '&' : '?';
+        url += separator + '_method=' + type;
+        if (typeof params !== 'string') {
+            params = JSON.stringify(params);
+        }
+        return this.post(url, params, options);
+    },
+
+    _processUrl: function (url, options) {
+        if (this._isMVTRequest(url)) {
+            return url;
+        }
+
+        if (url.indexOf('.json') === -1 && !options.withoutFormatSuffix) {
+            if (url.indexOf('?') < 0) {
+                url += '.json';
+            } else {
+                var urlArrays = url.split('?');
+                if (urlArrays.length === 2) {
+                    url = urlArrays[0] + '.json?' + urlArrays[1];
+                }
+            }
+        }
+        if (options && options.proxy) {
+            if (typeof options.proxy === 'function') {
+                url = options.proxy(url);
+            } else {
+                url = decodeURIComponent(url);
+                url = options.proxy + encodeURIComponent(url);
+            }
+        }
+        return url;
+    },
+
+    _fetch: function (url, params, options, type) {
+        options = options || {};
+        options.headers = options.headers || {};
+        if (!options.headers['Content-Type']) {
+            options.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
+        }
+        if (options.timeout) {
+            return this._timeout(
+                options.timeout,
+                FetchRequest_fetch(url, {
+                    method: type,
+                    headers: options.headers,
+                    body: type === 'PUT' || type === 'POST' ? params : undefined,
+                    credentials: this._getWithCredentials(options),
+                    mode: 'cors',
+                    timeout: getRequestTimeout()
+                }).then(function (response) {
+                    return response;
+                })
+            );
+        }
+        return FetchRequest_fetch(url, {
+            method: type,
+            body: type === 'PUT' || type === 'POST' ? params : undefined,
+            headers: options.headers,
+            credentials: this._getWithCredentials(options),
+            mode: 'cors',
+            timeout: getRequestTimeout()
+        }).then(function (response) {
+            return response;
+        });
+    },
+
+    _getWithCredentials: function (options) {
+        if (options.withCredentials === true) {
+            return 'include';
+        }
+        if (options.withCredentials === false) {
+            return 'omit';
+        }
+        return 'same-origin';
+    },
+
+    _fetchJsonp: function (url, options) {
+        options = options || {};
+        return fetch_jsonp_default()(url, {
+            method: 'GET',
+            timeout: options.timeout
+        }).then(function (response) {
+            return response;
+        });
+    },
+
+    _timeout: function (seconds, promise) {
+        return new Promise(function (resolve, reject) {
+            setTimeout(function () {
+                reject(new Error('timeout'));
+            }, seconds);
+            promise.then(resolve, reject);
+        });
+    },
+
+    _getParameterString: function (params) {
+        var paramsArray = [];
+        for (var key in params) {
+            var value = params[key];
+            if (value != null && typeof value !== 'function') {
+                var encodedValue;
+                if (Array.isArray(value) || value.toString() === '[object Object]') {
+                    encodedValue = encodeURIComponent(JSON.stringify(value));
+                } else {
+                    encodedValue = encodeURIComponent(value);
+                }
+                paramsArray.push(encodeURIComponent(key) + '=' + encodedValue);
+            }
+        }
+        return paramsArray.join('&');
+    },
+
+    _isMVTRequest: function (url) {
+        return url.indexOf('.mvt') > -1 || url.indexOf('.pbf') > -1;
+    }
+}
+SuperMap.Util.RequestJSONPPromise = {
+    limitLength: 1500,
+    queryKeys: [],
+    queryValues: [],
+    supermap_callbacks: {},
+    addQueryStrings: function (values) {
+        var me = this;
+        for (var key in values) {
+            me.queryKeys.push(key);
+            if (typeof values[key] !== 'string') {
+                values[key] = SuperMap.Util.toJSON(values[key]);
+            }
+            var tempValue = encodeURIComponent(values[key]);
+            me.queryValues.push(tempValue);
+        }
+    },
+    issue: function (config) {
+        var me = this,
+            uid = me.getUid(),
+            url = config.url,
+            splitQuestUrl = [];
+        var p = new Promise(function (resolve) {
+            me.supermap_callbacks[uid] = function (response) {
+                delete me.supermap_callbacks[uid];
+                resolve(response);
+            };
+        });
+
+        // me.addQueryStrings({
+        //     callback: "SuperMap.Util.RequestJSONPPromise.supermap_callbacks[" + uid + "]"
+        // });
+        var sectionURL = url,
+            keysCount = 0; //此次sectionURL中有多少个key
+        var length = me.queryKeys ? me.queryKeys.length : 0;
+        for (var i = 0; i < length; i++) {
+            if (sectionURL.length + me.queryKeys[i].length + 2 >= me.limitLength) {
+                //+2 for ("&"or"?")and"="
+                if (keysCount == 0) {
+                    return false;
+                }
+                splitQuestUrl.push(sectionURL);
+                sectionURL = url;
+                keysCount = 0;
+                i--;
+            } else {
+                if (sectionURL.length + me.queryKeys[i].length + 2 + me.queryValues[i].length > me.limitLength) {
+                    var leftValue = me.queryValues[i];
+                    while (leftValue.length > 0) {
+                        var leftLength = me.limitLength - sectionURL.length - me.queryKeys[i].length - 2; //+2 for ("&"or"?")and"="
+                        if (sectionURL.indexOf('?') > -1) {
+                            sectionURL += '&';
+                        } else {
+                            sectionURL += '?';
+                        }
+                        var tempLeftValue = leftValue.substring(0, leftLength);
+                        //避免 截断sectionURL时,将类似于%22这样的符号截成两半,从而导致服务端组装sectionURL时发生错误
+                        if (tempLeftValue.substring(leftLength - 1, leftLength) === '%') {
+                            leftLength -= 1;
+                            tempLeftValue = leftValue.substring(0, leftLength);
+                        } else if (tempLeftValue.substring(leftLength - 2, leftLength - 1) === '%') {
+                            leftLength -= 2;
+                            tempLeftValue = leftValue.substring(0, leftLength);
+                        }
+
+                        sectionURL += me.queryKeys[i] + '=' + tempLeftValue;
+                        leftValue = leftValue.substring(leftLength);
+                        if (tempLeftValue.length > 0) {
+                            splitQuestUrl.push(sectionURL);
+                            sectionURL = url;
+                            keysCount = 0;
+                        }
+                    }
+                } else {
+                    keysCount++;
+                    if (sectionURL.indexOf('?') > -1) {
+                        sectionURL += '&';
+                    } else {
+                        sectionURL += '?';
+                    }
+                    sectionURL += me.queryKeys[i] + '=' + me.queryValues[i];
+                }
+            }
+        }
+        splitQuestUrl.push(sectionURL);
+        me.send(
+            splitQuestUrl,
+            'SuperMap.Util.RequestJSONPPromise.supermap_callbacks[' + uid + ']',
+            config && config.proxy
+        );
+        return p;
+    },
+
+    getUid: function () {
+        var uid = new Date().getTime(),
+            random = Math.floor(Math.random() * 1e17);
+        return uid * 1000 + random;
+    },
+
+    send: function (splitQuestUrl, callback, proxy) {
+        var len = splitQuestUrl.length;
+        if (len > 0) {
+            var jsonpUserID = new Date().getTime();
+            for (var i = 0; i < len; i++) {
+                var url = splitQuestUrl[i];
+                if (url.indexOf('?') > -1) {
+                    url += '&';
+                } else {
+                    url += '?';
+                }
+                url += 'sectionCount=' + len;
+                url += '&sectionIndex=' + i;
+                url += '&jsonpUserID=' + jsonpUserID;
+                if (proxy) {
+                    url = decodeURIComponent(url);
+                    url = proxy + encodeURIComponent(url);
+                }
+                fetch_jsonp_default()(url, {
+                    jsonpCallbackFunction: callback,
+                    timeout: 30000
+                });
+            }
+        }
+    },
+
+    GET: function (config) {
+        var me = this;
+        me.queryKeys.length = 0;
+        me.queryValues.length = 0;
+        me.addQueryStrings(config.params);
+        return me.issue(config);
+    },
+
+    POST: function (config) {
+        var me = this;
+        me.queryKeys.length = 0;
+        me.queryValues.length = 0;
+        me.addQueryStrings({
+            requestEntity: config.data
+        });
+        return me.issue(config);
+    },
+
+    PUT: function (config) {
+        var me = this;
+        me.queryKeys.length = 0;
+        me.queryValues.length = 0;
+        me.addQueryStrings({
+            requestEntity: config.data
+        });
+        return me.issue(config);
+    },
+    DELETE: function (config) {
+        var me = this;
+        me.queryKeys.length = 0;
+        me.queryValues.length = 0;
+        me.addQueryStrings({
+            requestEntity: config.data
+        });
+        return me.issue(config);
+    }
+};
+
+;// CONCATENATED MODULE: ./src/common/security/SecurityManager.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @name SecurityManager
+ * @memberOf SuperMap
+ * @namespace
+ * @category Security
+ * @description 安全管理中心,提供 iServer,iPortal,Online 统一权限认证管理。
+ *  > 使用说明:
+ *  > 创建任何一个服务之前调用 {@link SuperMap.SecurityManager.registerToken}或
+ *  > {@link SuperMap.SecurityManager.registerKey}注册凭据。
+ *  > 发送请求时根据 url 或者服务 id 获取相应的 key 或者 token 并自动添加到服务地址中。
+ */
+class SecurityManager {
+
+    /**
+     * @description 从服务器获取一个token,在此之前要注册服务器信息。
+     * @function SuperMap.SecurityManager.generateToken
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @param {SuperMap.TokenServiceParameter} tokenParam - token 申请参数。
+     * @returns {Promise} 返回包含 token 信息的 Promise 对象。
+     */
+
+    static generateToken(url, tokenParam) {
+        var serverInfo = this.servers[url];
+        if (!serverInfo) {
+            return;
+        }
+        return FetchRequest.post(serverInfo.tokenServiceUrl, JSON.stringify(tokenParam.toJSON())).then(function (response) {
+            return response.text();
+        });
+    }
+
+    /**
+     * @description 注册安全服务器相关信息。
+     * @function SuperMap.SecurityManager.registerServers
+     * @param {SuperMap.ServerInfo} serverInfos - 服务器信息。
+     */
+    static registerServers(serverInfos) {
+        this.servers = this.servers || {};
+        if (!Util.isArray(serverInfos)) {
+            serverInfos = [serverInfos];
+        }
+        for (var i = 0; i < serverInfos.length; i++) {
+            var serverInfo = serverInfos[i];
+            this.servers[serverInfo.server] = serverInfo;
+        }
+    }
+
+    /**
+     * @description 服务请求都会自动带上这个 token。
+     * @function SuperMap.SecurityManager.registerToken
+     * @param {string} url -服务器域名+端口:如http://localhost:8090。
+     * @param {string} token - token
+     */
+    static registerToken(url, token) {
+        this.tokens = this.tokens || {};
+        if (!url || !token) {
+            return;
+        }
+        var domain = this._getTokenStorageKey(url);
+        this.tokens[domain] = token;
+    }
+
+    /**
+     * @description 注册 key,ids 为数组(存在一个 key 对应多个服务)。
+     * @function SuperMap.SecurityManager.registerKey
+     * @param {Array} ids - 可以是服务 id 数组或者 url 地址数组或者 webAPI 类型数组。
+     * @param {string} key - key
+     */
+    static registerKey(ids, key) {
+        this.keys = this.keys || {};
+        if (!ids || ids.length < 1 || !key) {
+            return;
+        }
+
+        ids = (Util.isArray(ids)) ? ids : [ids];
+        for (var i = 0; i < ids.length; i++) {
+            var id = this._getUrlRestString(ids[0]) || ids[0];
+            this.keys[id] = key;
+        }
+    }
+
+    /**
+     * @description 获取服务器信息。
+     * @function SuperMap.SecurityManager.getServerInfo
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @returns {SuperMap.ServerInfo} 服务器信息。
+     */
+    static getServerInfo(url) {
+        this.servers = this.servers || {};
+        return this.servers[url];
+    }
+
+    /**
+     * @description 根据 Url 获取token。
+     * @function SuperMap.SecurityManager.getToken
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @returns {string} token
+     */
+    static getToken(url) {
+        if (!url) {
+            return;
+        }
+        this.tokens = this.tokens || {};
+        var domain = this._getTokenStorageKey(url);
+        return this.tokens[domain];
+    }
+
+    /**
+     * @description 根据 Url 获取 key。
+     * @function SuperMap.SecurityManager.getKey
+     * @param {string} id - id
+     * @returns {string} key
+     */
+    static getKey(id) {
+        this.keys = this.keys || {};
+        var key = this._getUrlRestString(id) || id;
+        return this.keys[key];
+    }
+
+    /**
+     * @description iServer 登录验证。
+     * @function SuperMap.SecurityManager.loginiServer
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     * @param {string} username - 用户名。
+     * @param {string} password - 密码。
+     * @param {boolean} [rememberme=false] - 是否记住。
+     * @returns {Promise} 返回包含 iServer 登录请求结果的 Promise 对象。
+     */
+    static loginiServer(url, username, password, rememberme) {
+        url = Util.urlPathAppend(url, 'services/security/login');
+        var loginInfo = {
+            username: username && username.toString(),
+            password: password && password.toString(),
+            rememberme: rememberme
+        };
+        loginInfo = JSON.stringify(loginInfo);
+        var requestOptions = {
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+            }
+        };
+        return FetchRequest.post(url, loginInfo, requestOptions).then(function (response) {
+            return response.json();
+        });
+
+    }
+
+    /**
+     * @description iServer登出。
+     * @function SuperMap.SecurityManager.logoutiServer
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     * @returns {Promise} 是否登出成功。
+     */
+    static logoutiServer(url) {
+        url = Util.urlPathAppend(url, 'services/security/logout');
+        var requestOptions = {
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+            },
+            withoutFormatSuffix: true
+        };
+        return FetchRequest.get(url, "", requestOptions).then(function () {
+            return true;
+        }).catch(function () {
+            return false;
+        });
+
+    }
+
+    /**
+     * @description Online 登录验证。
+     * @function SuperMap.SecurityManager.loginOnline
+     * @param {string} callbackLocation - 跳转位置。
+     * @param {boolean} [newTab=true] - 是否新窗口打开。
+     */
+    static loginOnline(callbackLocation, newTab) {
+        var loginUrl = SecurityManager.SSO + "/login?service=" + callbackLocation;
+        this._open(loginUrl, newTab);
+    }
+
+    /**
+     * @description iPortal登录验证。
+     * @function SuperMap.SecurityManager.loginiPortal
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     * @param {string} username - 用户名。
+     * @param {string} password - 密码。
+     * @returns {Promise} 返回包含 iPortal 登录请求结果的 Promise 对象。
+     */
+    static loginiPortal(url, username, password) {
+        url = Util.urlPathAppend(url, 'web/login');
+        var loginInfo = {
+            username: username && username.toString(),
+            password: password && password.toString()
+        };
+        loginInfo = JSON.stringify(loginInfo);
+        var requestOptions = {
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+            },
+            withCredentials: true
+        };
+        return FetchRequest.post(url, loginInfo, requestOptions).then(function (response) {
+            return response.json();
+        });
+
+    }
+
+    /**
+     * @description iPortal 登出。
+     * @function SuperMap.SecurityManager.logoutiPortal
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     * @returns {Promise} 如果登出成功,返回 true;否则返回 false。
+     */
+    static logoutiPortal(url) {
+        url = Util.urlPathAppend(url, 'services/security/logout');
+        var requestOptions = {
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+            },
+            withCredentials: true,
+            withoutFormatSuffix: true
+        };
+        return FetchRequest.get(url, "", requestOptions).then(function () {
+            return true;
+        }).catch(function () {
+            return false;
+        });
+
+    }
+
+    /**
+     * @description iManager 登录验证。
+     * @function SuperMap.SecurityManager.loginManager
+     * @param {string} url - iManager 地址。地址参数为 iManager 首页地址,如: http://localhost:8390/imanager。
+     * @param {Object} [loginInfoParams] - iManager 登录参数。
+     * @param {string} loginInfoParams.userName - 用户名。
+     * @param {string} loginInfoParams.password - 密码。
+     * @param {Object} options
+     * @param {boolean} [options.isNewTab=true] - 不同域时是否在新窗口打开登录页面。
+     * @returns {Promise} 返回包含 iManager 登录请求结果的 Promise 对象。
+     */
+    static loginManager(url, loginInfoParams, options) {
+        if (!Util.isInTheSameDomain(url)) {
+            var isNewTab = options ? options.isNewTab : true;
+            this._open(url, isNewTab);
+            return;
+        }
+        var requestUrl = Util.urlPathAppend(url, 'icloud/security/tokens');
+        var params = loginInfoParams || {};
+        var loginInfo = {
+            username: params.userName && params.userName.toString(),
+            password: params.password && params.password.toString()
+        };
+        loginInfo = JSON.stringify(loginInfo);
+        var requestOptions = {
+            headers: {
+                'Accept': '*/*',
+                'Content-Type': 'application/json'
+            }
+        };
+        var me = this;
+        return FetchRequest.post(requestUrl, loginInfo, requestOptions).then(function (response) {
+            response.text().then(function (result) {
+                me.imanagerToken = result;
+                return result;
+            });
+        });
+    }
+
+    /**
+     * @description 清空全部验证信息。
+     * @function SuperMap.SecurityManager.destroyAllCredentials
+     */
+    static destroyAllCredentials() {
+        this.keys = null;
+        this.tokens = null;
+        this.servers = null;
+    }
+
+    /**
+     * @description 清空令牌信息。
+     * @function SuperMap.SecurityManager.destroyToken
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     */
+    static destroyToken(url) {
+        if (!url) {
+            return;
+        }
+        var domain = this._getTokenStorageKey(url);
+        this.tokens = this.tokens || {};
+        if (this.tokens[domain]) {
+            delete this.tokens[domain];
+        }
+    }
+
+    /**
+     * @description 清空服务授权码。
+     * @function SuperMap.SecurityManager.destroyKey
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     */
+    static destroyKey(url) {
+        if (!url) {
+            return;
+        }
+        this.keys = this.keys || {};
+        var key = this._getUrlRestString(url) || url;
+        if (this.keys[key]) {
+            delete this.keys[key];
+        }
+    }
+
+    static _open(url, newTab) {
+        newTab = (newTab != null) ? newTab : true;
+        var offsetX = window.screen.availWidth / 2 - this.INNER_WINDOW_WIDTH / 2;
+        var offsetY = window.screen.availHeight / 2 - this.INNER_WINDOW_HEIGHT / 2;
+        var options =
+            "height=" + this.INNER_WINDOW_HEIGHT + ", width=" + this.INNER_WINDOW_WIDTH +
+            ",top=" + offsetY + ", left=" + offsetX +
+            ",toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no";
+        if (newTab) {
+            window.open(url, 'login');
+        } else {
+            window.open(url, 'login', options);
+        }
+    }
+
+    static _getTokenStorageKey(url) {
+        var patten = /(.*?):\/\/([^\/]+)/i;
+        var result = url.match(patten);
+        if (!result) {
+            return url;
+        }
+        return result[0];
+    }
+
+    static _getUrlRestString(url) {
+        if (!url) {
+            return url;
+        }
+        // var patten = /http:\/\/(.*\/rest)/i;
+        var patten = /(http|https):\/\/(.*\/rest)/i;
+        var result = url.match(patten);
+        if (!result) {
+            return url;
+        }
+        return result[0];
+    }
+}
+SecurityManager.INNER_WINDOW_WIDTH = 600;
+SecurityManager.INNER_WINDOW_HEIGHT = 600;
+SecurityManager.SSO = "https://sso.supermap.com";
+SecurityManager.ONLINE = "https://www.supermapol.com";
+SuperMap.SecurityManager = SecurityManager;
+
+
+;// CONCATENATED MODULE: ./src/common/REST.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @enum DataFormat
+ * @memberOf SuperMap
+ * @description 服务请求返回结果数据类型
+ * @type {string}
+ */
+var DataFormat = SuperMap.DataFormat = {
+    /** GEOJSON */
+    GEOJSON: "GEOJSON",
+    /** ISERVER */
+    ISERVER: "ISERVER"
+};
+
+
+/**
+ * @enum ServerType
+ * @memberOf SuperMap
+ * @description 服务器类型
+ * @type {string}
+ */
+var ServerType = SuperMap.ServerType = {
+    /** ISERVER */
+    ISERVER: "ISERVER",
+    /** IPORTAL */
+    IPORTAL: "IPORTAL",
+    /** ONLINE */
+    ONLINE: "ONLINE"
+};
+
+
+/**
+ * @enum GeometryType
+ * @memberOf SuperMap
+ * @description 几何对象枚举,定义了一系列几何对象类型。
+ * @type {string}
+ */
+var GeometryType = SuperMap.GeometryType = {
+    /** LINE */
+    LINE: "LINE",
+    /** LINEM */
+    LINEM: "LINEM",
+    /** POINT */
+    POINT: "POINT",
+    /** REGION */
+    REGION: "REGION",
+    /** POINTEPS */
+    POINTEPS: "POINTEPS",
+    /** LINEEPS */
+    LINEEPS: "LINEEPS",
+    /** REGIONEPS */
+    REGIONEPS: "REGIONEPS",
+    /** ELLIPSE */
+    ELLIPSE: "ELLIPSE",
+    /** CIRCLE */
+    CIRCLE: "CIRCLE",
+    /** TEXT */
+    TEXT: "TEXT",
+    /** RECTANGLE */
+    RECTANGLE: "RECTANGLE",
+    /** UNKNOWN */
+    UNKNOWN: "UNKNOWN",
+    /** GEOCOMPOUND */
+    GEOCOMPOUND:"GEOCOMPOUND"
+};
+
+
+/**
+ * @enum QueryOption
+ * @memberOf SuperMap
+ * @description 查询结果类型枚举,描述查询结果返回类型,包括只返回属性、只返回几何实体以及返回属性和几何实体。
+ * @type {string}
+ */
+var QueryOption = SuperMap.QueryOption = {
+    /** 属性 */
+    ATTRIBUTE: "ATTRIBUTE",
+    /** 属性和几何对象 */
+    ATTRIBUTEANDGEOMETRY: "ATTRIBUTEANDGEOMETRY",
+    /** 几何对象 */
+    GEOMETRY: "GEOMETRY"
+};
+
+
+/**
+ * @enum JoinType
+ * @memberOf SuperMap
+ * @description 关联查询时的关联类型常量。
+ * 该类定义了两个表之间的连接类型常量,决定了对两个表之间进行连接查询时,查询结果中得到的记录的情况。
+ * @type {string}
+ */
+var JoinType = SuperMap.JoinType = {
+    /** INNERJOIN */
+    INNERJOIN: "INNERJOIN",
+    /** LEFTJOIN */
+    LEFTJOIN: "LEFTJOIN"
+};
+
+
+
+/**
+ * @enum SpatialQueryMode
+ * @memberOf SuperMap
+ * @description  空间查询模式枚举。该类定义了空间查询操作模式常量。
+ * @type {string}
+ */
+var SpatialQueryMode = SuperMap.SpatialQueryMode = {
+    /** 包含空间查询模式 */
+    CONTAIN: "CONTAIN",
+    /** 交叉空间查询模式 */
+    CROSS: "CROSS",
+    /** 分离空间查询模式 */
+    DISJOINT: "DISJOINT",
+    /** 重合空间查询模式 */
+    IDENTITY: "IDENTITY",
+    /** 相交空间查询模式 */
+    INTERSECT: "INTERSECT",
+    /** 无空间查询 */
+    NONE: "NONE",
+    /** 叠加空间查询模式 */
+    OVERLAP: "OVERLAP",
+    /** 邻接空间查询模式 */
+    TOUCH: "TOUCH",
+    /** 被包含空间查询模式 */
+    WITHIN: "WITHIN"
+};
+
+/**
+ * @enum SpatialRelationType
+ * @memberOf SuperMap
+ * @description  数据集对象间的空间关系枚举。
+ * 该类定义了数据集对象间的空间关系类型常量。
+ * @type {string}
+ */
+var SpatialRelationType = SuperMap.SpatialRelationType = {
+    /** 包含关系 */
+    CONTAIN: "CONTAIN",
+    /** 相交关系 */
+    INTERSECT: "INTERSECT",
+    /** 被包含关系 */
+    WITHIN: "WITHIN"
+};
+
+
+/**
+ * @enum MeasureMode
+ * @memberOf SuperMap
+ * @type {string}
+ * @description  量算模式枚举。
+ * 该类定义了两种测量模式:距离测量和面积测量。
+ */
+var MeasureMode = SuperMap.MeasureMode = {
+    /** 距离测量 */
+    DISTANCE: "DISTANCE",
+    /** 面积测量 */
+    AREA: "AREA"
+};
+
+
+/**
+ * @enum Unit
+ * @memberOf SuperMap
+ * @description  距离单位枚举。
+ * 该类定义了一系列距离单位类型。
+ * @type {string}
+ */
+var Unit = SuperMap.Unit = {
+    /**  米 */
+    METER: "METER",
+    /**  千米 */
+    KILOMETER: "KILOMETER",
+    /**  英里 */
+    MILE: "MILE",
+    /**  码 */
+    YARD: "YARD",
+    /**  度 */
+    DEGREE: "DEGREE",
+    /**  毫米 */
+    MILLIMETER: "MILLIMETER",
+    /**  厘米 */
+    CENTIMETER: "CENTIMETER",
+    /**  英寸 */
+    INCH: "INCH",
+    /**  分米 */
+    DECIMETER: "DECIMETER",
+    /**  英尺 */
+    FOOT: "FOOT",
+    /**  秒 */
+    SECOND: "SECOND",
+    /**  分 */
+    MINUTE: "MINUTE",
+    /**  弧度 */
+    RADIAN: "RADIAN"
+};
+
+
+/**
+ * @enum BufferRadiusUnit
+ * @memberOf SuperMap
+ * @description  缓冲区距离单位枚举。
+ * 该类定义了一系列缓冲距离单位类型。
+ * @type {string}
+ */
+var BufferRadiusUnit = SuperMap.BufferRadiusUnit = {
+    /**  厘米 */
+    CENTIMETER: "CENTIMETER",
+    /**  分米 */
+    DECIMETER: "DECIMETER",
+    /**  英尺 */
+    FOOT: "FOOT",
+    /**  英寸 */
+    INCH: "INCH",
+    /**  千米 */
+    KILOMETER: "KILOMETER",
+    /**  米 */
+    METER: "METER",
+    /**  英里 */
+    MILE: "MILE",
+    /**  毫米 */
+    MILLIMETER: "MILLIMETER",
+    /**  码 */
+    YARD: "YARD"
+}
+
+
+/**
+ * @enum EngineType
+ * @memberOf SuperMap
+ * @description  数据源引擎类型枚举。
+ * @type {string}
+ */
+var EngineType = SuperMap.EngineType = {
+    /** 影像只读引擎类型,文件引擎,针对通用影像格式如 BMP,JPG,TIFF 以及超图自定义影像格式 SIT 等。 */
+    IMAGEPLUGINS: "IMAGEPLUGINS",
+    /**  OGC 引擎类型,针对于 Web 数据源,Web 引擎,目前支持的类型有 WMS,WFS,WCS。 */
+    OGC: "OGC",
+    /**  Oracle 引擎类型,针对 Oracle 数据源,数据库引擎。 */
+    ORACLEPLUS: "ORACLEPLUS",
+    /**  SDB 引擎类型,文件引擎,即 SDB 数据源。 */
+    SDBPLUS: "SDBPLUS",
+    /**  SQL Server 引擎类型,针对 SQL Server 数据源,数据库引擎 */
+    SQLPLUS: "SQLPLUS",
+    /**  UDB 引擎类型,文件引擎。 */
+    UDB: "UDB"
+};
+
+
+/**
+ * @enum ThemeGraphTextFormat
+ * @memberOf SuperMap
+ * @description  统计专题图文本显示格式枚举。
+ * @type {string}
+ */
+var ThemeGraphTextFormat = SuperMap.ThemeGraphTextFormat = {
+    /**  标题。以各子项的标题来进行标注。 */
+    CAPTION: "CAPTION",
+    /**  标题 + 百分数。以各子项的标题和所占的百分比来进行标注。 */
+    CAPTION_PERCENT: "CAPTION_PERCENT",
+    /**  标题 + 实际数值。以各子项的标题和真实数值来进行标注。 */
+    CAPTION_VALUE: "CAPTION_VALUE",
+    /**  百分数。以各子项所占的百分比来进行标注。 */
+    PERCENT: "PERCENT",
+    /**  实际数值。以各子项的真实数值来进行标注。 */
+    VALUE: "VALUE"
+
+};
+
+
+/**
+ * @enum ThemeGraphType
+ * @memberOf SuperMap
+ * @description  统计专题图类型枚举。
+ * @type {string}
+ */
+var ThemeGraphType = SuperMap.ThemeGraphType = {
+    /**  面积图。 */
+    AREA: "AREA",
+    /**  柱状图。 */
+    BAR: "BAR",
+    /**  三维柱状图。 */
+    BAR3D: "BAR3D",
+    /**  折线图。 */
+    LINE: "LINE",
+    /**  饼图。 */
+    PIE: "PIE",
+    /**  三维饼图。 */
+    PIE3D: "PIE3D",
+    /**  点状图。 */
+    POINT: "POINT",
+    /**  环状图。 */
+    RING: "RING",
+    /**  玫瑰图。 */
+    ROSE: "ROSE",
+    /**  三维玫瑰图。 */
+    ROSE3D: "ROSE3D",
+    /**  堆叠柱状图。 */
+    STACK_BAR: "STACK_BAR",
+    /**  三维堆叠柱状图。 */
+    STACK_BAR3D: "STACK_BAR3D",
+    /**  阶梯图。 */
+    STEP: "STEP"
+};
+
+
+/**
+ * @enum GraphAxesTextDisplayMode
+ * @memberOf SuperMap
+ * @description  统计专题图坐标轴文本显示模式。
+ * @type {string}
+ */
+var GraphAxesTextDisplayMode = SuperMap.GraphAxesTextDisplayMode = {
+    /**  显示全部文本。 */
+    ALL: "ALL",
+    /**  不显示。 */
+    NONE: "NONE",
+    /**  显示Y轴的文本。 */
+    YAXES: "YAXES"
+};
+
+
+/**
+ * @enum GraduatedMode
+ * @memberOf SuperMap
+ * @description  专题图分级模式枚举。
+ *
+ * @type {string}
+ */
+var GraduatedMode = SuperMap.GraduatedMode = {
+    /**  常量分级模式。 */
+    CONSTANT: "CONSTANT",
+    /** 对数分级模式。 */
+    LOGARITHM: "LOGARITHM",
+    /**  平方根分级模式。 */
+    SQUAREROOT: "SQUAREROOT"
+};
+
+
+/**
+ * @enum RangeMode
+ * @memberOf SuperMap
+ * @description  范围分段专题图分段方式枚举。
+ * @type {string}
+ */
+var RangeMode = SuperMap.RangeMode = {
+    /**  自定义分段法。 */
+    CUSTOMINTERVAL: "CUSTOMINTERVAL",
+    /**  等距离分段法。 */
+    EQUALINTERVAL: "EQUALINTERVAL",
+    /**  对数分段法。 */
+    LOGARITHM: "LOGARITHM",
+    /**  等计数分段法。 */
+    QUANTILE: "QUANTILE",
+    /**  平方根分段法。 */
+    SQUAREROOT: "SQUAREROOT",
+    /**  标准差分段法。 */
+    STDDEVIATION: "STDDEVIATION"
+};
+
+
+/**
+ * @enum ThemeType
+ * @memberOf SuperMap
+ * @description  专题图类型枚举。
+ * @type {string}
+ */
+var ThemeType = SuperMap.ThemeType = {
+    /** 点密度专题图。 */
+    DOTDENSITY: "DOTDENSITY",
+    /** 等级符号专题图。 */
+    GRADUATEDSYMBOL: "GRADUATEDSYMBOL",
+    /** 统计专题图。 */
+    GRAPH: "GRAPH",
+    /** 标签专题图。 */
+    LABEL: "LABEL",
+    /** 分段专题图。 */
+    RANGE: "RANGE",
+    /** 単值专题图。 */
+    UNIQUE: "UNIQUE"
+};
+
+
+/**
+ * @enum ColorGradientType
+ * @memberOf SuperMap
+ * @description  渐变颜色枚举。
+ * @type {string}
+ */
+var ColorGradientType = SuperMap.ColorGradientType = {
+    /** 黑白渐变色。 */
+    BLACK_WHITE: "BLACKWHITE",
+    /** 蓝黑渐变色。 */
+    BLUE_BLACK: "BLUEBLACK",
+    /** 蓝红渐变色。 */
+    BLUE_RED: "BLUERED",
+    /** 蓝白渐变色。 */
+    BLUE_WHITE: "BLUEWHITE",
+    /** 青黑渐变色。 */
+    CYAN_BLACK: "CYANBLACK",
+    /** 青蓝渐变色。 */
+    CYAN_BLUE: "CYANBLUE",
+    /** 青绿渐变色。 */
+    CYAN_GREEN: "CYANGREEN",
+    /** 青白渐变色。 */
+    CYAN_WHITE: "CYANWHITE",
+    /** 绿黑渐变色。 */
+    GREEN_BLACK: "GREENBLACK",
+    /** 绿蓝渐变色。 */
+    GREEN_BLUE: "GREENBLUE",
+    /** 绿橙紫渐变色。 */
+    GREEN_ORANGE_VIOLET: "GREENORANGEVIOLET",
+    /** 绿红渐变色。 */
+    GREEN_RED: "GREENRED",
+    /** 蓝红渐变色。 */
+    GREEN_WHITE: "GREENWHITE",
+    /** 粉黑渐变色。 */
+    PINK_BLACK: "PINKBLACK",
+    /** 粉蓝渐变色。 */
+    PINK_BLUE: "PINKBLUE",
+    /** 粉红渐变色。 */
+    PINK_RED: "PINKRED",
+    /** 粉白渐变色。 */
+    PINK_WHITE: "PINKWHITE",
+    /** 彩虹色。 */
+    RAIN_BOW: "RAINBOW",
+    /** 红黑渐变色。 */
+    RED_BLACK: "REDBLACK",
+    /** 红白渐变色。 */
+    RED_WHITE: "REDWHITE",
+    /** 光谱渐变。 */
+    SPECTRUM: "SPECTRUM",
+    /** 地形渐变,用于三维显示效果较好。 */
+    TERRAIN: "TERRAIN",
+    /** 黄黑渐变色。 */
+    YELLOW_BLACK: "YELLOWBLACK",
+    /** 黄蓝渐变色。 */
+    YELLOW_BLUE: "YELLOWBLUE",
+    /** 黄绿渐变色。 */
+    YELLOW_GREEN: "YELLOWGREEN",
+    /** 黄红渐变色。 */
+    YELLOW_RED: "YELLOWRED",
+    /** 黄白渐变色。 */
+    YELLOW_WHITE: "YELLOWWHITE"
+};
+
+
+/**
+ * @enum TextAlignment
+ * @memberOf SuperMap
+ * @description  文本对齐枚举。
+ * @type {string}
+ */
+var TextAlignment = SuperMap.TextAlignment = {
+    /** 左上角对齐。 */
+    TOPLEFT: "TOPLEFT",
+    /** 顶部居中对齐。 */
+    TOPCENTER: "TOPCENTER",
+    /** 右上角对齐。 */
+    TOPRIGHT: "TOPRIGHT",
+    /** 基准线左对齐。 */
+    BASELINELEFT: "BASELINELEFT",
+    /** 基准线居中对齐。 */
+    BASELINECENTER: "BASELINECENTER",
+    /** 基准线右对齐。 */
+    BASELINERIGHT: "BASELINERIGHT",
+    /** 左下角对齐。 */
+    BOTTOMLEFT: "BOTTOMLEFT",
+    /** 底部居中对齐。 */
+    BOTTOMCENTER: "BOTTOMCENTER",
+    /** 右下角对齐。 */
+    BOTTOMRIGHT: "BOTTOMRIGHT",
+    /** 左中对齐。 */
+    MIDDLELEFT: "MIDDLELEFT",
+    /** 中心对齐。 */
+    MIDDLECENTER: "MIDDLECENTER",
+    /** 右中对齐。 */
+    MIDDLERIGHT: "MIDDLERIGHT"
+};
+
+/**
+ * @enum FillGradientMode
+ * @memberOf SuperMap
+ * @description  渐变填充风格的渐变类型枚举。
+ * @type {string}
+ */
+var FillGradientMode = SuperMap.FillGradientMode = {
+    /** 无渐变。 */
+    NONE: "NONE",
+    /** 线性渐变填充。 */
+    LINEAR: "LINEAR",
+    /** 辐射渐变填充。 */
+    RADIAL: "RADIAL",
+    /** 圆锥渐变填充。 */
+    CONICAL: "CONICAL",
+    /** 四角渐变填充。 */
+    SQUARE: "SQUARE"
+};
+
+
+/**
+ * @enum AlongLineDirection
+ * @memberOf SuperMap
+ * @description  标签沿线标注方向枚举。
+ * @type {string}
+ */
+var AlongLineDirection = SuperMap.AlongLineDirection = {
+    /** 沿线的法线方向放置标签。 */
+    NORMAL: "ALONG_LINE_NORMAL",
+    /** 从下到上,从左到右放置。 */
+    LB_TO_RT: "LEFT_BOTTOM_TO_RIGHT_TOP",
+    /** 从上到下,从左到右放置。 */
+    LT_TO_RB: "LEFT_TOP_TO_RIGHT_BOTTOM",
+    /** 从下到上,从右到左放置。 */
+    RB_TO_LT: "RIGHT_BOTTOM_TO_LEFT_TOP",
+    /** 从上到下,从右到左放置。 */
+    RT_TO_LB: "RIGHT_TOP_TO_LEFT_BOTTOM"
+};
+
+
+/**
+ * @enum LabelBackShape
+ * @memberOf SuperMap
+ * @description  标签专题图中标签背景的形状枚举。
+ * @type {string}
+ */
+var LabelBackShape = SuperMap.LabelBackShape = {
+    /** 菱形背景,即标签背景的形状为菱形。 */
+    DIAMOND: "DIAMOND",
+    /** 椭圆形背景,即标签背景的行状为椭圆形。 */
+    ELLIPSE: "ELLIPSE",
+    /** 符号背景,即标签背景的形状为设定的符号。 */
+    MARKER: "MARKER",
+    /** 空背景,即不使用任何形状作为标签的背景。 */
+    NONE: "NONE",
+    /** 矩形背景,即标签背景的形状为矩形。 */
+    RECT: "RECT",
+    /** 圆角矩形背景,即标签背景的形状为圆角矩形。 */
+    ROUNDRECT: "ROUNDRECT",
+    /** 三角形背景,即标签背景的形状为三角形。 */
+    TRIANGLE: "TRIANGLE"
+};
+
+
+/**
+ * @enum LabelOverLengthMode
+ * @memberOf SuperMap
+ * @description  标签专题图中超长标签的处理模式枚举。
+ * @type {string}
+ */
+var LabelOverLengthMode = SuperMap.LabelOverLengthMode = {
+    /** 换行显示。 */
+    NEWLINE: "NEWLINE",
+    /** 对超长标签不进行处理。 */
+    NONE: "NONE",
+    /** 省略超出部分。 */
+    OMIT: "OMIT"
+};
+
+
+/**
+ * @enum DirectionType
+ * @memberOf SuperMap
+ * @description  网络分析中方向枚举。
+ * 在行驶引导子项中使用。
+ * @type {string}
+ */
+var DirectionType = SuperMap.DirectionType = {
+    /** 东。 */
+    EAST: "EAST",
+    /** 无方向。 */
+    NONE: "NONE",
+    /** 北。 */
+    NORTH: "NORTH",
+    /** 南。 */
+    SOURTH: "SOURTH",
+    /** 西。 */
+    WEST: "WEST"
+};
+
+
+
+/**
+ * @enum SideType
+ * @memberOf SuperMap
+ * @description  行驶位置枚举。
+ * 表示在行驶在路的左边、右边或者路上的枚举,该类用在行驶导引子项类中。
+ * @type {string}
+ */
+var SideType = SuperMap.SideType = {
+    /** 路的左侧。 */
+    LEFT: "LEFT",
+    /** 在路上(即路的中间)。 */
+    MIDDLE: "MIDDLE",
+    /** 无效值。 */
+    NONE: "NONE",
+    /** 路的右侧。 */
+    RIGHT: "RIGHT"
+};
+
+
+/**
+ * @enum SupplyCenterType
+ * @memberOf SuperMap
+ * @description  资源供给中心类型枚举。
+ * 该枚举定义了网络分析中资源中心点的类型,主要用于资源分配和选址分区。
+ * 资源供给中心点的类型包括非中心,固定中心和可选中心。固定中心用于资源分配分析; 固定中心和可选中心用于选址分析;非中心在两种网络分析时都不予考虑。
+ * @type {string}
+ */
+var SupplyCenterType = SuperMap.SupplyCenterType = {
+    /** 固定中心点。 */
+    FIXEDCENTER: "FIXEDCENTER",
+    /** 非中心点。 */
+    NULL: "NULL",
+    /** 可选中心点。 */
+    OPTIONALCENTER: "OPTIONALCENTER"
+};
+
+
+/**
+ * @enum TurnType
+ * @memberOf SuperMap
+ * @description  转弯方向枚举。
+ * 用在行驶引导子项类中,表示转弯的方向。
+ * @type {string}
+ */
+var TurnType = SuperMap.TurnType = {
+    /** 向前直行。 */
+    AHEAD: "AHEAD",
+    /** 掉头。 */
+    BACK: "BACK",
+    /** 终点,不拐弯。 */
+    END: "END",
+    /** 左转弯。 */
+    LEFT: "LEFT",
+    /** 无效值。 */
+    NONE: "NONE",
+    /** 右转弯。 */
+    RIGHT: "RIGHT"
+};
+
+
+/**
+ * @enum BufferEndType
+ * @memberOf SuperMap
+ * @description  缓冲区分析BufferEnd类型。
+ * @type {string}
+ */
+var BufferEndType = SuperMap.BufferEndType = {
+    /** FLAT */
+    FLAT: "FLAT",
+    /** ROUND */
+    ROUND: "ROUND"
+};
+
+/**
+ * @enum OverlayOperationType
+ * @memberOf SuperMap
+ * @description  叠加分析类型枚举。
+ * @type {string}
+ */
+var OverlayOperationType = SuperMap.OverlayOperationType = {
+    /** 操作数据集(几何对象)裁剪被操作数据集(几何对象)。 */
+    CLIP: "CLIP",
+    /** 在被操作数据集(几何对象)上擦除掉与操作数据集(几何对象)相重合的部分。 */
+    ERASE: "ERASE",
+    /**对被操作数据集(几何对象)进行同一操作,即操作执行后,被操作数据集(几何对象)包含来自操作数据集(几何对象)的几何形状。 */
+    IDENTITY: "IDENTITY",
+    /** 对两个数据集(几何对象)求交,返回两个数据集(几何对象)的交集。 */
+    INTERSECT: "INTERSECT",
+    /** 对两个面数据集(几何对象)进行合并操作。 */
+    UNION: "UNION",
+    /** 对两个面数据集(几何对象)进行更新操作。 */
+    UPDATE: "UPDATE",
+    /** 对两个面数据集(几何对象)进行对称差操作。 */
+    XOR: "XOR"
+};
+
+
+/**
+ * @enum OutputType
+ * @memberOf SuperMap
+ * @description  分布式分析输出类型枚举。
+ * @type {string}
+ */
+var OutputType = SuperMap.OutputType = {
+    /** INDEXEDHDFS */
+    INDEXEDHDFS: "INDEXEDHDFS",
+    /** UDB */
+    UDB: "UDB",
+    /** MONGODB */
+    MONGODB: "MONGODB",
+    /** PG */
+    PG: "PG"
+};
+
+
+/**
+ * @enum SmoothMethod
+ * @memberOf SuperMap
+ * @description  光滑方法枚举。
+ * 用于从Grid 或DEM数据生成等值线或等值面时对等值线或者等值面的边界线进行平滑处理的方法。
+ * @type {string}
+ */
+var SmoothMethod = SuperMap.SmoothMethod = {
+    /** B 样条法。 */
+    BSPLINE: "BSPLINE",
+    /** 磨角法。 */
+    POLISH: "POLISH"
+};
+
+/**
+ * @enum SurfaceAnalystMethod
+ * @memberOf SuperMap
+ * @description  表面分析方法枚举。
+ * 通过对数据进行表面分析,能够挖掘原始数据所包含的信息,使某些细节明显化,易于分析。
+ * @type {string}
+ */
+var SurfaceAnalystMethod = SuperMap.SurfaceAnalystMethod = {
+    /** 等值线提取。 */
+    ISOLINE: "ISOLINE",
+    /** 等值面提取。 */
+    ISOREGION: "ISOREGION"
+};
+
+/**
+ * @enum DataReturnMode
+ * @memberOf SuperMap
+ * @description  数据返回模式枚举。
+ * 该枚举用于指定空间分析返回结果模式,包含返回数据集标识和记录集、只返回数据集标识(数据集名称@数据源名称)及只返回记录集三种模式。
+ * @type {string}
+ */
+var DataReturnMode = SuperMap.DataReturnMode = {
+    /** 返回结果数据集标识(数据集名称@数据源名称)和记录集(RecordSet)。 */
+    DATASET_AND_RECORDSET: "DATASET_AND_RECORDSET",
+    /** 只返回数据集标识(数据集名称@数据源名称)。 */
+    DATASET_ONLY: "DATASET_ONLY",
+    /** 只返回记录集(RecordSet)。 */
+    RECORDSET_ONLY: "RECORDSET_ONLY"
+};
+
+/**
+ * @enum EditType
+ * @memberOf SuperMap
+ * @description  要素集更新模式枚举。
+ * 该枚举用于指定数据服务中要素集更新模式,包含添加要素集、更新要素集和删除要素集。
+ * @type {string}
+ */
+var EditType = SuperMap.EditType = {
+    /** 增加操作。 */
+    ADD: "add",
+    /** 修改操作。 */
+    UPDATE: "update",
+    /** 删除操作。 */
+    DELETE: "delete"
+};
+
+
+/**
+ * @enum TransferTactic
+ * @memberOf SuperMap
+ * @description  公交换乘策略枚举。
+ * 该枚举用于指定公交服务中要素集更新模式,包含添加要素集、更新要素集和删除要素集。
+ * @type {string}
+ */
+var TransferTactic = SuperMap.TransferTactic = {
+    /** 时间短。 */
+    LESS_TIME: "LESS_TIME",
+    /** 少换乘。 */
+    LESS_TRANSFER: "LESS_TRANSFER",
+    /** 少步行。 */
+    LESS_WALK: "LESS_WALK",
+    /** 距离最短。 */
+    MIN_DISTANCE: "MIN_DISTANCE"
+};
+
+
+/**
+ * @enum TransferPreference
+ * @memberOf SuperMap
+ * @description  公交换乘策略枚举。
+ * 该枚举用于指定交通换乘服务中设置地铁优先、公交优先、不乘地铁、无偏好等偏好设置。
+ * @type {string}
+ */
+var TransferPreference = SuperMap.TransferPreference = {
+    /** 公交汽车优先。 */
+    BUS: "BUS",
+    /** 地铁优先。 */
+    SUBWAY: "SUBWAY",
+    /** 不乘坐地铁。 */
+    NO_SUBWAY: "NO_SUBWAY",
+    /** 无乘车偏好。 */
+    NONE: "NONE"
+};
+
+
+/**
+ * @enum GridType
+ * @memberOf SuperMap
+ * @description  地图背景格网类型枚举。
+ * @type {string}
+ */
+var GridType = SuperMap.GridType = {
+    /** 十字叉丝。 */
+    CROSS: "CROSS",
+    /** 网格线。 */
+    GRID: "GRID",
+    /** 点。 */
+    POINT: "POINT"
+};
+
+
+/**
+ * @enum ColorSpaceType
+ * @memberOf SuperMap
+ * @description  色彩空间枚举。
+ * 由于成色原理的不同,决定了显示器、投影仪这类靠色光直接合成颜色的颜色设备和打印机、
+ * 印刷机这类靠使用颜料的印刷设备在生成颜色方式上的区别。
+ * 针对上述不同成色方式,SuperMap 提供两种色彩空间,
+ * 分别为 RGB 和 CMYK。RGB 主要用于显示系统中,CMYK 主要用于印刷系统中。
+ * @type {string}
+ */
+var ColorSpaceType = SuperMap.ColorSpaceType = {
+    /** 该类型主要在印刷系统使用。 */
+    CMYK: "CMYK",
+    /** 该类型主要在显示系统中使用。 */
+    RGB: "RGB"
+};
+
+/**
+ * @enum LayerType
+ * @memberOf SuperMap
+ * @description  图层类型。
+ * @type {string}
+ */
+var LayerType = SuperMap.LayerType = {
+    /** SuperMap UGC 类型图层。如矢量图层、栅格(Grid)图层、影像图层。 */
+    UGC: "UGC",
+    /** WMS 图层。 */
+    WMS: "WMS",
+    /** WFS 图层。 */
+    WFS: "WFS",
+    /** 自定义图层。 */
+    CUSTOM: "CUSTOM"
+};
+
+
+/**
+ * @enum UGCLayerType
+ * @memberOf SuperMap
+ * @description  UGC图层类型。
+ * @type {string}
+ */
+var UGCLayerType = SuperMap.UGCLayerType = {
+    /** 专题图层。 */
+    THEME: "THEME",
+    /** 矢量图层。 */
+    VECTOR: "VECTOR",
+    /** 栅格图层。。 */
+    GRID: "GRID",
+    /** 影像图层。 */
+    IMAGE: "IMAGE"
+};
+
+
+/**
+ * @enum StatisticMode
+ * @memberOf SuperMap
+ * @description  字段统计方法类型。
+ * @type {string}
+ */
+var StatisticMode = SuperMap.StatisticMode = {
+    /** 统计所选字段的平均值。 */
+    AVERAGE: "AVERAGE",
+    /** 统计所选字段的最大值。 */
+    MAX: "MAX",
+    /** 统计所选字段的最小值。 */
+    MIN: "MIN",
+    /** 统计所选字段的标准差 */
+    STDDEVIATION: "STDDEVIATION",
+    /** 统计所选字段的总和。 */
+    SUM: "SUM",
+    /** 统计所选字段的方差。 */
+    VARIANCE: "VARIANCE"
+};
+
+
+/**
+ * @enum PixelFormat
+ * @memberOf SuperMap
+ * @description  栅格与影像数据存储的像素格式枚举。
+ * @type {string}
+ */
+var PixelFormat = SuperMap.PixelFormat = {
+    /** 每个像元用16个比特(即2个字节)表示。 */
+    BIT16: "BIT16",
+    /** 每个像元用32个比特(即4个字节)表示。 */
+    BIT32: "BIT32",
+    /** 每个像元用64个比特(即8个字节)表示,只提供给栅格数据集使用。 */
+    BIT64: "BIT64",
+    /** 每个像元用4个字节来表示,只提供给栅格数据集使用。 */
+    SINGLE: "SINGLE",
+    /** 每个像元用8个字节来表示,只提供给栅格数据集使用。 */
+    DOUBLE: "DOUBLE",
+    /** 每个像元用1个比特表示。 */
+    UBIT1: "UBIT1",
+    /** 每个像元用4个比特来表示。 */
+    UBIT4: "UBIT4",
+    /** 每个像元用8个比特(即1个字节)来表示。 */
+    UBIT8: "UBIT8",
+    /** 每个像元用24个比特(即3个字节)来表示。 */
+    UBIT24: "UBIT24",
+    /** 每个像元用32个比特(即4个字节)来表示。 */
+    UBIT32: "UBIT32"
+};
+
+
+/**
+ * @enum SearchMode
+ * @memberOf SuperMap
+ * @description  内插时使用的样本点的查找方式枚举
+ * @type {string}
+ */
+var SearchMode = SuperMap.SearchMode = {
+    /** 使用 KDTREE 的固定点数方式查找参与内插分析的点。 */
+    KDTREE_FIXED_COUNT: "KDTREE_FIXED_COUNT",
+    /** 使用 KDTREE 的定长方式查找参与内插分析的点。 */
+    KDTREE_FIXED_RADIUS: "KDTREE_FIXED_RADIUS",
+    /** 不进行查找,使用所有的输入点进行内插分析。 */
+    NONE: "NONE",
+    /** 使用 QUADTREE 方式查找参与内插分析的点,仅对样条(RBF)插值和普通克吕金(Kriging)有用。 */
+    QUADTREE: "QUADTREE"
+};
+
+
+/**
+ * @enum InterpolationAlgorithmType
+ * @memberOf SuperMap
+ * @description  插值分析的算法的类型
+ * @type {string}
+ */
+var InterpolationAlgorithmType = SuperMap.InterpolationAlgorithmType = {
+    /** 普通克吕金插值法。 */
+    KRIGING: "KRIGING",
+    /** 简单克吕金插值法。 */
+    SimpleKriging: "SimpleKriging",
+    /** 泛克吕金插值法。 */
+    UniversalKriging: "UniversalKriging"
+};
+
+
+/**
+ * @enum VariogramMode
+ * @memberOf SuperMap
+ * @description  克吕金(Kriging)插值时的半变函数类型枚举
+ * @type {string}
+ */
+var VariogramMode = SuperMap.VariogramMode = {
+    /** 指数函数。 */
+    EXPONENTIAL: "EXPONENTIAL",
+    /** 高斯函数。 */
+    GAUSSIAN: "GAUSSIAN",
+    /** 球型函数。 */
+    SPHERICAL: "SPHERICAL"
+};
+
+
+/**
+ * @enum Exponent
+ * @memberOf SuperMap
+ * @description  定义了泛克吕金(UniversalKriging)插值时样点数据中趋势面方程的阶数
+ * @type {string}
+ */
+var Exponent = SuperMap.Exponent = {
+    /** 阶数为1。 */
+    EXP1: "EXP1",
+    /** 阶数为2。 */
+    EXP2: "EXP2"
+};
+
+
+/**
+ * @enum ClientType
+ * @memberOf SuperMap
+ * @description token申请的客户端标识类型
+ * @type {string}
+ */
+var ClientType = SuperMap.ClientType = {
+    /** 指定的 IP 地址。 */
+    IP: "IP",
+    /** 指定的 URL。 */
+    REFERER: "Referer",
+    /** 发送申请令牌请求的客户端 IP。 */
+    REQUESTIP: "RequestIP",
+    /** 不做任何验证。 */
+    NONE: "NONE",
+    /** SERVER。 */
+    SERVER: "SERVER",
+    /** WEB。 */
+    WEB: "WEB"
+};
+
+
+/**
+ * @enum ChartType
+ * @memberOf SuperMap
+ * @description 客户端专题图图表类型
+ * @type {string}
+ */
+var ChartType = SuperMap.ChartType = {
+    /** 柱状图。 */
+    BAR: "Bar",
+    /** 三维柱状图。 */
+    BAR3D: "Bar3D",
+    /** 圆形图。 */
+    CIRCLE: "Circle",
+    /** 饼图。 */
+    PIE: "Pie",
+    /** 散点图。 */
+    POINT: "Point",
+    /** 折线图。 */
+    LINE: "Line",
+    /** 环状图。 */
+    RING: "Ring"
+};
+
+
+/**
+ * @enum ClipAnalystMode
+ * @memberOf SuperMap
+ * @description  裁剪分析模式
+ * @type {string}
+ */
+var ClipAnalystMode = SuperMap.ClipAnalystMode = {
+    /** CLIP。 */
+    CLIP: "clip",
+    /** INTERSECT。 */
+    INTERSECT: "intersect"
+};
+
+/**
+ * @enum AnalystAreaUnit
+ * @memberOf SuperMap
+ * @description 分布式分析面积单位
+ * @type {string}
+ */
+var AnalystAreaUnit = SuperMap.AnalystAreaUnit = {
+    /** 平方米。 */
+    "SQUAREMETER": "SquareMeter",
+    /** 平方千米。 */
+    "SQUAREKILOMETER": "SquareKiloMeter",
+    /** 公顷。 */
+    "HECTARE": "Hectare",
+    /** 公亩。 */
+    "ARE": "Are",
+    /** 英亩。 */
+    "ACRE": "Acre",
+    /** 平方英尺。 */
+    "SQUAREFOOT": "SquareFoot",
+    /** 平方码。 */
+    "SQUAREYARD": "SquareYard",
+    /** 平方英里。 */
+    "SQUAREMILE": "SquareMile"
+};
+
+/**
+ * @enum AnalystSizeUnit
+ * @memberOf SuperMap
+ * @description 分布式分析单位
+ * @type {string}
+ */
+var AnalystSizeUnit = SuperMap.AnalystSizeUnit = {
+    /** 米。 */
+    "METER": "Meter",
+    /** 千米。 */
+    "KILOMETER": "Kilometer",
+    /** 码。 */
+    "YARD": "Yard",
+    /** 英尺。 */
+    "FOOT": "Foot",
+    /** 英里。 */
+    "MILE": "Mile"
+};
+
+
+/**
+ * @enum StatisticAnalystMode
+ * @memberOf SuperMap
+ * @description 分布式分析统计模式
+ * @type {string}
+ */
+var StatisticAnalystMode = SuperMap.StatisticAnalystMode = {
+    /** 统计所选字段的最大值。 */
+    "MAX": "max",
+    /** 统计所选字段的最小值。 */
+    "MIN": "min",
+    /** 统计所选字段的平均值。 */
+    "AVERAGE": "average",
+    /** 统计所选字段的总和。 */
+    "SUM": "sum",
+    /** 统计所选字段的方差。 */
+    "VARIANCE": "variance",
+    /** 统计所选字段的标准差 */
+    "STDDEVIATION": "stdDeviation"
+};
+
+/**
+ * @enum SummaryType
+ * @memberOf SuperMap
+ * @description 分布式分析聚合类型
+ * @type {string}
+ */
+var SummaryType = SuperMap.SummaryType = {
+    /** 格网聚合。 */
+    "SUMMARYMESH": "SUMMARYMESH",
+    /** 多边形聚合。 */
+    "SUMMARYREGION": "SUMMARYREGION"
+};
+
+/**
+ * @enum TopologyValidatorRule
+ * @memberOf SuperMap
+ * @description  拓扑检查模式枚举。该类定义了拓扑检查操作模式常量。
+ * @type {string}
+ */
+var TopologyValidatorRule = SuperMap.TopologyValidatorRule = {
+    /** 面内无重叠,用于对面数据进行拓扑检查。 */
+    REGIONNOOVERLAP: "REGIONNOOVERLAP",
+    /** 面与面无重叠,用于对面数据进行拓扑检查。 */
+    REGIONNOOVERLAPWITH: "REGIONNOOVERLAPWITH",
+    /** 面被面包含,用于对面数据进行拓扑检查。 */
+    REGIONCONTAINEDBYREGION: "REGIONCONTAINEDBYREGION",
+    /** 面被面覆盖,用于对面数据进行拓扑检查。 */
+    REGIONCOVEREDBYREGION: "REGIONCOVEREDBYREGION",
+    /** 线与线无重叠,用于对线数据进行拓扑检查。 */
+    LINENOOVERLAP: "LINENOOVERLAP",
+    /** 线内无重叠,用于对线数据进行拓扑检查。 */
+    LINENOOVERLAPWITH: "LINENOOVERLAPWITH",
+    /** 点不相同,用于对点数据进行拓扑检查。 */
+    POINTNOIDENTICAL: "POINTNOIDENTICAL"
+};
+
+
+/**
+ * @enum AggregationType
+ * @memberOf SuperMap
+ * @description  聚合查询枚举类,该类定义了Es数据服务中聚合查询模式常量
+ * @type {string}
+ */
+var AggregationType = SuperMap.AggregationType = {
+    /** 格网聚合类型。 */
+    GEOHASH_GRID: "geohash_grid",
+    /** 过滤聚合类型。 */
+    FILTER: "filter"
+};
+
+
+/**
+ * @enum AggregationType
+ * @memberOf SuperMap
+ * @description  聚合查询中filter查询枚举类
+ * @type {string}
+ */
+var AggregationQueryBuilderType = SuperMap.AggregationQueryBuilderType = {
+    /** 范围查询。 */
+    GEO_BOUNDING_BOX: "geo_bounding_box"
+}
+
+
+/**
+ * @enum GetFeatureMode
+ * @memberOf SuperMap
+ * @description feature 查询方式。
+ * @type {string}
+ */
+var GetFeatureMode = SuperMap.GetFeatureMode = {
+    /** 通过范围查询来获取要素。 */
+    BOUNDS: "BOUNDS",
+    /** 通过几何对象的缓冲区来获取要素。 */
+    BUFFER: "BUFFER",
+    /** 通过 ID 来获取要素。 */
+    ID: "ID",
+    /** 通过空间查询模式来获取要素。 */
+    SPATIAL: "SPATIAL",
+    /** 通过 SQL 查询来获取要素。 */
+    SQL: 'SQL'
+}
+
+
+/**
+ * @enum RasterFunctionType
+ * @memberOf SuperMap
+ * @description 栅格分析方法。
+ * @type {string}
+ */
+var RasterFunctionType = SuperMap.RasterFunctionType = {
+    /** 归一化植被指数。 */
+    NDVI: "NDVI",
+    /** 阴影面分析。 */
+    HILLSHADE: "HILLSHADE"
+}
+
+
+/**
+ * @enum ResourceType
+ * @memberOf SuperMap
+ * @description iportal资源类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+var ResourceType = SuperMap.ResourceType = {
+    /** 地图。 */
+    MAP: "MAP",
+    /** 服务。 */
+    SERVICE: "SERVICE",
+    /** 场景。 */
+    SCENE: "SCENE",
+    /** 数据。 */
+    DATA: "DATA",
+    /** 洞察。 */
+    INSIGHTS_WORKSPACE: "INSIGHTS_WORKSPACE",
+    /** 大屏。 */
+    MAP_DASHBOARD: "MAP_DASHBOARD"
+}
+
+
+/**
+ * @enum OrderBy
+ * @memberOf SuperMap
+ * @description iportal资源排序字段。
+ * @version 10.0.1
+ * @type {string}
+ */
+var OrderBy = SuperMap.OrderBy = {
+    /** 按更新时间排序 */
+    UPDATETIME: "UPDATETIME",
+    /** 按热度(可能是访问量、下载量)排序 */
+    HEATLEVEL: "HEATLEVEL",
+    /** 按相关性排序 */
+    RELEVANCE: "RELEVANCE"
+}
+
+
+/**
+ * @enum OrderType
+ * @memberOf SuperMap
+ * @description iportal资源升序还是降序过滤
+ * @version 10.0.1
+ * @type {string}
+ */
+var OrderType = SuperMap.OrderType = {
+    /** 升序 */
+    ASC: "ASC",
+    /** 降序 */
+    DESC: "DESC"
+}
+
+
+/**
+ * @enum SearchType
+ * @memberOf SuperMap
+ * @description iportal资源查询的范围进行过滤
+ * @version 10.0.1
+ * @type {string}
+ */
+var SearchType = SuperMap.SearchType = {
+    /** 公开资源。 */
+    PUBLIC: "PUBLIC",
+    /** 我的资源。 */
+    MY_RES: "MY_RES",
+    /** 我的群组资源。 */
+    MYGROUP_RES: "MYGROUP_RES",
+    /** 我的部门资源。 */
+    MYDEPARTMENT_RES: "MYDEPARTMENT_RES",
+    /** 分享给我的资源。 */
+    SHARETOME_RES: "SHARETOME_RES"
+}
+
+
+/**
+ * @enum AggregationTypes
+ * @memberOf SuperMap
+ * @description iportal资源聚合查询的类型
+ * @version 10.0.1
+ * @type {string}
+ */
+var AggregationTypes = SuperMap.AggregationTypes = {
+    /** 标签 */
+    TAG: "TAG",
+    /** 资源类型 */
+    TYPE: "TYPE"
+}
+
+
+/**
+ * @enum PermissionType
+ * @memberOf SuperMap
+ * @description iportal资源权限类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+var PermissionType = SuperMap.PermissionType = {
+    /** 可检索 */
+    SEARCH:"SEARCH",
+    /** 可查看 */
+    READ: "READ",
+    /** 可编辑 */
+    READWRITE: "READWRITE",
+    /** 可删除 */
+    DELETE: "DELETE",
+    /** 可下载,包括可读、可检索 */
+    DOWNLOAD:"DOWNLOAD"
+}
+
+
+/**
+ * @enum EntityType
+ * @memberOf SuperMap
+ * @description iportal资源实体类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+var EntityType = SuperMap.EntityType = {
+    /** 部门 */
+    DEPARTMENT: "DEPARTMENT",
+    /** 用户组 */
+    GROUP: "GROUP",
+    /** 群组 */
+    IPORTALGROUP: "IPORTALGROUP",
+    /** 角色 */
+    ROLE: "ROLE",
+    /** 用户 */
+    USER: "USER"
+}
+
+
+/**
+ * @enum DataItemType
+ * @memberOf SuperMap
+ * @description iportal数据类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+var DataItemType = SuperMap.DataItemType = {
+    /** 工作空间 sxwu, smwu, sxw, smw */
+    WORKSPACE: "WORKSPACE",
+    /** udb 数据源 */
+    UDB: "UDB",
+    /** shp空间数据 */
+    SHP: "SHP",
+    /** excel数据 */
+    EXCEL: "EXCEL",
+    /** csv数据 */
+    CSV: "CSV",
+    /** geojson数据。 */
+    GEOJSON: "GEOJSON",
+    /** smtiles */
+    SMTILES: "SMTILES",
+    /** svtiles */
+    SVTILES: "SVTILES",
+    /** mbtiles */
+    MBTILES: "MBTILES",
+    /** tpk */
+    TPK: "TPK",
+    /** ugc v5 */
+    UGCV5: "UGCV5",
+    /** UGCV5_MVT  */
+    UGCV5_MVT: "UGCV5_MVT",
+    /** json数据  */
+    JSON: "JSON"
+}
+
+
+/**
+ * @enum WebExportFormatType
+ * @memberOf SuperMap
+ * @description Web 打印输出的格式。
+ * @version 10.0.1
+ * @type {string}
+ */
+var WebExportFormatType = SuperMap.WebExportFormatType = {
+    /** png */
+    PNG: "PNG",
+    /** pdf */
+    PDF: "PDF"
+}
+
+
+/**
+ * @enum WebScaleOrientationType
+ * @memberOf SuperMap
+ * @description Web 比例尺的方位样式。
+ * @version 10.0.1
+ * @type {string}
+ */
+var WebScaleOrientationType = SuperMap.WebScaleOrientationType = {
+    /** horizontal labels below */
+    HORIZONTALLABELSBELOW: "HORIZONTALLABELSBELOW",
+    /** horizontal labels above */
+    HORIZONTALLABELSABOVE: "HORIZONTALLABELSABOVE",
+    /** vertical labels left */
+    VERTICALLABELSLEFT: "VERTICALLABELSLEFT",
+    /** vertical labels right */
+    VERTICALLABELSRIGHT: "VERTICALLABELSRIGHT"
+}
+
+
+/**
+ * @enum WebScaleType
+ * @memberOf SuperMap
+ * @description Web 比例尺的样式。
+ * @version 10.0.1
+ * @type {string}
+ */
+var WebScaleType = SuperMap.WebScaleType = {
+    /** line */
+    LINE: "LINE",
+    /** bar */
+    BAR: "BAR",
+    /** bar sub */
+    BAR_SUB: "BAR_SUB"
+}
+
+
+/**
+ * @enum WebScaleUnit
+ * @memberOf SuperMap
+ * @description Web 比例尺的单位制。
+ * @version 10.0.1
+ * @type {string}
+ */
+var WebScaleUnit = SuperMap.WebScaleUnit = {
+    /** meter */
+    METER: "METER",
+    /** foot */
+    FOOT: "FOOT",
+    /** degrees */
+    DEGREES: "DEGREES"
+}
+
+
+;// CONCATENATED MODULE: ./src/common/iServer/DatasourceConnectionInfo.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+ // eslint-disable-line no-unused-vars
+
+/**
+ * @class SuperMap.DatasourceConnectionInfo
+ * @category  iServer Data
+ * @classdesc 数据源连接信息类。该类包括了进行数据源连接的所有信息,如所要连接的服务器名称、数据库名称、用户名以及密码等。
+ *            当保存为工作空间时, 工作空间中的数据源的连接信息都将存储到工作空间文件中。对于不同类型的数据源,其连接信息有所区别。
+ *            所以在使 用该类所包含的成员时,请注意该成员所适用的数据源类型。对于从数据源对象中返回的数据连接信息对象,只有 connect 方法可以被修改,
+ *            其他内容是不可以被修改的。对于用户创建的数据源连接信息对象,其内容都可以修改。
+ * @category iServer Data
+ * @param {Object} options - 参数。 
+ * @param {string} options.alias - 数据源别名。 
+ * @param {string} options.dataBase - 数据源连接的数据库名。 
+ * @param {boolean} [options.connect] - 数据源是否自动连接数据。 
+ * @param {string} [options.driver] - 使用 ODBC(Open Database Connectivity,开放数据库互连)的数据库的驱动程序名。 
+ * @param {SuperMap.EngineType} [options.engineType] - 数据源连接的引擎类型。 
+ * @param {boolean} [options.exclusive] - 是否以独占方式打开数据源。 
+ * @param {boolean} [options.OpenLinkTable] - 是否把数据库中的其他非 SuperMap 数据表作为 LinkTable 打开。 
+ * @param {string} [options.password] - 登录数据源连接的数据库或文件的密码。 
+ * @param {boolean} [options.readOnly] - 是否以只读方式打开数据源。 
+ * @param {string} [options.server] - 数据库服务器名或 SDB 文件名。 
+ * @param {string} [options.user] - 登录数据库的用户名。 
+ */
+class DatasourceConnectionInfo {
+
+
+    constructor(options) {
+
+        /**
+         * @member {string} SuperMap.DatasourceConnectionInfo.prototype.alias
+         * @description 数据源别名。
+         */
+        this.alias = null;
+
+        /**
+         * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.connect]
+         * @description 数据源是否自动连接数据。
+         */
+        this.connect = null;
+
+        /**
+         * @member {string} SuperMap.DatasourceConnectionInfo.prototype.dataBase
+         * @description 数据源连接的数据库名。
+         */
+        this.dataBase = null;
+
+        /**
+         * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.driver]
+         * @description 使用 ODBC(Open Database Connectivity,开放数据库互连) 的数据库的驱动程序名。
+         * 其中,对于 SQL Server 数据库与 iServer 发布的 WMTS 服务,此为必设参数。
+         * 对于 SQL Server 数据库,它使用 ODBC 连接,所设置的驱动程序名为 "SQL Server" 或 "SQL Native Client";
+         * 对于 iServer 发布的 WMTS 服务,设置的驱动名称为 "WMTS"。
+         */
+        this.driver = null;
+
+        /**
+         * @member {SuperMap.EngineType} [SuperMap.DatasourceConnectionInfo.prototype.engineType]
+         * @description 数据源连接的引擎类型。
+         */
+        this.engineType = null;
+
+        /**
+         * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.exclusive]
+         * @description 是否以独占方式打开数据源。
+         */
+        this.exclusive = null;
+
+        /**
+         * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.OpenLinkTable]
+         * @description 是否把数据库中的其他非 SuperMap 数据表作为 LinkTable 打开。
+         */
+        this.OpenLinkTable = null;
+
+        /**
+         * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.password]
+         * @description 登录数据源连接的数据库或文件的密码。
+         */
+        this.password = null;
+
+        /**
+         * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.readOnly]
+         * @description 是否以只读方式打开数据源。
+         */
+        this.readOnly = null;
+
+        /**
+         * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.server]
+         * @description 数据库服务器名、文件名或服务地址。
+         * 1.对于 SDB 和 UDB 文件,为其文件的绝对路径。注意:当绝对路径的长度超过 UTF-8 编码格式的 260 字节长度,该数据源无法打开。
+         * 2.对于 Oracle 数据库,其服务器名为其 TNS 服务名称。
+         * 3.对于 SQL Server 数据库,其服务器名为其系统的 DSN(Database Source Name) 名称。
+         * 4.对于 PostgreSQL 数据库,其服务器名为 “IP:端口号”,默认的端口号是 5432。
+         * 5.对于 DB2 数据库,已经进行了编目,所以不需要进行服务器的设置。
+         * 6.对于 Kingbase 数据库,其服务器名为其 IP 地址。
+         * 7.对于 GoogleMaps 数据源,其服务器地址,默认设置为 “{@link http://maps.google.com}”,且不可更改。
+         * 8.对于 SuperMapCould 数据源,为其服务地址。
+         * 9.对于 MAPWORLD 数据源,为其服务地址,默认设置为 “{@link http://www.tianditu.cn}”,且不可更改。
+         * 10.对于 OGC 和 REST 数据源,为其服务地址。
+         */
+        this.server = null;
+
+        /**
+         * @member {string} SuperMap.DatasourceConnectionInfo.prototype.user
+         * @description 登录数据库的用户名。
+         */
+        this.user = null;
+
+        if (options) {
+            Util.extend(this, options);
+        }
+
+        this.CLASS_NAME = "SuperMap.DatasourceConnectionInfo";
+    }
+
+    /**
+     * @function SuperMap.DatasourceConnectionInfo.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        var me = this;
+        me.alias = null;
+        me.connect = null;
+        me.dataBase = null;
+        me.driver = null;
+        me.engineType = null;
+        me.exclusive = null;
+        me.OpenLinkTable = null;
+        me.password = null;
+        me.readOnly = null;
+        me.server = null;
+        me.user = null;
+    }
+
+}
+
+SuperMap.DatasourceConnectionInfo = DatasourceConnectionInfo;
+;// CONCATENATED MODULE: ./src/common/iServer/OutputSetting.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.OutputSetting
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析输出类型设置类。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.DatasourceConnectionInfo} options.datasourceInfo - 数据源连接信息。
+ * @param {string} [options.datasetName='analystResult'] - 结果数据集名称。
+ * @param {SuperMap.OutputType} [options.type=SuperMap.OutputType.UDB] - 输出类型。
+ * @param {string} [options.outputPath] - 分析结果输出路径。
+ */
+class OutputSetting {
+
+    constructor(options) {
+
+        /**
+         * @member {SuperMap.OutputType} SuperMap.OutputSetting.prototype.type
+         * @description 分布式分析的输出类型。
+         */
+        this.type = OutputType.UDB;
+
+        /**
+         * @member {string} [SuperMap.OutputSetting.prototype.datasetName='analystResult']
+         * @description 分布式分析的输出结果数据集名称。
+         */
+        this.datasetName = "analystResult";
+
+        /**
+         * @member {SuperMap.DatasourceConnectionInfo} SuperMap.OutputSetting.prototype.datasourceInfo
+         * @description 分布式分析的输出结果数据源连接信息。
+         */
+        this.datasourceInfo = null;
+
+        /**
+         * @member {string} [SuperMap.OutputSetting.prototype.outputPath]
+         * @description 分布式分析的分析结果输出路径。
+         */
+        this.outputPath = "";
+
+        Util.extend(this, options);
+        this.CLASS_NAME = "SuperMap.OutputSetting";
+    }
+
+    /**
+     * @function SuperMap.OutputSetting.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        var me = this;
+        me.type = null;
+        me.datasetName = null;
+        me.outputPath = null;
+        if (me.datasourceInfo instanceof DatasourceConnectionInfo) {
+            me.datasourceInfo.destroy();
+            me.datasourceInfo = null;
+        }
+    }
+
+}
+
+SuperMap.OutputSetting = OutputSetting;
+;// CONCATENATED MODULE: ./src/common/iServer/MappingParameters.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.MappingParameters
+ * @category  iServer ProcessingService
+ * @classdesc 分析后结果可视化的参数类。
+ * @param {Object} options - 参数。
+ * @param {Array.<SuperMap.ThemeGridRangeItem>} [options.items] - 栅格分段专题图子项数组。
+ * @param {number} [options.numericPrecision=1] - 精度,此字段用于设置分析结果标签专题图中标签数值的精度,如“1”表示精确到小数点的后一位。
+ * @param {SuperMap.RangeMode} [options.rangeMode=SuperMap.RangeMode.EQUALINTERVAL] - 专题图分段模式。
+ * @param {number} [options.rangeCount] - 专题图分段个数。
+ * @param {SuperMap.ColorGradientType} [options.colorGradientType=SuperMap.ColorGradientType.YELLOW_RED] - 专题图颜色渐变模式。
+ */
+class MappingParameters {
+
+    constructor(options) {
+
+        /**
+         * @member {Array.<SuperMap.ThemeGridRangeItem>} [SuperMap.MappingParameters.prototype.items]
+         * @description 栅格分段专题图子项数组。
+         */
+        this.items = null;
+
+        /**
+         * @member {number} [SuperMap.MappingParameters.prototype.numericPrecision=1]
+         * @description 精度,此字段用于设置分析结果标签专题图中标签数值的精度,如“1”表示精确到小数点的后一位。
+         */
+        this.numericPrecision = 1;
+
+        /**
+         * @member {SuperMap.RangeMode} [SuperMap.MappingParameters.prototype.RangeMode=SuperMap.RangeMode.EQUALINTERVAL]
+         * @description 专题图分段模式。
+         */
+        this.rangeMode = RangeMode.EQUALINTERVAL;
+
+        /**
+         * @member {number} [SuperMap.MappingParameters.prototype.rangeCount]
+         * @description 专题图分段个数。
+         */
+        this.rangeCount = "";
+
+        /**
+         * @member {SuperMap.ColorGradientType} [SuperMap.MappingParameters.prototype.colorGradientType=SuperMap.ColorGradientType.YELLOW_RED]
+         * @description 专题图颜色渐变模式。
+         */
+        this.colorGradientType = ColorGradientType.YELLOW_RED;
+
+        Util.extend(this, options);
+        this.CLASS_NAME = "SuperMap.MappingParameters";
+    }
+
+    /**
+     * @function SuperMap.MappingParameters.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        var me = this;
+        if (me.items) {
+            if (me.items.length > 0) {
+                for (var item in me.items) {
+                    me.items[item].destroy();
+                    me.items[item] = null;
+                }
+            }
+            me.items = null;
+        }
+        me.numericPrecision = null;
+        me.rangeMode = null;
+        me.rangeCount = null;
+        me.colorGradientType = null;
+    }
+
+}
+
+SuperMap.MappingParameters = MappingParameters;
+;// CONCATENATED MODULE: ./src/common/iServer/KernelDensityJobParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.KernelDensityJobParameter
+ * @category iServer ProcessingService DensityAnalyst
+ * @classdesc 密度分析任务参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.datasetName - 数据集名。 
+ * @param {string} options.fields - 权重索引。 
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。 
+ * @param {number} [options.resolution=80] - 分辨率。 
+ * @param {number} [options.method=0] - 分析方法。 
+ * @param {number} [options.meshType=0] - 分析类型。 
+ * @param {number} [options.radius=300] - 分析的影响半径。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class KernelDensityJobParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.KernelDensityJobParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {SuperMap.Bounds|L.Bounds|ol.extent} [SuperMap.KernelDensityJobParameter.prototype.query]
+         * @description 分析范围。 
+         */
+        this.query = "";
+
+        /**
+         * @member {number} [SuperMap.KernelDensityJobParameter.prototype.resolution=80]
+         * @description 网格大小。
+         */
+        this.resolution = 80;
+
+        /**
+         * @member {number} [SuperMap.KernelDensityJobParameter.prototype.method=0]
+         * @description 分析方法。
+         */
+        this.method = 0;
+
+        /**
+         * @member {number} [SuperMap.KernelDensityJobParameter.prototype.meshType=0]
+         * @description 分析类型。
+         */
+        this.meshType = 0;
+
+        /**
+         * @member {string} SuperMap.KernelDensityJobParameter.prototype.fields
+         * @description 权重索引。
+         */
+        this.fields = "";
+
+        /**
+         * @member {number} [SuperMap.KernelDensityJobParameter.prototype.radius=300]
+         * @description 分析的影响半径。
+         */
+        this.radius = 300;
+
+        /**
+         * @member {SuperMap.AnalystSizeUnit} [SuperMap.KernelDensityJobParameter.prototype.meshSizeUnit=SuperMap.AnalystSizeUnit.METER]
+         * @description 网格大小单位。
+         */
+        this.meshSizeUnit = AnalystSizeUnit.METER;
+
+        /**
+         * @member {SuperMap.AnalystSizeUnit} [SuperMap.KernelDensityJobParameter.prototype.radiusUnit=SuperMap.AnalystSizeUnit.METER]
+         * @description 搜索半径单位。
+         */
+        this.radiusUnit = AnalystSizeUnit.METER;
+
+        /**
+         * @member {SuperMap.AnalystAreaUnit} [SuperMap.KernelDensityJobParameter.prototype.areaUnit=SuperMap.AnalystAreaUnit.SQUAREMILE]
+         * @description 面积单位。
+         */
+        this.areaUnit = AnalystAreaUnit.SQUAREMILE;
+
+        /**
+         * @member {SuperMap.OutputSetting} SuperMap.KernelDensityJobParameter.prototype.output
+         * @description 输出参数设置类
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.KernelDensityJobParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.KernelDensityJobParameter";
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.query = null;
+        this.resolution = null;
+        this.method = null;
+        this.radius = null;
+        this.meshType = null;
+        this.fields = null;
+        this.meshSizeUnit = null;
+        this.radiusUnit = null;
+        this.areaUnit = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters) {
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobParameter.toObject
+     * @param {SuperMap.KernelDensityJobParameter} kernelDensityJobParameter - 密度分析任务参数类。
+     * @param {SuperMap.KernelDensityJobParameter} tempObj - 密度分析任务参数对象。
+     * @description 将密度分析任务参数对象转换为 JSON 对象。
+     * @returns JSON 对象。
+     */
+    static toObject(kernelDensityJobParameter, tempObj) {
+        for (var name in kernelDensityJobParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = kernelDensityJobParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = kernelDensityJobParameter[name];
+                continue;
+            }
+
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            if (name === 'query' && kernelDensityJobParameter[name]) {
+                tempObj['analyst'][name] = kernelDensityJobParameter[name].toBBOX();
+            } else {
+                tempObj['analyst'][name] = kernelDensityJobParameter[name];
+            }
+            if (name === 'mappingParameters') {
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = kernelDensityJobParameter[name];
+            }
+        }
+    }
+}
+SuperMap.KernelDensityJobParameter = KernelDensityJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SingleObjectQueryJobsParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.SingleObjectQueryJobsParameter
+ * @category  iServer ProcessingService Query
+ * @classdesc 单对象空间查询分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetQuery - 查询对象所在的数据集名称。
+ * @param {SuperMap.SpatialQueryMode} [options.mode=SuperMap.SpatialQueryMode.CONTAIN] - 空间查询模式。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class SingleObjectQueryJobsParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.datasetQuery
+         * @description 查询对象所在的数据集名称。
+         */
+        this.datasetQuery = "";
+
+        /**
+         * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.geometryQuery
+         * @description 查询对象所在的几何对象。
+         */
+        this.geometryQuery = "";
+
+        /**
+         * @member {SuperMap.SpatialQueryMode} [SuperMap.SingleObjectQueryJobsParameter.prototype.mode=SuperMap.SpatialQueryMode.CONTAIN]
+         * @description 空间查询模式 。
+         */
+        this.mode = SpatialQueryMode.CONTAIN;
+
+        /**
+         * @member {SuperMap.OutputSetting} [SuperMap.SingleObjectQueryJobsParameter.prototype.output]
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.SingleObjectQueryJobsParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.SingleObjectQueryJobsParameter";
+    }
+
+    /**
+     * @function SuperMap.SingleObjectQueryJobsParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.datasetQuery = null;
+        this.geometryQuery = null;
+        this.mode = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters){
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.SingleObjectQueryJobsParameter.toObject
+     * @param {Object} singleObjectQueryJobsParameter - 单对象空间查询分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成单对象空间查询分析任务对象。
+     */
+    static toObject(singleObjectQueryJobsParameter, tempObj) {
+        for (var name in singleObjectQueryJobsParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = singleObjectQueryJobsParameter[name];
+                continue;
+            }
+            if (name === "output"){
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = singleObjectQueryJobsParameter[name];
+                continue;
+            }
+            
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            tempObj['analyst'][name] = singleObjectQueryJobsParameter[name];
+            if(name === 'mappingParameters'){
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = singleObjectQueryJobsParameter[name];
+            }
+        }
+    }
+
+}
+
+SuperMap.SingleObjectQueryJobsParameter = SingleObjectQueryJobsParameter;
+
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryAttributesJobsParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryAttributesJobsParameter
+ * @category  iServer ProcessingService SummaryAttributes
+ * @classdesc 属性汇总分析任务参数类
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.groupField - 分组字段。
+ * @param {string} options.attributeField - 属性字段。
+ * @param {string} options.statisticModes - 统计模式。
+ * @param {SuperMap.OutputSetting} [options.output] -输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class SummaryAttributesJobsParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.datasetName
+         * @description 汇总数据集名称。
+         */
+        this.datasetName = "";
+        /**
+         * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.groupField
+         * @description 分组字段。
+         */
+        this.groupField = "";
+        /**
+         * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.attributeField
+         * @description 属性字段。
+         */
+        this.attributeField = "";
+        /**
+         * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.statisticModes
+         * @description 属性汇总统计模式。
+         */
+        this.statisticModes = "";
+        /**
+         * @member {SuperMap.OutputSetting} SuperMap.SummaryAttributesJobsParameter.prototype.output
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.SummaryAttributesJobsParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+        this.CLASS_NAME = "SuperMap.SummaryAttributesJobsParameter";
+    }
+
+    /**
+     * @function SuperMap.SummaryAttributesJobsParameter.destroy
+     * @override
+     */
+    destroy() {
+        this.datasetName = null;
+        this.groupField = null;
+        this.attributeField = null;
+        this.statisticModes = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters){
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.SummaryAttributesJobsParameter.toObject
+     * @param {Object} SummaryAttributesJobsParameter - 属性汇总任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成属性汇总分析任务对象。
+     */
+    static toObject(SummaryAttributesJobsParameter, tempObj) {
+        for (var name in SummaryAttributesJobsParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = SummaryAttributesJobsParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = SummaryAttributesJobsParameter[name];
+                continue;
+            }
+            
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            tempObj['analyst'][name] = SummaryAttributesJobsParameter[name];
+            if(name === 'mappingParameters'){
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = SummaryAttributesJobsParameter[name];
+            }
+        }
+    }
+
+}
+SuperMap.SummaryAttributesJobsParameter = SummaryAttributesJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryMeshJobParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryMeshJobParameter
+ * @category  iServer ProcessingService AggregatePoints
+ * @classdesc 点聚合分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。
+ * @param {number} options.fields - 权重索引。
+ * @param {number} [options.resolution=100] - 分辨率。
+ * @param {SuperMap.StatisticAnalystMode} [options.statisticModes=SuperMap.StatisticAnalystMode.AVERAGE] - 分析模式。
+ * @param {number} [options.meshType=0] - 分析类型。
+ * @param {SuperMap.SummaryType} [options.type=SuperMap.SummaryType.SUMMARYMESH] - 聚合类型。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class SummaryMeshJobParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.SummaryMeshJobParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.SummaryMeshJobParameter.prototype.regionDataset
+         * @description 聚合面数据集(聚合类型为多边形聚合时使用的参数)。
+         */
+        this.regionDataset = "";
+
+        /**
+         * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.SummaryMeshJobParameter.prototype.query
+         * @description 分析范围(聚合类型为网格面聚合时使用的参数)。
+         */
+        this.query = "";
+
+        /**
+         * @member {number} [SuperMap.SummaryMeshJobParameter.prototype.resolution=100]
+         * @description 分辨率(聚合类型为网格面聚合时使用的参数)。
+         */
+        this.resolution = 100;
+
+        /**
+         * @member {number} [SuperMap.SummaryMeshJobParameter.prototype.meshType=0]
+         * @description  网格面类型(聚合类型为网格面聚合时使用的参数),取值:0 或 1。
+         */
+        this.meshType = 0;
+
+        /**
+         * @member {SuperMap.StatisticAnalystMode} [SuperMap.SummaryMeshJobParameter.prototype.statisticModes=SuperMap.StatisticAnalystMode.AVERAGE]
+         * @description 统计模式。
+         */
+        this.statisticModes = StatisticAnalystMode.AVERAGE;
+
+        /**
+         * @member {number} SuperMap.SummaryMeshJobParameter.prototype.fields
+         * @description 权重字段。
+         */
+        this.fields = "";
+
+        /**
+         * @member {SuperMap.SummaryType} [SuperMap.SummaryMeshJobParameter.prototype.type=SuperMap.SummaryType.SUMMARYMESH]
+         * @description 聚合类型。
+         */
+        this.type = SummaryType.SUMMARYMESH;
+
+        /**
+         * @member {SuperMap.OutputSetting} [SuperMap.SummaryMeshJobParameter.prototype.output]
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.SummaryMeshJobParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.SummaryMeshJobParameter";
+    }
+
+
+    /**
+     * @function SuperMap.SummaryMeshJobParameter.destroy
+     * @override
+     */
+    destroy() {
+        this.datasetName = null;
+        this.query = null;
+        this.resolution = null;
+        this.statisticModes = null;
+        this.meshType = null;
+        this.fields = null;
+        this.regionDataset = null;
+        this.type = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters){
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.SummaryMeshJobParameter.toObject
+     * @param {Object} summaryMeshJobParameter - 点聚合分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成点聚合分析任务对象。
+     */
+    static toObject(summaryMeshJobParameter, tempObj) {
+        for (var name in summaryMeshJobParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = summaryMeshJobParameter[name];
+                continue;
+            }
+            if (name === "type") {
+                tempObj['type'] = summaryMeshJobParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = summaryMeshJobParameter[name];
+                continue;
+            }     
+            if (summaryMeshJobParameter.type === 'SUMMARYMESH' && name !== 'regionDataset' || summaryMeshJobParameter.type === 'SUMMARYREGION' && !contains(['meshType', 'resolution', 'query'], name)) {
+                tempObj['analyst'] = tempObj['analyst'] || {};
+                if (name === 'query' && summaryMeshJobParameter[name]) {
+                    tempObj['analyst'][name] = summaryMeshJobParameter[name].toBBOX();
+                } else {
+                    tempObj['analyst'][name] = summaryMeshJobParameter[name];
+                }
+                if(name === 'mappingParameters'){
+                    tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                    tempObj['analyst']['mappingParameters'] = summaryMeshJobParameter[name];
+                }
+            }
+
+        }
+
+        function contains(arr, obj) {
+            var i = arr.length;
+            while (i--) {
+                if (arr[i] === obj) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+}
+
+SuperMap.SummaryMeshJobParameter = SummaryMeshJobParameter;
+
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryRegionJobParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryRegionJobParameter
+ * @category  iServer ProcessingService SummaryRegion
+ * @classdesc 区域汇总分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。
+ * @param {string} [options.standardFields] - 标准属性字段名称。
+ * @param {string} [options.weightedFields] - 权重字段名称。
+ * @param {SuperMap.StatisticAnalystMode} [options.standardStatisticModes] - 标准属性字段的统计模式。standardSummaryFields 为 true 时必填。
+ * @param {SuperMap.StatisticAnalystMode} [options.weightedStatisticModes] - 权重字段的统计模式。weightedSummaryFields 为 true 时必填。 
+ * @param {boolean} [options.sumShape=true] - 是否统计长度或面积。
+ * @param {boolean} [options.standardSummaryFields=false] - 是否以标准属字段统计。
+ * @param {boolean} [options.weightedSummaryFields=false] - 是否以权重字段统计。
+ * @param {number} [options.resolution=100] - 网格大小。
+ * @param {number} [options.meshType=0] - 网格面汇总类型。
+ * @param {SuperMap.AnalystSizeUnit} [options.meshSizeUnit=SuperMap.AnalystSizeUnit.METER] - 网格大小单位。
+ * @param {SuperMap.SummaryType} [options.type=SuperMap.SummaryType.SUMMARYMESH] - 汇总类型。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class SummaryRegionJobParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+
+        /**
+         * @member {string} SuperMap.SummaryRegionJobParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.SummaryRegionJobParameter.prototype.regionDataset
+         * @description 汇总数据源(多边形汇总时用到的参数)。
+         */
+        this.regionDataset = "";
+
+        /**
+         * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.sumShape=true]
+         * @description 是否统计长度或面积。
+         */
+        this.sumShape = true;
+
+        /**
+         * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.SummaryRegionJobParameter.prototype.query
+         * @description 分析范围。
+         */
+        this.query = "";
+
+        /**
+         * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.standardSummaryFields=false]
+         * @description 是否以标准属字段统计。
+         */
+        this.standardSummaryFields = false;
+
+        /**
+         * @member {string} SuperMap.SummaryRegionJobParameter.prototype.standardFields
+         * @description 标准属性字段名称。仅支持系统字段以外的整形、长整形、浮点型的字段的名称。standardSummaryFields 为 true 时必填。 
+         */
+        this.standardFields = "";
+
+        /**
+         * @member {SuperMap.StatisticAnalystMode} SuperMap.SummaryRegionJobParameter.prototype.standardStatisticModes
+         * @description 标准属性字段的统计模式。standardSummaryFields 为 true 时必填。
+         */
+        this.standardStatisticModes = "";
+
+        /**
+         * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.weightedSummaryFields=false]
+         * @description 是否以权重字段统计。
+         */
+        this.weightedSummaryFields = false;
+
+        /**
+         * @member {string} SuperMap.SummaryRegionJobParameter.prototype.weightedFields
+         * @description 权重字段名称。仅支持系统字段以外的整形、长整形、浮点型的字段的名称。weightedSummaryFields 为 true 时必填。 
+         */
+        this.weightedFields = "";
+
+        /**
+         * @member {SuperMap.StatisticAnalystMode} SuperMap.SummaryRegionJobParameter.prototype.weightedStatisticModes
+         * @description 以权重字段统计的统计模式。权重字段的统计模式。weightedSummaryFields 为 true 时必填。 
+         */
+        this.weightedStatisticModes = "";
+
+        /**
+         * @member {number} [SuperMap.SummaryRegionJobParameter.prototype.meshType=0]
+         * @description 网格面汇总类型。
+         */
+        this.meshType = 0;
+
+        /**
+         * @member {number} [SuperMap.SummaryRegionJobParameter.prototype.resolution=100]
+         * @description 网格大小。
+         */
+        this.resolution = 100;
+
+        /**
+         * @member {SuperMap.AnalystSizeUnit} [SuperMap.SummaryRegionJobParameter.prototype.meshSizeUnit=SuperMap.AnalystSizeUnit.METER]
+         * @description 网格大小单位。
+         */
+        this.meshSizeUnit = AnalystSizeUnit.METER;
+
+        /**
+         * @member {SuperMap.SummaryType} [SuperMap.SummaryRegionJobParameter.prototype.type=SuperMap.SummaryType.SUMMARYMESH]
+         * @description 汇总类型。
+         */
+        this.type = SummaryType.SUMMARYMESH;
+
+        /**
+         * @member {SuperMap.OutputSetting} SuperMap.SummaryRegionJobParameter.prototype.output
+         * @description 输出参数设置类
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.SummaryRegionJobParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.SummaryRegionJobParameter";
+    }
+
+    /**
+     * @function SuperMap.SummaryRegionJobParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.sumShape = null;
+        this.regionDataset = null;
+        this.query = null;
+        this.standardSummaryFields = null;
+        this.standardFields = null;
+        this.standardStatisticModes = null;
+        this.weightedSummaryFields = null;
+        this.weightedFields = null;
+        this.weightedStatisticModes = null;
+        this.meshType = null;
+        this.resolution = null;
+        this.meshSizeUnit = null;
+        this.type = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters){
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.SummaryRegionJobParameter.toObject
+     * @param {Object} summaryRegionJobParameter - 矢量裁剪分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成区域汇总分析服务对象。
+     */
+    static toObject(summaryRegionJobParameter, tempObj) {
+        for (var name in summaryRegionJobParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = summaryRegionJobParameter[name];
+                continue;
+            }
+            if (name === "type") {
+                tempObj['type'] = summaryRegionJobParameter[name];
+                continue;
+            }
+            if (name === "type") {
+                tempObj['type'] = summaryRegionJobParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = summaryRegionJobParameter[name];
+                continue;
+            }
+            if (summaryRegionJobParameter.type === "SUMMARYREGION" || summaryRegionJobParameter.type === "SUMMARYMESH" && name !== "regionDataset") {
+                tempObj['analyst'] = tempObj['analyst'] || {};
+                if (name === 'query' && summaryRegionJobParameter[name]) {
+                    tempObj['analyst'][name] = summaryRegionJobParameter[name].toBBOX();
+                } else {
+                    tempObj['analyst'][name] = summaryRegionJobParameter[name];
+                }
+                if(name === 'mappingParameters'){
+                    tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                    tempObj['analyst']['mappingParameters'] = summaryRegionJobParameter[name];
+                }
+
+            }
+        }
+    }
+
+}
+
+SuperMap.SummaryRegionJobParameter = SummaryRegionJobParameter;
+
+;// CONCATENATED MODULE: ./src/common/iServer/OverlayGeoJobParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.OverlayGeoJobParameter
+ * @category iServer ProcessingService OverlayAnalyst
+ * @classdesc 叠加分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetOverlay - 叠加对象所在的数据集名称。
+ * @param {string} options.srcFields - 输入数据需要保留的字段。
+ * @param {string} [options.overlayFields] - 叠加数据需要保留的字段。对分析模式为 clip、update、erase 时,此参数无效。
+ * @param {string} [options.mode] - 叠加分析模式。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class OverlayGeoJobParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.OverlayGeoJobParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.OverlayGeoJobParameter.prototype.datasetOverlay
+         * @description 叠加对象所在的数据集名称。
+         */
+        this.datasetOverlay = "";
+
+        /**
+         * @member {string} [SuperMap.OverlayGeoJobParameter.prototype.mode]
+         * @description 叠加分析模式。
+         */
+        this.mode = "";
+
+        /**
+         * @member {string} SuperMap.OverlayGeoJobParameter.prototype.srcFields
+         * @description 输入数据需要保留的字段。
+         */
+        this.srcFields = "";
+
+        /**
+         * @member {string} SuperMap.OverlayGeoJobParameter.prototype.overlayFields
+         * @description 叠加数据需要保留的字段,对分析模式为 clip、update、erase 时,此参数无效。
+         */
+        this.overlayFields = "";
+
+        /**
+         * @member {SuperMap.OutputSetting} [SuperMap.OverlayGeoJobParameter.prototype.output]
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+        * @member {SuperMap.MappingParameters} [SuperMap.OverlayGeoJobParameter.prototype.mappingParameters]
+        * @description 分析后结果可视化的参数类。   
+        */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+        this.CLASS_NAME = "SuperMap.OverlayGeoJobParameter";
+    }
+
+    /**
+     * @function SuperMap.OverlayGeoJobParameter.destroy
+     * @override
+     */
+    destroy() {
+        this.datasetName = null;
+        this.datasetOverlay = null;
+        this.mode = null;
+        this.srcFields = null;
+        this.overlayFields = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters) {
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.OverlayGeoJobParameter.toObject
+     * @param {Object} OverlayGeoJobParameter - 点聚合分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成点聚合分析任务对象。
+     */
+    static toObject(OverlayGeoJobParameter, tempObj) {
+        for (var name in OverlayGeoJobParameter) {
+            if (name == "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = OverlayGeoJobParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = OverlayGeoJobParameter[name];
+                continue;
+            }
+            
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            tempObj['analyst'][name] = OverlayGeoJobParameter[name];
+            if(name === 'mappingParameters'){
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = OverlayGeoJobParameter[name];
+            }
+        }
+    }
+
+}
+
+SuperMap.OverlayGeoJobParameter = OverlayGeoJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/BuffersAnalystJobsParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.BuffersAnalystJobsParameter
+ * @category iServer ProcessingService BufferAnalyst
+ * @classdesc 缓冲区分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.bounds] - 分析范围(默认为全图范围)。
+ * @param {string} [options.distance='15'] - 缓冲距离,或缓冲区半径。
+ * @param {string} [options.distanceField='pickup_latitude'] - 缓冲区分析距离字段。
+ * @param {SuperMap.AnalystSizeUnit} [options.distanceUnit=SuperMap.AnalystSizeUnit.METER] - 缓冲距离单位单位。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。
+ */
+class BuffersAnalystJobsParameter {
+    constructor(options) {
+        /**
+         * @member {string} SuperMap.BuffersAnalystJobsParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = '';
+
+        /**
+         * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.BuffersAnalystJobsParameter.prototype.bounds
+         * @description 分析范围。
+         */
+        this.bounds = '';
+
+        /**
+         * @member {string} [SuperMap.BuffersAnalystJobsParameter.prototype.distance='15']
+         * @description 缓冲距离,或称为缓冲区半径。当缓冲距离字段位空时,此参数有效。
+         */
+        this.distance = '';
+
+        /**
+         * @member {string} [SuperMap.BuffersAnalystJobsParameter.prototype.distanceField='pickup_latitude']
+         * @description 缓冲距离字段。
+         */
+        this.distanceField = '';
+
+        /**
+         * @member {SuperMap.AnalystSizeUnit} [SuperMap.BuffersAnalystJobsParameter.prototype.distanceUnit=SuperMap.AnalystSizeUnit.METER]
+         * @description 缓冲距离单位。
+         */
+        this.distanceUnit = AnalystSizeUnit.METER;
+
+        /**
+         * @member {string} SuperMap.BuffersAnalystJobsParameter.prototype.dissolveField
+         * @description 融合字段,根据字段值对缓冲区结果面对象进行融合。
+         */
+        this.dissolveField = '';
+
+        /**
+         * @member {SuperMap.OutputSetting} [SuperMap.BuffersAnalystJobsParameter.prototype.output]
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.BuffersAnalystJobsParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。
+         */
+        this.mappingParameters = null;
+
+        if (!options) {
+            return this;
+        }
+        Util.extend(this, options);
+
+        this.CLASS_NAME = 'SuperMap.BuffersAnalystJobsParameter';
+    }
+
+    /**
+     * @function SuperMap.BuffersAnalystJobsParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.bounds = null;
+        this.distance = null;
+        this.distanceField = null;
+        this.distanceUnit = null;
+        this.dissolveField = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters) {
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.BuffersAnalystJobsParameter.toObject
+     * @param {SuperMap.BuffersAnalystJobsParameter} BuffersAnalystJobsParameter - 缓冲区分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成缓冲区分析任务对象。
+     */
+    static toObject(BuffersAnalystJobsParameter, tempObj) {
+        for (var name in BuffersAnalystJobsParameter) {
+            if (name === 'datasetName') {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = BuffersAnalystJobsParameter[name];
+                continue;
+            }
+            if (name === 'output') {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = BuffersAnalystJobsParameter[name];
+                continue;
+            }
+
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            if (name === 'bounds' && BuffersAnalystJobsParameter[name]) {
+                tempObj['analyst'][name] = BuffersAnalystJobsParameter[name].toBBOX();
+            } else {
+                tempObj['analyst'][name] = BuffersAnalystJobsParameter[name];
+            }
+            if (name === 'mappingParameters') {
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = BuffersAnalystJobsParameter[name];
+            }
+        }
+    }
+}
+
+SuperMap.BuffersAnalystJobsParameter = BuffersAnalystJobsParameter;
+
+;// CONCATENATED MODULE: ./src/common/iServer/TopologyValidatorJobsParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.TopologyValidatorJobsParameter
+ * @category  iServer ProcessingService TopologyValidator
+ * @classdesc 拓扑检查分析任务参数类。
+ * @param {Object} options - 必填参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetTopology -检查对象所在的数据集名称。
+ * @param {SuperMap.TopologyValidatorRule} [options.rule=SuperMap.TopologyValidatorRule.REGIONNOOVERLAP] - 拓扑检查规则。
+ * @param {string} [options.tolerance] - 容限。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class TopologyValidatorJobsParameter {
+
+    constructor(options) {
+        if (!options) {
+            return;
+        }
+        /**
+         * @member {string} SuperMap.TopologyValidatorJobsParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.TopologyValidatorJobsParameter.prototype.datasetTopology
+         * @description 拓扑检查对象所在的数据集名称。
+         */
+        this.datasetTopology = "";
+
+        /**
+         * @member {string} [SuperMap.TopologyValidatorJobsParameter.prototype.tolerance]
+         * @description 容限,指定的拓扑错误检查时使用的容限。
+         */
+        this.tolerance = "";
+
+        /**
+         * @member {SuperMap.TopologyValidatorRule} [SuperMap.TopologyValidatorJobsParameter.prototype.rule=SuperMap.TopologyValidatorRule.REGIONNOOVERLAP]
+         * @description 拓扑检查模式。
+         */
+        this.rule = TopologyValidatorRule.REGIONNOOVERLAP;
+
+        /**
+         * @member {SuperMap.OutputSetting} [SuperMap.TopologyValidatorJobsParameter.prototype.output]
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.TopologyValidatorJobsParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.TopologyValidatorJobsParameter";
+    }
+
+    /**
+     * @function SuperMap.TopologyValidatorJobsParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.datasetTopology = null;
+        this.tolerance = null;
+        this.rule = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters) {
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.TopologyValidatorJobsParameter.toObject
+     * @param {Object} TopologyValidatorJobsParameter -拓扑检查分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成拓扑检查分析任务对象。
+     */
+    static toObject(TopologyValidatorJobsParameter, tempObj) {
+        for (var name in TopologyValidatorJobsParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = TopologyValidatorJobsParameter[name];
+                continue;
+            }
+            if (name === "output") {
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = TopologyValidatorJobsParameter[name];
+                continue;
+            }
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            tempObj['analyst'][name] = TopologyValidatorJobsParameter[name];
+            if(name === 'mappingParameters'){
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = TopologyValidatorJobsParameter[name];
+            }
+        }
+    }
+}
+
+SuperMap.TopologyValidatorJobsParameter = TopologyValidatorJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/GeoCodingParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.GeoCodingParameter
+ * @category  iServer AddressMatch
+ * @classdesc 地理正向匹配参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.address - 地点关键词。 
+ * @param {number} [options.fromIndex] - 设置返回对象的起始索引值。 
+ * @param {number} [options.toIndex] - 设置返回对象的结束索引值。 
+ * @param {Array.<string>} [options.filters] - 过滤字段,限定查询区域。 
+ * @param {string} [options.prjCoordSys] - 查询结果的坐标系。 
+ * @param {number} [options.maxReturn] - 最大返回结果数。
+ */
+class GeoCodingParameter {
+    constructor(options) {
+        if (options.filters && typeof(options.filters) === 'string') {        
+            options.filters =  options.filters.split(',');
+        }
+        /**
+         * @member {string} SuperMap.GeoCodingParameter.prototype.address
+         * @description 地点关键词。
+         */
+        this.address = null;
+
+        /**
+         * @member {number} [SuperMap.GeoCodingParameter.prototype.fromIndex]
+         * @description 设置返回对象的起始索引值。
+         */
+        this.fromIndex = null;
+
+        /**
+         * @member {number} [SuperMap.GeoCodingParameter.prototype.toIndex]
+         * @description 设置返回对象的结束索引值。
+         */
+        this.toIndex = null;
+
+        /**
+         * @member {Array.<string>} [SuperMap.GeoCodingParameter.prototype.filters]
+         * @description 过滤字段,限定查询区域。
+         */
+        this.filters = null;
+
+        /**
+         * @member {string} [SuperMap.GeoCodingParameter.prototype.prjCoordSys]
+         * @description  查询结果的坐标系。
+         */
+        this.prjCoordSys = null;
+
+        /**
+         * @member {number} [SuperMap.GeoCodingParameter.prototype.maxReturn]
+         * @description 最大返回结果数。
+         */
+        this.maxReturn = null;
+        Util.extend(this, options);
+    }
+
+    /**
+     * @function SuperMap.GeoCodingParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.address = null;
+        this.fromIndex = null;
+        this.toIndex = null;
+        this.filters = null;
+        this.prjCoordSys = null;
+        this.maxReturn = null;
+    }
+
+}
+
+SuperMap.GeoCodingParameter = GeoCodingParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/GeoDecodingParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.GeoDecodingParameter
+ * @category iServer AddressMatch
+ * @classdesc 地理反向匹配参数类。
+ * @param {Object} options - 参数。 
+ * @param {number} options.x - 查询位置的横坐标。 
+ * @param {number} options.y - 查询位置的纵坐标。 
+ * @param {number} [options.fromIndex] - 设置返回对象的起始索引值。 
+ * @param {Array.<string>} [options.filters] - 过滤字段,限定查询区域。 
+ * @param {string} [options.prjCoordSys] - 查询结果的坐标系。 
+ * @param {number} [options.maxReturn] - 最大返回结果数。 
+ * @param {number} [options.geoDecodingRadius] - 查询半径。
+ */
+class GeoDecodingParameter {
+
+
+    constructor(options) {
+
+        if (options.filters) {
+            options.filters = options.filters.split(',');
+        }
+        /**
+         * @member {number} SuperMap.GeoDecodingParameter.prototype.x
+         * @description 查询位置的横坐标。
+         */
+        this.x = null;
+
+        /**
+         * @member {number} SuperMap.GeoDecodingParameter.prototype.y
+         * @description 查询位置的纵坐标。
+         */
+        this.y = null;
+        /**
+         * @member {number} [SuperMap.GeoDecodingParameter.prototype.fromIndex]
+         * @description  设置返回对象的起始索引值。
+         */
+        this.fromIndex = null;
+
+        /**
+         * @member {number} [SuperMap.GeoDecodingParameter.prototype.toIndex]
+         * @description 设置返回对象的结束索引值。
+         */
+        this.toIndex = null;
+
+        /**
+         * @member {Array.<string>} [SuperMap.GeoDecodingParameter.prototype.filters]
+         * @description 过滤字段,限定查询区域。
+         */
+        this.filters = null;
+
+        /**
+         * @member {string} [SuperMap.GeoDecodingParameter.prototype.prjCoordSys]
+         * @description 查询结果的坐标系。
+         */
+        this.prjCoordSys = null;
+
+        /**
+         *  @member {number} [SuperMap.GeoDecodingParameter.prototype.maxReturn]
+         *  @description 最大返回结果数。
+         */
+        this.maxReturn = null;
+
+        /**
+         * @member {number} SuperMap.GeoDecodingParameter.prototype.geoDecodingRadius
+         * @description 查询半径。
+         */
+        this.geoDecodingRadius = null;
+        Util.extend(this, options);
+    }
+
+    /**
+     * @function SuperMap.GeoDecodingParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.x = null;
+        this.y = null;
+        this.fromIndex = null;
+        this.toIndex = null;
+        this.filters = null;
+        this.prjCoordSys = null;
+        this.maxReturn = null;
+        this.geoDecodingRadius = null;
+    }
+
+}
+
+SuperMap.GeoDecodingParameter = GeoDecodingParameter;
+;// CONCATENATED MODULE: ./src/classic/SuperMap.js
+var SuperMap_SuperMap = window.SuperMap = window.SuperMap || {};
+SuperMap_SuperMap.REST = SuperMap_SuperMap.REST || {};
+
+;// CONCATENATED MODULE: external "function(){try{return mapv}catch(e){return {}}}()"
+const external_function_try_return_mapv_catch_e_return_namespaceObject = function(){try{return mapv}catch(e){return {}}}();
+;// CONCATENATED MODULE: ./src/common/util/MapCalculateUtil.js
+
+
+var getMeterPerMapUnit = function(mapUnit) {
+    var earchRadiusInMeters = 6378137;
+    var meterPerMapUnit;
+    if (mapUnit === Unit.METER) {
+        meterPerMapUnit = 1;
+    } else if (mapUnit === Unit.DEGREE) {
+        // 每度表示多少米。
+        meterPerMapUnit = (Math.PI * 2 * earchRadiusInMeters) / 360;
+    } else if (mapUnit === Unit.KILOMETER) {
+        meterPerMapUnit = 1.0e-3;
+    } else if (mapUnit === Unit.INCH) {
+        meterPerMapUnit = 1 / 2.5399999918e-2;
+    } else if (mapUnit === Unit.FOOT) {
+        meterPerMapUnit = 0.3048;
+    } else {
+        return meterPerMapUnit;
+    }
+    return meterPerMapUnit;
+};
+
+function getWrapNum(x, includeMax = true, includeMin = true, range = [-180, 180]) {
+    var max = range[1],
+        min = range[0],
+        d = max - min;
+    if (x === max && includeMax) {
+        return x;
+    }
+    if (x === min && includeMin) {
+        return x;
+    }
+    var tmp = (((x - min) % d) + d) % d;
+    if (tmp === 0 && includeMax) {
+        return max;
+    }
+    return ((((x - min) % d) + d) % d) + min;
+}
+
+function conversionDegree(degrees) {
+    const degree = parseInt(degrees);
+    let fraction = parseInt((degrees - degree) * 60);
+    let second = parseInt(((degrees - degree) * 60 - fraction) * 60);
+    fraction = parseInt(fraction / 10) === 0 ? `0${fraction}` : fraction;
+    second = parseInt(second / 10) === 0 ? `0${second}` : second;
+    return `${degree}°${fraction}'${second}`;
+}
+
+;// CONCATENATED MODULE: ./src/classic/overlay/mapv/MapVRenderer.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class MapVRenderer
+ * @classdesc MapV渲染器。
+ * @private
+ * @extends {mapv.baiduMapLayer}
+ * @param {SuperMap.Map} map - 待渲染的地图。
+ * @param {SuperMap.Layer.MapVLayer} layer - 待渲染的图层。
+ * @param {Mapv.DataSet} dataSet - 待渲染的数据集,数据所属坐标系要求与 map 保持一致。
+ * @param {Object} options - 渲染的参数。
+ */
+var MapVBaseLayer = external_function_try_return_mapv_catch_e_return_namespaceObject.baiduMapLayer ? external_function_try_return_mapv_catch_e_return_namespaceObject.baiduMapLayer.__proto__ : Function;
+
+class MapVRenderer extends MapVBaseLayer {
+    constructor(map, layer, dataSet, options) {
+        super(map, dataSet, options);
+        if (!MapVBaseLayer) {
+            return this;
+        }
+
+        var self = this;
+        options = options || {};
+
+        self.init(options);
+        self.argCheck(options);
+        this.canvasLayer = layer;
+        this.clickEvent = this.clickEvent.bind(this);
+        this.mousemoveEvent = this.mousemoveEvent.bind(this);
+        this.bindEvent();
+    }
+
+    /**
+     * @function MapvRenderer.prototype.clickEvent
+     * @description 点击事件。
+     * @param {Object} e -  触发对象。
+     */
+    clickEvent(e) {
+        var pixel = e.xy;
+        super.clickEvent(pixel, e);
+    }
+
+    /**
+     * @function MapvRenderer.prototype.mousemoveEvent
+     * @description 鼠标移动事件。
+     * @param {Object} e - 触发对象。
+     */
+    mousemoveEvent(e) {
+        var pixel = e.xy;
+        super.mousemoveEvent(pixel, e);
+    }
+
+    /**
+     * @function MapvRenderer.prototype.bindEvent
+     * @description 绑定鼠标移动和鼠标点击事件。
+     */
+    bindEvent() {
+        var map = this.map;
+
+        if (this.options.methods) {
+            if (this.options.methods.click) {
+                map.events.on({'click': this.clickEvent});
+            }
+            if (this.options.methods.mousemove) {
+                map.events.on({'mousemove': this.mousemoveEvent});
+            }
+        }
+    }
+
+    /**
+     * @function MapvRenderer.prototype.unbindEvent
+     * @description 解绑鼠标移动和鼠标滑动触发的事件。
+     */
+    unbindEvent() {
+        var map = this.map;
+
+        if (this.options.methods) {
+            if (this.options.methods.click) {
+                map.events.un({'click': this.clickEvent});
+            }
+            if (this.options.methods.mousemove) {
+                map.events.un({'mousemove': this.mousemoveEvent});
+            }
+        }
+    }
+
+    /**
+     * @function MapvRenderer.prototype.getContext
+     * @description 获取信息。
+     */
+    getContext() {
+        return this.canvasLayer && this.canvasLayer.canvasContext;
+    }
+
+    /**
+     * @function MapvRenderer.prototype.addData
+     * @description 追加数据
+     * @param {oject} data - 待添加的数据。
+     * @param {oject} options - 待添加的数据信息。
+     */
+    addData(data, options) {
+        var _data = data;
+        if (data && data.get) {
+            _data = data.get();
+        }
+        this.dataSet.add(_data);
+        this.update({options: options});
+    }
+
+    /**
+     * @function MapvRenderer.prototype.updateData
+     * @description 更新覆盖原数据。
+     * @param {oject} data - 待更新的数据。
+     * @param {oject} options - 待更新的数据信息。
+     */
+    setData(data, options) {
+        var _data = data;
+        if (data && data.get) {
+            _data = data.get();
+        }
+        this.dataSet = this.dataSet || new external_function_try_return_mapv_catch_e_return_namespaceObject.DataSet();
+        this.dataSet.set(_data);
+        this.update({options: options});
+    }
+
+    /**
+     * @function MapvRenderer.prototype.getData
+     * @description 获取数据。
+     */
+    getData() {
+        return this.dataSet;
+    }
+
+    /**
+     * @function MapvRenderer.prototype.removeData
+     * @description 删除符合过滤条件的数据。
+     * @param {function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。
+     */
+    removeData(filter) {
+        if (!this.dataSet) {
+            return;
+        }
+        var newData = this.dataSet.get({
+            filter: function (data) {
+                return (filter != null && typeof filter === "function") ? !filter(data) : true;
+            }
+        });
+        this.dataSet.set(newData);
+        this.update({options: null});
+    }
+
+    /**
+     * @function MapvRenderer.prototype.clearData
+     * @description 清除数据。
+     */
+    clearData() {
+        this.dataSet && this.dataSet.clear();
+        this.update({options: null});
+    }
+
+    /**
+     * @function MapvRenderer.prototype.render
+     * @description 着色。
+     * @param {number} time
+     */
+    render(time) {
+        this._canvasUpdate(time);
+    }
+
+    /**
+     * @function MapvRenderer.prototype.transferToMercator
+     * @description 墨卡托坐标为经纬度。
+     * @deprecated
+     */
+    transferToMercator() {
+        if (this.options.coordType && ["bd09mc", "coordinates_mercator"].indexOf(this.options.coordType) > -1) {
+            var data = this.dataSet.get();
+            data = this.dataSet.transferCoordinate(data, function (coordinates) {
+                var pixel = SuperMap_SuperMap.Projection.transform({
+                    x: coordinates[0],
+                    y: coordinates[1]
+                }, "EPSG:3857", "EPSG:4326");
+                return [pixel.x, pixel.y];
+            }, 'coordinates', 'coordinates');
+            this.dataSet._set(data);
+        }
+    }
+
+    _canvasUpdate(time) {
+        if (!this.canvasLayer) {
+            return;
+        }
+
+        var self = this;
+
+        var animationOptions = self.options.animation;
+
+        var context = this.getContext();
+        var map = this.map;
+        if (self.isEnabledTime()) {
+            if (time === undefined) {
+                this.clear(context);
+                return;
+            }
+            if (this.context === '2d') {
+                context.save();
+                context.globalCompositeOperation = 'destination-out';
+                context.fillStyle = 'rgba(0, 0, 0, .1)';
+                context.fillRect(0, 0, context.canvas.width, context.canvas.height);
+                context.restore();
+            }
+        } else {
+            this.clear(context);
+        }
+
+        if (this.context === '2d') {
+            for (var key in self.options) {
+                context[key] = self.options[key];
+            }
+        } else {
+            context.clear(context.COLOR_BUFFER_BIT);
+        }
+
+        if (self.options.minZoom && map.getZoom() < self.options.minZoom || self.options.maxZoom && map.getZoom() > self.options.maxZoom) {
+            return;
+        }
+        var layer = self.canvasLayer;
+        var dataGetOptions = {
+            fromColumn: 'coordinates',
+            transferCoordinate: function (coordinate) {
+                // var coord = layer.transferToMapLatLng({lon: coordinate[0], lat: coordinate[1]});
+                var coord = {lon: coordinate[0], lat: coordinate[1]};
+                var worldPoint = map.getViewPortPxFromLonLat(coord);
+                return [worldPoint.x, worldPoint.y];
+            }
+        };
+
+        if (time !== undefined) {
+            dataGetOptions.filter = function (item) {
+                var trails = animationOptions.trails || 10;
+                return (time && item.time > (time - trails) && item.time < time);
+            }
+        }
+
+        var data = self.dataSet.get(dataGetOptions);
+
+        this.processData(data);
+        // 一个像素是多少米
+        var zoomUnit = map.getResolution() * getMeterPerMapUnit('DEGREE');
+        // // 兼容unit为'm'的情况
+        if (self.options.unit === 'm') {
+            if (self.options.size) {
+                self.options._size = self.options.size / zoomUnit;
+            }
+            if (self.options.width) {
+                self.options._width = self.options.width / zoomUnit;
+            }
+            if (self.options.height) {
+                self.options._height = self.options.height / zoomUnit;
+            }
+        } else {
+            self.options._size = self.options.size;
+            self.options._height = self.options.height;
+            self.options._width = self.options.width;
+        }
+
+        var worldPoint = map.getViewPortPxFromLonLat(layer.transferToMapLatLng({ lon: 0, lat: 0 }));
+
+        this.drawContext(context, data, self.options, worldPoint);
+
+        self.options.updateCallback && self.options.updateCallback(time);
+    }
+
+
+    init(options) {
+
+        var self = this;
+
+        self.options = options;
+
+        this.initDataRange(options);
+
+        this.context = self.options.context || '2d';
+
+        if (self.options.zIndex) {
+            this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);
+        }
+
+        this.initAnimator();
+    }
+
+    /**
+     * @function MapvRenderer.prototype.addAnimatorEvent
+     * @description 添加动画事件。
+     */
+    addAnimatorEvent() {
+        this.map.events.on({'movestart': this.animatorMovestartEvent.bind(this)});
+        this.map.events.on({'moveend': this.animatorMoveendEvent.bind(this)});
+    }
+
+    /**
+     * @function MapvRenderer.prototype.clear
+     * @description 清除环境。
+     * @param {Object} context - 当前环境。
+     */
+    clear(context) {
+        context && context.clearRect && context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+    }
+
+    /**
+     * @function MapvRenderer.prototype.show
+     * @description 展示渲染效果。
+     */
+    show() {
+        this.map.addLayer(this.canvasLayer);
+    }
+
+    /**
+     * @function MapvRenderer.prototype.hide
+     * @description 隐藏渲染效果。
+     */
+    hide() {
+        this.map.removeLayer(this.canvasLayer);
+    }
+
+
+    /**
+     * @function MapvRenderer.prototype.draw
+     * @description 渲染绘制。
+     */
+    draw() {
+        this.canvasLayer.redraw();
+    }
+}
+;// CONCATENATED MODULE: ./src/classic/overlay/MapVLayer.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.Layer.MapVLayer
+ * @category  Visualization MapV
+ * @classdesc MapV 图层。
+ * @extends {SuperMap.Layer}
+ * @param {string} name - 图层名。
+ * @param {Object} options - 可选参数。
+ * @param {Mapv.DataSet} options.dataSet - mapv 的 dataSet 对象。
+ * @param {Object} options.options - mapv 绘图风格配置信息。
+ */
+class MapVLayer extends SuperMap_SuperMap.Layer {
+    constructor(name, options) {
+        super(name, options);
+
+        /**
+         * @member {mapv.DataSet} SuperMap.Layer.MapVLayer.prototype.dataSet
+         * @description mapv dataset 对象。
+         */
+        this.dataSet = null;
+
+        /**
+         * @member {Object} SuperMap.Layer.MapVLayer.prototype.options
+         * @description mapv 绘图风格配置信息。
+         */
+        this.options = null;
+
+        /**
+         * @member {boolean} [SuperMap.Layer.MapVLayer.prototype.supported=false]
+         * @description 当前浏览器是否支持 canvas 绘制。决定了 MapV 图是否可用,内部判断使用。
+         */
+        this.supported = false;
+
+        /**
+         * @member {Canvas} SuperMap.Layer.MapVLayer.prototype.canvas
+         * @description MapV 图主绘制面板。
+         */
+        this.canvas = null;
+
+        /**
+         * @private
+         * @member {CanvasContext} SuperMap.Layer.MapVLayer.prototype.canvasContext
+         * @description MapV 图主绘制对象。
+         */
+        this.canvasContext = null;
+
+        if (options) {
+            SuperMap_SuperMap.Util.extend(this, options);
+        }
+        //MapV图要求使用canvas绘制,判断是否支持
+        this.canvas = document.createElement('canvas');
+        if (!this.canvas.getContext) {
+            return;
+        }
+        this.supported = true;
+        //构建绘图面板
+        this.canvas.style.position = 'absolute';
+        this.canvas.style.top = 0 + 'px';
+        this.canvas.style.left = 0 + 'px';
+        this.div.appendChild(this.canvas);
+        var context = (this.options && this.options.context) || '2d';
+        this.canvasContext = this.canvas.getContext(context);
+        var global$2 = typeof window === 'undefined' ? {} : window;
+        var devicePixelRatio = this.devicePixelRatio = global$2.devicePixelRatio || 1;
+        if (context == '2d') {
+            this.canvasContext.scale(devicePixelRatio, devicePixelRatio);
+        }
+        this.attribution =
+            "© 2018 百度 <a href='https://mapv.baidu.com' target='_blank'>MapV</a> with <span>© <a target='_blank' href='https://iclient.supermap.io' " +
+            "style='color: #08c;text-decoration: none;'>SuperMap iClient</a></span>";
+
+        this.CLASS_NAME = 'SuperMap.Layer.MapVLayer';
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.destroy
+     * @override
+     */
+    destroy() {
+        if (this.renderer && this.renderer.animator) {
+            this.renderer.animator.stop();
+            this.renderer.animator = null;
+        }
+        this.dataSet = null;
+        this.options = null;
+        this.renderer = null;
+        this.supported = null;
+        this.canvas = null;
+        this.canvasContext = null;
+        this.maxWidth = null;
+        this.maxHeight = null;
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.addData
+     * @description 追加数据。
+     * @param {mapv.DataSet} dataSet - mapv 数据集。
+     * @param {Object} options - mapv 绘图参数。
+     */
+    addData(dataSet, options) {
+        this.renderer && this.renderer.addData(dataSet, options);
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.
+     * @description 设置数据。
+     * @param {mapv.DataSet} dataSet - mapv 数据集。
+     * @param {Object} options - mapv 绘图参数。
+     */
+    setData(dataSet, options) {
+        this.renderer && this.renderer.setData(dataSet, options);
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.getData
+     * @description 获取数据。
+     * @returns {mapv.DataSet} - mapv 数据集。
+     */
+    getData() {
+        if (this.renderer) {
+            this.dataSet = this.renderer.getData();
+        }
+        return this.dataSet;
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.removeData
+     * @description 删除符合过滤条件的数据。
+     * @param {function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。
+     * @example
+     *  filter=function(data){
+     *    if(data.id=="1"){
+     *      return true
+     *    }
+     *    return false;
+     *  }
+     */
+    removeData(filter) {
+        this.renderer && this.renderer.removeData(filter);
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.clearData
+     * @description 清除数据
+     */
+    clearData() {
+        this.renderer.clearData();
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.setMap
+     * @description 图层已经添加到 Map 中。
+     *              如果当前浏览器支持 canvas,则开始渲染要素;如果不支持则移除图层。
+     * @param {SuperMap.Map} map - 需要绑定的 map 对象。
+     */
+    setMap(map) {
+        super.setMap(map);
+        this.renderer = new MapVRenderer(map, this, this.dataSet, this.options);
+        if (!this.supported) {
+            this.map.removeLayer(this);
+        } else {
+            this.redraw();
+        }
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.moveTo
+     * @description 重置当前 MapV 图层的 div,再一次与 Map 控件保持一致。
+     *              修改当前显示范围,当平移或者缩放结束后开始重绘 MapV 图的渲染效果。
+     * @param {SuperMap.Bounds} bounds - 图层范围。
+     * @param {boolean} [zoomChanged] - 缩放级别是否改变。
+     * @param {boolean} [dragging] - 是否拖动。
+     */
+    moveTo(bounds, zoomChanged, dragging) {
+        super.moveTo(bounds, zoomChanged, dragging);
+        if (!this.supported) {
+            return;
+        }
+        this.zoomChanged = zoomChanged;
+        if (!dragging) {
+            this.div.style.visibility = 'hidden';
+            this.div.style.left = -parseInt(this.map.layerContainerDiv.style.left) + 'px';
+            this.div.style.top = -parseInt(this.map.layerContainerDiv.style.top) + 'px';
+            /*this.canvas.style.left = this.div.style.left;
+             this.canvas.style.top = this.div.style.top;*/
+            var size = this.map.getSize();
+            this.div.style.width = parseInt(size.w) + 'px';
+            this.div.style.height = parseInt(size.h) + 'px';
+            this.canvas.width = parseInt(size.w);
+            this.canvas.height = parseInt(size.h);
+            this.canvas.style.width = this.div.style.width;
+            this.canvas.style.height = this.div.style.height;
+            this.maxWidth = size.w;
+            this.maxHeight = size.h;
+            this.div.style.visibility = '';
+            if (!zoomChanged) {
+                this.renderer && this.renderer.render();
+            }
+        }
+
+        if (zoomChanged) {
+            this.renderer && this.renderer.render();
+        }
+    }
+
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.transferToMapLatLng
+     * @description 将经纬度转成底图的投影坐标。
+     * @param {SuperMap.Lonlat} latLng - 经纬度坐标。
+     * @deprecated
+     */
+    transferToMapLatLng(latLng) {
+        var source = 'EPSG:4326',
+            dest = 'EPSG:4326';
+        var unit = this.map.getUnits() || 'degree';
+        if (['m', 'meter'].indexOf(unit.toLowerCase()) > -1) {
+            dest = 'EPSG:3857';
+        }
+        return new SuperMap_SuperMap.LonLat(latLng.lon, latLng.lat).transform(source, dest);
+    }
+}
+
+SuperMap_SuperMap.Layer.MapVLayer = MapVLayer;
+
+;// CONCATENATED MODULE: ./src/classic/overlay/mapv/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+;// CONCATENATED MODULE: ./src/classic/overlay/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Credential.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.Credential
+ * @category Security
+ * @classdesc SuperMap 的安全证书类,其中包括 token 等安全验证信息。</br>
+ * 需要使用用户名和密码在:"http://localhost:8090/iserver/services/security/tokens" 下申请 value。</br>
+ * 获得形如:"2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ.." 的 value。</br>
+ * 目前支持的功能包括:地图服务、专题图、量算、查询、公交换乘、空间分析、网络分析,不支持轮询功能。</br>
+ * @param {string} value - 访问受安全限制的服务时用于通过安全认证的验证信息。
+ * @param {string} [name='token'] - 验证信息前缀,name=value 部分的 name 部分。
+ * @example
+ * var pixcel = new SuperMap.Credential("valueString","token");
+ * pixcel.destroy();
+ */
+class Credential {
+
+
+    constructor(value, name) {
+
+        /**
+         * @member {string} SuperMap.Bounds.prototype.value
+         * @description 访问受安全限制的服务时用于通过安全认证的验证信息。
+         */
+        this.value = value ? value : "";
+
+        /**
+         * @member {string} [SuperMap.Bounds.prototype.name='token']
+         * @description 验证信息前缀,name=value 部分的 name 部分。
+         */
+        this.name = name ? name : "token";
+        this.CLASS_NAME = "SuperMap.Credential";
+    }
+
+    /**
+     * @function SuperMap.Credential.prototype.getUrlParameters
+     * @example
+     * var credential = new SuperMap.Credential("valueString","token");
+     * //这里 str = "token=valueString";
+     * var str = credential.getUrlParameters();
+     * @returns {string} 返回安全信息组成的 url 片段。
+     */
+    getUrlParameters() {
+        //当需要其他安全信息的时候,则需要return this.name + "=" + this.value + "&" + "...";的形式添加。
+        return this.name + "=" + this.value;
+    }
+
+
+    /**
+     * @function SuperMap.Bounds.prototype.getValue
+     * @description 获取 value。
+     * @example
+     * var credential = new SuperMap.Credential("2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ..","token");
+     * //这里 str = "2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ..";
+     * var str = credential.getValue();
+     * @returns {string} 返回 value 字符串,在 iServer 服务下该 value 值即为 token 值。
+     */
+    getValue() {
+        return this.value;
+    }
+
+    /**
+     *
+     * @function SuperMap.Credential.prototype.destroy
+     * @description 销毁此对象。销毁后此对象的所有属性为 null,而不是初始值。
+     * @example
+     * var credential = new SuperMap.Credential("valueString","token");
+     * credential.destroy();
+     */
+    destroy() {
+        this.value = null;
+        this.name = null;
+    }
+
+}
+
+/**
+ * @member {SuperMap.Credential} SuperMap.Credential.CREDENTIAL
+ * @description 这个对象保存一个安全类的实例,在服务端需要安全验证的时候必须进行设置。
+ * @constant
+ * @example
+ * 代码实例:
+ *  // 当iServer启用服务安全的时候,下边的代码是必须的。安全证书类能够接收一个value和一个name参数。
+ *  var value = "(以iServer为例,这里是申请的token值)";
+ *  var name = "token";
+ *  // 默认name参数为token,所以当使用iServer服务的时候可以不进行设置。
+ *  SuperMap.Credential.CREDENTIAL = new SuperMap.Credential(value, name);
+ *
+ */
+
+Credential.CREDENTIAL = null;
+SuperMap.Credential = Credential;
+
+;// CONCATENATED MODULE: ./src/common/format/Format.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.Format
+ * @classdesc 读写各种格式的格式类基类。其子类应该包含并实现 read 和 write 方法。
+ * @category BaseTypes Format
+ * @param {Object} options - 可选参数。
+ * @param {boolean} [options.keepData=false] - 如果设置为 true, data 属性会指向被解析的对象(例如 JSON 或 xml 数据对象)。
+ * @param {Object} [options.data] - 当 keepData 属性设置为 true,这是传递给 read 操作的要被解析的字符串。
+ */
+class Format {
+
+
+    constructor(options) {
+        /**
+         * @member {Object} SuperMap.Format.prototype.data 
+         * @description 当 keepData 属性设置为 true,这是传递给 read 操作的要被解析的字符串。
+         */
+        this.data = null;
+
+        /**
+         * APIProperty: keepData
+         * @member {Object} [SuperMap.Format.prototype.keepData=false]
+         * @description 保持最近读到的数据的引用(通过 <data> 属性)。
+         */
+        this.keepData = false;
+
+        Util.extend(this, options);
+        this.options = options;
+
+        this.CLASS_NAME = "SuperMap.Format";
+    }
+
+    /**
+     * @function SuperMap.Format.prototype.destroy
+     * @description 销毁该格式类,释放相关资源。
+     */
+    destroy() {
+        //用来销毁该格式类,释放相关资源
+    }
+
+    /**
+     * @function SuperMap.Format.prototype.read
+     * @description 来从字符串中读取数据。
+     * @param {string} data - 读取的数据。
+     */
+    read(data) { // eslint-disable-line no-unused-vars
+        //用来从字符串中读取数据
+    }
+
+    /**
+     * @function SuperMap.Format.prototype.write
+     * @description 将对象写成字符串。
+     * @param {Object} object - 可序列化的对象。
+     * @returns {string} 对象被写成字符串。
+     */
+    write(object) { // eslint-disable-line no-unused-vars
+        //用来写字符串
+    }
+}
+
+SuperMap.Format = SuperMap.Format || Format;
+
+;// CONCATENATED MODULE: ./src/common/format/JSON.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.Format.JSON
+ * @classdesc 安全的读写 JSON 的解析类。使用 {@link SuperMap.Format.JSON} 构造函数创建新实例。
+ * @category BaseTypes Format
+ * @param {Object} [options] - 参数。
+ * @param {string} [options.indent="    "] - 用于格式化输出,indent 字符串会在每次缩进的时候使用一次。
+ * @param {string} [options.space=" "] - 用于格式化输出,space 字符串会在名值对的 ":" 后边添加。
+ * @param {string} [options.newline="\n"] - 用于格式化输出, newline 字符串会用在每一个名值对或数组项末尾。
+ * @param {number} [options.level=0] - 用于格式化输出, 表示的是缩进级别。
+ * @param {boolean} [options.pretty=false] - 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+ * @param {boolean} [options.nativeJSON] - 需要被注册的监听器对象。
+ * @extends {SuperMap.Format}
+ */
+class JSONFormat extends Format {
+
+    constructor(options) {
+        super(options);
+        /**
+         * @member {string} [SuperMap.Format.JSON.prototype.indent="    "]
+         * @description 用于格式化输出,indent 字符串会在每次缩进的时候使用一次。
+         */
+        this.indent = "    ";
+
+        /**
+         * @member {string} [SuperMap.Format.JSON.prototype.space=" "]
+         * @description 用于格式化输出,space 字符串会在名值对的 ":" 后边添加。
+         */
+        this.space = " ";
+
+        /**
+         * @member {string} [SuperMap.Format.JSON.prototype.newline="\n"]
+         * @description 用于格式化输出, newline 字符串会用在每一个名值对或数组项末尾。
+         */
+        this.newline = "\n";
+
+        /**
+         * @member {integer} [SuperMap.Format.JSON.prototype.level=0] 
+         * @description 用于格式化输出, 表示的是缩进级别。
+         */
+        this.level = 0;
+
+        /**
+         * @member {boolean} [SuperMap.Format.JSON.prototype.pretty=false]
+         * @description 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+         */
+        this.pretty = false;
+
+        /**
+         * @member {boolean} SuperMap.Format.JSON.prototype.nativeJSON 
+         * @description 判断浏览器是否原生支持 JSON 格式数据。
+         */
+        this.nativeJSON = (function () {
+            return !!(window.JSON && typeof JSON.parse === "function" && typeof JSON.stringify === "function");
+        })();
+
+        this.CLASS_NAME = "SuperMap.Format.JSON";
+        /**
+         * @member SuperMap.Format.JSON.prototype.serialize
+         * @description 提供一些类型对象转 JSON 字符串的方法。
+         */
+        this.serialize = {
+            /**
+             * @function SuperMap.Format.JSON.serialize.object
+             * @description 把对象转换为 JSON 字符串。
+             * @param {Object} object - 可序列化的对象。
+             * @returns {string} JSON 字符串。
+             */
+            'object': function (object) {
+                // three special objects that we want to treat differently
+                if (object == null) {
+                    return "null";
+                }
+                if (object.constructor === Date) {
+                    return this.serialize.date.apply(this, [object]);
+                }
+                if (object.constructor === Array) {
+                    return this.serialize.array.apply(this, [object]);
+                }
+                var pieces = ['{'];
+                this.level += 1;
+                var key, keyJSON, valueJSON;
+
+                var addComma = false;
+                for (key in object) {
+                    if (object.hasOwnProperty(key)) {
+                        // recursive calls need to allow for sub-classing
+                        keyJSON = this.write.apply(this,
+                            [key, this.pretty]);
+                        valueJSON = this.write.apply(this,
+                            [object[key], this.pretty]);
+                        if (keyJSON != null && valueJSON != null) {
+                            if (addComma) {
+                                pieces.push(',');
+                            }
+                            pieces.push(this.writeNewline(), this.writeIndent(),
+                                keyJSON, ':', this.writeSpace(), valueJSON);
+                            addComma = true;
+                        }
+                    }
+                }
+
+                this.level -= 1;
+                pieces.push(this.writeNewline(), this.writeIndent(), '}');
+                return pieces.join('');
+            },
+
+            /**
+             * @function SuperMap.Format.JSON.serialize.array
+             * @description 把数组转换成 JSON 字符串。
+             * @param {Array} array - 可序列化的数组。
+             * @returns {string} JSON 字符串。
+             */
+            'array': function (array) {
+                var json;
+                var pieces = ['['];
+                this.level += 1;
+
+                for (var i = 0, len = array.length; i < len; ++i) {
+                    // recursive calls need to allow for sub-classing
+                    json = this.write.apply(this,
+                        [array[i], this.pretty]);
+                    if (json != null) {
+                        if (i > 0) {
+                            pieces.push(',');
+                        }
+                        pieces.push(this.writeNewline(), this.writeIndent(), json);
+                    }
+                }
+
+                this.level -= 1;
+                pieces.push(this.writeNewline(), this.writeIndent(), ']');
+                return pieces.join('');
+            },
+
+            /**
+             * @function SuperMap.Format.JSON.serialize.string
+             * @description 把字符串转换成 JSON 字符串。
+             * @param {string} string - 可序列化的字符串。
+             * @returns {string} JSON 字符串。
+             */
+            'string': function (string) {
+                // If the string contains no control characters, no quote characters, and no
+                // backslash characters, then we can simply slap some quotes around it.
+                // Otherwise we must also replace the offending characters with safe
+                // sequences.
+                var m = {
+                    '\b': '\\b',
+                    '\t': '\\t',
+                    '\n': '\\n',
+                    '\f': '\\f',
+                    '\r': '\\r',
+                    '"': '\\"',
+                    '\\': '\\\\'
+                };
+                /*eslint-disable no-control-regex*/
+                if (/["\\\x00-\x1f]/.test(string)) {
+                    return '"' + string.replace(/([\x00-\x1f\\"])/g, function (a, b) {
+                        var c = m[b];
+                        if (c) {
+                            return c;
+                        }
+                        c = b.charCodeAt();
+                        return '\\u00' +
+                            Math.floor(c / 16).toString(16) +
+                            (c % 16).toString(16);
+                    }) + '"';
+                }
+                return '"' + string + '"';
+            },
+
+            /**
+             * @function SuperMap.Format.JSON.serialize.number
+             * @description 把数字转换成 JSON 字符串。
+             * @param {number} number - 可序列化的数字。
+             * @returns {string} JSON 字符串。
+             */
+            'number': function (number) {
+                return isFinite(number) ? String(number) : "null";
+            },
+
+            /**
+             * @function SuperMap.Format.JSON.serialize.boolean
+             * @description Transform a boolean into a JSON string.
+             * @param {boolean} bool - The boolean to be serialized.
+             * @returns {string} A JSON string representing the boolean.
+             */
+            'boolean': function (bool) {
+                return String(bool);
+            },
+
+            /**
+             * @function SuperMap.Format.JSON.serialize.object
+             * @description 将日期对象转换成 JSON 字符串。
+             * @param {Date} date - 可序列化的日期对象。
+             * @returns {string} JSON 字符串。
+             */
+            'date': function (date) {
+                function format(number) {
+                    // Format integers to have at least two digits.
+                    return (number < 10) ? '0' + number : number;
+                }
+
+                return '"' + date.getFullYear() + '-' +
+                    format(date.getMonth() + 1) + '-' +
+                    format(date.getDate()) + 'T' +
+                    format(date.getHours()) + ':' +
+                    format(date.getMinutes()) + ':' +
+                    format(date.getSeconds()) + '"';
+            }
+        };
+    }
+
+    /**
+     * @function SuperMap.Format.JSON.prototype.read
+     * @description 将一个符合 JSON 结构的字符串进行解析。
+     * @param {string} json - 符合 JSON 结构的字符串。
+     * @param {function} filter - 过滤方法,最终结果的每一个键值对都会调用该过滤方法,并在对应的值的位置替换成该方法返回的值。
+     * @returns {Object} 对象,数组,字符串或数字。
+     */
+    read(json, filter) {
+        var object;
+        if (this.nativeJSON) {
+            try {
+                object = JSON.parse(json, filter);
+            } catch (e) {
+                // Fall through if the regexp test fails.
+            }
+        }
+
+        if (this.keepData) {
+            this.data = object;
+        }
+
+        return object;
+    }
+
+    /**
+     * @function SuperMap.Format.JSON.prototype.write
+     * @description 序列化一个对象到一个符合 JSON 格式的字符串。
+     * @param {(object|string|Array|number|boolean)} value - 需要被序列化的对象,数组,字符串,数字,布尔值。
+     * @param {boolean} [pretty=false] - 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+     * @returns {string} 符合 JSON 格式的字符串。
+     *
+     */
+    write(value, pretty) {
+        this.pretty = !!pretty;
+        var json = null;
+        var type = typeof value;
+        if (this.serialize[type]) {
+            try {
+                json = (!this.pretty && this.nativeJSON) ?
+                    JSON.stringify(value) :
+                    this.serialize[type].apply(this, [value]);
+            } catch (err) {
+                //SuperMap.Console.error("Trouble serializing: " + err);
+            }
+        }
+        return json;
+    }
+
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeIndent
+     * @description 根据缩进级别输出一个缩进字符串。
+     * @private
+     * @returns {string} 一个适当的缩进字符串。
+     */
+    writeIndent() {
+        var pieces = [];
+        if (this.pretty) {
+            for (var i = 0; i < this.level; ++i) {
+                pieces.push(this.indent);
+            }
+        }
+        return pieces.join('');
+    }
+
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeNewline
+     * @description 在格式化输出模式情况下输出代表新一行的字符串。
+     * @private
+     * @returns {string} 代表新的一行的字符串。
+     */
+    writeNewline() {
+        return (this.pretty) ? this.newline : '';
+    }
+
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeSpace
+     * @private
+     * @description 在格式化输出模式情况下输出一个代表空格的字符串。
+     * @returns {string} 一个空格。
+     */
+    writeSpace() {
+        return (this.pretty) ? this.space : '';
+    }
+
+}
+
+SuperMap.Format.JSON = JSONFormat;
+;// CONCATENATED MODULE: ./src/common/iServer/CommonServiceBase.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.CommonServiceBase
+ * @category  iServer
+ * @classdesc 对接 iServer 各种服务的 Service 的基类。
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {Object} options.eventListeners - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {string} [options.proxy] - 服务代理地址。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {boolean} [options.withCredentials=false] - 请求是否携带 cookie。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class CommonServiceBase {
+
+    constructor(url, options) {
+        let me = this;
+
+        this.EVENT_TYPES = ["processCompleted", "processFailed"];
+
+        this.events = null;
+
+        this.eventListeners = null;
+
+        this.url = null;
+
+        this.urls = null;
+
+        this.proxy = null;
+
+        this.serverType = null;
+
+        this.index = null;
+
+        this.length = null;
+
+        this.options = null;
+
+        this.totalTimes = null;
+
+        this.POLLING_TIMES = 3;
+
+        this._processSuccess = null;
+
+        this._processFailed = null;
+
+        this.isInTheSameDomain = null;
+
+        this.withCredentials = false;
+        
+        
+
+        if (Util.isArray(url)) {
+            me.urls = url;
+            me.length = url.length;
+            me.totalTimes = me.length;
+            if (me.length === 1) {
+                me.url = url[0];
+            } else {
+                me.index = parseInt(Math.random() * me.length);
+                me.url = url[me.index];
+            }
+        } else {
+            me.totalTimes = 1;
+            me.url = url;
+        }
+
+        if (Util.isArray(url) && !me.isServiceSupportPolling()) {
+            me.url = url[0];
+            me.totalTimes = 1;
+        }
+        
+        me.serverType = me.serverType || ServerType.ISERVER;
+
+        options = options || {};
+        this.crossOrigin = options.crossOrigin;
+        this.headers = options.headers;
+        Util.extend(this, options);
+
+        me.isInTheSameDomain = Util.isInTheSameDomain(me.url);
+
+        me.events = new Events(me, null, me.EVENT_TYPES, true);
+        if (me.eventListeners instanceof Object) {
+            me.events.on(me.eventListeners);
+        }
+
+        this.CLASS_NAME = "SuperMap.CommonServiceBase";
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.destroy
+     * @description 释放资源,将引用的资源属性置空。
+     */
+    destroy() {
+        let me = this;
+        if (Util.isArray(me.urls)) {
+            me.urls = null;
+            me.index = null;
+            me.length = null;
+            me.totalTimes = null;
+        }
+        me.url = null;
+        me.options = null;
+        me._processSuccess = null;
+        me._processFailed = null;
+        me.isInTheSameDomain = null;
+
+        me.EVENT_TYPES = null;
+        if (me.events) {
+            me.events.destroy();
+            me.events = null;
+        }
+        if (me.eventListeners) {
+            me.eventListeners = null;
+        }
+    }
+
+    /**
+     * @function  SuperMap.CommonServiceBase.prototype.request
+     * @description: 该方法用于向服务发送请求。
+     * @param {Object} options - 参数。
+     * @param {string} [options.method='GET'] - 请求方式,包括 "GET","POST","PUT","DELETE"。
+     * @param {string} [options.url] - 发送请求的地址。
+     * @param {Object} [options.params] - 作为查询字符串添加到 URL 中的一组键值对,此参数只适用于 GET 方式发送的请求。
+     * @param {string} [options.data] - 发送到服务器的数据。
+     * @param {function} options.success - 请求成功后的回调函数。
+     * @param {function} options.failure - 请求失败后的回调函数。
+     * @param {Object} [options.scope] - 如果回调函数是对象的一个公共方法,设定该对象的范围。
+     * @param {boolean} [options.isInTheSameDomain] - 请求是否在当前域中。
+     * @param {boolean} [options.withCredentials=false] - 请求是否携带 cookie。
+     * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+     * @param {Object} [options.headers] - 请求头。
+     */
+    request(options) {
+        let me = this;
+        options.url = options.url || me.url;
+        options.proxy = options.proxy || me.proxy;
+        options.withCredentials = options.withCredentials != undefined ? options.withCredentials : me.withCredentials;
+        options.crossOrigin = options.crossOrigin != undefined ? options.crossOrigin : me.crossOrigin;
+        options.headers = options.headers || me.headers;
+        options.isInTheSameDomain = me.isInTheSameDomain;
+        //为url添加安全认证信息片段
+        let credential = this.getCredential(options.url);
+        if (credential) {
+            options.url = Util.urlAppend(options.url, credential.getUrlParameters());
+        }
+
+        me.calculatePollingTimes();
+        me._processSuccess = options.success;
+        me._processFailed = options.failure;
+        options.scope = me;
+        options.success = me.getUrlCompleted;
+        options.failure = me.getUrlFailed;
+        me.options = options;
+        me._commit(me.options);
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getCredential
+     * @description  获取凭据信息
+     * @param {string} url - 服务地址。
+     * @returns {SuperMap.Credential} 凭据信息对象。
+     */
+    getCredential(url) {
+        let keyUrl = url,
+            credential, value;
+        switch (this.serverType) {
+            case ServerType.IPORTAL:
+                value = SecurityManager.getToken(keyUrl);
+                credential = value ? new Credential(value, "token") : null;
+                if (!credential) {
+                    value = SecurityManager.getKey(keyUrl);
+                    credential = value ? new Credential(value, "key") : null;
+                }
+                break;
+            case ServerType.ONLINE:
+                value = SecurityManager.getKey(keyUrl);
+                credential = value ? new Credential(value, "key") : null;
+                break;
+            default:
+                //iServer or others
+                value = SecurityManager.getToken(keyUrl);
+                credential = value ? new Credential(value, "token") : null;
+                break;
+        }
+        return credential;
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getUrlCompleted
+     * @description 请求成功后执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+    getUrlCompleted(result) {
+        let me = this;
+        me._processSuccess(result);
+    }
+
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getUrlFailed
+     * @description 请求失败后执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+    getUrlFailed(result) {
+        let me = this;
+        if (me.totalTimes > 0) {
+            me.totalTimes--;
+            me.ajaxPolling();
+        } else {
+            me._processFailed(result);
+        }
+    }
+
+
+    /**
+     *
+     * @function SuperMap.CommonServiceBase.prototype.ajaxPolling
+     * @description 请求失败后,如果剩余请求失败次数不为 0,重新获取 URL 发送请求
+     */
+    ajaxPolling() {
+        let me = this,
+            url = me.options.url,
+            re = /^http:\/\/([a-z]{9}|(\d+\.){3}\d+):\d{0,4}/;
+        me.index = parseInt(Math.random() * me.length);
+        me.url = me.urls[me.index];
+        url = url.replace(re, re.exec(me.url)[0]);
+        me.options.url = url;
+        me.options.isInTheSameDomain = Util.isInTheSameDomain(url);
+        me._commit(me.options);
+    }
+
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.calculatePollingTimes
+     * @description 计算剩余请求失败执行次数。
+     */
+    calculatePollingTimes() {
+        let me = this;
+        if (me.times) {
+            if (me.totalTimes > me.POLLING_TIMES) {
+                if (me.times > me.POLLING_TIMES) {
+                    me.totalTimes = me.POLLING_TIMES;
+                } else {
+                    me.totalTimes = me.times;
+                }
+            } else {
+                if (me.times < me.totalTimes) {
+                    me.totalTimes = me.times;
+                }
+            }
+
+        } else {
+            if (me.totalTimes > me.POLLING_TIMES) {
+                me.totalTimes = me.POLLING_TIMES;
+            }
+        }
+        me.totalTimes--;
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.isServiceSupportPolling
+     * @description 判断服务是否支持轮询。
+     */
+    isServiceSupportPolling() {
+        let me = this;
+        return !(
+            me.CLASS_NAME === "SuperMap.REST.ThemeService" ||
+            me.CLASS_NAME === "SuperMap.REST.EditFeaturesService"
+        );
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.serviceProcessCompleted
+     * @description 状态完成,执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+    serviceProcessCompleted(result) {
+        result = Util.transformResult(result);
+        this.events.triggerEvent("processCompleted", {
+            result: result
+        });
+    }
+
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.serviceProcessFailed
+     * @description 状态失败,执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+    serviceProcessFailed(result) {
+        result = Util.transformResult(result);
+        let error = result.error || result;
+        this.events.triggerEvent("processFailed", {
+            error: error
+        });
+    }
+
+    _commit(options) {
+        if (options.method === "POST" || options.method === "PUT") {
+            if (options.params) {
+                options.url = Util.urlAppend(options.url,
+                    Util.getParameterString(options.params || {}));
+            }
+            options.params = options.data;
+        }
+        FetchRequest.commit(options.method, options.url, options.params, {
+            headers: options.headers,
+            withCredentials: options.withCredentials,
+            crossOrigin: options.crossOrigin,
+            timeout: options.async ? 0 : null,
+            proxy: options.proxy
+        }).then(function (response) {
+            if (response.text) {
+                return response.text();
+            }
+            if (response.json) {
+                return response.json();
+            }
+            return response;
+        }).then(function (text) {
+            var result = text;
+            if (typeof text === "string") {
+                result = new JSONFormat().read(text);
+            }
+            if (!result || result.error || result.code >= 300 && result.code !== 304) {
+                if (result && result.error) {
+                    result = {
+                        error: result.error
+                    };
+                } else {
+                    result = {
+                        error: result
+                    };
+                }
+            }
+            if (result.error) {
+                var failure = (options.scope) ? FunctionExt.bind(options.failure, options.scope) : options.failure;
+                failure(result);
+            } else {
+                result.succeed = result.succeed == undefined ? true : result.succeed;
+                var success = (options.scope) ? FunctionExt.bind(options.success, options.scope) : options.success;
+                success(result);
+            }
+        }).catch(function (e) {
+            var failure = (options.scope) ? FunctionExt.bind(options.failure, options.scope) : options.failure;
+            failure(e);
+        })
+    }
+}
+
+SuperMap.CommonServiceBase = CommonServiceBase;
+
+/**
+ * 服务器请求回调函数
+ * @callback RequestCallback
+ * @example
+ * var requestCallback = function (serviceResult){
+ *      console.log(serviceResult.result);
+ * }
+ * new QueryService(url).queryByBounds(param, requestCallback);
+ * @param {Object} serviceResult
+ * @param {Object} serviceResult.result 服务器返回结果。
+ * @param {Object} serviceResult.object 发布应用程序事件的对象。
+ * @param {Object} serviceResult.type 事件类型。
+ * @param {Object} serviceResult.element 接受浏览器事件的 DOM 节点。
+ */
+;// CONCATENATED MODULE: ./src/common/iServer/AddressMatchService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.AddressMatchService
+ * @category iServer AddressMatch
+ * @classdesc 地址匹配服务,包括正向匹配和反向匹配。
+ * @param {string} url - 地址匹配服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class AddressMatchService_AddressMatchService extends CommonServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.options = options || {};
+        this.CLASS_NAME = 'SuperMap.AddressMatchService';
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.destroy
+     * @override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.code
+     * @param {string} url - 正向地址匹配服务地址。
+     * @param {SuperMap.GeoCodingParameter} params - 正向地址匹配服务参数。
+     */
+    code(url, params) {
+        if (!(params instanceof GeoCodingParameter)) {
+            return;
+        }
+        this.processAsync(url, params);
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.decode
+     * @param {string} url - 反向地址匹配服务地址。
+     * @param {SuperMap.GeoDecodingParameter} params - 反向地址匹配服务参数。
+     */
+    decode(url, params) {
+        if (!(params instanceof GeoDecodingParameter)) {
+            return;
+        }
+        this.processAsync(url, params);
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.processAsync
+     * @description 负责将客户端的动态分段服务参数传递到服务端。
+     * @param {string} url - 服务地址。
+     * @param {Object} params - 参数。
+     */
+
+    processAsync(url, params) {
+        this.request({
+            method: 'GET',
+            url,
+            params,
+            scope: this,
+            success: this.serviceProcessCompleted,
+            failure: this.serviceProcessFailed
+        });
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.serviceProcessCompleted
+     * @param {Object} result - 服务器返回的结果对象。
+     * @description 服务流程是否完成
+     */
+    serviceProcessCompleted(result) {
+        if (result.succeed) {
+            delete result.succeed;
+        }
+        super.serviceProcessCompleted(result);
+    }
+
+    /**
+     * @function SuperMap.AddressMatchService.prototype.serviceProcessCompleted
+     * @param {Object} result - 服务器返回的结果对象。
+     * @description 服务流程是否失败
+     */
+    serviceProcessFailed(result) {
+        super.serviceProcessFailed(result);
+    }
+}
+
+SuperMap.AddressMatchService = AddressMatchService_AddressMatchService;
+
+;// CONCATENATED MODULE: ./src/classic/services/AddressMatchService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.REST.AddressMatchService
+ * @category  iServer AddressMatch
+ * @classdesc 地址匹配服务,包括正向匹配和反向匹配。
+ * @extends {SuperMap.CommonServiceBase}
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class AddressMatchService extends CommonServiceBase {
+
+    constructor(url, options) {
+        super(url, options);
+        this.CLASS_NAME = "SuperMap.REST.AddressMatchService";
+    }
+
+    /**
+     * @function SuperMap.REST.AddressMatchService.prototype.code
+     * @description 正向匹配。
+     * @param {SuperMap.GeoCodingParameter} params - 正向匹配参数。
+     * @param {RequestCallback} callback - 回调函数。
+     */
+    code(params, callback) {
+        var me = this;
+        var addressMatchService = new AddressMatchService_AddressMatchService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin: me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            }
+        });
+        addressMatchService.code(me.url + '/geocoding', params);
+    }
+
+    /**
+     * @function SuperMap.REST.AddressMatchService.prototype.decode
+     * @description 反向匹配。
+     * @param {SuperMap.GeoDecodingParameter} params - 反向匹配参数。
+     * @param {RequestCallback} callback - 回调函数。
+     */
+    decode(params, callback) {
+        var me = this;
+        var addressMatchService = new AddressMatchService_AddressMatchService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin: me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            }
+        });
+        addressMatchService.decode(me.url + '/geodecoding', params);
+    }
+}
+
+SuperMap_SuperMap.REST.AddressMatchService = AddressMatchService;
+;// CONCATENATED MODULE: ./src/common/iServer/ProcessingServiceBase.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.ProcessingServiceBase
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析服务基类
+ * @extends {SuperMap.CommonServiceBase}
+ * @param {string} url - 分布式分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。
+ * @param {number} options.index - 服务访问地址在数组中的位置。
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class ProcessingServiceBase extends CommonServiceBase {
+
+    constructor(url, options) {
+        options = options || {};
+        /*
+         * Constant: EVENT_TYPES
+         * {Array.<string>}
+         * 此类支持的事件类型
+         * - *processCompleted* 创建成功后触发的事件。
+         * - *processFailed* 创建失败后触发的事件 。
+         * - *processRunning* 创建过程的整个阶段都会触发的事件,用于获取创建过程的状态 。
+         */
+        options.EVENT_TYPES = ["processCompleted", "processFailed", "processRunning"];
+        super(url, options);
+
+        this.CLASS_NAME = "SuperMap.ProcessingServiceBase";
+    }
+
+    /**
+     * @function SuperMap.ProcessingServiceBase.prototype.destroy
+     * @override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.ProcessingServiceBase.prototype.getJobs
+     * @description 获取分布式分析任务。
+     * @param {string} url - 资源地址。
+     */
+    getJobs(url) {
+        var me = this;
+        FetchRequest.get(me._processUrl(url), null, {
+            proxy: me.proxy
+        }).then(function (response) {
+            return response.json();
+        }).then(function (result) {
+            me.events.triggerEvent("processCompleted", {
+                result: result
+            });
+        }).catch(function (e) {
+            me.eventListeners.processFailed({
+                error: e
+            });
+        });
+    }
+
+    /**
+     * @function SuperMap.ProcessingServiceBase.prototype.addJob
+     * @description 添加分布式分析任务。
+     * @param {string} url - 资源根地址。
+     * @param {Object} params - 创建一个空间分析的请求参数。
+     * @param {string} paramType - 请求参数类型。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addJob(url, params, paramType, seconds) {
+        var me = this,
+            parameterObject = null;
+        if (params && params instanceof paramType) {
+            parameterObject = new Object();
+            paramType.toObject(params, parameterObject);
+        }
+        let headers = Object.assign({
+          'Content-Type': 'application/x-www-form-urlencoded'
+        }, me.headers || {})
+        var options = {
+            proxy: me.proxy,
+            headers,
+            withCredentials: me.withCredentials,
+            crossOrigin: me.crossOrigin,
+            isInTheSameDomain: me.isInTheSameDomain
+        };
+        FetchRequest.post(me._processUrl(url), JSON.stringify(parameterObject), options).then(function (response) {
+            return response.json();
+        }).then(function (result) {
+            if (result.succeed) {
+                me.serviceProcessCompleted(result, seconds);
+            } else {
+                me.serviceProcessFailed(result);
+            }
+        }).catch(function (e) {
+            me.serviceProcessFailed({
+                error: e
+            });
+        });
+    }
+
+    serviceProcessCompleted(result, seconds) {
+        result = Util.transformResult(result);
+        seconds = seconds || 1000;
+        var me = this;
+        if (result) {
+            var id = setInterval(function () {
+                FetchRequest.get(me._processUrl(result.newResourceLocation), {
+                        _t: new Date().getTime()
+                    })
+                    .then(function (response) {
+                        return response.json();
+                    }).then(function (job) {
+                        me.events.triggerEvent("processRunning", {
+                            id: job.id,
+                            state: job.state
+                        });
+                        if (job.state.runState === 'LOST' || job.state.runState === 'KILLED' || job.state.runState === 'FAILED') {
+                            clearInterval(id);
+                            me.events.triggerEvent("processFailed", {
+                                error: job.state.errorMsg,
+                                state: job.state.runState
+                            });
+                        }
+                        if (job.state.runState === 'FINISHED' && job.setting.serviceInfo) {
+                            clearInterval(id);
+                            me.events.triggerEvent("processCompleted", {
+                                result: job
+                            });
+                        }
+                    }).catch(function (e) {
+                        clearInterval(id);
+                        me.events.triggerEvent("processFailed", {
+                            error: e
+                        });
+                    });
+            }, seconds);
+        }
+    }
+
+    serviceProcessFailed(result) {
+        super.serviceProcessFailed(result);
+    }
+
+    _processUrl(url) {
+        if (SecurityManager.getToken(url)) {
+            url = Util.urlAppend(url, 'token=' + SecurityManager.getToken(url));
+        }
+        return url;
+    }
+
+}
+
+SuperMap.ProcessingServiceBase = ProcessingServiceBase;
+;// CONCATENATED MODULE: ./src/common/iServer/KernelDensityJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.KernelDensityJobsService
+ * @category  iServer ProcessingService DensityAnalyst
+ * @classdesc 核密度分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url -核密度分析服务地址。
+ * @param {Object} options - 交互服务时所需可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class KernelDensityJobsService extends ProcessingServiceBase {
+
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/density');
+        this.CLASS_NAME = "SuperMap.KernelDensityJobsService";
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.destroy
+     * @override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.getKernelDensityJobs
+     * @description 获取核密度分析任务
+     */
+    getKernelDensityJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.getKernelDensityJobs
+     * @description 获取指定id的核密度分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getKernelDensityJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.addKernelDensityJob
+     * @description 新建核密度分析服务
+     * @param {SuperMap.KernelDensityJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addKernelDensityJob(params, seconds) {
+        super.addJob(this.url, params, KernelDensityJobParameter, seconds);
+    }
+
+}
+
+SuperMap.KernelDensityJobsService = KernelDensityJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SingleObjectQueryJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SingleObjectQueryJobsService
+ * @category  iServer ProcessingService Query
+ * @classdesc 单对象查询分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 单对象空间查询分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class SingleObjectQueryJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/query');
+        this.CLASS_NAME = 'SuperMap.SingleObjectQueryJobsService';
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.SingleObjectQueryJobsService.protitype.getQueryJobs
+     * @description 获取单对象空间查询分析所有任务
+     */
+    getQueryJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.protitype.getQueryJob
+     * @description 获取指定id的单对象空间查询分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getQueryJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.SingleObjectQueryJobsService.protitype.addQueryJob
+     * @description 新建单对象空间查询分析服务
+     * @param {SuperMap.SingleObjectQueryJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addQueryJob(params, seconds) {
+        super.addJob(this.url, params, SingleObjectQueryJobsParameter, seconds);
+    }
+}
+
+SuperMap.SingleObjectQueryJobsService = SingleObjectQueryJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryMeshJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryMeshJobsService
+ * @category  iServer ProcessingService AggregatePoints
+ * @classdesc 点聚合分析任务类。
+ * @param {string} url -点聚合分析任务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。<br>
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {number} options.index - 服务访问地址在数组中的位置。<br>
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class SummaryMeshJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/aggregatepoints');
+        this.CLASS_NAME = 'SuperMap.SummaryMeshJobsService';
+    }
+
+    /**
+     * @override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.getSummaryMeshJobs
+     * @description 获取点聚合分析任务
+     */
+    getSummaryMeshJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.getSummaryMeshJob
+     * @description 获取指定ip的点聚合分析任务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getSummaryMeshJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.addSummaryMeshJob
+     * @description 新建点聚合分析服务
+     * @param {SuperMap.SummaryMeshJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addSummaryMeshJob(params, seconds) {
+        super.addJob(this.url, params, SummaryMeshJobParameter, seconds);
+    }
+}
+
+SuperMap.SummaryMeshJobsService = SummaryMeshJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryRegionJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryRegionJobsService
+ * @category  iServer ProcessingService SummaryRegion
+ * @classdesc 区域汇总分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 区域汇总分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class SummaryRegionJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/summaryregion');
+        this.CLASS_NAME = 'SuperMap.SummaryRegionJobsService';
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.getSummaryRegionJobs
+     * @description 获取区域汇总分析任务集合。
+     */
+    getSummaryRegionJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.getSummaryRegionJob
+     * @description 获取指定id的区域汇总分析任务。
+     * @param {string} id -要获取区域汇总分析任务的id
+     */
+    getSummaryRegionJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.addSummaryRegionJob
+     * @description 新建区域汇总任务。
+     * @param {SuperMap.SummaryRegionJobParameter} params - 创建一个区域汇总任务的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addSummaryRegionJob(params, seconds) {
+        super.addJob(this.url, params, SummaryRegionJobParameter, seconds);
+    }
+}
+
+SuperMap.SummaryRegionJobsService = SummaryRegionJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/VectorClipJobsParameter.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+/**
+ * @class SuperMap.VectorClipJobsParameter
+ * @category  iServer ProcessingService VectorClip
+ * @classdesc 矢量裁剪分析任务参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.datasetName - 数据集名。 
+ * @param {string} options.datasetOverlay - 裁剪对象数据集。 
+ * @param {SuperMap.ClipAnalystMode} [options.mode=SuperMap.ClipAnalystMode.CLIP] - 裁剪分析模式。 
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。 
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+class VectorClipJobsParameter {
+
+    constructor(options) {
+        options = options || {};
+
+        /**
+         * @member {string} SuperMap.VectorClipJobsParameter.prototype.datasetName
+         * @description 数据集名。
+         */
+        this.datasetName = "";
+
+        /**
+         * @member {string} SuperMap.VectorClipJobsParameter.prototype.datasetOverlay
+         * @description 裁剪对象数据集。
+         */
+        this.datasetVectorClip = "";
+
+        /**
+         * @member {string} SuperMap.VectorClipJobsParameter.prototype.geometryClip
+         * @description 裁剪几何对象。
+         */
+        this.geometryClip = "";
+
+        /**
+         * @member {SuperMap.ClipAnalystMode} [SuperMap.VectorClipJobsParameter.prototype.mode=ClipAnalystMode.CLIP]
+         * @description 裁剪分析模式 。
+         */
+        this.mode = ClipAnalystMode.CLIP;
+
+        /**
+         * @member {SuperMap.OutputSetting} SuperMap.VectorClipJobsParameter.prototype.output
+         * @description 输出参数设置类。
+         */
+        this.output = null;
+
+        /**
+         * @member {SuperMap.MappingParameters} [SuperMap.VectorClipJobsParameter.prototype.mappingParameters]
+         * @description 分析后结果可视化的参数类。   
+         */
+        this.mappingParameters = null;
+
+        Util.extend(this, options);
+
+        this.CLASS_NAME = "SuperMap.VectorClipJobsParameter";
+    }
+
+    /**
+     * @function SuperMap.VectorClipJobsParameter.prototype.destroy
+     * @description 释放资源,将引用资源的属性置空。
+     */
+    destroy() {
+        this.datasetName = null;
+        this.datasetVectorClip = null;
+        this.geometryClip = null;
+        this.mode = null;
+        if (this.output instanceof OutputSetting) {
+            this.output.destroy();
+            this.output = null;
+        }
+        if (this.mappingParameters instanceof MappingParameters) {
+            this.mappingParameters.destroy();
+            this.mappingParameters = null;
+        }
+    }
+
+    /**
+     * @function SuperMap.VectorClipJobsParameter.toObject
+     * @param {Object} vectorClipJobsParameter - 区域汇总分析服务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 矢量裁剪分析任务对象。
+     */
+    static toObject(vectorClipJobsParameter, tempObj) {
+        for (var name in vectorClipJobsParameter) {
+            if (name === "datasetName") {
+                tempObj['input'] = tempObj['input'] || {};
+                tempObj['input'][name] = vectorClipJobsParameter[name];
+                continue;
+            }
+            if (name === "output"){
+                tempObj['output'] = tempObj['output'] || {};
+                tempObj['output'] = vectorClipJobsParameter[name];
+                continue;
+            }
+            tempObj['analyst'] = tempObj['analyst'] || {};
+            tempObj['analyst'][name] = vectorClipJobsParameter[name];
+            if(name === 'mappingParameters'){
+                tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+                tempObj['analyst']['mappingParameters'] = vectorClipJobsParameter[name];
+            }
+        }
+    }
+
+}
+
+SuperMap.VectorClipJobsParameter = VectorClipJobsParameter;
+
+;// CONCATENATED MODULE: ./src/common/iServer/VectorClipJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.VectorClipJobsService
+ * @category  iServer ProcessingService VectorClip
+ * @classdesc 矢量裁剪分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url -矢量裁剪分析服务地址。
+ * @param {Object} options - 交互服务时所需可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class VectorClipJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/vectorclip');
+        this.CLASS_NAME = 'SuperMap.VectorClipJobsService';
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.VectorClipJobsService.protitype.getVectorClipJobs
+     * @description 获取矢量裁剪分析所有任务
+     */
+    getVectorClipJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.KernelDensityJobsService.protitype.getVectorClipJob
+     * @description 获取指定id的矢量裁剪分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getVectorClipJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.VectorClipJobsService.protitype.addVectorClipJob
+     * @description 新建矢量裁剪分析服务
+     * @param {SuperMap.VectorClipJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addVectorClipJob(params, seconds) {
+        super.addJob(this.url, params, VectorClipJobsParameter, seconds);
+    }
+}
+
+SuperMap.VectorClipJobsService = VectorClipJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/OverlayGeoJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.OverlayGeoJobsService
+ * @category iServer ProcessingService OverlayAnalyst
+ * @classdesc 叠加分析任务类。
+ * @param {string} url - 叠加分析任务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {number} options.index - 服务访问地址在数组中的位置。
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class OverlayGeoJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/overlay');
+        this.CLASS_NAME = 'SuperMap.OverlayGeoJobsService';
+    }
+
+    /**
+     * @override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.getOverlayGeoJobs
+     * @description 获取叠加分析任务
+     */
+    getOverlayGeoJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.getOverlayGeoJob
+     * @description 获取指定id的叠加分析任务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getOverlayGeoJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.addOverlayGeoJob
+     * @description 新建点叠加析服务
+     * @param {SuperMap.OverlayGeoJobParameter} params - 创建一个叠加分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addOverlayGeoJob(params, seconds) {
+        super.addJob(this.url, params, OverlayGeoJobParameter, seconds);
+    }
+}
+SuperMap.OverlayGeoJobsService = OverlayGeoJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/BuffersAnalystJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.BuffersAnalystJobsService
+ * @category iServer ProcessingService BufferAnalyst
+ * @classdesc 缓冲区分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class BuffersAnalystJobsService extends ProcessingServiceBase {
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/buffers');
+        this.CLASS_NAME = 'SuperMap.BuffersAnalystJobsService';
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.getBufferJobs
+     * @description 获取缓冲区分析所有任务
+     */
+    getBuffersJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.getBufferJob
+     * @description 获取指定id的缓冲区分析服务
+     * @param {string} id - 指定要获取数据的id。
+     */
+    getBuffersJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.addBufferJob
+     * @description 新建缓冲区分析服务
+     * @param {SuperMap.BuffersAnalystJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addBuffersJob(params, seconds) {
+        super.addJob(this.url, params, BuffersAnalystJobsParameter, seconds);
+    }
+}
+
+SuperMap.BuffersAnalystJobsService = BuffersAnalystJobsService;
+
+;// CONCATENATED MODULE: ./src/common/iServer/TopologyValidatorJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.TopologyValidatorJobsService
+ * @category  iServer ProcessingService TopologyValidator
+ * @classdesc 拓扑检查分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 拓扑检查分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class TopologyValidatorJobsService extends ProcessingServiceBase {
+
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/topologyvalidator');
+        this.CLASS_NAME = "SuperMap.TopologyValidatorJobsService";
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.getTopologyValidatorJobs
+     * @description 获取拓扑检查分析所有任务
+     */
+    getTopologyValidatorJobs() {
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.getTopologyValidatorJob
+     * @description 获取指定id的拓扑检查分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getTopologyValidatorJob(id) {
+        super.getJobs( Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.addTopologyValidatorJob
+     * @description 新建拓扑检查分析服务
+     * @param {SuperMap.TopologyValidatorJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addTopologyValidatorJob(params, seconds) {
+        super.addJob(this.url, params, TopologyValidatorJobsParameter, seconds);
+    }
+
+}
+
+SuperMap.TopologyValidatorJobsService = TopologyValidatorJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryAttributesJobsService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryAttributesJobsService
+ * @category  iServer ProcessingService SummaryAttributes
+ * @classdesc 属性汇总分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 汇总统计分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class SummaryAttributesJobsService extends ProcessingServiceBase {
+
+    constructor(url, options) {
+        super(url, options);
+        this.url = Util.urlPathAppend(this.url, 'spatialanalyst/summaryattributes');
+        this.CLASS_NAME = "SuperMap.SummaryAttributesJobsService";
+    }
+
+    /**
+     *@override
+     */
+    destroy() {
+        super.destroy();
+    }
+
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.getSummaryAttributesJobs
+     * @description 获取属性汇总分析所有任务
+     */
+    getSummaryAttributesJobs (){
+        super.getJobs(this.url);
+    }
+
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.getSummaryAttributesJob
+     * @description 获取指定id的属性汇总分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+    getSummaryAttributesJob(id) {
+        super.getJobs(Util.urlPathAppend(this.url, id));
+    }
+
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.addSummaryAttributesJob
+     * @description 新建属性汇总分析服务
+     * @param {SuperMap.SummaryAttributesJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+    addSummaryAttributesJob(params, seconds) {
+        super.addJob(this.url, params, SummaryAttributesJobsParameter, seconds);
+    }
+
+}
+
+SuperMap.SummaryAttributesJobsService = SummaryAttributesJobsService;
+;// CONCATENATED MODULE: ./src/classic/services/ProcessingService.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.REST.ProcessingService
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析相关服务类。
+ * @augments SuperMap.CommonServiceBase
+ * @example
+ * 用法:
+ * new SuperMap.REST.ProcessingService(url,options)
+ *    .getKernelDensityJobs(function(result){
+ *       //doSomething
+ * })
+ * @param {string} url - 分布式分析服务地址。
+ * @param {Object} options - 可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+class ProcessingService extends CommonServiceBase {
+
+    constructor(url, options) {
+        super(url, options);
+        this.kernelDensityJobs = {};
+        this.summaryMeshJobs = {};
+        this.queryJobs = {};
+        this.summaryRegionJobs = {};
+        this.vectorClipJobs = {};
+        this.overlayGeoJobs = {};
+        this.buffersJobs = {};
+        this.topologyValidatorJobs = {};
+        this.summaryAttributesJobs = {};
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJobs
+     * @description 获取密度分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getKernelDensityJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        kernelDensityJobsService.getKernelDensityJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJob
+     * @description 获取某一个密度分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getKernelDensityJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        kernelDensityJobsService.getKernelDensityJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addKernelDensityJob
+     * @description 新建一个密度分析。
+     * @param {SuperMap.KernelDensityJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addKernelDensityJob(params, callback, seconds, resultFormat) {
+        var me = this, format = me._processFormat(resultFormat);
+        var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+            headers: me.headers,  
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning(job) {
+                    me.kernelDensityJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        kernelDensityJobsService.addKernelDensityJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJobState
+     * @description 获取密度分析的状态。
+     * @param {string} id - 密度分析的 id。
+     * @returns {Object} - 密度分析的状态。
+     */
+    getKernelDensityJobState(id) {
+        return this.kernelDensityJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJobs
+     * @description 获取点聚合分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryMeshJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+            headers: me.headers,  
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryMeshJobsService.getSummaryMeshJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJob
+     * @description 获取某一个点聚合分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryMeshJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+            headers: me.headers,  
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryMeshJobsService.getSummaryMeshJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryMeshJob
+     * @description 新建一个点聚合分析。
+     * @param {SuperMap.SummaryMeshJobParameter} params - 点聚合分析任务参数类。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+*/
+    addSummaryMeshJob(params, callback, seconds, resultFormat) {
+        var me = this, format = me._processFormat(resultFormat);
+        var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning(job) {
+                    me.summaryMeshJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        summaryMeshJobsService.addSummaryMeshJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJobState
+     * @description 获取点聚合分析的状态。
+     * @param {string} id - 点聚合分析的 id。
+     * @returns {Object} 点聚合分析的状态。
+     */
+    getSummaryMeshJobState(id) {
+        return this.summaryMeshJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJobs
+     * @description 获取单对象查询分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getQueryJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        singleObjectQueryJobsService.getQueryJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJob
+     * @description 获取某一个单对象查询分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getQueryJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        singleObjectQueryJobsService.getQueryJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addQueryJob
+     * @description 新建一个单对象查询分析。
+     * @param {SuperMap.SingleObjectQueryJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addQueryJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            param = me._processParams(params),
+            format = me._processFormat(resultFormat);
+        var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+            headers: me.headers,
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning(job) {
+                    me.queryJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        singleObjectQueryJobsService.addQueryJob(param, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJobState
+     * @description 获取单对象查询分析的状态。
+     * @param {string} id - 单对象查询分析的 id。
+     * @returns {Object} 单对象查询分析的状态
+     */
+    getQueryJobState(id) {
+        return this.queryJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJobs
+     * @description 获取区域汇总分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryRegionJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+            proxy: me.proxy,
+            headers: me.headers,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryRegionJobsService.getSummaryRegionJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJob
+     * @description 获取某一个区域汇总分析。
+     * @param {string} id - 区域汇总分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryRegionJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryRegionJobsService.getSummaryRegionJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryRegionJob
+     * @description 新建一个区域汇总分析。
+     * @param {SuperMap.SummaryRegionJobParameter} params -创建一个区域汇总分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addSummaryRegionJob(params, callback, seconds, resultFormat) {
+        var me = this, format = me._processFormat(resultFormat);
+        var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning(job) {
+                    me.summaryRegionJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        summaryRegionJobsService.addSummaryRegionJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJobState
+     * @description 获取区域汇总分析的状态。
+     * @param {string} id - 区域汇总分析的 id。
+     * @returns {Object} 区域汇总分析的状态。
+     */
+    getSummaryRegionJobState(id) {
+        return this.summaryRegionJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJobs
+     * @description 获取矢量裁剪分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getVectorClipJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var vectorClipJobsService = new VectorClipJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        vectorClipJobsService.getVectorClipJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJob
+     * @description 获取某一个矢量裁剪分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getVectorClipJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var vectorClipJobsService = new VectorClipJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        vectorClipJobsService.getVectorClipJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addVectorClipJob
+     * @description 新建一个矢量裁剪分析。
+     * @param {SuperMap.VectorClipJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addVectorClipJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            param = me._processParams(params),
+            format = me._processFormat(resultFormat);
+        var vectorClipJobsService = new VectorClipJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning(job) {
+                    me.vectorClipJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        vectorClipJobsService.addVectorClipJob(param, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJobState
+     * @description 获取矢量裁剪分析的状态。
+     * @param {string} id - 矢量裁剪分析的 id。
+     * @returns {Object} 矢量裁剪分析的状态。
+     */
+    getVectorClipJobState(id) {
+        return this.vectorClipJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getOverlayGeoJobs
+     * @description 获取叠加分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getOverlayGeoJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        overlayGeoJobsService.getOverlayGeoJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getOverlayGeoJob
+     * @description 获取某一个叠加分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getOverlayGeoJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        overlayGeoJobsService.getOverlayGeoJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addOverlayGeoJob
+     * @description 新建一个叠加分析。
+     * @param {SuperMap.OverlayGeoJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addOverlayGeoJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning: function (job) {
+                    me.overlayGeoJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        overlayGeoJobsService.addOverlayGeoJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getoverlayGeoJobState
+     * @description 获取叠加分析的状态。
+     * @param {string} id - 叠加分析的 id。
+     * @returns {Object} 叠加分析的状态。
+     */
+    getoverlayGeoJobState(id) {
+        return this.overlayGeoJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJobs
+     * @description 获取缓冲区分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getBuffersJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        buffersAnalystJobsService.getBuffersJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJob
+     * @description 获取某一个缓冲区分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getBuffersJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        buffersAnalystJobsService.getBuffersJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addBuffersJob
+     * @description 新建一个缓冲区分析。
+     * @param {SuperMap.BuffersAnalystJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addBuffersJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning: function (job) {
+                    me.buffersJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        buffersAnalystJobsService.addBuffersJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJobState
+     * @description 获取缓冲区分析的状态。
+     * @param {string} id - 缓冲区分析的 id。
+     * @returns {Object} 缓冲区分析的状态。
+     */
+    getBuffersJobState(id) {
+        return this.buffersJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJobs
+     * @description 获取拓扑检查分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getTopologyValidatorJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        topologyValidatorJobsService.getTopologyValidatorJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJob
+     * @description 获取某一个拓扑检查分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getTopologyValidatorJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        topologyValidatorJobsService.getTopologyValidatorJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addTopologyValidatorJob
+     * @description 新建一个拓扑检查分析。
+     * @param {SuperMap.TopologyValidatorJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addTopologyValidatorJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning: function (job) {
+                    me.topologyValidatorJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        topologyValidatorJobsService.addTopologyValidatorJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJobState
+     * @description 获取拓扑检查分析的状态。
+     * @param {string} id - 拓扑检查分析的 id。
+     * @returns {Object} 拓扑检查分析的状态。
+     */
+    getTopologyValidatorJobState(id) {
+        return this.topologyValidatorJobs[id];
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJobs
+     * @description 获取属性汇总分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryAttributesJobs(callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryAttributesJobsService.getSummaryAttributesJobs();
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJob
+     * @description 获取某一个属性汇总分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    getSummaryAttributesJob(id, callback, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback
+            },
+            format: format
+        });
+        summaryAttributesJobsService.getSummaryAttributesJob(id);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryAttributesJob
+     * @description 新建一个属性汇总分析。
+     * @param {SuperMap.SummaryAttributesJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+    addSummaryAttributesJob(params, callback, seconds, resultFormat) {
+        var me = this,
+            format = me._processFormat(resultFormat);
+        var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+            proxy: me.proxy,
+            withCredentials: me.withCredentials,
+            crossOrigin:me.crossOrigin,
+            headers: me.headers,
+            serverType: me.serverType,
+            eventListeners: {
+                scope: me,
+                processCompleted: callback,
+                processFailed: callback,
+                processRunning: function (job) {
+                    me.summaryAttributesJobs[job.id] = job.state;
+                }
+            },
+            format: format
+        });
+        summaryAttributesJobsService.addSummaryAttributesJob(params, seconds);
+    }
+
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJobState
+     * @description 获取属性汇总分析的状态。
+     * @param {string} id - 属性汇总分析的 id。
+     * @returns {Object} 属性汇总分析的状态。
+     */
+    getSummaryAttributesJobState(id) {
+        return this.summaryAttributesJobs[id];
+    }
+
+    _processFormat(resultFormat) {
+        return (resultFormat) ? resultFormat : DataFormat.GEOJSON;
+    }
+
+    _processParams(params) {
+        if (!params) {
+            return {};
+        }
+        if (params.geometryQuery) {
+            params.geometryQuery = this._convertPatams(params.geometryQuery);
+        }
+        if (params.geometryClip) {
+            params.geometryClip = this._convertPatams(params.geometryClip);
+        }
+        return params;
+    }
+
+    _convertPatams(points) {
+        var geometryParam = {};
+        if (points.length < 1) {
+            geometryParam = "";
+        } else {
+            var results = [];
+            for (var i = 0; i < points.length; i++) {
+                var point = {};
+                point.x = points[i].x;
+                point.y = points[i].y;
+                results.push(point);
+            }
+            geometryParam.type = "REGION";
+            geometryParam.points = results;
+        }
+        return geometryParam;
+    }
+
+}
+
+SuperMap_SuperMap.REST.ProcessingService = ProcessingService;
+
+;// CONCATENATED MODULE: ./src/classic/services/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+;// CONCATENATED MODULE: ./src/classic/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+})();
+
+/******/ })()
+;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 7 - 0
dist/classic/iclient-classic-es6.min.js


+ 13481 - 0
dist/classic/iclient-classic.js

@@ -0,0 +1,13481 @@
+/*!
+ * 
+ *          iclient-classic.(https://iclient.supermap.io)
+ *          Copyright© 2000 - 2021 SuperMap Software Co.Ltd
+ *          license: Apache-2.0
+ *          version: v10.1.1
+ *
+ */
+/******/ (function() { // webpackBootstrap
+/******/ 	var __webpack_modules__ = ({
+
+/***/ 122:
+/***/ (function(module) {
+
+(function (self) {
+  'use strict'; // if __disableNativeFetch is set to true, the it will always polyfill fetch
+  // with Ajax.
+
+  if (!self.__disableNativeFetch && self.fetch) {
+    return;
+  }
+
+  function normalizeName(name) {
+    if (typeof name !== 'string') {
+      name = String(name);
+    }
+
+    if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
+      throw new TypeError('Invalid character in header field name');
+    }
+
+    return name.toLowerCase();
+  }
+
+  function normalizeValue(value) {
+    if (typeof value !== 'string') {
+      value = String(value);
+    }
+
+    return value;
+  }
+
+  function Headers(headers) {
+    this.map = {};
+
+    if (headers instanceof Headers) {
+      headers.forEach(function (value, name) {
+        this.append(name, value);
+      }, this);
+    } else if (headers) {
+      Object.getOwnPropertyNames(headers).forEach(function (name) {
+        this.append(name, headers[name]);
+      }, this);
+    }
+  }
+
+  Headers.prototype.append = function (name, value) {
+    name = normalizeName(name);
+    value = normalizeValue(value);
+    var list = this.map[name];
+
+    if (!list) {
+      list = [];
+      this.map[name] = list;
+    }
+
+    list.push(value);
+  };
+
+  Headers.prototype['delete'] = function (name) {
+    delete this.map[normalizeName(name)];
+  };
+
+  Headers.prototype.get = function (name) {
+    var values = this.map[normalizeName(name)];
+    return values ? values[0] : null;
+  };
+
+  Headers.prototype.getAll = function (name) {
+    return this.map[normalizeName(name)] || [];
+  };
+
+  Headers.prototype.has = function (name) {
+    return this.map.hasOwnProperty(normalizeName(name));
+  };
+
+  Headers.prototype.set = function (name, value) {
+    this.map[normalizeName(name)] = [normalizeValue(value)];
+  };
+
+  Headers.prototype.forEach = function (callback, thisArg) {
+    Object.getOwnPropertyNames(this.map).forEach(function (name) {
+      this.map[name].forEach(function (value) {
+        callback.call(thisArg, value, name, this);
+      }, this);
+    }, this);
+  };
+
+  function consumed(body) {
+    if (body.bodyUsed) {
+      return Promise.reject(new TypeError('Already read'));
+    }
+
+    body.bodyUsed = true;
+  }
+
+  function fileReaderReady(reader) {
+    return new Promise(function (resolve, reject) {
+      reader.onload = function () {
+        resolve(reader.result);
+      };
+
+      reader.onerror = function () {
+        reject(reader.error);
+      };
+    });
+  }
+
+  function readBlobAsArrayBuffer(blob) {
+    var reader = new FileReader();
+    reader.readAsArrayBuffer(blob);
+    return fileReaderReady(reader);
+  }
+
+  function readBlobAsText(blob, options) {
+    var reader = new FileReader();
+    var contentType = options.headers.map['content-type'] ? options.headers.map['content-type'].toString() : '';
+    var regex = /charset\=[0-9a-zA-Z\-\_]*;?/;
+
+    var _charset = blob.type.match(regex) || contentType.match(regex);
+
+    var args = [blob];
+
+    if (_charset) {
+      args.push(_charset[0].replace(/^charset\=/, '').replace(/;$/, ''));
+    }
+
+    reader.readAsText.apply(reader, args);
+    return fileReaderReady(reader);
+  }
+
+  var support = {
+    blob: 'FileReader' in self && 'Blob' in self && function () {
+      try {
+        new Blob();
+        return true;
+      } catch (e) {
+        return false;
+      }
+    }(),
+    formData: 'FormData' in self,
+    arrayBuffer: 'ArrayBuffer' in self
+  };
+
+  function Body() {
+    this.bodyUsed = false;
+
+    this._initBody = function (body, options) {
+      this._bodyInit = body;
+
+      if (typeof body === 'string') {
+        this._bodyText = body;
+      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
+        this._bodyBlob = body;
+        this._options = options;
+      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
+        this._bodyFormData = body;
+      } else if (!body) {
+        this._bodyText = '';
+      } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {// Only support ArrayBuffers for POST method.
+        // Receiving ArrayBuffers happens via Blobs, instead.
+      } else {
+        throw new Error('unsupported BodyInit type');
+      }
+    };
+
+    if (support.blob) {
+      this.blob = function () {
+        var rejected = consumed(this);
+
+        if (rejected) {
+          return rejected;
+        }
+
+        if (this._bodyBlob) {
+          return Promise.resolve(this._bodyBlob);
+        } else if (this._bodyFormData) {
+          throw new Error('could not read FormData body as blob');
+        } else {
+          return Promise.resolve(new Blob([this._bodyText]));
+        }
+      };
+
+      this.arrayBuffer = function () {
+        return this.blob().then(readBlobAsArrayBuffer);
+      };
+
+      this.text = function () {
+        var rejected = consumed(this);
+
+        if (rejected) {
+          return rejected;
+        }
+
+        if (this._bodyBlob) {
+          return readBlobAsText(this._bodyBlob, this._options);
+        } else if (this._bodyFormData) {
+          throw new Error('could not read FormData body as text');
+        } else {
+          return Promise.resolve(this._bodyText);
+        }
+      };
+    } else {
+      this.text = function () {
+        var rejected = consumed(this);
+        return rejected ? rejected : Promise.resolve(this._bodyText);
+      };
+    }
+
+    if (support.formData) {
+      this.formData = function () {
+        return this.text().then(decode);
+      };
+    }
+
+    this.json = function () {
+      return this.text().then(JSON.parse);
+    };
+
+    return this;
+  } // HTTP methods whose capitalization should be normalized
+
+
+  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
+
+  function normalizeMethod(method) {
+    var upcased = method.toUpperCase();
+    return methods.indexOf(upcased) > -1 ? upcased : method;
+  }
+
+  function Request(input, options) {
+    options = options || {};
+    var body = options.body;
+
+    if (Request.prototype.isPrototypeOf(input)) {
+      if (input.bodyUsed) {
+        throw new TypeError('Already read');
+      }
+
+      this.url = input.url;
+      this.credentials = input.credentials;
+
+      if (!options.headers) {
+        this.headers = new Headers(input.headers);
+      }
+
+      this.method = input.method;
+      this.mode = input.mode;
+
+      if (!body) {
+        body = input._bodyInit;
+        input.bodyUsed = true;
+      }
+    } else {
+      this.url = input;
+    }
+
+    this.credentials = options.credentials || this.credentials || 'omit';
+
+    if (options.headers || !this.headers) {
+      this.headers = new Headers(options.headers);
+    }
+
+    this.method = normalizeMethod(options.method || this.method || 'GET');
+    this.mode = options.mode || this.mode || null;
+    this.referrer = null;
+
+    if ((this.method === 'GET' || this.method === 'HEAD') && body) {
+      throw new TypeError('Body not allowed for GET or HEAD requests');
+    }
+
+    this._initBody(body, options);
+  }
+
+  Request.prototype.clone = function () {
+    return new Request(this);
+  };
+
+  function decode(body) {
+    var form = new FormData();
+    body.trim().split('&').forEach(function (bytes) {
+      if (bytes) {
+        var split = bytes.split('=');
+        var name = split.shift().replace(/\+/g, ' ');
+        var value = split.join('=').replace(/\+/g, ' ');
+        form.append(decodeURIComponent(name), decodeURIComponent(value));
+      }
+    });
+    return form;
+  }
+
+  function headers(xhr) {
+    var head = new Headers();
+    var pairs = xhr.getAllResponseHeaders().trim().split('\n');
+    pairs.forEach(function (header) {
+      var split = header.trim().split(':');
+      var key = split.shift().trim();
+      var value = split.join(':').trim();
+      head.append(key, value);
+    });
+    return head;
+  }
+
+  Body.call(Request.prototype);
+
+  function Response(bodyInit, options) {
+    if (!options) {
+      options = {};
+    }
+
+    this._initBody(bodyInit, options);
+
+    this.type = 'default';
+    this.status = options.status;
+    this.ok = this.status >= 200 && this.status < 300;
+    this.statusText = options.statusText;
+    this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers);
+    this.url = options.url || '';
+  }
+
+  Body.call(Response.prototype);
+
+  Response.prototype.clone = function () {
+    return new Response(this._bodyInit, {
+      status: this.status,
+      statusText: this.statusText,
+      headers: new Headers(this.headers),
+      url: this.url
+    });
+  };
+
+  Response.error = function () {
+    var response = new Response(null, {
+      status: 0,
+      statusText: ''
+    });
+    response.type = 'error';
+    return response;
+  };
+
+  var redirectStatuses = [301, 302, 303, 307, 308];
+
+  Response.redirect = function (url, status) {
+    if (redirectStatuses.indexOf(status) === -1) {
+      throw new RangeError('Invalid status code');
+    }
+
+    return new Response(null, {
+      status: status,
+      headers: {
+        location: url
+      }
+    });
+  };
+
+  self.Headers = Headers;
+  self.Request = Request;
+  self.Response = Response;
+
+  self.fetch = function (input, init) {
+    return new Promise(function (resolve, reject) {
+      var request;
+
+      if (Request.prototype.isPrototypeOf(input) && !init) {
+        request = input;
+      } else {
+        request = new Request(input, init);
+      }
+
+      var xhr = new XMLHttpRequest();
+
+      function responseURL() {
+        if ('responseURL' in xhr) {
+          return xhr.responseURL;
+        } // Avoid security warnings on getResponseHeader when not allowed by CORS
+
+
+        if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
+          return xhr.getResponseHeader('X-Request-URL');
+        }
+
+        return;
+      }
+
+      var __onLoadHandled = false;
+
+      function onload() {
+        if (xhr.readyState !== 4) {
+          return;
+        }
+
+        var status = xhr.status === 1223 ? 204 : xhr.status;
+
+        if (status < 100 || status > 599) {
+          if (__onLoadHandled) {
+            return;
+          } else {
+            __onLoadHandled = true;
+          }
+
+          reject(new TypeError('Network request failed'));
+          return;
+        }
+
+        var options = {
+          status: status,
+          statusText: xhr.statusText,
+          headers: headers(xhr),
+          url: responseURL()
+        };
+        var body = 'response' in xhr ? xhr.response : xhr.responseText;
+
+        if (__onLoadHandled) {
+          return;
+        } else {
+          __onLoadHandled = true;
+        }
+
+        resolve(new Response(body, options));
+      }
+
+      xhr.onreadystatechange = onload;
+      xhr.onload = onload;
+
+      xhr.onerror = function () {
+        if (__onLoadHandled) {
+          return;
+        } else {
+          __onLoadHandled = true;
+        }
+
+        reject(new TypeError('Network request failed'));
+      };
+
+      xhr.open(request.method, request.url, true); // `withCredentials` should be setted after calling `.open` in IE10
+      // http://stackoverflow.com/a/19667959/1219343
+
+      try {
+        if (request.credentials === 'include') {
+          if ('withCredentials' in xhr) {
+            xhr.withCredentials = true;
+          } else {
+            console && console.warn && console.warn('withCredentials is not supported, you can ignore this warning');
+          }
+        }
+      } catch (e) {
+        console && console.warn && console.warn('set withCredentials error:' + e);
+      }
+
+      if ('responseType' in xhr && support.blob) {
+        xhr.responseType = 'blob';
+      }
+
+      request.headers.forEach(function (value, name) {
+        xhr.setRequestHeader(name, value);
+      });
+      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
+    });
+  };
+
+  self.fetch.polyfill = true; // Support CommonJS
+
+  if ( true && module.exports) {
+    module.exports = self.fetch;
+  }
+})(typeof self !== 'undefined' ? self : this);
+
+/***/ }),
+
+/***/ 683:
+/***/ (function(module, exports) {
+
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
+  if (true) {
+    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
+		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  } else { var mod; }
+})(this, function (exports, module) {
+  'use strict';
+
+  var defaultOptions = {
+    timeout: 5000,
+    jsonpCallback: 'callback',
+    jsonpCallbackFunction: null
+  };
+
+  function generateCallbackFunction() {
+    return 'jsonp_' + Date.now() + '_' + Math.ceil(Math.random() * 100000);
+  }
+
+  function clearFunction(functionName) {
+    // IE8 throws an exception when you try to delete a property on window
+    // http://stackoverflow.com/a/1824228/751089
+    try {
+      delete window[functionName];
+    } catch (e) {
+      window[functionName] = undefined;
+    }
+  }
+
+  function removeScript(scriptId) {
+    var script = document.getElementById(scriptId);
+
+    if (script) {
+      document.getElementsByTagName('head')[0].removeChild(script);
+    }
+  }
+
+  function fetchJsonp(_url) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; // to avoid param reassign
+
+    var url = _url;
+    var timeout = options.timeout || defaultOptions.timeout;
+    var jsonpCallback = options.jsonpCallback || defaultOptions.jsonpCallback;
+    var timeoutId = undefined;
+    return new Promise(function (resolve, reject) {
+      var callbackFunction = options.jsonpCallbackFunction || generateCallbackFunction();
+      var scriptId = jsonpCallback + '_' + callbackFunction;
+
+      window[callbackFunction] = function (response) {
+        resolve({
+          ok: true,
+          // keep consistent with fetch API
+          json: function json() {
+            return Promise.resolve(response);
+          }
+        });
+        if (timeoutId) clearTimeout(timeoutId);
+        removeScript(scriptId);
+        clearFunction(callbackFunction);
+      }; // Check if the user set their own params, and if not add a ? to start a list of params
+
+
+      url += url.indexOf('?') === -1 ? '?' : '&';
+      var jsonpScript = document.createElement('script');
+      jsonpScript.setAttribute('src', '' + url + jsonpCallback + '=' + callbackFunction);
+
+      if (options.charset) {
+        jsonpScript.setAttribute('charset', options.charset);
+      }
+
+      jsonpScript.id = scriptId;
+      document.getElementsByTagName('head')[0].appendChild(jsonpScript);
+      timeoutId = setTimeout(function () {
+        reject(new Error('JSONP request to ' + _url + ' timed out'));
+        clearFunction(callbackFunction);
+        removeScript(scriptId);
+
+        window[callbackFunction] = function () {
+          clearFunction(callbackFunction);
+        };
+      }, timeout); // Caught if got 404/500
+
+      jsonpScript.onerror = function () {
+        reject(new Error('JSONP request to ' + _url + ' failed'));
+        clearFunction(callbackFunction);
+        removeScript(scriptId);
+        if (timeoutId) clearTimeout(timeoutId);
+      };
+    });
+  } // export as global function
+
+  /*
+  let local;
+  if (typeof global !== 'undefined') {
+    local = global;
+  } else if (typeof self !== 'undefined') {
+    local = self;
+  } else {
+    try {
+      local = Function('return this')();
+    } catch (e) {
+      throw new Error('polyfill failed because global object is unavailable in this environment');
+    }
+  }
+  local.fetchJsonp = fetchJsonp;
+  */
+
+
+  module.exports = fetchJsonp;
+});
+
+/***/ }),
+
+/***/ 347:
+/***/ (function(module, exports, __webpack_require__) {
+
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+(function (global, factory) {
+  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' ? factory() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+		(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
+		__WEBPACK_AMD_DEFINE_FACTORY__),
+		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
+})(this, function () {
+  'use strict';
+  /**
+   * @this {Promise}
+   */
+
+  function finallyConstructor(callback) {
+    var constructor = this.constructor;
+    return this.then(function (value) {
+      // @ts-ignore
+      return constructor.resolve(callback()).then(function () {
+        return value;
+      });
+    }, function (reason) {
+      // @ts-ignore
+      return constructor.resolve(callback()).then(function () {
+        // @ts-ignore
+        return constructor.reject(reason);
+      });
+    });
+  } // Store setTimeout reference so promise-polyfill will be unaffected by
+  // other code modifying setTimeout (like sinon.useFakeTimers())
+
+
+  var setTimeoutFunc = setTimeout;
+
+  function isArray(x) {
+    return Boolean(x && typeof x.length !== 'undefined');
+  }
+
+  function noop() {} // Polyfill for Function.prototype.bind
+
+
+  function bind(fn, thisArg) {
+    return function () {
+      fn.apply(thisArg, arguments);
+    };
+  }
+  /**
+   * @constructor
+   * @param {Function} fn
+   */
+
+
+  function Promise(fn) {
+    if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new');
+    if (typeof fn !== 'function') throw new TypeError('not a function');
+    /** @type {!number} */
+
+    this._state = 0;
+    /** @type {!boolean} */
+
+    this._handled = false;
+    /** @type {Promise|undefined} */
+
+    this._value = undefined;
+    /** @type {!Array<!Function>} */
+
+    this._deferreds = [];
+    doResolve(fn, this);
+  }
+
+  function handle(self, deferred) {
+    while (self._state === 3) {
+      self = self._value;
+    }
+
+    if (self._state === 0) {
+      self._deferreds.push(deferred);
+
+      return;
+    }
+
+    self._handled = true;
+
+    Promise._immediateFn(function () {
+      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
+
+      if (cb === null) {
+        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
+        return;
+      }
+
+      var ret;
+
+      try {
+        ret = cb(self._value);
+      } catch (e) {
+        reject(deferred.promise, e);
+        return;
+      }
+
+      resolve(deferred.promise, ret);
+    });
+  }
+
+  function resolve(self, newValue) {
+    try {
+      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');
+
+      if (newValue && (_typeof(newValue) === 'object' || typeof newValue === 'function')) {
+        var then = newValue.then;
+
+        if (newValue instanceof Promise) {
+          self._state = 3;
+          self._value = newValue;
+          finale(self);
+          return;
+        } else if (typeof then === 'function') {
+          doResolve(bind(then, newValue), self);
+          return;
+        }
+      }
+
+      self._state = 1;
+      self._value = newValue;
+      finale(self);
+    } catch (e) {
+      reject(self, e);
+    }
+  }
+
+  function reject(self, newValue) {
+    self._state = 2;
+    self._value = newValue;
+    finale(self);
+  }
+
+  function finale(self) {
+    if (self._state === 2 && self._deferreds.length === 0) {
+      Promise._immediateFn(function () {
+        if (!self._handled) {
+          Promise._unhandledRejectionFn(self._value);
+        }
+      });
+    }
+
+    for (var i = 0, len = self._deferreds.length; i < len; i++) {
+      handle(self, self._deferreds[i]);
+    }
+
+    self._deferreds = null;
+  }
+  /**
+   * @constructor
+   */
+
+
+  function Handler(onFulfilled, onRejected, promise) {
+    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
+    this.onRejected = typeof onRejected === 'function' ? onRejected : null;
+    this.promise = promise;
+  }
+  /**
+   * Take a potentially misbehaving resolver function and make sure
+   * onFulfilled and onRejected are only called once.
+   *
+   * Makes no guarantees about asynchrony.
+   */
+
+
+  function doResolve(fn, self) {
+    var done = false;
+
+    try {
+      fn(function (value) {
+        if (done) return;
+        done = true;
+        resolve(self, value);
+      }, function (reason) {
+        if (done) return;
+        done = true;
+        reject(self, reason);
+      });
+    } catch (ex) {
+      if (done) return;
+      done = true;
+      reject(self, ex);
+    }
+  }
+
+  Promise.prototype['catch'] = function (onRejected) {
+    return this.then(null, onRejected);
+  };
+
+  Promise.prototype.then = function (onFulfilled, onRejected) {
+    // @ts-ignore
+    var prom = new this.constructor(noop);
+    handle(this, new Handler(onFulfilled, onRejected, prom));
+    return prom;
+  };
+
+  Promise.prototype['finally'] = finallyConstructor;
+
+  Promise.all = function (arr) {
+    return new Promise(function (resolve, reject) {
+      if (!isArray(arr)) {
+        return reject(new TypeError('Promise.all accepts an array'));
+      }
+
+      var args = Array.prototype.slice.call(arr);
+      if (args.length === 0) return resolve([]);
+      var remaining = args.length;
+
+      function res(i, val) {
+        try {
+          if (val && (_typeof(val) === 'object' || typeof val === 'function')) {
+            var then = val.then;
+
+            if (typeof then === 'function') {
+              then.call(val, function (val) {
+                res(i, val);
+              }, reject);
+              return;
+            }
+          }
+
+          args[i] = val;
+
+          if (--remaining === 0) {
+            resolve(args);
+          }
+        } catch (ex) {
+          reject(ex);
+        }
+      }
+
+      for (var i = 0; i < args.length; i++) {
+        res(i, args[i]);
+      }
+    });
+  };
+
+  Promise.resolve = function (value) {
+    if (value && _typeof(value) === 'object' && value.constructor === Promise) {
+      return value;
+    }
+
+    return new Promise(function (resolve) {
+      resolve(value);
+    });
+  };
+
+  Promise.reject = function (value) {
+    return new Promise(function (resolve, reject) {
+      reject(value);
+    });
+  };
+
+  Promise.race = function (arr) {
+    return new Promise(function (resolve, reject) {
+      if (!isArray(arr)) {
+        return reject(new TypeError('Promise.race accepts an array'));
+      }
+
+      for (var i = 0, len = arr.length; i < len; i++) {
+        Promise.resolve(arr[i]).then(resolve, reject);
+      }
+    });
+  }; // Use polyfill for setImmediate for performance gains
+
+
+  Promise._immediateFn = // @ts-ignore
+  typeof setImmediate === 'function' && function (fn) {
+    // @ts-ignore
+    setImmediate(fn);
+  } || function (fn) {
+    setTimeoutFunc(fn, 0);
+  };
+
+  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
+    if (typeof console !== 'undefined' && console) {
+      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
+    }
+  };
+  /** @suppress {undefinedVars} */
+
+
+  var globalNS = function () {
+    // the only reliable means to get the global object is
+    // `Function('return this')()`
+    // However, this causes CSP violations in Chrome apps.
+    if (typeof self !== 'undefined') {
+      return self;
+    }
+
+    if (typeof window !== 'undefined') {
+      return window;
+    }
+
+    if (typeof __webpack_require__.g !== 'undefined') {
+      return __webpack_require__.g;
+    }
+
+    throw new Error('unable to locate global object');
+  }();
+
+  if (!('Promise' in globalNS)) {
+    globalNS['Promise'] = Promise;
+  } else if (!globalNS.Promise.prototype['finally']) {
+    globalNS.Promise.prototype['finally'] = finallyConstructor;
+  }
+});
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		if(__webpack_module_cache__[moduleId]) {
+/******/ 			return __webpack_module_cache__[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/compat get default export */
+/******/ 	!function() {
+/******/ 		// getDefaultExport function for compatibility with non-harmony modules
+/******/ 		__webpack_require__.n = function(module) {
+/******/ 			var getter = module && module.__esModule ?
+/******/ 				function() { return module['default']; } :
+/******/ 				function() { return module; };
+/******/ 			__webpack_require__.d(getter, { a: getter });
+/******/ 			return getter;
+/******/ 		};
+/******/ 	}();
+/******/ 	
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	!function() {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = function(exports, definition) {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	}();
+/******/ 	
+/******/ 	/* webpack/runtime/global */
+/******/ 	!function() {
+/******/ 		__webpack_require__.g = (function() {
+/******/ 			if (typeof globalThis === 'object') return globalThis;
+/******/ 			try {
+/******/ 				return this || new Function('return this')();
+/******/ 			} catch (e) {
+/******/ 				if (typeof window === 'object') return window;
+/******/ 			}
+/******/ 		})();
+/******/ 	}();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	!function() {
+/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
+/******/ 	}();
+/******/ 	
+/************************************************************************/
+!function() {
+"use strict";
+
+// UNUSED EXPORTS: AddressMatchService, BuffersAnalystJobsParameter, ElasticSearch, GeoCodingParameter, GeoDecodingParameter, KernelDensityJobParameter, MapVLayer, MapVRenderer, MappingParameters, OutputSetting, OverlayGeoJobParameter, ProcessingService, SecurityManager, SingleObjectQueryJobsParameter, SummaryAttributesJobsParameter, SummaryMeshJobParameter, SummaryRegionJobParameter, SuperMap, TopologyValidatorJobsParameter
+
+;// CONCATENATED MODULE: ./src/common/SuperMap.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+var SuperMap = window.SuperMap = window.SuperMap || {};
+SuperMap.Components = window.SuperMap.Components || {};
+;// CONCATENATED MODULE: ./src/common/commontypes/Pixel.js
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+/**
+ * @class SuperMap.Pixel
+ * @category BaseTypes Geometry
+ * @classdesc 此类用 x,y 坐标描绘屏幕坐标(像素点)。
+ * @param {number} [x=0.0] - x 坐标。
+ * @param {number} [y=0.0] - y 坐标。
+ * @param {SuperMap.Pixel.Mode} [mode=SuperMap.Pixel.Mode.LeftTop] - 坐标模式。
+ *
+ * @example
+ * //单独创建一个对象
+ * var pixcel = new SuperMap.Pixel(100,50);
+ *
+ * //依据 size 创建
+ *  var size = new SuperMap.Size(21,25);
+ *  var offset = new SuperMap.Pixel(-(size.w/2), -size.h);
+ */
+
+var Pixel = /*#__PURE__*/function () {
+  function Pixel(x, y, mode) {
+    _classCallCheck(this, Pixel);
+
+    /**
+     * @member {number} [SuperMap.Pixel.prototype.x=0.0]
+     * @description x 坐标。
+     */
+    this.x = x ? parseFloat(x) : 0.0;
+    /**
+     * @member {number} [SuperMap.Pixel.prototype.y=0.0]
+     * @description y 坐标。
+     */
+
+    this.y = y ? parseFloat(y) : 0.0;
+    /**
+     * @member {SuperMap.Pixel.Mode} [SuperMap.Pixel.prototype.mode=SuperMap.Pixel.Mode.LeftTop]
+     * @description 坐标模式,有左上、右上、右下、左下这几种模式,分别表示相对于左上角、右上角、右下角、左下角的坐标。 
+     */
+
+    this.mode = mode;
+    this.CLASS_NAME = "SuperMap.Pixel";
+    /**
+     * @enum SuperMap.Pixel.Mode
+     * @readonly
+     * @description 模式。
+     * @type {string}
+     */
+
+    SuperMap.Pixel.Mode = {
+      /** 左上模式。*/
+      LeftTop: "lefttop",
+
+      /** 右上模式。 */
+      RightTop: "righttop",
+
+      /** 右下模式。 */
+      RightBottom: "rightbottom",
+
+      /** 左下模式。 */
+      LeftBottom: "leftbottom"
+    };
+  }
+  /**
+   * @function SuperMap.Pixel.prototype.toString
+   * @description 返回此对象的字符串形式。
+   * @example
+   *
+   * var pixcel = new SuperMap.Pixel(100,50);
+   * var str = pixcel.toString();
+   *
+   * @returns {string} 例如: "x=200.4,y=242.2"
+   */
+
+
+  _createClass(Pixel, [{
+    key: "toString",
+    value: function toString() {
+      return "x=" + this.x + ",y=" + this.y;
+    }
+    /**
+     * @function SuperMap.Pixel.prototype.clone
+     * @description 克隆当前的 pixel 对象。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = pixcel.clone();
+     * @returns {SuperMap.Pixel} 返回一个新的与当前 pixel 对象有相同 x、y 坐标的 pixel 对象。
+     */
+
+  }, {
+    key: "clone",
+    value: function clone() {
+      return new Pixel(this.x, this.y, this.mode);
+    }
+    /**
+     * @function SuperMap.Pixel.prototype.equals
+     * @description 比较两 pixel 是否相等。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(100,50);
+     * var isEquals = pixcel.equals(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 用于比较相等的 pixel 对象。
+     * @returns {boolean} 如果传入的像素点和当前像素点相同返回 true,如果不同或传入参数为 NULL 则返回 false。
+     */
+
+  }, {
+    key: "equals",
+    value: function equals(px) {
+      var equals = false;
+
+      if (px != null) {
+        equals = this.x == px.x && this.y == px.y || isNaN(this.x) && isNaN(this.y) && isNaN(px.x) && isNaN(px.y);
+      }
+
+      return equals;
+    }
+    /**
+     * @function SuperMap.Pixel.prototype.distanceTo
+     * @description 返回两个 pixel 的距离。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(110,30);
+     * var distance = pixcel.distanceTo(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 用于计算的一个 pixel。
+     * @returns {float} 作为参数传入的像素与当前像素点的距离。
+     */
+
+  }, {
+    key: "distanceTo",
+    value: function distanceTo(px) {
+      return Math.sqrt(Math.pow(this.x - px.x, 2) + Math.pow(this.y - px.y, 2));
+    }
+    /**
+     * @function SuperMap.Pixel.prototype.add
+     * @description 在原来像素坐标基础上,x 值加上传入的 x 参数,y 值加上传入的 y 参数。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * //pixcel2是新的对象
+     * var pixcel2 = pixcel.add(20,30);
+     *
+     * @param {number} x - 传入的 x 值。
+     * @param {number} y - 传入的 y 值。
+     * @returns {SuperMap.Pixel} 返回一个新的 pixel 对象,该 pixel 是由当前的 pixel 与传入的 x,y 相加得到。
+     */
+
+  }, {
+    key: "add",
+    value: function add(x, y) {
+      if (x == null || y == null) {
+        throw new TypeError('Pixel.add cannot receive null values');
+      }
+
+      return new Pixel(this.x + x, this.y + y);
+    }
+    /**
+     * @function SuperMap.Pixel.prototype.offset
+     * @description 通过传入的 {@link SuperMap.Pixel} 参数对原屏幕坐标进行偏移。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * var pixcel2 = new SuperMap.Pixel(130,20);
+     * //pixcel3 是新的对象
+     * var pixcel3 = pixcel.offset(pixcel2);
+     *
+     * @param {SuperMap.Pixel} px - 传入的 <SuperMap.Pixel> 对象。
+     * @returns {SuperMap.Pixel} 返回一个新的 pixel,该 pixel 是由当前的 pixel 对象的 x,y 值与传入的 Pixel 对象的 x,y 值相加得到。
+     */
+
+  }, {
+    key: "offset",
+    value: function offset(px) {
+      var newPx = this.clone();
+
+      if (px) {
+        newPx = this.add(px.x, px.y);
+      }
+
+      return newPx;
+    }
+    /**
+     *
+     * @function SuperMap.Pixel.prototype.destroy
+     * @description 销毁此对象。销毁后此对象的所有属性为 null,而不是初始值。
+     * @example
+     * var pixcel = new SuperMap.Pixel(100,50);
+     * pixcel.destroy();
+     */
+
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.x = null;
+      this.y = null;
+      this.mode = null;
+    }
+  }]);
+
+  return Pixel;
+}();
+SuperMap.Pixel = Pixel;
+;// CONCATENATED MODULE: ./src/common/commontypes/BaseTypes.js
+function BaseTypes_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+/**
+ *@namespace SuperMap
+ *@category BaseTypes Namespace
+ */
+
+/**
+ * @function SuperMap.inherit
+ * @description 除了 C 和 P 两个必要参数外,可以传递任意数量的对象,这些对象都将继承C。
+ * @memberOf SuperMap
+ * @param {Object} C - 继承的类。
+ * @param {Object} P - 被继承的父类。
+ */
+
+SuperMap.inherit = function (C, P) {
+  var F = function F() {};
+
+  F.prototype = P.prototype;
+  C.prototype = new F();
+  var i, l, o;
+
+  for (i = 2, l = arguments.length; i < l; i++) {
+    o = arguments[i];
+
+    if (typeof o === "function") {
+      o = o.prototype;
+    }
+
+    SuperMap.Util.extend(C.prototype, o);
+  }
+};
+/**
+ * @function SuperMap.mixin 
+ * @description 实现多重继承。
+ * @memberOf SuperMap
+ * @param {Class|Object} ...mixins - 继承的类。
+ */
+
+
+SuperMap.mixin = function () {
+  for (var _len = arguments.length, mixins = new Array(_len), _key = 0; _key < _len; _key++) {
+    mixins[_key] = arguments[_key];
+  }
+
+  var Mix = function Mix(options) {
+    BaseTypes_classCallCheck(this, Mix);
+
+    for (var index = 0; index < mixins.length; index++) {
+      copyProperties(this, new mixins[index](options));
+    }
+  };
+
+  for (var index = 0; index < mixins.length; index++) {
+    var mixin = mixins[index];
+    copyProperties(Mix, mixin);
+    copyProperties(Mix.prototype, mixin.prototype);
+    copyProperties(Mix.prototype, new mixin());
+  }
+
+  return Mix;
+
+  function copyProperties(target, source) {
+    var ownKeys = Object.getOwnPropertyNames(source);
+
+    if (Object.getOwnPropertySymbols) {
+      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source));
+    }
+
+    for (var index = 0; index < ownKeys.length; index++) {
+      var key = ownKeys[index];
+
+      if (key !== "constructor" && key !== "prototype" && key !== "name" && key !== "length") {
+        var desc = Object.getOwnPropertyDescriptor(source, key);
+
+        if (window["ActiveXObject"]) {
+          Object.defineProperty(target, key, desc || {});
+        } else {
+          Object.defineProperty(target, key, desc);
+        }
+      }
+    }
+  }
+};
+/**
+ * @name String
+ * @namespace
+ * @memberOf SuperMap
+ * @category BaseTypes Util
+ * @description 字符串操作的一系列常用扩展函数。
+ */
+
+
+var StringExt = SuperMap.String = {
+  /**
+   * @function SuperMap.String.startsWith
+   * @description 判断目标字符串是否以指定的子字符串开头。
+   * @param {string} str - 目标字符串。
+   * @param {string} sub - 查找的子字符串。
+   * @returns {boolean} 目标字符串以指定的子字符串开头,则返回 true;否则返回 false。
+   */
+  startsWith: function startsWith(str, sub) {
+    return str.indexOf(sub) == 0;
+  },
+
+  /**
+   * @function SuperMap.String.contains
+   * @description 判断目标字符串是否包含指定的子字符串。
+   * @param {string} str - 目标字符串。
+   * @param {string} sub - 查找的子字符串。
+   * @returns {boolean} 目标字符串中包含指定的子字符串,则返回 true;否则返回 false。
+   */
+  contains: function contains(str, sub) {
+    return str.indexOf(sub) != -1;
+  },
+
+  /**
+   * @function SuperMap.String.trim
+   * @description 删除一个字符串的开头和结尾处的所有空白字符。
+   * @param {string} str - (可能)存在空白字符填塞的字符串。
+   * @returns {string} 删除开头和结尾处空白字符后的字符串。
+   */
+  trim: function trim(str) {
+    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+  },
+
+  /**
+   * @function SuperMap.String.camelize
+   * @description 骆驼式("-")连字符的字符串处理。
+   * 例如:"chicken-head" becomes "chickenHead",
+   *       "-chicken-head" becomes "ChickenHead"。
+   * @param {string} str - 要处理的字符串,原始内容不应被修改。
+   * @returns {string}
+   */
+  camelize: function camelize(str) {
+    var oStringList = str.split('-');
+    var camelizedString = oStringList[0];
+
+    for (var i = 1, len = oStringList.length; i < len; i++) {
+      var s = oStringList[i];
+      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
+    }
+
+    return camelizedString;
+  },
+
+  /**
+   * @function SuperMap.String.format
+   * @description 提供带 ${token} 标记的字符串, 返回 context 对象属性中指定标记的属性值。
+   * @example
+   * 示例:
+   * (code)
+   * 1、template = "${value,getValue}";
+   *         context = {value: {getValue:function(){return Math.max.apply(null,argument);}}};
+   *         args = [2,23,12,36,21];
+   *       返回值:36
+   * (end)
+   * 示例:
+   * (code)
+   * 2、template = "$${{value,getValue}}";
+   *         context = {value: {getValue:function(){return Math.max.apply(null,argument);}}};
+   *         args = [2,23,12,36,21];
+   *       返回值:"${36}"
+   * (end)
+   * 示例:
+   * (code)
+   * 3、template = "${a,b}";
+   *         context = {a: {b:"format"}};
+   *         args = null;
+   *       返回值:"format"
+   * (end)
+   * 示例:
+   * (code)
+   * 3、template = "${a,b}";
+   *         context = null;
+   *         args = null;
+   *       返回值:"${a.b}"
+   * (end)
+   * @param {string} template - 带标记的字符串将要被替换。参数 template 格式为"${token}",此处的 token 标记会替换为 context["token"] 属性的值。
+   * @param {Object} [context=window] - 带有属性的可选对象的属性用于匹配格式化字符串中的标记。如果该参数为空,将使用 window 对象。
+   * @param {Array} [args] - 可选参数传递给在 context 对象上找到的函数。
+   * @returns {string} 从 context 对象属性中替换字符串标记位的字符串。 
+   */
+  format: function format(template, context, args) {
+    if (!context) {
+      context = window;
+    } // Example matching:
+    // str   = ${foo.bar}
+    // match = foo.bar
+
+
+    var replacer = function replacer(str, match) {
+      var replacement; // Loop through all subs. Example: ${a.b.c}
+      // 0 -> replacement = context[a];
+      // 1 -> replacement = context[a][b];
+      // 2 -> replacement = context[a][b][c];
+
+      var subs = match.split(/\.+/);
+
+      for (var i = 0; i < subs.length; i++) {
+        if (i == 0) {
+          replacement = context;
+        }
+
+        replacement = replacement[subs[i]];
+      }
+
+      if (typeof replacement === "function") {
+        replacement = args ? replacement.apply(null, args) : replacement();
+      } // If replacement is undefined, return the string 'undefined'.
+      // This is a workaround for a bugs in browsers not properly
+      // dealing with non-participating groups in regular expressions:
+      // http://blog.stevenlevithan.com/archives/npcg-javascript
+
+
+      if (typeof replacement == 'undefined') {
+        return 'undefined';
+      } else {
+        return replacement;
+      }
+    };
+
+    return template.replace(SuperMap.String.tokenRegEx, replacer);
+  },
+
+  /**
+   * @member {RegExp} [SuperMap.String.tokenRegEx]
+   * @description 寻找带 token 的字符串,默认为 tokenRegEx=/\$\{([\w.]+?)\}/g。
+   * @example
+   * Examples: ${a}, ${a.b.c}, ${a-b}, ${5}
+   */
+  tokenRegEx: /\$\{([\w.]+?)\}/g,
+
+  /**
+   * @member {RegExp} [SuperMap.String.numberRegEx]
+   * @description 判断一个字符串是否只包含一个数值,默认为 numberRegEx=/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/。
+   */
+  numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/,
+
+  /**
+   * @function SuperMap.String.isNumeric
+   * @description 判断一个字符串是否只包含一个数值。
+   * @example
+   * (code)
+   * SuperMap.String.isNumeric("6.02e23") // true
+   * SuperMap.String.isNumeric("12 dozen") // false
+   * SuperMap.String.isNumeric("4") // true
+   * SuperMap.String.isNumeric(" 4 ") // false
+   * (end)
+   * @returns {boolean} 字符串包含唯一的数值,返回 true;否则返回 false。
+   */
+  isNumeric: function isNumeric(value) {
+    return SuperMap.String.numberRegEx.test(value);
+  },
+
+  /**
+   * @function SuperMap.String.numericIf
+   * @description 把一个看似数值型的字符串转化为一个数值。
+   * @returns {(number|string)} 如果能转换为数值则返回数值,否则返回字符串本身。
+   */
+  numericIf: function numericIf(value) {
+    return SuperMap.String.isNumeric(value) ? parseFloat(value) : value;
+  }
+};
+/**
+ * @name Number
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 数值操作的一系列常用扩展函数。
+ */
+
+var NumberExt = SuperMap.Number = {
+  /**
+   * @member {string} [SuperMap.Number.decimalSeparator='.']
+   * @description 格式化数字时默认的小数点分隔符。
+   * @constant
+   */
+  decimalSeparator: ".",
+
+  /**
+   * @member {string} [SuperMap.Number.thousandsSeparator=',']
+   * @description 格式化数字时默认的千位分隔符。
+   * @constant
+   */
+  thousandsSeparator: ",",
+
+  /**
+   * @function SuperMap.Number.limitSigDigs
+   * @description 限制浮点数的有效数字位数。
+   * @param {number} num - 浮点数。
+   * @param {integer} sig - 有效位数。
+   * @returns {number} 将数字四舍五入到指定数量的有效位数。
+   */
+  limitSigDigs: function limitSigDigs(num, sig) {
+    var fig = 0;
+
+    if (sig > 0) {
+      fig = parseFloat(num.toPrecision(sig));
+    }
+
+    return fig;
+  },
+
+  /**
+   * @function SuperMap.Number.format
+   * @description 数字格式化输出。
+   * @param {number} num - 数字。
+   * @param {integer} [dec=0]  - 数字的小数部分四舍五入到指定的位数。设置为 null 值时小数部分不变。
+   * @param {string} [tsep=','] - 千位分隔符。
+   * @param {string} [dsep='.'] - 小数点分隔符。
+   * @returns {string} 数字格式化后的字符串。
+   */
+  format: function format(num, dec, tsep, dsep) {
+    dec = typeof dec != "undefined" ? dec : 0;
+    tsep = typeof tsep != "undefined" ? tsep : SuperMap.Number.thousandsSeparator;
+    dsep = typeof dsep != "undefined" ? dsep : SuperMap.Number.decimalSeparator;
+
+    if (dec != null) {
+      num = parseFloat(num.toFixed(dec));
+    }
+
+    var parts = num.toString().split(".");
+
+    if (parts.length === 1 && dec == null) {
+      // integer where we do not want to touch the decimals
+      dec = 0;
+    }
+
+    var integer = parts[0];
+
+    if (tsep) {
+      var thousands = /(-?[0-9]+)([0-9]{3})/;
+
+      while (thousands.test(integer)) {
+        integer = integer.replace(thousands, "$1" + tsep + "$2");
+      }
+    }
+
+    var str;
+
+    if (dec == 0) {
+      str = integer;
+    } else {
+      var rem = parts.length > 1 ? parts[1] : "0";
+
+      if (dec != null) {
+        rem = rem + new Array(dec - rem.length + 1).join("0");
+      }
+
+      str = integer + dsep + rem;
+    }
+
+    return str;
+  }
+};
+
+if (!Number.prototype.limitSigDigs) {
+  /**
+   * APIMethod: Number.limitSigDigs
+   * 限制浮点数的有效数字位数.
+   * @param {integer} sig -有效位数。
+   * @returns {integer} 将数字四舍五入到指定数量的有效位数。
+   *           如果传入值 为 null、0、或者是负数, 返回值 0。
+   */
+  Number.prototype.limitSigDigs = function (sig) {
+    return NumberExt.limitSigDigs(this, sig);
+  };
+}
+/**
+ * @name Function
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 函数操作的一系列常用扩展函数。
+ */
+
+
+var FunctionExt = SuperMap.Function = {
+  /**
+   * @function SuperMap.Function.bind
+   * @description 绑定函数到对象。方便创建 this 的作用域。
+   * @param {function} func - 输入函数。
+   * @param {Object} object - 对象绑定到输入函数(作为输入函数的 this 对象)。
+   * @returns {function} object 参数作为 func 函数的 this 对象。
+   */
+  bind: function bind(func, object) {
+    // create a reference to all arguments past the second one
+    var args = Array.prototype.slice.apply(arguments, [2]);
+    return function () {
+      // Push on any additional arguments from the actual function call.
+      // These will come after those sent to the bind call.
+      var newArgs = args.concat(Array.prototype.slice.apply(arguments, [0]));
+      return func.apply(object, newArgs);
+    };
+  },
+
+  /**
+   * @function SuperMap.Function.bindAsEventListener
+   * @description 绑定函数到对象,在调用该函数时配置并使用事件对象作为第一个参数。
+   * @param {function} func - 用于监听事件的函数。
+   * @param {Object} object - this 对象的引用。
+   * @returns {function}
+   */
+  bindAsEventListener: function bindAsEventListener(func, object) {
+    return function (event) {
+      return func.call(object, event || window.event);
+    };
+  },
+
+  /**
+   * @function SuperMap.Function.False
+   * @description 该函数仅仅返回 false。该函数主要是避免在 IE8 以下浏览中 DOM 事件句柄的匿名函数问题。
+   * @example
+   * document.onclick = SuperMap.Function.False;
+   * @returns {boolean}
+   */
+  False: function False() {
+    return false;
+  },
+
+  /**
+   * @function SuperMap.Function.True
+   * @description 该函数仅仅返回 true。该函数主要是避免在 IE8 以下浏览中 DOM 事件句柄的匿名函数问题。
+   * @example
+   * document.onclick = SuperMap.Function.True;
+   * @returns {boolean}
+   */
+  True: function True() {
+    return true;
+  },
+
+  /**
+   * @function SuperMap.Function.Void
+   * @description 可重用函数,仅仅返回 "undefined"。
+   * @returns {undefined}
+   */
+  Void: function Void() {}
+};
+/**
+ * @name Array
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description 数组操作的一系列常用扩展函数。
+ */
+
+var ArrayExt = SuperMap.Array = {
+  /**
+   * @function SuperMap.Array.filter
+   * @description 过滤数组,提供了 ECMA-262 标准中 Array.prototype.filter 函数的扩展。详见:{@link http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter}
+   * @param {Array} array - 要过滤的数组。
+   * @param {function} callback - 数组中的每一个元素调用该函数。</br>
+   *     如果函数的返回值为 true,该元素将包含在返回的数组中。该函数有三个参数: 数组中的元素,元素的索引,数组自身。</br>
+   *     如果设置了可选参数 caller,在调用 callback 时,使用可选参数 caller 设置为 callback 的参数。</br>
+   * @param {Object} [caller] - 在调用 callback 时,使用参数 caller 设置为 callback 的参数。
+   * @returns {Array} callback 函数返回 true 时的元素将作为返回数组中的元素。
+   */
+  filter: function filter(array, callback, caller) {
+    var selected = [];
+
+    if (Array.prototype.filter) {
+      selected = array.filter(callback, caller);
+    } else {
+      var len = array.length;
+
+      if (typeof callback != "function") {
+        throw new TypeError();
+      }
+
+      for (var i = 0; i < len; i++) {
+        if (i in array) {
+          var val = array[i];
+
+          if (callback.call(caller, val, i, array)) {
+            selected.push(val);
+          }
+        }
+      }
+    }
+
+    return selected;
+  }
+};
+;// CONCATENATED MODULE: ./src/common/commontypes/Util.js
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+var Util = SuperMap.Util = SuperMap.Util || {};
+/**
+ * @name Util
+ * @memberOf SuperMap
+ * @namespace
+ * @category BaseTypes Util
+ * @description common 工具类。
+ */
+
+/**
+ * @description 复制源对象的所有属性到目标对象上,源对象上的没有定义的属性在目标对象上也不会被设置。
+ * @example
+ * 要复制 SuperMap.Size 对象的所有属性到自定义对象上,使用方法如下:
+ *     var size = new SuperMap.Size(100, 100);
+ *     var obj = {};
+ *     SuperMap.Util.extend(obj, size);
+ * @param {Object} [destination] - 目标对象。
+ * @param {Object} source - 源对象,其属性将被设置到目标对象上。
+ * @returns {Object} 目标对象。
+ */
+
+SuperMap.Util.extend = function (destination, source) {
+  destination = destination || {};
+
+  if (source) {
+    for (var property in source) {
+      var value = source[property];
+
+      if (value !== undefined) {
+        destination[property] = value;
+      }
+    }
+    /**
+     * IE doesn't include the toString property when iterating over an object's
+     * properties with the for(property in object) syntax.  Explicitly check if
+     * the source has its own toString property.
+     */
+
+    /*
+     * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative
+     * prototype object" when calling hawOwnProperty if the source object
+     * is an instance of window.Event.
+     */
+
+
+    var sourceIsEvt = typeof window.Event === "function" && source instanceof window.Event;
+
+    if (!sourceIsEvt && source.hasOwnProperty && source.hasOwnProperty("toString")) {
+      destination.toString = source.toString;
+    }
+  }
+
+  return destination;
+};
+/**
+ * @description 对象拷贝。
+ * @param {Object} [des] - 目标对象。
+ * @param {Object} soc - 源对象。
+ */
+
+
+SuperMap.Util.copy = function (des, soc) {
+  des = des || {};
+  var v;
+
+  if (soc) {
+    for (var p in des) {
+      v = soc[p];
+
+      if (typeof v !== 'undefined') {
+        des[p] = v;
+      }
+    }
+  }
+};
+/**
+ * @description 销毁对象,将其属性置空。
+ * @param {Object} [obj] - 目标对象。
+ */
+
+
+SuperMap.Util.reset = function (obj) {
+  obj = obj || {};
+
+  for (var p in obj) {
+    if (obj.hasOwnProperty(p)) {
+      if (_typeof(obj[p]) === "object" && obj[p] instanceof Array) {
+        for (var i in obj[p]) {
+          if (obj[p][i].destroy) {
+            obj[p][i].destroy();
+          }
+        }
+
+        obj[p].length = 0;
+      } else if (_typeof(obj[p]) === "object" && obj[p] instanceof Object) {
+        if (obj[p].destroy) {
+          obj[p].destroy();
+        }
+      }
+
+      obj[p] = null;
+    }
+  }
+};
+/**
+ * @description 获取 HTML 元素数组。
+ * @returns {Array.<HTMLElement>} HTML 元素数组。
+ */
+
+
+SuperMap.Util.getElement = function () {
+  var elements = [];
+
+  for (var i = 0, len = arguments.length; i < len; i++) {
+    var element = arguments[i];
+
+    if (typeof element === 'string') {
+      element = document.getElementById(element);
+    }
+
+    if (arguments.length === 1) {
+      return element;
+    }
+
+    elements.push(element);
+  }
+
+  return elements;
+};
+/**
+ * @description instance of 的跨浏览器实现。
+ * @param {Object} o - 对象。
+ * @returns {boolean} 是否是页面元素。
+ */
+
+
+SuperMap.Util.isElement = function (o) {
+  return !!(o && o.nodeType === 1);
+};
+/**
+ * @description 判断一个对象是否是数组。
+ * @param {Object} a - 对象。
+ * @returns {boolean} 是否是数组。
+ */
+
+
+SuperMap.Util.isArray = function (a) {
+  return Object.prototype.toString.call(a) === '[object Array]';
+};
+/**
+ * @description 从数组中删除某一项。
+ * @param {Array} array - 数组。
+ * @param {Object} item - 数组中要删除的一项。
+ * @returns {Array} 执行删除操作后的数组。
+ */
+
+
+SuperMap.Util.removeItem = function (array, item) {
+  for (var i = array.length - 1; i >= 0; i--) {
+    if (array[i] === item) {
+      array.splice(i, 1); //break;more than once??
+    }
+  }
+
+  return array;
+};
+/**
+ * @description 获取某对象再数组中的索引值。
+ * @param {Array} array - 数组。
+ * @param {Object} obj - 对象。
+ * @returns {number} 某对象再数组中的索引值。
+ */
+
+
+SuperMap.Util.indexOf = function (array, obj) {
+  if (array == null) {
+    return -1;
+  } else {
+    // use the build-in function if available.
+    if (typeof array.indexOf === "function") {
+      return array.indexOf(obj);
+    } else {
+      for (var i = 0, len = array.length; i < len; i++) {
+        if (array[i] === obj) {
+          return i;
+        }
+      }
+
+      return -1;
+    }
+  }
+};
+/**
+ * @description 修改某 DOM 元素的许多属性。
+ * @param {HTMLElement} element - 待修改的 DOM 元素。
+ * @param {string} [id] - DOM 元素的 ID。
+ * @param {SuperMap.Pixel} [px] - 包含 DOM 元素的 style 属性的 left 和 top 属性。
+ * @param {SuperMap.Size} [sz] - 包含 DOM 元素的 width 和 height 属性。
+ * @param {string} [position] - DOM 元素的 position 属性。
+ * @param {string} [border] - DOM 元素的 style 属性的 border 属性。
+ * @param {string} [overflow] - DOM 元素的 style 属性的 overflow 属性。
+ * @param {number} [opacity] - 不透明度值。取值范围为(0.0 - 1.0)。
+ */
+
+
+SuperMap.Util.modifyDOMElement = function (element, id, px, sz, position, border, overflow, opacity) {
+  if (id) {
+    element.id = id;
+  }
+
+  if (px) {
+    element.style.left = px.x + "px";
+    element.style.top = px.y + "px";
+  }
+
+  if (sz) {
+    element.style.width = sz.w + "px";
+    element.style.height = sz.h + "px";
+  }
+
+  if (position) {
+    element.style.position = position;
+  }
+
+  if (border) {
+    element.style.border = border;
+  }
+
+  if (overflow) {
+    element.style.overflow = overflow;
+  }
+
+  if (parseFloat(opacity) >= 0.0 && parseFloat(opacity) < 1.0) {
+    element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';
+    element.style.opacity = opacity;
+  } else if (parseFloat(opacity) === 1.0) {
+    element.style.filter = '';
+    element.style.opacity = '';
+  }
+};
+/**
+ * @description Takes an object and copies any properties that don't exist from
+ *     another properties, by analogy with SuperMap.Util.extend() from
+ *     Prototype.js.
+ *
+ * @param {Object} [to] - 目标对象。
+ * @param {Object} from - 源对象。Any properties of this object that
+ *     are undefined in the to object will be set on the to object.
+ *
+ * @returns {Object} A reference to the to object.  Note that the to argument is modified
+ *     in place and returned by this function.
+ */
+
+
+SuperMap.Util.applyDefaults = function (to, from) {
+  to = to || {};
+  /*
+   * FF/Windows < 2.0.0.13 reports "Illegal operation on WrappedNative
+   * prototype object" when calling hawOwnProperty if the source object is an
+   * instance of window.Event.
+   */
+
+  var fromIsEvt = typeof window.Event === "function" && from instanceof window.Event;
+
+  for (var key in from) {
+    if (to[key] === undefined || !fromIsEvt && from.hasOwnProperty && from.hasOwnProperty(key) && !to.hasOwnProperty(key)) {
+      to[key] = from[key];
+    }
+  }
+  /**
+   * IE doesn't include the toString property when iterating over an object's
+   * properties with the for(property in object) syntax.  Explicitly check if
+   * the source has its own toString property.
+   */
+
+
+  if (!fromIsEvt && from && from.hasOwnProperty && from.hasOwnProperty('toString') && !to.hasOwnProperty('toString')) {
+    to.toString = from.toString;
+  }
+
+  return to;
+};
+/**
+ * @description 将参数对象转换为 HTTP 的 GET 请求中的参数字符串。例如:"key1=value1&key2=value2&key3=value3"。
+ * @param {Object} params - 参数对象。
+ * @returns {string} HTTP 的 GET 请求中的参数字符串。
+ */
+
+
+SuperMap.Util.getParameterString = function (params) {
+  var paramsArray = [];
+
+  for (var key in params) {
+    var value = params[key];
+
+    if (value != null && typeof value !== 'function') {
+      var encodedValue;
+
+      if (Array.isArray(value) || value.toString() === '[object Object]') {
+        encodedValue = encodeURIComponent(JSON.stringify(value));
+      } else {
+        /* value is a string; simply encode */
+        encodedValue = encodeURIComponent(value);
+      }
+
+      paramsArray.push(encodeURIComponent(key) + "=" + encodedValue);
+    }
+  }
+
+  return paramsArray.join("&");
+};
+/**
+ * @description 给 URL 追加查询参数。
+ * @param {string} url - 待追加参数的 URL 字符串。
+ * @param {string} paramStr - 待追加的查询参数。
+ * @returns {string} 新的 URL。
+ */
+
+
+SuperMap.Util.urlAppend = function (url, paramStr) {
+  var newUrl = url;
+
+  if (paramStr) {
+    if (paramStr.indexOf('?') === 0) {
+      paramStr = paramStr.substring(1);
+    }
+
+    var parts = (url + " ").split(/[?&]/);
+    newUrl += parts.pop() === " " ? paramStr : parts.length ? "&" + paramStr : "?" + paramStr;
+  }
+
+  return newUrl;
+};
+/**
+ * @description 给 URL 追加 path 参数。
+ * @param {string} url - 待追加参数的 URL 字符串。
+ * @param {string} paramStr - 待追加的path参数。
+ * @returns {string} 新的 URL。
+ */
+
+
+SuperMap.Util.urlPathAppend = function (url, pathStr) {
+  var newUrl = url;
+
+  if (!pathStr) {
+    return newUrl;
+  }
+
+  if (pathStr.indexOf('/') === 0) {
+    pathStr = pathStr.substring(1);
+  }
+
+  var parts = url.split('?');
+
+  if (parts[0].indexOf('/', parts[0].length - 1) < 0) {
+    parts[0] += '/';
+  }
+
+  newUrl = "".concat(parts[0]).concat(pathStr).concat(parts.length > 1 ? "?".concat(parts[1]) : '');
+  return newUrl;
+};
+/**
+ * @description 为了避免浮点精度错误而保留的有效位数。
+ * @type {number}
+ * @default 14
+ */
+
+
+SuperMap.Util.DEFAULT_PRECISION = 14;
+/**
+ * @description 将字符串以接近的精度转换为数字。
+ * @param {string} number - 字符串。
+ * @param {number} [precision=14] - 精度。
+ * @returns {number} 数字。
+ */
+
+SuperMap.Util.toFloat = function (number, precision) {
+  if (precision == null) {
+    precision = SuperMap.Util.DEFAULT_PRECISION;
+  }
+
+  if (typeof number !== "number") {
+    number = parseFloat(number);
+  }
+
+  return precision === 0 ? number : parseFloat(number.toPrecision(precision));
+};
+/**
+ * @description 角度转弧度。
+ * @param {number} x - 角度。
+ * @returns {number} 弧度。
+ */
+
+
+SuperMap.Util.rad = function (x) {
+  return x * Math.PI / 180;
+};
+/**
+ * @description 从 URL 字符串中解析出参数对象。
+ * @param {string} url - URL。
+ * @returns {Object} 解析出的参数对象。
+ */
+
+
+SuperMap.Util.getParameters = function (url) {
+  // if no url specified, take it from the location bar
+  url = url === null || url === undefined ? window.location.href : url; //parse out parameters portion of url string
+
+  var paramsString = "";
+
+  if (SuperMap.String.contains(url, '?')) {
+    var start = url.indexOf('?') + 1;
+    var end = SuperMap.String.contains(url, "#") ? url.indexOf('#') : url.length;
+    paramsString = url.substring(start, end);
+  }
+
+  var parameters = {};
+  var pairs = paramsString.split(/[&;]/);
+
+  for (var i = 0, len = pairs.length; i < len; ++i) {
+    var keyValue = pairs[i].split('=');
+
+    if (keyValue[0]) {
+      var key = keyValue[0];
+
+      try {
+        key = decodeURIComponent(key);
+      } catch (err) {
+        key = unescape(key);
+      } // being liberal by replacing "+" with " "
+
+
+      var value = (keyValue[1] || '').replace(/\+/g, " ");
+
+      try {
+        value = decodeURIComponent(value);
+      } catch (err) {
+        value = unescape(value);
+      } // follow OGC convention of comma delimited values
+
+
+      value = value.split(","); //if there's only one value, do not return as array                    
+
+      if (value.length == 1) {
+        value = value[0];
+      }
+
+      parameters[key] = value;
+    }
+  }
+
+  return parameters;
+};
+/**
+ * @description 不断递增计数变量,用于生成唯一 ID。
+ * @type {number}
+ * @default 0
+ */
+
+
+SuperMap.Util.lastSeqID = 0;
+/**
+ * @description 创建唯一 ID 值。
+ * @param {string} [prefix] - 前缀。
+ * @returns {string} 唯一的 ID 值。
+ */
+
+SuperMap.Util.createUniqueID = function (prefix) {
+  if (prefix == null) {
+    prefix = "id_";
+  }
+
+  SuperMap.Util.lastSeqID += 1;
+  return prefix + SuperMap.Util.lastSeqID;
+};
+/**
+ * @memberOf SuperMap
+ * @description 每单位的英尺数。
+ * @type {Object}
+ * @constant
+ */
+
+
+SuperMap.INCHES_PER_UNIT = {
+  'inches': 1.0,
+  'ft': 12.0,
+  'mi': 63360.0,
+  'm': 39.3701,
+  'km': 39370.1,
+  'dd': 4374754,
+  'yd': 36
+};
+SuperMap.INCHES_PER_UNIT.in = SuperMap.INCHES_PER_UNIT.inches;
+SuperMap.INCHES_PER_UNIT.degrees = SuperMap.INCHES_PER_UNIT.dd;
+SuperMap.INCHES_PER_UNIT.nmi = 1852 * SuperMap.INCHES_PER_UNIT.m; // Units from CS-Map
+
+SuperMap.METERS_PER_INCH = 0.02540005080010160020;
+SuperMap.Util.extend(SuperMap.INCHES_PER_UNIT, {
+  "Inch": SuperMap.INCHES_PER_UNIT.inches,
+  "Meter": 1.0 / SuperMap.METERS_PER_INCH,
+  //EPSG:9001
+  "Foot": 0.30480060960121920243 / SuperMap.METERS_PER_INCH,
+  //EPSG:9003
+  "IFoot": 0.30480000000000000000 / SuperMap.METERS_PER_INCH,
+  //EPSG:9002
+  "ClarkeFoot": 0.3047972651151 / SuperMap.METERS_PER_INCH,
+  //EPSG:9005
+  "SearsFoot": 0.30479947153867624624 / SuperMap.METERS_PER_INCH,
+  //EPSG:9041
+  "GoldCoastFoot": 0.30479971018150881758 / SuperMap.METERS_PER_INCH,
+  //EPSG:9094
+  "IInch": 0.02540000000000000000 / SuperMap.METERS_PER_INCH,
+  "MicroInch": 0.00002540000000000000 / SuperMap.METERS_PER_INCH,
+  "Mil": 0.00000002540000000000 / SuperMap.METERS_PER_INCH,
+  "Centimeter": 0.01000000000000000000 / SuperMap.METERS_PER_INCH,
+  "Kilometer": 1000.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  //EPSG:9036
+  "Yard": 0.91440182880365760731 / SuperMap.METERS_PER_INCH,
+  "SearsYard": 0.914398414616029 / SuperMap.METERS_PER_INCH,
+  //EPSG:9040
+  "IndianYard": 0.91439853074444079983 / SuperMap.METERS_PER_INCH,
+  //EPSG:9084
+  "IndianYd37": 0.91439523 / SuperMap.METERS_PER_INCH,
+  //EPSG:9085
+  "IndianYd62": 0.9143988 / SuperMap.METERS_PER_INCH,
+  //EPSG:9086
+  "IndianYd75": 0.9143985 / SuperMap.METERS_PER_INCH,
+  //EPSG:9087
+  "IndianFoot": 0.30479951 / SuperMap.METERS_PER_INCH,
+  //EPSG:9080
+  "IndianFt37": 0.30479841 / SuperMap.METERS_PER_INCH,
+  //EPSG:9081
+  "IndianFt62": 0.3047996 / SuperMap.METERS_PER_INCH,
+  //EPSG:9082
+  "IndianFt75": 0.3047995 / SuperMap.METERS_PER_INCH,
+  //EPSG:9083
+  "Mile": 1609.34721869443738887477 / SuperMap.METERS_PER_INCH,
+  "IYard": 0.91440000000000000000 / SuperMap.METERS_PER_INCH,
+  //EPSG:9096
+  "IMile": 1609.34400000000000000000 / SuperMap.METERS_PER_INCH,
+  //EPSG:9093
+  "NautM": 1852.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  //EPSG:9030
+  "Lat-66": 110943.316488932731 / SuperMap.METERS_PER_INCH,
+  "Lat-83": 110946.25736872234125 / SuperMap.METERS_PER_INCH,
+  "Decimeter": 0.10000000000000000000 / SuperMap.METERS_PER_INCH,
+  "Millimeter": 0.00100000000000000000 / SuperMap.METERS_PER_INCH,
+  "Dekameter": 10.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  "Decameter": 10.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  "Hectometer": 100.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  "GermanMeter": 1.0000135965 / SuperMap.METERS_PER_INCH,
+  //EPSG:9031
+  "CaGrid": 0.999738 / SuperMap.METERS_PER_INCH,
+  "ClarkeChain": 20.1166194976 / SuperMap.METERS_PER_INCH,
+  //EPSG:9038
+  "GunterChain": 20.11684023368047 / SuperMap.METERS_PER_INCH,
+  //EPSG:9033
+  "BenoitChain": 20.116782494375872 / SuperMap.METERS_PER_INCH,
+  //EPSG:9062
+  "SearsChain": 20.11676512155 / SuperMap.METERS_PER_INCH,
+  //EPSG:9042
+  "ClarkeLink": 0.201166194976 / SuperMap.METERS_PER_INCH,
+  //EPSG:9039
+  "GunterLink": 0.2011684023368047 / SuperMap.METERS_PER_INCH,
+  //EPSG:9034
+  "BenoitLink": 0.20116782494375872 / SuperMap.METERS_PER_INCH,
+  //EPSG:9063
+  "SearsLink": 0.2011676512155 / SuperMap.METERS_PER_INCH,
+  //EPSG:9043
+  "Rod": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+  "IntnlChain": 20.1168 / SuperMap.METERS_PER_INCH,
+  //EPSG:9097
+  "IntnlLink": 0.201168 / SuperMap.METERS_PER_INCH,
+  //EPSG:9098
+  "Perch": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+  "Pole": 5.02921005842012 / SuperMap.METERS_PER_INCH,
+  "Furlong": 201.1684023368046 / SuperMap.METERS_PER_INCH,
+  "Rood": 3.778266898 / SuperMap.METERS_PER_INCH,
+  "CapeFoot": 0.3047972615 / SuperMap.METERS_PER_INCH,
+  "Brealey": 375.00000000000000000000 / SuperMap.METERS_PER_INCH,
+  "ModAmFt": 0.304812252984505969011938 / SuperMap.METERS_PER_INCH,
+  "Fathom": 1.8288 / SuperMap.METERS_PER_INCH,
+  "NautM-UK": 1853.184 / SuperMap.METERS_PER_INCH,
+  "50kilometers": 50000.0 / SuperMap.METERS_PER_INCH,
+  "150kilometers": 150000.0 / SuperMap.METERS_PER_INCH
+}); //unit abbreviations supported by PROJ.4
+
+SuperMap.Util.extend(SuperMap.INCHES_PER_UNIT, {
+  "mm": SuperMap.INCHES_PER_UNIT.Meter / 1000.0,
+  "cm": SuperMap.INCHES_PER_UNIT.Meter / 100.0,
+  "dm": SuperMap.INCHES_PER_UNIT.Meter * 100.0,
+  "km": SuperMap.INCHES_PER_UNIT.Meter * 1000.0,
+  "kmi": SuperMap.INCHES_PER_UNIT.nmi,
+  //International Nautical Mile
+  "fath": SuperMap.INCHES_PER_UNIT.Fathom,
+  //International Fathom
+  "ch": SuperMap.INCHES_PER_UNIT.IntnlChain,
+  //International Chain
+  "link": SuperMap.INCHES_PER_UNIT.IntnlLink,
+  //International Link
+  "us-in": SuperMap.INCHES_PER_UNIT.inches,
+  //U.S. Surveyor's Inch
+  "us-ft": SuperMap.INCHES_PER_UNIT.Foot,
+  //U.S. Surveyor's Foot
+  "us-yd": SuperMap.INCHES_PER_UNIT.Yard,
+  //U.S. Surveyor's Yard
+  "us-ch": SuperMap.INCHES_PER_UNIT.GunterChain,
+  //U.S. Surveyor's Chain
+  "us-mi": SuperMap.INCHES_PER_UNIT.Mile,
+  //U.S. Surveyor's Statute Mile
+  "ind-yd": SuperMap.INCHES_PER_UNIT.IndianYd37,
+  //Indian Yard
+  "ind-ft": SuperMap.INCHES_PER_UNIT.IndianFt37,
+  //Indian Foot
+  "ind-ch": 20.11669506 / SuperMap.METERS_PER_INCH //Indian Chain
+
+});
+/**
+ * @memberOf SuperMap
+ * @member [SuperMap.DOTS_PER_INCH=96]
+ * @description 分辨率与比例尺之间转换的常量。
+ * @type {Object}
+ */
+
+SuperMap.DOTS_PER_INCH = 96;
+/**
+ * @param {number} scale - 比例尺。
+ * @returns {number} 返回正常的 scale 值。
+ */
+
+SuperMap.Util.normalizeScale = function (scale) {
+  var normScale = scale > 1.0 ? 1.0 / scale : scale;
+  return normScale;
+};
+/**
+ * @description 比例尺转分辨率。
+ * @param {number} scale - 比例尺。
+ * @param {string} [units='degrees'] - 比例尺单位。
+ * @returns {number} 分辨率。
+ */
+
+
+SuperMap.Util.getResolutionFromScale = function (scale, units) {
+  var resolution;
+
+  if (scale) {
+    if (units == null) {
+      units = "degrees";
+    }
+
+    var normScale = SuperMap.Util.normalizeScale(scale);
+    resolution = 1 / (normScale * SuperMap.INCHES_PER_UNIT[units] * SuperMap.DOTS_PER_INCH);
+  }
+
+  return resolution;
+};
+/**
+ * @description 分辨率转比例尺。
+ * @param {number} resolution - 分辨率。
+ * @param {string} [units='degrees'] - 分辨率单位。
+ * @returns {number} 比例尺。
+ */
+
+
+SuperMap.Util.getScaleFromResolution = function (resolution, units) {
+  if (units == null) {
+    units = "degrees";
+  }
+
+  var scale = resolution * SuperMap.INCHES_PER_UNIT[units] * SuperMap.DOTS_PER_INCH;
+  return scale;
+};
+/**
+ * @memberOf SuperMap
+ * @description 如果 userAgent 捕获到浏览器使用的是 Gecko 引擎则返回 true。
+ * @constant
+ */
+
+
+SuperMap.IS_GECKO = function () {
+  var ua = navigator.userAgent.toLowerCase();
+  return ua.indexOf("webkit") === -1 && ua.indexOf("gecko") !== -1;
+}();
+/**
+ * @memberOf SuperMap
+ * @description 浏览器名称,依赖于 userAgent 属性,BROWSER_NAME 可以是空,或者以下浏览器:
+ *     * "opera" -- Opera
+ *     * "msie"  -- Internet Explorer
+ *     * "safari" -- Safari
+ *     * "firefox" -- Firefox
+ *     * "mozilla" -- Mozilla
+ * @constant
+ */
+
+
+SuperMap.Browser = function () {
+  var name = '',
+      version = '',
+      device = 'pc',
+      uaMatch; //以下进行测试
+
+  var ua = navigator.userAgent.toLowerCase();
+
+  if (ua.indexOf("msie") > -1 || ua.indexOf("trident") > -1 && ua.indexOf("rv") > -1) {
+    name = 'msie';
+    uaMatch = ua.match(/msie ([\d.]+)/) || ua.match(/rv:([\d.]+)/);
+  } else if (ua.indexOf("chrome") > -1) {
+    name = 'chrome';
+    uaMatch = ua.match(/chrome\/([\d.]+)/);
+  } else if (ua.indexOf("firefox") > -1) {
+    name = 'firefox';
+    uaMatch = ua.match(/firefox\/([\d.]+)/);
+  } else if (ua.indexOf("opera") > -1) {
+    name = 'opera';
+    uaMatch = ua.match(/version\/([\d.]+)/);
+  } else if (ua.indexOf("safari") > -1) {
+    name = 'safari';
+    uaMatch = ua.match(/version\/([\d.]+)/);
+  }
+
+  version = uaMatch ? uaMatch[1] : '';
+
+  if (ua.indexOf("ipad") > -1 || ua.indexOf("ipod") > -1 || ua.indexOf("iphone") > -1) {
+    device = 'apple';
+  } else if (ua.indexOf("android") > -1) {
+    uaMatch = ua.match(/version\/([\d.]+)/);
+    version = uaMatch ? uaMatch[1] : '';
+    device = 'android';
+  }
+
+  return {
+    name: name,
+    version: version,
+    device: device
+  };
+}();
+/**
+ * @description 获取浏览器相关信息。支持的浏览器包括:Opera,Internet Explorer,Safari,Firefox。
+ * @returns {Object} 获取浏览器名称、版本、设备名称。对应的属性分别为 name, version, device。
+ */
+
+
+SuperMap.Util.getBrowser = function () {
+  return SuperMap.Browser;
+};
+/**
+ * @description 浏览器是否支持 Canvas。
+ * @returns {boolean} 获取当前浏览器是否支持 HTML5 Canvas。
+ */
+
+
+SuperMap.Util.isSupportCanvas = function () {
+  var checkRes = true,
+      broz = SuperMap.Util.getBrowser();
+
+  if (document.createElement("canvas").getContext) {
+    if (broz.name === 'firefox' && parseFloat(broz.version) < 5) {
+      checkRes = false;
+    }
+
+    if (broz.name === 'safari' && parseFloat(broz.version) < 4) {
+      checkRes = false;
+    }
+
+    if (broz.name === 'opera' && parseFloat(broz.version) < 10) {
+      checkRes = false;
+    }
+
+    if (broz.name === 'msie' && parseFloat(broz.version) < 9) {
+      checkRes = false;
+    }
+  } else {
+    checkRes = false;
+  }
+
+  return checkRes;
+}();
+/**
+ * @description 判断;浏览器是否支持 Canvas。
+ * @returns {boolean} 获取当前浏览器是否支持 HTML5 Canvas 。
+ */
+
+
+SuperMap.Util.supportCanvas = function () {
+  return SuperMap.Util.isSupportCanvas;
+}; //将服务端的地图单位转成SuperMap的地图单位
+
+
+SuperMap.INCHES_PER_UNIT.degree = SuperMap.INCHES_PER_UNIT.dd;
+SuperMap.INCHES_PER_UNIT.meter = SuperMap.INCHES_PER_UNIT.m;
+SuperMap.INCHES_PER_UNIT.foot = SuperMap.INCHES_PER_UNIT.ft;
+SuperMap.INCHES_PER_UNIT.inch = SuperMap.INCHES_PER_UNIT.inches;
+SuperMap.INCHES_PER_UNIT.mile = SuperMap.INCHES_PER_UNIT.mi;
+SuperMap.INCHES_PER_UNIT.kilometer = SuperMap.INCHES_PER_UNIT.km;
+SuperMap.INCHES_PER_UNIT.yard = SuperMap.INCHES_PER_UNIT.yd;
+/**
+ * @description 判断一个 URL 请求是否在当前域中。
+ * @param {string} url - URL 请求字符串。
+ * @returns {boolean} URL 请求是否在当前域中。
+ */
+
+SuperMap.Util.isInTheSameDomain = function (url) {
+  if (!url) {
+    return true;
+  }
+
+  var index = url.indexOf("//");
+  var documentUrl = document.location.toString();
+  var documentIndex = documentUrl.indexOf("//");
+
+  if (index === -1) {
+    return true;
+  } else {
+    var protocol;
+    var substring = protocol = url.substring(0, index);
+    var documentSubString = documentUrl.substring(documentIndex + 2);
+    documentIndex = documentSubString.indexOf("/");
+    var documentPortIndex = documentSubString.indexOf(":");
+    var documentDomainWithPort = documentSubString.substring(0, documentIndex); //var documentPort;
+
+    var documentprotocol = document.location.protocol;
+
+    if (documentPortIndex !== -1) {// documentPort = +documentSubString.substring(documentPortIndex, documentIndex);
+    } else {
+      documentDomainWithPort += ':' + (documentprotocol.toLowerCase() === 'http:' ? 80 : 443);
+    }
+
+    if (documentprotocol.toLowerCase() !== substring.toLowerCase()) {
+      return false;
+    }
+
+    substring = url.substring(index + 2);
+    var portIndex = substring.indexOf(":");
+    index = substring.indexOf("/");
+    var domainWithPort = substring.substring(0, index);
+    var domain;
+
+    if (portIndex !== -1) {
+      domain = substring.substring(0, portIndex);
+    } else {
+      domain = substring.substring(0, index);
+      domainWithPort += ':' + (protocol.toLowerCase() === 'http:' ? 80 : 443);
+    }
+
+    var documentDomain = document.domain;
+
+    if (domain === documentDomain && domainWithPort === documentDomainWithPort) {
+      return true;
+    }
+  }
+
+  return false;
+};
+/**
+ * @description 计算 iServer 服务的 REST 图层的显示分辨率,需要从 iServer 的 REST 图层表述中获取 viewBounds、viewer、scale、coordUnit、datumAxis 五个参数,来进行计算。
+ * @param {SuperMap.Bounds} viewBounds - 地图的参照可视范围,即地图初始化时默认的地图显示范围。
+ * @param {SuperMap.Size} viewer - 地图初始化时默认的地图图片的尺寸。
+ * @param {number} scale - 地图初始化时默认的显示比例尺。
+ * @param {string} [coordUnit='degrees'] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则系统默认为 WGS84 参考系的椭球体长半轴 6378137。
+ * @returns {number} 返回图层显示分辨率。
+ */
+
+
+SuperMap.Util.calculateDpi = function (viewBounds, viewer, scale, coordUnit, datumAxis) {
+  //10000 是 0.1毫米与米的转换。DPI的计算公式:Viewer / DPI *  0.0254 * 10000 = ViewBounds * scale ,公式中的10000是为了提高计算结果的精度,以下出现的ratio皆为如此。
+  if (!viewBounds || !viewer || !scale) {
+    return;
+  }
+
+  var ratio = 10000,
+      rvbWidth = viewBounds.getWidth(),
+      rvbHeight = viewBounds.getHeight(),
+      rvWidth = viewer.w,
+      rvHeight = viewer.h; //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+
+  datumAxis = datumAxis || 6378137;
+  coordUnit = coordUnit || "degrees";
+  var dpi;
+
+  if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+    var num1 = rvbWidth / rvWidth,
+        num2 = rvbHeight / rvHeight,
+        resolution = num1 > num2 ? num1 : num2;
+    dpi = 0.0254 * ratio / resolution / scale / (Math.PI * 2 * datumAxis / 360) / ratio;
+  } else {
+    var _resolution = rvbWidth / rvWidth;
+
+    dpi = 0.0254 * ratio / _resolution / scale / ratio;
+  }
+
+  return dpi;
+};
+/**
+ * @description 将对象转换成 JSON 字符串。
+ * @param {Object} obj - 要转换成 JSON 的 Object 对象。
+ * @returns {string} 返回转换后的 JSON 对象。
+ */
+
+
+SuperMap.Util.toJSON = function (obj) {
+  var objInn = obj;
+
+  if (objInn == null) {
+    return null;
+  }
+
+  switch (objInn.constructor) {
+    case String:
+      //s = "'" + str.replace(/(["\\])/g, "\\$1") + "'";   string含有单引号出错
+      objInn = '"' + objInn.replace(/(["\\])/g, '\\$1') + '"';
+      objInn = objInn.replace(/\n/g, "\\n");
+      objInn = objInn.replace(/\r/g, "\\r");
+      objInn = objInn.replace("<", "&lt;");
+      objInn = objInn.replace(">", "&gt;");
+      objInn = objInn.replace(/%/g, "%25");
+      objInn = objInn.replace(/&/g, "%26");
+      return objInn;
+
+    case Array:
+      var arr = [];
+
+      for (var i = 0, len = objInn.length; i < len; i++) {
+        arr.push(SuperMap.Util.toJSON(objInn[i]));
+      }
+
+      return "[" + arr.join(",") + "]";
+
+    case Number:
+      return isFinite(objInn) ? String(objInn) : null;
+
+    case Boolean:
+      return String(objInn);
+
+    case Date:
+      var dateStr = "{" + "'__type':\"System.DateTime\"," + "'Year':" + objInn.getFullYear() + "," + "'Month':" + (objInn.getMonth() + 1) + "," + "'Day':" + objInn.getDate() + "," + "'Hour':" + objInn.getHours() + "," + "'Minute':" + objInn.getMinutes() + "," + "'Second':" + objInn.getSeconds() + "," + "'Millisecond':" + objInn.getMilliseconds() + "," + "'TimezoneOffset':" + objInn.getTimezoneOffset() + "}";
+      return dateStr;
+
+    default:
+      if (objInn["toJSON"] != null && typeof objInn["toJSON"] === "function") {
+        return objInn.toJSON();
+      }
+
+      if (_typeof(objInn) === "object") {
+        if (objInn.length) {
+          var _arr2 = [];
+
+          for (var _i = 0, _len = objInn.length; _i < _len; _i++) {
+            _arr2.push(SuperMap.Util.toJSON(objInn[_i]));
+          }
+
+          return "[" + _arr2.join(",") + "]";
+        }
+
+        var _arr = [];
+
+        for (var attr in objInn) {
+          //为解决SuperMap.Geometry类型头json时堆栈溢出的问题,attr == "parent"时不进行json转换
+          if (typeof objInn[attr] !== "function" && attr !== "CLASS_NAME" && attr !== "parent") {
+            _arr.push("'" + attr + "':" + SuperMap.Util.toJSON(objInn[attr]));
+          }
+        }
+
+        if (_arr.length > 0) {
+          return "{" + _arr.join(",") + "}";
+        } else {
+          return "{}";
+        }
+      }
+
+      return objInn.toString();
+  }
+};
+/**
+ * @description 根据比例尺和 dpi 计算屏幕分辨率。
+ * @param {number} scale - 比例尺。
+ * @param {number} dpi - 图像分辨率,表示每英寸内的像素个数。
+ * @param {string} [coordUnit] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则 DPI 默认按照 WGS84 参考系的椭球体长半轴 6378137 来计算。
+ * @returns {number} 返回当前比例尺下的屏幕分辨率。
+ */
+
+
+SuperMap.Util.getResolutionFromScaleDpi = function (scale, dpi, coordUnit, datumAxis) {
+  var resolution = null,
+      ratio = 10000; //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+
+  datumAxis = datumAxis || 6378137;
+  coordUnit = coordUnit || "";
+
+  if (scale > 0 && dpi > 0) {
+    scale = SuperMap.Util.normalizeScale(scale);
+
+    if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+      //scale = SuperMap.Util.normalizeScale(scale);
+      resolution = 0.0254 * ratio / dpi / scale / (Math.PI * 2 * datumAxis / 360) / ratio;
+      return resolution;
+    } else {
+      resolution = 0.0254 * ratio / dpi / scale / ratio;
+      return resolution;
+    }
+  }
+
+  return -1;
+};
+/**
+ * @description 根据 resolution、dpi、coordUnit 和 datumAxis 计算比例尺。
+ * @param {number} resolution - 用于计算比例尺的地图分辨率。
+ * @param {number} dpi - 图像分辨率,表示每英寸内的像素个数。
+ * @param {string} [coordUnit] - 投影坐标系统的地图单位。
+ * @param {number} [datumAxis=6378137] - 地理坐标系统椭球体长半轴。用户自定义地图的 Options 时,若未指定该参数的值,则 DPI 默认按照 WGS84 参考系的椭球体长半轴 6378137 来计算。
+ * @returns {number} 返回当前屏幕分辨率下的比例尺。
+ */
+
+
+SuperMap.Util.getScaleFromResolutionDpi = function (resolution, dpi, coordUnit, datumAxis) {
+  var scale = null,
+      ratio = 10000; //用户自定义地图的Options时,若未指定该参数的值,则系统默认为6378137米,即WGS84参考系的椭球体长半轴。
+
+  datumAxis = datumAxis || 6378137;
+  coordUnit = coordUnit || "";
+
+  if (resolution > 0 && dpi > 0) {
+    if (coordUnit.toLowerCase() === "degree" || coordUnit.toLowerCase() === "degrees" || coordUnit.toLowerCase() === "dd") {
+      scale = 0.0254 * ratio / dpi / resolution / (Math.PI * 2 * datumAxis / 360) / ratio;
+      return scale;
+    } else {
+      scale = 0.0254 * ratio / dpi / resolution / ratio;
+      return scale;
+    }
+  }
+
+  return -1;
+};
+/**
+ * @description 转换查询结果。
+ * @param {Object} result - 查询结果。
+ * @returns {Object} 转换后的查询结果。
+ */
+
+
+SuperMap.Util.transformResult = function (result) {
+  if (result.responseText && typeof result.responseText === "string") {
+    result = JSON.parse(result.responseText);
+  }
+
+  return result;
+};
+/**
+ * @description 属性拷贝,不拷贝方法类名(CLASS_NAME)等。
+ * @param {Object} [destination] - 拷贝目标。
+ * @param {Object} source - 源对象。
+ *
+ */
+
+
+SuperMap.Util.copyAttributes = function (destination, source) {
+  destination = destination || {};
+
+  if (source) {
+    for (var property in source) {
+      var value = source[property];
+
+      if (value !== undefined && property !== "CLASS_NAME" && typeof value !== "function") {
+        destination[property] = value;
+      }
+    }
+  }
+
+  return destination;
+};
+/**
+ * @description 将源对象上的属性拷贝到目标对象上。(不拷贝 CLASS_NAME 和方法)
+ * @param {Object} [destination] - 目标对象。
+ * @param {Object} source - 源对象。
+ * @param {Array.<string>} clip - 源对象中禁止拷贝到目标对象的属性,目的是防止目标对象上不可修改的属性被篡改。
+ *
+ */
+
+
+SuperMap.Util.copyAttributesWithClip = function (destination, source, clip) {
+  destination = destination || {};
+
+  if (source) {
+    for (var property in source) {
+      //去掉禁止拷贝的属性
+      var isInClip = false;
+
+      if (clip && clip.length) {
+        for (var i = 0, len = clip.length; i < len; i++) {
+          if (property === clip[i]) {
+            isInClip = true;
+            break;
+          }
+        }
+      }
+
+      if (isInClip === true) {
+        continue;
+      }
+
+      var value = source[property];
+
+      if (value !== undefined && property !== "CLASS_NAME" && typeof value !== "function") {
+        destination[property] = value;
+      }
+    }
+  }
+
+  return destination;
+};
+/**
+ * @description 克隆一个 Object 对象
+ * @param {Object} obj - 需要克隆的对象。
+ * @returns {Object} 返回对象的拷贝对象,注意是新的对象,不是指向。
+ */
+
+
+SuperMap.Util.cloneObject = function (obj) {
+  // Handle the 3 simple types, and null or undefined
+  if (null === obj || "object" !== _typeof(obj)) {
+    return obj;
+  } // Handle Date
+
+
+  if (obj instanceof Date) {
+    var copy = new Date();
+    copy.setTime(obj.getTime());
+    return copy;
+  } // Handle Array
+
+
+  if (obj instanceof Array) {
+    var _copy = obj.slice(0);
+
+    return _copy;
+  } // Handle Object
+
+
+  if (obj instanceof Object) {
+    var _copy2 = {};
+
+    for (var attr in obj) {
+      if (obj.hasOwnProperty(attr)) {
+        _copy2[attr] = SuperMap.Util.cloneObject(obj[attr]);
+      }
+    }
+
+    return _copy2;
+  }
+
+  throw new Error("Unable to copy obj! Its type isn't supported.");
+};
+/**
+ * @description 判断两条线段是不是有交点。
+ * @param {SuperMap.Geometry.Point} a1 - 第一条线段的起始节点。
+ * @param {SuperMap.Geometry.Point} a2 - 第一条线段的结束节点。
+ * @param {SuperMap.Geometry.Point} b1 - 第二条线段的起始节点。
+ * @param {SuperMap.Geometry.Point} b2 - 第二条线段的结束节点。
+ * @returns {Object} 如果相交返回交点,如果不相交返回两条线段的位置关系。
+ */
+
+
+SuperMap.Util.lineIntersection = function (a1, a2, b1, b2) {
+  var intersectValue = null;
+  var k1;
+  var k2;
+  var b = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);
+  var a = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);
+  var ab = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); //ab==0代表两条线断的斜率一样
+
+  if (ab != 0) {
+    k1 = b / ab;
+    k2 = a / ab;
+
+    if (k1 >= 0 && k2 <= 1 && k1 <= 1 && k2 >= 0) {
+      intersectValue = new SuperMap.Geometry.Point(a1.x + k1 * (a2.x - a1.x), a1.y + k1 * (a2.y - a1.y));
+    } else {
+      intersectValue = "No Intersection";
+    }
+  } else {
+    if (b == 0 && a == 0) {
+      var maxy = Math.max(a1.y, a2.y);
+      var miny = Math.min(a1.y, a2.y);
+      var maxx = Math.max(a1.x, a2.x);
+      var minx = Math.min(a1.x, a2.x);
+
+      if ((b1.y >= miny && b1.y <= maxy || b2.y >= miny && b2.y <= maxy) && b1.x >= minx && b1.x <= maxx || b2.x >= minx && b2.x <= maxx) {
+        intersectValue = "Coincident"; //重合
+      } else {
+        intersectValue = "Parallel"; //平行
+      }
+    } else {
+      intersectValue = "Parallel"; //平行
+    }
+  }
+
+  return intersectValue;
+};
+/**
+ * @description 获取文本外接矩形宽度与高度。
+ * @param {SuperMap.ThemeStyle} style - 文本样式。
+ * @param {string} text - 文本内容。
+ * @param {Object} element - DOM 元素。
+ * @returns {Object} 返回裁剪后的宽度,高度信息。
+ */
+
+
+SuperMap.Util.getTextBounds = function (style, text, element) {
+  document.body.appendChild(element);
+  element.style.width = 'auto';
+  element.style.height = 'auto';
+
+  if (style.fontSize) {
+    element.style.fontSize = style.fontSize;
+  }
+
+  if (style.fontFamily) {
+    element.style.fontFamily = style.fontFamily;
+  }
+
+  if (style.fontWeight) {
+    element.style.fontWeight = style.fontWeight;
+  }
+
+  element.style.position = 'relative';
+  element.style.visibility = 'hidden'; //fix 在某些情况下,element内的文本变成竖起排列,导致宽度计算不正确的bug
+
+  element.style.display = 'inline-block';
+  element.innerHTML = text;
+  var textWidth = element.clientWidth;
+  var textHeight = element.clientHeight;
+  document.body.removeChild(element);
+  return {
+    textWidth: textWidth,
+    textHeight: textHeight
+  };
+};
+;// CONCATENATED MODULE: ./src/common/commontypes/Event.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @name Event
+ * @memberOf SuperMap
+ * @namespace
+ * @description 事件处理函数.
+ */
+
+var Event = SuperMap.Event = {
+  /**
+   * @description  A hash table cache of the event observers. Keyed by element._eventCacheID
+   * @type {boolean}
+   * @default false
+   */
+  observers: false,
+
+  /**
+   * @description KEY_SPACE
+   * @type {number}
+   * @default 32
+   */
+  KEY_SPACE: 32,
+
+  /**
+   * @description KEY_BACKSPACE
+   * @type {number}
+   * @default 8
+   */
+  KEY_BACKSPACE: 8,
+
+  /**
+   * @description KEY_TAB
+   * @type {number}
+   * @default 9
+   */
+  KEY_TAB: 9,
+
+  /**
+   * @description KEY_RETURN
+   * @type {number}
+   * @default 13
+   */
+  KEY_RETURN: 13,
+
+  /**
+   * @description KEY_ESC
+   * @type {number}
+   * @default 27
+   */
+  KEY_ESC: 27,
+
+  /**
+   * @description KEY_LEFT
+   * @type {number}
+   * @default 37
+   */
+  KEY_LEFT: 37,
+
+  /**
+   * @description KEY_UP
+   * @type {number}
+   * @default 38
+   */
+  KEY_UP: 38,
+
+  /**
+   * @description KEY_RIGHT
+   * @type {number}
+   * @default 39
+   */
+  KEY_RIGHT: 39,
+
+  /**
+   * @description KEY_DOWN
+   * @type {number}
+   * @default 40
+   */
+  KEY_DOWN: 40,
+
+  /**
+   * @description KEY_DELETE
+   * @type {number}
+   * @default 46
+   */
+  KEY_DELETE: 46,
+
+  /**
+   * @description Cross browser event element detection.
+   * @param {Event} event - The event
+   * @returns {HTMLElement} The element that caused the event
+   */
+  element: function element(event) {
+    return event.target || event.srcElement;
+  },
+
+  /**
+   * @description Determine whether event was caused by a single touch
+   * @param {Event} event - The event
+   * @returns {boolean}
+   */
+  isSingleTouch: function isSingleTouch(event) {
+    return event.touches && event.touches.length === 1;
+  },
+
+  /**
+   * @description Determine whether event was caused by a multi touch
+   * @param {Event} event - The event
+   * @returns {boolean}
+   */
+  isMultiTouch: function isMultiTouch(event) {
+    return event.touches && event.touches.length > 1;
+  },
+
+  /**
+   * @description Determine whether event was caused by a left click.
+   * @param {Event} event - The event
+   * @returns {boolean}
+   */
+  isLeftClick: function isLeftClick(event) {
+    return event.which && event.which === 1 || event.button && event.button === 1;
+  },
+
+  /**
+   * @description Determine whether event was caused by a right mouse click.
+   * @param {Event} event - The event
+   * @returns {boolean}
+   */
+  isRightClick: function isRightClick(event) {
+    return event.which && event.which === 3 || event.button && event.button === 2;
+  },
+
+  /**
+   * @description Stops an event from propagating.
+   * @param {Event} event - The event
+   * @param {boolean} allowDefault - If true, we stop the event chain but still allow the default browser  behaviour (text selection, radio-button clicking, etc) Default false
+   */
+  stop: function stop(event, allowDefault) {
+    if (!allowDefault) {
+      if (event.preventDefault) {
+        event.preventDefault();
+      } else {
+        event.returnValue = false;
+      }
+    }
+
+    if (event.stopPropagation) {
+      event.stopPropagation();
+    } else {
+      event.cancelBubble = true;
+    }
+  },
+
+  /**
+   * @param {Event} event - The event。
+   * @param {string} tagName - html 标签名。
+   * @returns {HTMLElement} The first node with the given tagName, starting from the node the event was triggered on and traversing the DOM upwards
+   */
+  findElement: function findElement(event, tagName) {
+    var element = SuperMap.Event.element(event);
+
+    while (element.parentNode && (!element.tagName || element.tagName.toUpperCase() != tagName.toUpperCase())) {
+      element = element.parentNode;
+    }
+
+    return element;
+  },
+
+  /**
+   * @description 监听事件,注册事件处理方法。
+   * @param {(HTMLElement|string)} elementParam - 待监听的 DOM 对象或者其 ID 标识。
+   * @param {string} name - 监听事件的类别名称。
+   * @param {function} observer - 注册的事件处理方法。
+   * @param {boolean} [useCapture=false] - 是否捕获。
+   */
+  observe: function observe(elementParam, name, observer, useCapture) {
+    var element = Util.getElement(elementParam);
+    useCapture = useCapture || false;
+
+    if (name === 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) {
+      name = 'keydown';
+    } //if observers cache has not yet been created, create it
+
+
+    if (!this.observers) {
+      this.observers = {};
+    } //if not already assigned, make a new unique cache ID
+
+
+    if (!element._eventCacheID) {
+      var idPrefix = "eventCacheID_";
+
+      if (element.id) {
+        idPrefix = element.id + "_" + idPrefix;
+      }
+
+      element._eventCacheID = Util.createUniqueID(idPrefix);
+    }
+
+    var cacheID = element._eventCacheID; //if there is not yet a hash entry for this element, add one
+
+    if (!this.observers[cacheID]) {
+      this.observers[cacheID] = [];
+    } //add a new observer to this element's list
+
+
+    this.observers[cacheID].push({
+      'element': element,
+      'name': name,
+      'observer': observer,
+      'useCapture': useCapture
+    }); //add the actual browser event listener
+
+    if (element.addEventListener) {
+      if (name === 'mousewheel') {
+        // https://www.chromestatus.com/features/6662647093133312
+        element.addEventListener(name, observer, {
+          useCapture: useCapture,
+          passive: false
+        });
+      } else {
+        element.addEventListener(name, observer, useCapture);
+      }
+    } else if (element.attachEvent) {
+      element.attachEvent('on' + name, observer);
+    }
+  },
+
+  /**
+   * @description Given the id of an element to stop observing, cycle through the
+   *   element's cached observers, calling stopObserving on each one,
+   *   skipping those entries which can no longer be removed.
+   *
+   * @param {(HTMLElement|string)} elementParam - 
+   */
+  stopObservingElement: function stopObservingElement(elementParam) {
+    var element = Util.getElement(elementParam);
+    var cacheID = element._eventCacheID;
+
+    this._removeElementObservers(SuperMap.Event.observers[cacheID]);
+  },
+
+  /**
+   * @param {Array.<Object>} elementObservers - Array of (element, name,
+   *                                         observer, usecapture) objects,
+   *                                         taken directly from hashtable
+   */
+  _removeElementObservers: function _removeElementObservers(elementObservers) {
+    if (elementObservers) {
+      for (var i = elementObservers.length - 1; i >= 0; i--) {
+        var entry = elementObservers[i];
+        var args = new Array(entry.element, entry.name, entry.observer, entry.useCapture);
+        SuperMap.Event.stopObserving.apply(this, args);
+      }
+    }
+  },
+
+  /**
+   * @description 移除事件监听和注册的事件处理方法。注意:事件的移除和监听相对应,移除时的各属性信息必须监听时
+   * 保持一致才能确保事件移除成功。
+   * @param {(HTMLElement|string)} elementParam - 被监听的 DOM 元素或者其 ID。
+   * @param {string} name - 需要移除的被监听事件名称。
+   * @param {function} observer - 需要移除的事件处理方法。
+   * @param {boolean} [useCapture=false] - 是否捕获。
+   * @returns {boolean} Whether or not the event observer was removed
+   */
+  stopObserving: function stopObserving(elementParam, name, observer, useCapture) {
+    useCapture = useCapture || false;
+    var element = Util.getElement(elementParam);
+    var cacheID = element._eventCacheID;
+
+    if (name === 'keypress') {
+      if (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent) {
+        name = 'keydown';
+      }
+    } // find element's entry in this.observers cache and remove it
+
+
+    var foundEntry = false;
+    var elementObservers = SuperMap.Event.observers[cacheID];
+
+    if (elementObservers) {
+      // find the specific event type in the element's list
+      var i = 0;
+
+      while (!foundEntry && i < elementObservers.length) {
+        var cacheEntry = elementObservers[i];
+
+        if (cacheEntry.name === name && cacheEntry.observer === observer && cacheEntry.useCapture === useCapture) {
+          elementObservers.splice(i, 1);
+
+          if (elementObservers.length == 0) {
+            delete SuperMap.Event.observers[cacheID];
+          }
+
+          foundEntry = true;
+          break;
+        }
+
+        i++;
+      }
+    } //actually remove the event listener from browser
+
+
+    if (foundEntry) {
+      if (element.removeEventListener) {
+        element.removeEventListener(name, observer, useCapture);
+      } else if (element && element.detachEvent) {
+        element.detachEvent('on' + name, observer);
+      }
+    }
+
+    return foundEntry;
+  },
+
+  /**
+   * @description Cycle through all the element entries in the events cache and call
+   *   stopObservingElement on each.
+   */
+  unloadCache: function unloadCache() {
+    // check for SuperMap.Event before checking for observers, because
+    // SuperMap.Event may be undefined in IE if no map instance was
+    // created
+    if (SuperMap.Event && SuperMap.Event.observers) {
+      for (var cacheID in SuperMap.Event.observers) {
+        var elementObservers = SuperMap.Event.observers[cacheID];
+
+        SuperMap.Event._removeElementObservers.apply(this, [elementObservers]);
+      }
+
+      SuperMap.Event.observers = false;
+    }
+  },
+  CLASS_NAME: "SuperMap.Event"
+};
+SuperMap.Event = Event;
+/* prevent memory leaks in IE */
+
+SuperMap.Event.observe(window, 'unload', SuperMap.Event.unloadCache, false);
+;// CONCATENATED MODULE: ./src/common/commontypes/Events.js
+function Events_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Events_typeof = function _typeof(obj) { return typeof obj; }; } else { Events_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Events_typeof(obj); }
+
+function Events_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function Events_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function Events_createClass(Constructor, protoProps, staticProps) { if (protoProps) Events_defineProperties(Constructor.prototype, protoProps); if (staticProps) Events_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.Events
+ * @classdesc 事件类。
+ * @param {Object} object - 当前事件对象被添加到的 JS 对象。
+ * @param {HTMLElement} element - 响应浏览器事件的 DOM 元素。
+ * @param {Array.<string>} eventTypes - 自定义应用事件的数组。
+ * @param {boolean} [fallThrough=false] - 是否允许事件处理之后向上传递(冒泡),为 false 的时候阻止事件冒泡。
+ * @param {Object} options - 事件对象选项。
+ */
+
+var Events = /*#__PURE__*/function () {
+  function Events(object, element, eventTypes, fallThrough, options) {
+    Events_classCallCheck(this, Events);
+
+    /**
+     * @member {Array.<string>} SuperMap.Events.prototype.BROWSER_EVENTS
+     * @description 支持的事件。
+     * @constant
+     * @default [
+     "mouseover", "mouseout","mousedown", "mouseup", "mousemove",
+     "click", "dblclick", "rightclick", "dblrightclick","resize",
+     "focus", "blur","touchstart", "touchmove", "touchend","keydown",
+     "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup",
+     "MSGestureStart", "MSGestureChange", "MSGestureEnd","contextmenu"
+     ]
+     */
+    this.BROWSER_EVENTS = ["mouseover", "mouseout", "mousedown", "mouseup", "mousemove", "click", "dblclick", "rightclick", "dblrightclick", "resize", "focus", "blur", "touchstart", "touchmove", "touchend", "keydown", "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup", "MSGestureStart", "MSGestureChange", "MSGestureEnd", "contextmenu"];
+    /**
+     * @member {Object} SuperMap.Events.prototype.listeners
+     * @description Hashtable of Array(function): events listener functions
+     */
+
+    this.listeners = {};
+    /**
+     * @member {Object} SuperMap.Events.prototype.object
+     * @description  发布应用程序事件的对象。
+     */
+
+    this.object = object;
+    /**
+     * @member {HTMLElement} SuperMap.Events.prototype.element
+     * @description 接受浏览器事件的 DOM 节点。
+     */
+
+    this.element = null;
+    /**
+     * @member {Array.<string>} SuperMap.Events.prototype.eventTypes
+     * @description 支持的事件类型列表。
+     */
+
+    this.eventTypes = [];
+    /**
+     * @member {function} SuperMap.Events.prototype.eventHandler
+     * @description 绑定在元素上的事件处理器对象。
+     */
+
+    this.eventHandler = null;
+    /**
+     * @member {boolean} [SuperMap.Events.prototype.fallThrough=false]
+     * @description 是否允许事件处理之后向上传递(冒泡),为 false 的时候阻止事件冒泡。
+     */
+
+    this.fallThrough = fallThrough;
+    /**
+     * @member {boolean} [SuperMap.Events.prototype.includeXY=false]
+     * @description 判断是否让 xy 属性自动创建到浏览器上的鼠标事件,一般设置为 false,如果设置为 true,鼠标事件将会在事件传递过程中自动产生 xy 属性。
+     *              可根据事件对象的 'evt.object' 属性在相关的事件句柄上调用 getMousePosition 函数。这个选项习惯默认为 false 的原因在于,当创建一个
+     *              事件对象,其主要目的是管理。在一个 div 的相对定位的鼠标事件,将其设为 true 也是有意义的。这个选项也可以用来控制是否抵消缓存。如果
+     *              设为 false 不抵消,如果设为 true,用 this.clearMouseCache() 清除缓存偏移(边界元素偏移,元素在页面的位置偏移)。
+     * @example
+     *  function named(evt) {
+     *        this.xy = this.object.events.getMousePosition(evt);
+     *  }
+     */
+
+    this.includeXY = false;
+    /**
+     * @member {Object} SuperMap.Events.prototype.extensions
+     * @description 事件扩展。Keys 代表事件类型,values 代表事件对象。
+     * @example
+     * 以扩展 "foostart" 和 "fooend" 事件为例。展示替换 css 属性为 foo 的元素的 click 事件。
+     *
+     *   SuperMap.Events.foostart = SuperMap.Class({
+    *       initialize: function(target) {
+    *           this.target = target;
+    *           this.target.register("click", this, this.doStuff, {extension: true});
+    *           // only required if extension provides more than one event type
+    *           this.target.extensions["foostart"] = true;
+    *           this.target.extensions["fooend"] = true;
+    *       },
+    *       destroy: function() {
+    *           var target = this.target;
+    *           target.unregister("click", this, this.doStuff);
+    *           delete this.target;
+    *           // only required if extension provides more than one event type
+    *           delete target.extensions["foostart"];
+    *           delete target.extensions["fooend"];
+    *       },
+    *       doStuff: function(evt) {
+    *           var propagate = true;
+    *           if (SuperMap.Event.element(evt).className === "foo") {
+    *               propagate = false;
+    *               var target = this.target;
+    *               target.triggerEvent("foostart");
+    *               window.setTimeout(function() {
+    *                   target.triggerEvent("fooend");
+    *               }, 1000);
+    *           }
+    *           return propagate;
+    *       }
+    *   });
+     *   // only required if extension provides more than one event type
+     *   SuperMap.Events.fooend = SuperMap.Events.foostart;
+     */
+
+    this.extensions = {};
+    /**
+     * @member {Object} SuperMap.Events.prototype.extensionCount
+     */
+
+    this.extensionCount = {};
+    /**
+     * @member {Object} SuperMap.Events.prototype.clearMouseListener
+     */
+
+    this.clearMouseListener = null;
+    Util.extend(this, options);
+
+    if (eventTypes != null) {
+      for (var i = 0, len = eventTypes.length; i < len; i++) {
+        this.addEventType(eventTypes[i]);
+      }
+    }
+
+    if (element != null) {
+      this.attachToElement(element);
+    }
+
+    this.CLASS_NAME = "SuperMap.Events";
+  }
+  /**
+   * @function SuperMap.Events.prototype.destroy
+   * @description 移除当前要素 element 上的所有事件监听和处理。
+   */
+
+
+  Events_createClass(Events, [{
+    key: "destroy",
+    value: function destroy() {
+      for (var e in this.extensions) {
+        if (typeof this.extensions[e] !== "boolean") {
+          this.extensions[e].destroy();
+        }
+      }
+
+      this.extensions = null;
+
+      if (this.element) {
+        Event.stopObservingElement(this.element);
+
+        if (this.element.hasScrollEvent) {
+          Event.stopObserving(window, "scroll", this.clearMouseListener);
+        }
+      }
+
+      this.element = null;
+      this.listeners = null;
+      this.object = null;
+      this.eventTypes = null;
+      this.fallThrough = null;
+      this.eventHandler = null;
+    }
+    /**
+     * @function SuperMap.Events.prototype.addEventType
+     * @description 在此事件对象中添加新的事件类型,如果这个事件类型已经添加过了,则不做任何事情。
+     * @param {string} eventName - 事件名。
+     */
+
+  }, {
+    key: "addEventType",
+    value: function addEventType(eventName) {
+      if (!this.listeners[eventName]) {
+        this.eventTypes.push(eventName);
+        this.listeners[eventName] = [];
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.attachToElement
+     * @description 给 DOM 元素绑定浏览器事件。
+     * @param {HTMLDOMElement} element - 绑定浏览器事件的 DOM 元素。
+     */
+
+  }, {
+    key: "attachToElement",
+    value: function attachToElement(element) {
+      if (this.element) {
+        Event.stopObservingElement(this.element);
+      } else {
+        // keep a bound copy of handleBrowserEvent() so that we can
+        // pass the same function to both Event.observe() and .stopObserving()
+        this.eventHandler = FunctionExt.bindAsEventListener(this.handleBrowserEvent, this); // to be used with observe and stopObserving
+
+        this.clearMouseListener = FunctionExt.bind(this.clearMouseCache, this);
+      }
+
+      this.element = element;
+
+      for (var i = 0, len = this.BROWSER_EVENTS.length; i < len; i++) {
+        var eventType = this.BROWSER_EVENTS[i]; // every browser event has a corresponding application event
+        // (whether it's listened for or not).
+
+        this.addEventType(eventType); // use Prototype to register the event cross-browser
+
+        Event.observe(element, eventType, this.eventHandler);
+      } // disable dragstart in IE so that mousedown/move/up works normally
+
+
+      Event.observe(element, "dragstart", Event.stop);
+    }
+    /**
+     * @function SuperMap.Events.prototype.on
+     * @description 在一个相同的范围内注册监听器的方法,此方法调用 register 函数。
+     * @example
+     * // 注册一个 "loadstart" 监听事件
+     * events.on({"loadstart": loadStartListener});
+     *
+     * // 同样注册一个 "loadstart" 监听事件
+     * events.register("loadstart", undefined, loadStartListener);
+     *
+     * // 同时为对象注册多个监听事件
+     * events.on({
+     *     "loadstart": loadStartListener,
+     *     "loadend": loadEndListener,
+     *     scope: object
+     * });
+     *
+     * // 同时为对象注册多个监听事件,多次调用 register 方法
+     * events.register("loadstart", object, loadStartListener);
+     * events.register("loadend", object, loadEndListener);
+     *
+     *
+     * @param {Object} object - 添加监听的对象。
+     */
+
+  }, {
+    key: "on",
+    value: function on(object) {
+      for (var type in object) {
+        if (type !== "scope" && object.hasOwnProperty(type)) {
+          this.register(type, object.scope, object[type]);
+        }
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.register
+     * @description 在事件对象上注册一个事件。当事件被触发时,'func' 函数被调用,假设我们触发一个事件,
+     *              指定 SuperMap.Bounds 作为 "obj",当事件被触发时,回调函数的上下文作为 Bounds 对象。
+     * @param {string} type - 事件注册者的名字。
+     * @param {Object} [obj=this.object] - 对象绑定的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     * @param {(boolean|Object)} [priority] - 当为 true 时将新的监听加在事件队列的前面。
+     */
+
+  }, {
+    key: "register",
+    value: function register(type, obj, func, priority) {
+      if (type in Events && !this.extensions[type]) {
+        this.extensions[type] = new Events[type](this);
+      }
+
+      if (func != null && Util.indexOf(this.eventTypes, type) !== -1) {
+        if (obj == null) {
+          obj = this.object;
+        }
+
+        var listeners = this.listeners[type];
+
+        if (!listeners) {
+          listeners = [];
+          this.listeners[type] = listeners;
+          this.extensionCount[type] = 0;
+        }
+
+        var listener = {
+          obj: obj,
+          func: func
+        };
+
+        if (priority) {
+          listeners.splice(this.extensionCount[type], 0, listener);
+
+          if (Events_typeof(priority) === "object" && priority.extension) {
+            this.extensionCount[type]++;
+          }
+        } else {
+          listeners.push(listener);
+        }
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.registerPriority
+     * @description 相同的注册方法,但是在前面增加新的监听者事件查询而代替到方法的结束。
+     * @param {string} type - 事件注册者的名字。
+     * @param {Object} [obj=this.object] - 对象绑定方面的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     */
+
+  }, {
+    key: "registerPriority",
+    value: function registerPriority(type, obj, func) {
+      this.register(type, obj, func, true);
+    }
+    /**
+     * @function SuperMap.Events.prototype.un
+     * @description 在一个相同的范围内取消注册监听器的方法,此方法调用 unregister 函数。
+     * @example
+     * // 移除 "loadstart" 事件监听
+     * events.un({"loadstart": loadStartListener});
+     *
+     * // 使用 "unregister" 方法移除 "loadstart" 事件监听
+     * events.unregister("loadstart", undefined, loadStartListener);
+     *
+     * // 取消对象多个事件监听
+     * events.un({
+     *     "loadstart": loadStartListener,
+     *     "loadend": loadEndListener,
+     *     scope: object
+     * });
+     *
+     * // 取消对象多个事件监听,多次调用unregister方法。
+     * events.unregister("loadstart", object, loadStartListener);
+     * events.unregister("loadend", object, loadEndListener);
+     *
+     * @param {Object} object - 移除监听的对象。
+     */
+
+  }, {
+    key: "un",
+    value: function un(object) {
+      for (var type in object) {
+        if (type !== "scope" && object.hasOwnProperty(type)) {
+          this.unregister(type, object.scope, object[type]);
+        }
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.unregister
+     * @description 取消注册。
+     * @param {string} type - 事件类型。
+     * @param {Object} [obj=this.object] - 对象绑定方面的回调。
+     * @param {function} [func] - 回调函数,如果没有特定的回调,则这个函数不做任何事情。
+     */
+
+  }, {
+    key: "unregister",
+    value: function unregister(type, obj, func) {
+      if (obj == null) {
+        obj = this.object;
+      }
+
+      var listeners = this.listeners[type];
+
+      if (listeners != null) {
+        for (var i = 0, len = listeners.length; i < len; i++) {
+          if (listeners[i].obj === obj && listeners[i].func === func) {
+            listeners.splice(i, 1);
+            break;
+          }
+        }
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.remove
+     * @description 删除某个事件类型的所有监听,如果该事件类型没有注册,则不做任何操作。
+     * @param {string} type - 事件类型。
+     */
+
+  }, {
+    key: "remove",
+    value: function remove(type) {
+      if (this.listeners[type] != null) {
+        this.listeners[type] = [];
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.triggerEvent
+     * @description 触发一个特定的注册事件。
+     * @param {string} type - 触发事件类型。
+     * @param {Event} evt - 事件对象。
+     * @returns {boolean} 返回监听对象,如果返回是 false,则停止监听。
+     */
+
+  }, {
+    key: "triggerEvent",
+    value: function triggerEvent(type, evt) {
+      var listeners = this.listeners[type]; // fast path
+
+      if (!listeners || listeners.length == 0) {
+        return undefined;
+      } // prep evt object with object & div references
+
+
+      if (evt == null) {
+        evt = {};
+      }
+
+      evt.object = this.object;
+      evt.element = this.element;
+
+      if (!evt.type) {
+        evt.type = type;
+      } // execute all callbacks registered for specified type
+      // get a clone of the listeners array to
+      // allow for splicing during callbacks
+
+
+      listeners = listeners.slice();
+      var continueChain;
+
+      for (var i = 0, len = listeners.length; i < len; i++) {
+        var callback = listeners[i]; // bind the context to callback.obj
+
+        continueChain = callback.func.apply(callback.obj, [evt]);
+
+        if (continueChain != undefined && continueChain === false) {
+          // if callback returns false, execute no more callbacks.
+          break;
+        }
+      } // don't fall through to other DOM elements
+
+
+      if (!this.fallThrough) {
+        Event.stop(evt, true);
+      }
+
+      return continueChain;
+    }
+    /**
+     * @function SuperMap.Events.prototype.handleBrowserEvent
+     * @description 对 triggerEvent 函数的包装,给事件对象设置了 xy 属性(即当前鼠标点的 xy 坐标)。
+     * @param {Event} evt - 事件对象。
+     */
+
+  }, {
+    key: "handleBrowserEvent",
+    value: function handleBrowserEvent(evt) {
+      var type = evt.type,
+          listeners = this.listeners[type];
+
+      if (!listeners || listeners.length == 0) {
+        // noone's listening, bail out
+        return;
+      } // add clientX & clientY to all events - corresponds to average x, y
+
+
+      var touches = evt.touches;
+
+      if (touches && touches[0]) {
+        var x = 0;
+        var y = 0;
+        var num = touches.length;
+        var touch;
+
+        for (var i = 0; i < num; ++i) {
+          touch = touches[i];
+          x += touch.clientX;
+          y += touch.clientY;
+        }
+
+        evt.clientX = x / num;
+        evt.clientY = y / num;
+      }
+
+      if (this.includeXY) {
+        evt.xy = this.getMousePosition(evt);
+      }
+
+      this.triggerEvent(type, evt);
+    }
+    /**
+     * @function SuperMap.Events.prototype.clearMouseCache
+     * @description 清除鼠标缓存。
+     */
+
+  }, {
+    key: "clearMouseCache",
+    value: function clearMouseCache() {
+      this.element.scrolls = null;
+      this.element.lefttop = null;
+      var body = document.body;
+
+      if (body && !((body.scrollTop != 0 || body.scrollLeft != 0) && navigator.userAgent.match(/iPhone/i))) {
+        this.element.offsets = null;
+      }
+    }
+    /**
+     * @function SuperMap.Events.prototype.getMousePosition
+     * @param {Event} evt - 事件对象。
+     * @returns {SuperMap.Pixel} 当前的鼠标的 xy 坐标点。
+     */
+
+  }, {
+    key: "getMousePosition",
+    value: function getMousePosition(evt) {
+      if (!this.includeXY) {
+        this.clearMouseCache();
+      } else if (!this.element.hasScrollEvent) {
+        Event.observe(window, "scroll", this.clearMouseListener);
+        this.element.hasScrollEvent = true;
+      }
+
+      if (!this.element.scrolls) {
+        var viewportElement = Util.getViewportElement();
+        this.element.scrolls = [viewportElement.scrollLeft, viewportElement.scrollTop];
+      }
+
+      if (!this.element.lefttop) {
+        this.element.lefttop = [document.documentElement.clientLeft || 0, document.documentElement.clientTop || 0];
+      }
+
+      if (!this.element.offsets) {
+        this.element.offsets = Util.pagePosition(this.element);
+      }
+
+      return new Pixel(evt.clientX + this.element.scrolls[0] - this.element.offsets[0] - this.element.lefttop[0], evt.clientY + this.element.scrolls[1] - this.element.offsets[1] - this.element.lefttop[1]);
+    }
+  }]);
+
+  return Events;
+}();
+SuperMap.Events = Events;
+SuperMap.Events.prototype.BROWSER_EVENTS = ["mouseover", "mouseout", "mousedown", "mouseup", "mousemove", "click", "dblclick", "rightclick", "dblrightclick", "resize", "focus", "blur", "touchstart", "touchmove", "touchend", "keydown", "MSPointerDown", "MSPointerUp", "pointerdown", "pointerup", "MSGestureStart", "MSGestureChange", "MSGestureEnd", "contextmenu"];
+;// CONCATENATED MODULE: external "function(){try{return elasticsearch}catch(e){return {}}}()"
+var external_function_try_return_elasticsearch_catch_e_return_namespaceObject = function(){try{return elasticsearch}catch(e){return {}}}();
+var external_function_try_return_elasticsearch_catch_e_return_default = /*#__PURE__*/__webpack_require__.n(external_function_try_return_elasticsearch_catch_e_return_namespaceObject);
+;// CONCATENATED MODULE: ./src/common/thirdparty/elasticsearch/ElasticSearch.js
+function ElasticSearch_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function ElasticSearch_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function ElasticSearch_createClass(Constructor, protoProps, staticProps) { if (protoProps) ElasticSearch_defineProperties(Constructor.prototype, protoProps); if (staticProps) ElasticSearch_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.ElasticSearch
+ * @classdesc ElasticSearch服务类。
+ * @category ElasticSearch
+ * @param {string} url - ElasticSearch服务地址。
+ * @param {Object} options - 参数。
+ * @param {function} [options.change] - 服务器返回数据后执行的函数。废弃,不建议使用。使用search或msearch方法。
+ * @param {boolean} [options.openGeoFence=false] - 是否开启地理围栏验证,默认为不开启。
+ * @param {function} [options.outOfGeoFence] - 数据超出地理围栏后执行的函数。
+ * @param {Object} [options.geoFence] - 地理围栏。
+ */
+
+var ElasticSearch = /*#__PURE__*/function () {
+  function ElasticSearch(url, options) {
+    ElasticSearch_classCallCheck(this, ElasticSearch);
+
+    options = options || {};
+    /**
+     *  @member {string} SuperMap.ElasticSearch.prototype.url 
+     *  @description ElasticSearch服务地址
+     */
+
+    this.url = url;
+    /**
+     *  @member {Object} SuperMap.ElasticSearch.prototype.client
+     *  @description client ES客户端
+     */
+
+    this.client = new (external_function_try_return_elasticsearch_catch_e_return_default()).Client({
+      host: this.url
+    });
+    /**
+     *  @deprecated
+     *  @member {function} [SuperMap.ElasticSearch.prototype.change]
+     *  @description 服务器返回数据后执行的函数。废弃,不建议使用。使用search或msearch方法。
+     */
+
+    this.change = null;
+    /**
+     *  @member {boolean} [SuperMap.ElasticSearch.prototype.openGeoFence=false]
+     *  @description 是否开启地理围栏验证,默认为不开启。
+     */
+
+    this.openGeoFence = false;
+    /**
+     *  @member {function} [SuperMap.ElasticSearch.prototype.outOfGeoFence]
+     *  @description 数据超出地理围栏后执行的函数
+     */
+
+    this.outOfGeoFence = null;
+    /**
+     * @member {Object} [SuperMap.ElasticSearch.prototype.geoFence]
+     * @description 地理围栏
+     * @example {
+    *    radius: 1000,//单位是m
+    *    center: [104.40, 30.43],
+    *    unit: 'meter|degree'
+    *  }
+     */
+
+    this.geoFence = null;
+    /*
+     * Constant: EVENT_TYPES
+     * {Array.<String>}
+     * 此类支持的事件类型。
+     *
+     */
+
+    this.EVENT_TYPES = ['change', 'error', 'outOfGeoFence'];
+    /**
+     * @member {SuperMap.Events} SuperMap.ElasticSearch.prototype.events
+     * @description 事件
+     */
+
+    this.events = new Events(this, null, this.EVENT_TYPES);
+    /**
+     * @member {Object} SuperMap.ElasticSearch.prototype.eventListeners
+     * @description 听器对象,在构造函数中设置此参数(可选),对 MapService 支持的两个事件 processCompleted 、processFailed 进行监听,
+     * 相当于调用 SuperMap.Events.on(eventListeners)。
+     */
+
+    this.eventListeners = null;
+    Util.extend(this, options);
+
+    if (this.eventListeners instanceof Object) {
+      this.events.on(this.eventListeners);
+    }
+  }
+  /**
+   * @function  SuperMap.ElasticSearch.prototype.setGeoFence
+   * @description 设置地理围栏,openGeoFence参数为true的时候,设置的地理围栏才生效。
+   * @param {SuperMap.Geometry} geoFence - 地理围栏。
+   */
+
+
+  ElasticSearch_createClass(ElasticSearch, [{
+    key: "setGeoFence",
+    value: function setGeoFence(geoFence) {
+      this.geoFence = geoFence;
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.bulk
+     * @description 批量操作API,允许执行多个索引/删除操作。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-bulk}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "bulk",
+    value: function bulk(params, callback) {
+      return this.client.bulk(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.clearScroll
+     * @description 通过指定scroll参数进行查询来清除已经创建的scroll请求。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-clearscroll}</br>
+     *更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "clearScroll",
+    value: function clearScroll(params, callback) {
+      return this.client.clearScroll(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.count
+     * @description 获取集群、索引、类型或查询的文档个数。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-count}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-count.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "count",
+    value: function count(params, callback) {
+      return this.client.count(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.count
+     * @description 在特定索引中添加一个类型化的JSON文档,使其可搜索。如果具有相同index,type且id已经存在的文档将发生错误。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-create}
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html}
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "create",
+    value: function create(params, callback) {
+      return this.client.create(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID从特定索引中删除键入的JSON文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-delete}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "delete",
+    value: function _delete(params, callback) {
+      return this.client["delete"](params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID从特定索引中删除键入的JSON文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletebyquery}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "deleteByQuery",
+    value: function deleteByQuery(params, callback) {
+      return this.client.deleteByQuery(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.delete
+     * @description 根据其ID删除脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletescript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "deleteScript",
+    value: function deleteScript(params, callback) {
+      return this.client.deleteScript(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.deleteTemplate
+     * @description 根据其ID删除模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-deletetemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "deleteTemplate",
+    value: function deleteTemplate(params, callback) {
+      return this.client.deleteTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.exists
+     * @description 检查给定文档是否存在。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-exists}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "exists",
+    value: function exists(params, callback) {
+      return this.client.exists(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.existsSource
+     * @description 检查资源是否存在。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-existssource}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "existsSource",
+    value: function existsSource(params, callback) {
+      return this.client.existsSource(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.explain
+     * @description 提供与特定查询相关的特定文档分数的详细信息。它还会告诉您文档是否与指定的查询匹配。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-explain}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "explain",
+    value: function explain(params, callback) {
+      return this.client.explain(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.fieldCaps
+     * @description 允许检索多个索引之间的字段的功能。(实验性API,可能会在未来版本中删除)</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-fieldcaps}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-field-caps.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "fieldCaps",
+    value: function fieldCaps(params, callback) {
+      return this.client.fieldCaps(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.get
+     * @description 从索引获取一个基于其id的类型的JSON文档。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-get}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "get",
+    value: function get(params, callback) {
+      return this.client.get(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getScript
+     * @description 获取脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-getscript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "getScript",
+    value: function getScript(params, callback) {
+      return this.client.getScript(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getSource
+     * @description 通过索引,类型和ID获取文档的源。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-getsource}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "getSource",
+    value: function getSource(params, callback) {
+      return this.client.getSource(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.getTemplate
+     * @description 获取模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-gettemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "getTemplate",
+    value: function getTemplate(params, callback) {
+      return this.client.getTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.index
+     * @description 在索引中存储一个键入的JSON文档,使其可搜索。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-index}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "index",
+    value: function index(params, callback) {
+      return this.client.index(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.info
+     * @description 从当前集群获取基本信息。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-info}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/index.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "info",
+    value: function info(params, callback) {
+      return this.client.info(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.mget
+     * @description 根据索引,类型(可选)和ids来获取多个文档。mget所需的主体可以采用两种形式:文档位置数组或文档ID数组。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-mget}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "mget",
+    value: function mget(params, callback) {
+      return this.client.mget(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.msearch
+     * @description 在同一请求中执行多个搜索请求。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-msearch}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 请求返回的回调函数。也可以使用then表达式获取返回结果。
+     *     回调参数:error,response。结果存储在response.responses中
+     */
+
+  }, {
+    key: "msearch",
+    value: function msearch(params, callback) {
+      var me = this;
+      return me.client.msearch(params).then(function (resp) {
+        me._update(resp.responses, callback);
+
+        return resp;
+      }, function (err) {
+        callback(err);
+        me.events.triggerEvent('error', {
+          error: err
+        });
+        return err;
+      });
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.msearchTemplate
+     * @description 在同一请求中执行多个搜索模板请求。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-msearchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "msearchTemplate",
+    value: function msearchTemplate(params, callback) {
+      return this.client.msearchTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.mtermvectors
+     * @description 多termvectors API允许一次获得多个termvectors。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-mtermvectors}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-termvectors.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "mtermvectors",
+    value: function mtermvectors(params, callback) {
+      return this.client.mtermvectors(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.ping
+     * @description 测试连接。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-ping}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/index.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "ping",
+    value: function ping(params, callback) {
+      return this.client.ping(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.putScript
+     * @description 添加脚本。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-putscript}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "putScript",
+    value: function putScript(params, callback) {
+      return this.client.putScript(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.putTemplate
+     * @description 添加模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-puttemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "putTemplate",
+    value: function putTemplate(params, callback) {
+      return this.client.putTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.reindex
+     * @description 重新索引。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-reindex}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "reindex",
+    value: function reindex(params, callback) {
+      return this.client.reindex(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.reindexRessrottle
+     * @description 重新索引。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-reindexrethrottle}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "reindexRessrottle",
+    value: function reindexRessrottle(params, callback) {
+      return this.client.reindexRessrottle(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.renderSearchTemplate
+     * @description 搜索模板。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-rendersearchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "renderSearchTemplate",
+    value: function renderSearchTemplate(params, callback) {
+      return this.client.renderSearchTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.scroll
+     * @description  在search()调用中指定滚动参数之后,滚动搜索请求(检索下一组结果)。</br>
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-scroll}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "scroll",
+    value: function scroll(params, callback) {
+      return this.client.scroll(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.search
+     * @description  在search()调用中指定滚动参数之后,滚动搜索请求(检索下一组结果)。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-search}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 请求返回的回调函数。也可以使用then表达式获取返回结果。
+     *     回调参数:error,response,结果存储在response.responses中
+     */
+
+  }, {
+    key: "search",
+    value: function search(params, callback) {
+      var me = this;
+      return me.client.search(params).then(function (resp) {
+        me._update(resp.responses, callback);
+
+        return resp;
+      }, function (err) {
+        callback(err);
+        me.events.triggerEvent('error', {
+          error: err
+        });
+        return err;
+      });
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.searchShards
+     * @description  返回要执行搜索请求的索引和分片。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-searchshards}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-shards.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "searchShards",
+    value: function searchShards(params, callback) {
+      return this.client.searchShards(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.searchTemplate
+     * @description  搜索模板。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-searchtemplate}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "searchTemplate",
+    value: function searchTemplate(params, callback) {
+      return this.client.searchTemplate(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.suggest
+     * @description 该建议功能通过使用特定的建议者,基于所提供的文本来建议类似的术语。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-suggest}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "suggest",
+    value: function suggest(params, callback) {
+      return this.client.suggest(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.termvectors
+     * @description 返回有关特定文档字段中的术语的信息和统计信息。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-termvectors}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "termvectors",
+    value: function termvectors(params, callback) {
+      return this.client.termvectors(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.update
+     * @description 更新文档的部分。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-update}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "update",
+    value: function update(params, callback) {
+      return this.client.update(params, callback);
+    }
+    /**
+     * @function  SuperMap.ElasticSearch.prototype.update
+     * @description 通过查询API来更新文档。
+     * 参数设置参考 {@link https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-updatebyquery}</br>
+     * 更多信息参考 {@link https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html}</br>
+     * @param {Object} params - 参数。
+     * @param {function} callback - 回调函数。
+     */
+
+  }, {
+    key: "updateByQuery",
+    value: function updateByQuery(params, callback) {
+      return this.client.updateByQuery(params, callback);
+    }
+  }, {
+    key: "_update",
+    value: function _update(data, callback) {
+      var me = this;
+
+      if (!data) {
+        return;
+      }
+
+      me.data = data;
+
+      if (me.openGeoFence && me.geoFence) {
+        me._validateDatas(data);
+      }
+
+      me.events.triggerEvent('change', {
+        data: me.data
+      }); //change方法已废弃,不建议使用。建议使用search方法的第二个参数传入请求成功的回调
+
+      if (me.change) {
+        me.change && me.change(data);
+      } else {
+        //加responses是为了保持跟原来es自身的数据结构一致
+        callback && callback(undefined, {
+          responses: data
+        });
+      }
+    }
+  }, {
+    key: "_validateDatas",
+    value: function _validateDatas(datas) {
+      if (!datas) {
+        return;
+      }
+
+      if (!(datas instanceof Array)) {
+        datas = [datas];
+      }
+
+      var i,
+          len = datas.length;
+
+      for (i = 0; i < len; i++) {
+        this._validateData(datas[i]);
+      }
+    }
+  }, {
+    key: "_validateData",
+    value: function _validateData(data) {
+      var me = this;
+      data.hits.hits.map(function (source) {
+        var content = source._source;
+
+        var meterUnit = me._getMeterPerMapUnit(me.geoFence.unit);
+
+        var geoFenceCX = me.geoFence.center[0] * meterUnit;
+        var geoFenceCY = me.geoFence.center[1] * meterUnit;
+        var contentX = content.x * meterUnit;
+        var contentY = content.y * meterUnit;
+
+        var distance = me._distance(contentX, contentY, geoFenceCX, geoFenceCY);
+
+        var radius = me.geoFence.radius;
+
+        if (distance > radius) {
+          me.outOfGeoFence && me.outOfGeoFence(data);
+          me.events.triggerEvent('outOfGeoFence', {
+            data: data
+          });
+        }
+
+        return source;
+      });
+    }
+  }, {
+    key: "_distance",
+    value: function _distance(x1, y1, x2, y2) {
+      return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+    }
+  }, {
+    key: "_getMeterPerMapUnit",
+    value: function _getMeterPerMapUnit(mapUnit) {
+      var earchRadiusInMeters = 6378137;
+      var meterPerMapUnit;
+
+      if (mapUnit === 'meter') {
+        meterPerMapUnit = 1;
+      } else if (mapUnit === 'degree') {
+        // 每度表示多少米。
+        meterPerMapUnit = Math.PI * 2 * earchRadiusInMeters / 360;
+      }
+
+      return meterPerMapUnit;
+    }
+  }]);
+
+  return ElasticSearch;
+}();
+SuperMap.ElasticSearch = ElasticSearch;
+// EXTERNAL MODULE: ./node_modules/promise-polyfill/dist/polyfill.js
+var polyfill = __webpack_require__(347);
+// EXTERNAL MODULE: ./node_modules/fetch-ie8/fetch.js
+var fetch = __webpack_require__(122);
+// EXTERNAL MODULE: ./node_modules/fetch-jsonp/build/fetch-jsonp.js
+var fetch_jsonp = __webpack_require__(683);
+var fetch_jsonp_default = /*#__PURE__*/__webpack_require__.n(fetch_jsonp);
+;// CONCATENATED MODULE: ./src/common/util/FetchRequest.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+var FetchRequest_fetch = window.fetch;
+var setFetch = function setFetch(newFetch) {
+  FetchRequest_fetch = newFetch;
+};
+/**
+ * @function SuperMap.setCORS
+ * @description 设置是否允许跨域请求,全局配置,优先级低于 service 下的 crossOring 参数。
+ * @param {boolean} cors - 是否允许跨域请求。
+ */
+
+var setCORS = SuperMap.setCORS = function (cors) {
+  SuperMap.CORS = cors;
+};
+/**
+ * @function SuperMap.isCORS
+ * @description 是是否允许跨域请求。
+ * @returns {boolean} 是否允许跨域请求。
+ */
+
+var isCORS = SuperMap.isCORS = function () {
+  if (SuperMap.CORS != undefined) {
+    return SuperMap.CORS;
+  }
+
+  return window.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest();
+};
+/**
+ * @function SuperMap.setRequestTimeout
+ * @description 设置请求超时时间。
+ * @param {number} [timeout=45] - 请求超时时间,单位秒。
+ */
+
+var setRequestTimeout = SuperMap.setRequestTimeout = function (timeout) {
+  return SuperMap.RequestTimeout = timeout;
+};
+/**
+ * @function SuperMap.getRequestTimeout
+ * @description 获取请求超时时间。
+ * @returns {number} 请求超时时间。
+ */
+
+var getRequestTimeout = SuperMap.getRequestTimeout = function () {
+  return SuperMap.RequestTimeout || 45000;
+};
+var FetchRequest = SuperMap.FetchRequest = {
+  commit: function commit(method, url, params, options) {
+    method = method ? method.toUpperCase() : method;
+
+    switch (method) {
+      case 'GET':
+        return this.get(url, params, options);
+
+      case 'POST':
+        return this.post(url, params, options);
+
+      case 'PUT':
+        return this.put(url, params, options);
+
+      case 'DELETE':
+        return this["delete"](url, params, options);
+
+      default:
+        return this.get(url, params, options);
+    }
+  },
+  supportDirectRequest: function supportDirectRequest(url, options) {
+    if (Util.isInTheSameDomain(url)) {
+      return true;
+    }
+
+    if (options.crossOrigin != undefined) {
+      return options.crossOrigin;
+    } else {
+      return isCORS() || options.proxy;
+    }
+  },
+  get: function get(url, params, options) {
+    options = options || {};
+    var type = 'GET';
+    url = Util.urlAppend(url, this._getParameterString(params || {}));
+    url = this._processUrl(url, options);
+
+    if (!this.supportDirectRequest(url, options)) {
+      url = url.replace('.json', '.jsonp');
+      var config = {
+        url: url,
+        data: params
+      };
+      return SuperMap.Util.RequestJSONPPromise.GET(config);
+    }
+
+    if (!this.urlIsLong(url)) {
+      return this._fetch(url, params, options, type);
+    } else {
+      return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
+    }
+  },
+  "delete": function _delete(url, params, options) {
+    options = options || {};
+    var type = 'DELETE';
+    url = Util.urlAppend(url, this._getParameterString(params || {}));
+    url = this._processUrl(url, options);
+
+    if (!this.supportDirectRequest(url, options)) {
+      url = url.replace('.json', '.jsonp');
+      var config = {
+        url: url += "&_method=DELETE",
+        data: params
+      };
+      return SuperMap.Util.RequestJSONPPromise.DELETE(config);
+    }
+
+    if (this.urlIsLong(url)) {
+      return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
+    }
+
+    return this._fetch(url, params, options, type);
+  },
+  post: function post(url, params, options) {
+    options = options || {};
+
+    if (!this.supportDirectRequest(url, options)) {
+      url = url.replace('.json', '.jsonp');
+      var config = {
+        url: url += "&_method=POST",
+        data: params
+      };
+      return SuperMap.Util.RequestJSONPPromise.POST(config);
+    }
+
+    return this._fetch(this._processUrl(url, options), params, options, 'POST');
+  },
+  put: function put(url, params, options) {
+    options = options || {};
+    url = this._processUrl(url, options);
+
+    if (!this.supportDirectRequest(url, options)) {
+      url = url.replace('.json', '.jsonp');
+      var config = {
+        url: url += "&_method=PUT",
+        data: params
+      };
+      return SuperMap.Util.RequestJSONPPromise.PUT(config);
+    }
+
+    return this._fetch(url, params, options, 'PUT');
+  },
+  urlIsLong: function urlIsLong(url) {
+    //当前url的字节长度。
+    var totalLength = 0,
+        charCode = null;
+
+    for (var i = 0, len = url.length; i < len; i++) {
+      //转化为Unicode编码
+      charCode = url.charCodeAt(i);
+
+      if (charCode < 0x007f) {
+        totalLength++;
+      } else if (0x0080 <= charCode && charCode <= 0x07ff) {
+        totalLength += 2;
+      } else if (0x0800 <= charCode && charCode <= 0xffff) {
+        totalLength += 3;
+      }
+    }
+
+    return totalLength < 2000 ? false : true;
+  },
+  _postSimulatie: function _postSimulatie(type, url, params, options) {
+    var separator = url.indexOf('?') > -1 ? '&' : '?';
+    url += separator + '_method=' + type;
+
+    if (typeof params !== 'string') {
+      params = JSON.stringify(params);
+    }
+
+    return this.post(url, params, options);
+  },
+  _processUrl: function _processUrl(url, options) {
+    if (this._isMVTRequest(url)) {
+      return url;
+    }
+
+    if (url.indexOf('.json') === -1 && !options.withoutFormatSuffix) {
+      if (url.indexOf('?') < 0) {
+        url += '.json';
+      } else {
+        var urlArrays = url.split('?');
+
+        if (urlArrays.length === 2) {
+          url = urlArrays[0] + '.json?' + urlArrays[1];
+        }
+      }
+    }
+
+    if (options && options.proxy) {
+      if (typeof options.proxy === 'function') {
+        url = options.proxy(url);
+      } else {
+        url = decodeURIComponent(url);
+        url = options.proxy + encodeURIComponent(url);
+      }
+    }
+
+    return url;
+  },
+  _fetch: function _fetch(url, params, options, type) {
+    options = options || {};
+    options.headers = options.headers || {};
+
+    if (!options.headers['Content-Type']) {
+      options.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
+    }
+
+    if (options.timeout) {
+      return this._timeout(options.timeout, FetchRequest_fetch(url, {
+        method: type,
+        headers: options.headers,
+        body: type === 'PUT' || type === 'POST' ? params : undefined,
+        credentials: this._getWithCredentials(options),
+        mode: 'cors',
+        timeout: getRequestTimeout()
+      }).then(function (response) {
+        return response;
+      }));
+    }
+
+    return FetchRequest_fetch(url, {
+      method: type,
+      body: type === 'PUT' || type === 'POST' ? params : undefined,
+      headers: options.headers,
+      credentials: this._getWithCredentials(options),
+      mode: 'cors',
+      timeout: getRequestTimeout()
+    }).then(function (response) {
+      return response;
+    });
+  },
+  _getWithCredentials: function _getWithCredentials(options) {
+    if (options.withCredentials === true) {
+      return 'include';
+    }
+
+    if (options.withCredentials === false) {
+      return 'omit';
+    }
+
+    return 'same-origin';
+  },
+  _fetchJsonp: function _fetchJsonp(url, options) {
+    options = options || {};
+    return fetch_jsonp_default()(url, {
+      method: 'GET',
+      timeout: options.timeout
+    }).then(function (response) {
+      return response;
+    });
+  },
+  _timeout: function _timeout(seconds, promise) {
+    return new Promise(function (resolve, reject) {
+      setTimeout(function () {
+        reject(new Error('timeout'));
+      }, seconds);
+      promise.then(resolve, reject);
+    });
+  },
+  _getParameterString: function _getParameterString(params) {
+    var paramsArray = [];
+
+    for (var key in params) {
+      var value = params[key];
+
+      if (value != null && typeof value !== 'function') {
+        var encodedValue;
+
+        if (Array.isArray(value) || value.toString() === '[object Object]') {
+          encodedValue = encodeURIComponent(JSON.stringify(value));
+        } else {
+          encodedValue = encodeURIComponent(value);
+        }
+
+        paramsArray.push(encodeURIComponent(key) + '=' + encodedValue);
+      }
+    }
+
+    return paramsArray.join('&');
+  },
+  _isMVTRequest: function _isMVTRequest(url) {
+    return url.indexOf('.mvt') > -1 || url.indexOf('.pbf') > -1;
+  }
+};
+SuperMap.Util.RequestJSONPPromise = {
+  limitLength: 1500,
+  queryKeys: [],
+  queryValues: [],
+  supermap_callbacks: {},
+  addQueryStrings: function addQueryStrings(values) {
+    var me = this;
+
+    for (var key in values) {
+      me.queryKeys.push(key);
+
+      if (typeof values[key] !== 'string') {
+        values[key] = SuperMap.Util.toJSON(values[key]);
+      }
+
+      var tempValue = encodeURIComponent(values[key]);
+      me.queryValues.push(tempValue);
+    }
+  },
+  issue: function issue(config) {
+    var me = this,
+        uid = me.getUid(),
+        url = config.url,
+        splitQuestUrl = [];
+    var p = new Promise(function (resolve) {
+      me.supermap_callbacks[uid] = function (response) {
+        delete me.supermap_callbacks[uid];
+        resolve(response);
+      };
+    }); // me.addQueryStrings({
+    //     callback: "SuperMap.Util.RequestJSONPPromise.supermap_callbacks[" + uid + "]"
+    // });
+
+    var sectionURL = url,
+        keysCount = 0; //此次sectionURL中有多少个key
+
+    var length = me.queryKeys ? me.queryKeys.length : 0;
+
+    for (var i = 0; i < length; i++) {
+      if (sectionURL.length + me.queryKeys[i].length + 2 >= me.limitLength) {
+        //+2 for ("&"or"?")and"="
+        if (keysCount == 0) {
+          return false;
+        }
+
+        splitQuestUrl.push(sectionURL);
+        sectionURL = url;
+        keysCount = 0;
+        i--;
+      } else {
+        if (sectionURL.length + me.queryKeys[i].length + 2 + me.queryValues[i].length > me.limitLength) {
+          var leftValue = me.queryValues[i];
+
+          while (leftValue.length > 0) {
+            var leftLength = me.limitLength - sectionURL.length - me.queryKeys[i].length - 2; //+2 for ("&"or"?")and"="
+
+            if (sectionURL.indexOf('?') > -1) {
+              sectionURL += '&';
+            } else {
+              sectionURL += '?';
+            }
+
+            var tempLeftValue = leftValue.substring(0, leftLength); //避免 截断sectionURL时,将类似于%22这样的符号截成两半,从而导致服务端组装sectionURL时发生错误
+
+            if (tempLeftValue.substring(leftLength - 1, leftLength) === '%') {
+              leftLength -= 1;
+              tempLeftValue = leftValue.substring(0, leftLength);
+            } else if (tempLeftValue.substring(leftLength - 2, leftLength - 1) === '%') {
+              leftLength -= 2;
+              tempLeftValue = leftValue.substring(0, leftLength);
+            }
+
+            sectionURL += me.queryKeys[i] + '=' + tempLeftValue;
+            leftValue = leftValue.substring(leftLength);
+
+            if (tempLeftValue.length > 0) {
+              splitQuestUrl.push(sectionURL);
+              sectionURL = url;
+              keysCount = 0;
+            }
+          }
+        } else {
+          keysCount++;
+
+          if (sectionURL.indexOf('?') > -1) {
+            sectionURL += '&';
+          } else {
+            sectionURL += '?';
+          }
+
+          sectionURL += me.queryKeys[i] + '=' + me.queryValues[i];
+        }
+      }
+    }
+
+    splitQuestUrl.push(sectionURL);
+    me.send(splitQuestUrl, 'SuperMap.Util.RequestJSONPPromise.supermap_callbacks[' + uid + ']', config && config.proxy);
+    return p;
+  },
+  getUid: function getUid() {
+    var uid = new Date().getTime(),
+        random = Math.floor(Math.random() * 1e17);
+    return uid * 1000 + random;
+  },
+  send: function send(splitQuestUrl, callback, proxy) {
+    var len = splitQuestUrl.length;
+
+    if (len > 0) {
+      var jsonpUserID = new Date().getTime();
+
+      for (var i = 0; i < len; i++) {
+        var url = splitQuestUrl[i];
+
+        if (url.indexOf('?') > -1) {
+          url += '&';
+        } else {
+          url += '?';
+        }
+
+        url += 'sectionCount=' + len;
+        url += '&sectionIndex=' + i;
+        url += '&jsonpUserID=' + jsonpUserID;
+
+        if (proxy) {
+          url = decodeURIComponent(url);
+          url = proxy + encodeURIComponent(url);
+        }
+
+        fetch_jsonp_default()(url, {
+          jsonpCallbackFunction: callback,
+          timeout: 30000
+        });
+      }
+    }
+  },
+  GET: function GET(config) {
+    var me = this;
+    me.queryKeys.length = 0;
+    me.queryValues.length = 0;
+    me.addQueryStrings(config.params);
+    return me.issue(config);
+  },
+  POST: function POST(config) {
+    var me = this;
+    me.queryKeys.length = 0;
+    me.queryValues.length = 0;
+    me.addQueryStrings({
+      requestEntity: config.data
+    });
+    return me.issue(config);
+  },
+  PUT: function PUT(config) {
+    var me = this;
+    me.queryKeys.length = 0;
+    me.queryValues.length = 0;
+    me.addQueryStrings({
+      requestEntity: config.data
+    });
+    return me.issue(config);
+  },
+  DELETE: function DELETE(config) {
+    var me = this;
+    me.queryKeys.length = 0;
+    me.queryValues.length = 0;
+    me.addQueryStrings({
+      requestEntity: config.data
+    });
+    return me.issue(config);
+  }
+};
+;// CONCATENATED MODULE: ./src/common/security/SecurityManager.js
+function SecurityManager_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SecurityManager_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SecurityManager_createClass(Constructor, protoProps, staticProps) { if (protoProps) SecurityManager_defineProperties(Constructor.prototype, protoProps); if (staticProps) SecurityManager_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @name SecurityManager
+ * @memberOf SuperMap
+ * @namespace
+ * @category Security
+ * @description 安全管理中心,提供 iServer,iPortal,Online 统一权限认证管理。
+ *  > 使用说明:
+ *  > 创建任何一个服务之前调用 {@link SuperMap.SecurityManager.registerToken}或
+ *  > {@link SuperMap.SecurityManager.registerKey}注册凭据。
+ *  > 发送请求时根据 url 或者服务 id 获取相应的 key 或者 token 并自动添加到服务地址中。
+ */
+
+var SecurityManager = /*#__PURE__*/function () {
+  function SecurityManager() {
+    SecurityManager_classCallCheck(this, SecurityManager);
+  }
+
+  SecurityManager_createClass(SecurityManager, null, [{
+    key: "generateToken",
+
+    /**
+     * @description 从服务器获取一个token,在此之前要注册服务器信息。
+     * @function SuperMap.SecurityManager.generateToken
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @param {SuperMap.TokenServiceParameter} tokenParam - token 申请参数。
+     * @returns {Promise} 返回包含 token 信息的 Promise 对象。
+     */
+    value: function generateToken(url, tokenParam) {
+      var serverInfo = this.servers[url];
+
+      if (!serverInfo) {
+        return;
+      }
+
+      return FetchRequest.post(serverInfo.tokenServiceUrl, JSON.stringify(tokenParam.toJSON())).then(function (response) {
+        return response.text();
+      });
+    }
+    /**
+     * @description 注册安全服务器相关信息。
+     * @function SuperMap.SecurityManager.registerServers
+     * @param {SuperMap.ServerInfo} serverInfos - 服务器信息。
+     */
+
+  }, {
+    key: "registerServers",
+    value: function registerServers(serverInfos) {
+      this.servers = this.servers || {};
+
+      if (!Util.isArray(serverInfos)) {
+        serverInfos = [serverInfos];
+      }
+
+      for (var i = 0; i < serverInfos.length; i++) {
+        var serverInfo = serverInfos[i];
+        this.servers[serverInfo.server] = serverInfo;
+      }
+    }
+    /**
+     * @description 服务请求都会自动带上这个 token。
+     * @function SuperMap.SecurityManager.registerToken
+     * @param {string} url -服务器域名+端口:如http://localhost:8090。
+     * @param {string} token - token
+     */
+
+  }, {
+    key: "registerToken",
+    value: function registerToken(url, token) {
+      this.tokens = this.tokens || {};
+
+      if (!url || !token) {
+        return;
+      }
+
+      var domain = this._getTokenStorageKey(url);
+
+      this.tokens[domain] = token;
+    }
+    /**
+     * @description 注册 key,ids 为数组(存在一个 key 对应多个服务)。
+     * @function SuperMap.SecurityManager.registerKey
+     * @param {Array} ids - 可以是服务 id 数组或者 url 地址数组或者 webAPI 类型数组。
+     * @param {string} key - key
+     */
+
+  }, {
+    key: "registerKey",
+    value: function registerKey(ids, key) {
+      this.keys = this.keys || {};
+
+      if (!ids || ids.length < 1 || !key) {
+        return;
+      }
+
+      ids = Util.isArray(ids) ? ids : [ids];
+
+      for (var i = 0; i < ids.length; i++) {
+        var id = this._getUrlRestString(ids[0]) || ids[0];
+        this.keys[id] = key;
+      }
+    }
+    /**
+     * @description 获取服务器信息。
+     * @function SuperMap.SecurityManager.getServerInfo
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @returns {SuperMap.ServerInfo} 服务器信息。
+     */
+
+  }, {
+    key: "getServerInfo",
+    value: function getServerInfo(url) {
+      this.servers = this.servers || {};
+      return this.servers[url];
+    }
+    /**
+     * @description 根据 Url 获取token。
+     * @function SuperMap.SecurityManager.getToken
+     * @param {string} url - 服务器域名+端口,如:http://localhost:8092。
+     * @returns {string} token
+     */
+
+  }, {
+    key: "getToken",
+    value: function getToken(url) {
+      if (!url) {
+        return;
+      }
+
+      this.tokens = this.tokens || {};
+
+      var domain = this._getTokenStorageKey(url);
+
+      return this.tokens[domain];
+    }
+    /**
+     * @description 根据 Url 获取 key。
+     * @function SuperMap.SecurityManager.getKey
+     * @param {string} id - id
+     * @returns {string} key
+     */
+
+  }, {
+    key: "getKey",
+    value: function getKey(id) {
+      this.keys = this.keys || {};
+      var key = this._getUrlRestString(id) || id;
+      return this.keys[key];
+    }
+    /**
+     * @description iServer 登录验证。
+     * @function SuperMap.SecurityManager.loginiServer
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     * @param {string} username - 用户名。
+     * @param {string} password - 密码。
+     * @param {boolean} [rememberme=false] - 是否记住。
+     * @returns {Promise} 返回包含 iServer 登录请求结果的 Promise 对象。
+     */
+
+  }, {
+    key: "loginiServer",
+    value: function loginiServer(url, username, password, rememberme) {
+      url = Util.urlPathAppend(url, 'services/security/login');
+      var loginInfo = {
+        username: username && username.toString(),
+        password: password && password.toString(),
+        rememberme: rememberme
+      };
+      loginInfo = JSON.stringify(loginInfo);
+      var requestOptions = {
+        headers: {
+          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+        }
+      };
+      return FetchRequest.post(url, loginInfo, requestOptions).then(function (response) {
+        return response.json();
+      });
+    }
+    /**
+     * @description iServer登出。
+     * @function SuperMap.SecurityManager.logoutiServer
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     * @returns {Promise} 是否登出成功。
+     */
+
+  }, {
+    key: "logoutiServer",
+    value: function logoutiServer(url) {
+      url = Util.urlPathAppend(url, 'services/security/logout');
+      var requestOptions = {
+        headers: {
+          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+        },
+        withoutFormatSuffix: true
+      };
+      return FetchRequest.get(url, "", requestOptions).then(function () {
+        return true;
+      })["catch"](function () {
+        return false;
+      });
+    }
+    /**
+     * @description Online 登录验证。
+     * @function SuperMap.SecurityManager.loginOnline
+     * @param {string} callbackLocation - 跳转位置。
+     * @param {boolean} [newTab=true] - 是否新窗口打开。
+     */
+
+  }, {
+    key: "loginOnline",
+    value: function loginOnline(callbackLocation, newTab) {
+      var loginUrl = SecurityManager.SSO + "/login?service=" + callbackLocation;
+
+      this._open(loginUrl, newTab);
+    }
+    /**
+     * @description iPortal登录验证。
+     * @function SuperMap.SecurityManager.loginiPortal
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     * @param {string} username - 用户名。
+     * @param {string} password - 密码。
+     * @returns {Promise} 返回包含 iPortal 登录请求结果的 Promise 对象。
+     */
+
+  }, {
+    key: "loginiPortal",
+    value: function loginiPortal(url, username, password) {
+      url = Util.urlPathAppend(url, 'web/login');
+      var loginInfo = {
+        username: username && username.toString(),
+        password: password && password.toString()
+      };
+      loginInfo = JSON.stringify(loginInfo);
+      var requestOptions = {
+        headers: {
+          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+        },
+        withCredentials: true
+      };
+      return FetchRequest.post(url, loginInfo, requestOptions).then(function (response) {
+        return response.json();
+      });
+    }
+    /**
+     * @description iPortal 登出。
+     * @function SuperMap.SecurityManager.logoutiPortal
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     * @returns {Promise} 如果登出成功,返回 true;否则返回 false。
+     */
+
+  }, {
+    key: "logoutiPortal",
+    value: function logoutiPortal(url) {
+      url = Util.urlPathAppend(url, 'services/security/logout');
+      var requestOptions = {
+        headers: {
+          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+        },
+        withCredentials: true,
+        withoutFormatSuffix: true
+      };
+      return FetchRequest.get(url, "", requestOptions).then(function () {
+        return true;
+      })["catch"](function () {
+        return false;
+      });
+    }
+    /**
+     * @description iManager 登录验证。
+     * @function SuperMap.SecurityManager.loginManager
+     * @param {string} url - iManager 地址。地址参数为 iManager 首页地址,如: http://localhost:8390/imanager。
+     * @param {Object} [loginInfoParams] - iManager 登录参数。
+     * @param {string} loginInfoParams.userName - 用户名。
+     * @param {string} loginInfoParams.password - 密码。
+     * @param {Object} options
+     * @param {boolean} [options.isNewTab=true] - 不同域时是否在新窗口打开登录页面。
+     * @returns {Promise} 返回包含 iManager 登录请求结果的 Promise 对象。
+     */
+
+  }, {
+    key: "loginManager",
+    value: function loginManager(url, loginInfoParams, options) {
+      if (!Util.isInTheSameDomain(url)) {
+        var isNewTab = options ? options.isNewTab : true;
+
+        this._open(url, isNewTab);
+
+        return;
+      }
+
+      var requestUrl = Util.urlPathAppend(url, 'icloud/security/tokens');
+      var params = loginInfoParams || {};
+      var loginInfo = {
+        username: params.userName && params.userName.toString(),
+        password: params.password && params.password.toString()
+      };
+      loginInfo = JSON.stringify(loginInfo);
+      var requestOptions = {
+        headers: {
+          'Accept': '*/*',
+          'Content-Type': 'application/json'
+        }
+      };
+      var me = this;
+      return FetchRequest.post(requestUrl, loginInfo, requestOptions).then(function (response) {
+        response.text().then(function (result) {
+          me.imanagerToken = result;
+          return result;
+        });
+      });
+    }
+    /**
+     * @description 清空全部验证信息。
+     * @function SuperMap.SecurityManager.destroyAllCredentials
+     */
+
+  }, {
+    key: "destroyAllCredentials",
+    value: function destroyAllCredentials() {
+      this.keys = null;
+      this.tokens = null;
+      this.servers = null;
+    }
+    /**
+     * @description 清空令牌信息。
+     * @function SuperMap.SecurityManager.destroyToken
+     * @param {string} url - iportal 首页地址,如:http://localhost:8092/iportal.
+     */
+
+  }, {
+    key: "destroyToken",
+    value: function destroyToken(url) {
+      if (!url) {
+        return;
+      }
+
+      var domain = this._getTokenStorageKey(url);
+
+      this.tokens = this.tokens || {};
+
+      if (this.tokens[domain]) {
+        delete this.tokens[domain];
+      }
+    }
+    /**
+     * @description 清空服务授权码。
+     * @function SuperMap.SecurityManager.destroyKey
+     * @param {string} url - iServer 首页地址,如:http://localhost:8090/iserver。
+     */
+
+  }, {
+    key: "destroyKey",
+    value: function destroyKey(url) {
+      if (!url) {
+        return;
+      }
+
+      this.keys = this.keys || {};
+      var key = this._getUrlRestString(url) || url;
+
+      if (this.keys[key]) {
+        delete this.keys[key];
+      }
+    }
+  }, {
+    key: "_open",
+    value: function _open(url, newTab) {
+      newTab = newTab != null ? newTab : true;
+      var offsetX = window.screen.availWidth / 2 - this.INNER_WINDOW_WIDTH / 2;
+      var offsetY = window.screen.availHeight / 2 - this.INNER_WINDOW_HEIGHT / 2;
+      var options = "height=" + this.INNER_WINDOW_HEIGHT + ", width=" + this.INNER_WINDOW_WIDTH + ",top=" + offsetY + ", left=" + offsetX + ",toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no";
+
+      if (newTab) {
+        window.open(url, 'login');
+      } else {
+        window.open(url, 'login', options);
+      }
+    }
+  }, {
+    key: "_getTokenStorageKey",
+    value: function _getTokenStorageKey(url) {
+      var patten = /(.*?):\/\/([^\/]+)/i;
+      var result = url.match(patten);
+
+      if (!result) {
+        return url;
+      }
+
+      return result[0];
+    }
+  }, {
+    key: "_getUrlRestString",
+    value: function _getUrlRestString(url) {
+      if (!url) {
+        return url;
+      } // var patten = /http:\/\/(.*\/rest)/i;
+
+
+      var patten = /(http|https):\/\/(.*\/rest)/i;
+      var result = url.match(patten);
+
+      if (!result) {
+        return url;
+      }
+
+      return result[0];
+    }
+  }]);
+
+  return SecurityManager;
+}();
+SecurityManager.INNER_WINDOW_WIDTH = 600;
+SecurityManager.INNER_WINDOW_HEIGHT = 600;
+SecurityManager.SSO = "https://sso.supermap.com";
+SecurityManager.ONLINE = "https://www.supermapol.com";
+SuperMap.SecurityManager = SecurityManager;
+;// CONCATENATED MODULE: ./src/common/REST.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+/**
+ * @enum DataFormat
+ * @memberOf SuperMap
+ * @description 服务请求返回结果数据类型
+ * @type {string}
+ */
+
+var DataFormat = SuperMap.DataFormat = {
+  /** GEOJSON */
+  GEOJSON: "GEOJSON",
+
+  /** ISERVER */
+  ISERVER: "ISERVER"
+};
+
+/**
+ * @enum ServerType
+ * @memberOf SuperMap
+ * @description 服务器类型
+ * @type {string}
+ */
+
+var ServerType = SuperMap.ServerType = {
+  /** ISERVER */
+  ISERVER: "ISERVER",
+
+  /** IPORTAL */
+  IPORTAL: "IPORTAL",
+
+  /** ONLINE */
+  ONLINE: "ONLINE"
+};
+
+/**
+ * @enum GeometryType
+ * @memberOf SuperMap
+ * @description 几何对象枚举,定义了一系列几何对象类型。
+ * @type {string}
+ */
+
+var GeometryType = SuperMap.GeometryType = {
+  /** LINE */
+  LINE: "LINE",
+
+  /** LINEM */
+  LINEM: "LINEM",
+
+  /** POINT */
+  POINT: "POINT",
+
+  /** REGION */
+  REGION: "REGION",
+
+  /** POINTEPS */
+  POINTEPS: "POINTEPS",
+
+  /** LINEEPS */
+  LINEEPS: "LINEEPS",
+
+  /** REGIONEPS */
+  REGIONEPS: "REGIONEPS",
+
+  /** ELLIPSE */
+  ELLIPSE: "ELLIPSE",
+
+  /** CIRCLE */
+  CIRCLE: "CIRCLE",
+
+  /** TEXT */
+  TEXT: "TEXT",
+
+  /** RECTANGLE */
+  RECTANGLE: "RECTANGLE",
+
+  /** UNKNOWN */
+  UNKNOWN: "UNKNOWN",
+
+  /** GEOCOMPOUND */
+  GEOCOMPOUND: "GEOCOMPOUND"
+};
+
+/**
+ * @enum QueryOption
+ * @memberOf SuperMap
+ * @description 查询结果类型枚举,描述查询结果返回类型,包括只返回属性、只返回几何实体以及返回属性和几何实体。
+ * @type {string}
+ */
+
+var QueryOption = SuperMap.QueryOption = {
+  /** 属性 */
+  ATTRIBUTE: "ATTRIBUTE",
+
+  /** 属性和几何对象 */
+  ATTRIBUTEANDGEOMETRY: "ATTRIBUTEANDGEOMETRY",
+
+  /** 几何对象 */
+  GEOMETRY: "GEOMETRY"
+};
+
+/**
+ * @enum JoinType
+ * @memberOf SuperMap
+ * @description 关联查询时的关联类型常量。
+ * 该类定义了两个表之间的连接类型常量,决定了对两个表之间进行连接查询时,查询结果中得到的记录的情况。
+ * @type {string}
+ */
+
+var JoinType = SuperMap.JoinType = {
+  /** INNERJOIN */
+  INNERJOIN: "INNERJOIN",
+
+  /** LEFTJOIN */
+  LEFTJOIN: "LEFTJOIN"
+};
+
+/**
+ * @enum SpatialQueryMode
+ * @memberOf SuperMap
+ * @description  空间查询模式枚举。该类定义了空间查询操作模式常量。
+ * @type {string}
+ */
+
+var SpatialQueryMode = SuperMap.SpatialQueryMode = {
+  /** 包含空间查询模式 */
+  CONTAIN: "CONTAIN",
+
+  /** 交叉空间查询模式 */
+  CROSS: "CROSS",
+
+  /** 分离空间查询模式 */
+  DISJOINT: "DISJOINT",
+
+  /** 重合空间查询模式 */
+  IDENTITY: "IDENTITY",
+
+  /** 相交空间查询模式 */
+  INTERSECT: "INTERSECT",
+
+  /** 无空间查询 */
+  NONE: "NONE",
+
+  /** 叠加空间查询模式 */
+  OVERLAP: "OVERLAP",
+
+  /** 邻接空间查询模式 */
+  TOUCH: "TOUCH",
+
+  /** 被包含空间查询模式 */
+  WITHIN: "WITHIN"
+};
+
+/**
+ * @enum SpatialRelationType
+ * @memberOf SuperMap
+ * @description  数据集对象间的空间关系枚举。
+ * 该类定义了数据集对象间的空间关系类型常量。
+ * @type {string}
+ */
+
+var SpatialRelationType = SuperMap.SpatialRelationType = {
+  /** 包含关系 */
+  CONTAIN: "CONTAIN",
+
+  /** 相交关系 */
+  INTERSECT: "INTERSECT",
+
+  /** 被包含关系 */
+  WITHIN: "WITHIN"
+};
+
+/**
+ * @enum MeasureMode
+ * @memberOf SuperMap
+ * @type {string}
+ * @description  量算模式枚举。
+ * 该类定义了两种测量模式:距离测量和面积测量。
+ */
+
+var MeasureMode = SuperMap.MeasureMode = {
+  /** 距离测量 */
+  DISTANCE: "DISTANCE",
+
+  /** 面积测量 */
+  AREA: "AREA"
+};
+
+/**
+ * @enum Unit
+ * @memberOf SuperMap
+ * @description  距离单位枚举。
+ * 该类定义了一系列距离单位类型。
+ * @type {string}
+ */
+
+var Unit = SuperMap.Unit = {
+  /**  米 */
+  METER: "METER",
+
+  /**  千米 */
+  KILOMETER: "KILOMETER",
+
+  /**  英里 */
+  MILE: "MILE",
+
+  /**  码 */
+  YARD: "YARD",
+
+  /**  度 */
+  DEGREE: "DEGREE",
+
+  /**  毫米 */
+  MILLIMETER: "MILLIMETER",
+
+  /**  厘米 */
+  CENTIMETER: "CENTIMETER",
+
+  /**  英寸 */
+  INCH: "INCH",
+
+  /**  分米 */
+  DECIMETER: "DECIMETER",
+
+  /**  英尺 */
+  FOOT: "FOOT",
+
+  /**  秒 */
+  SECOND: "SECOND",
+
+  /**  分 */
+  MINUTE: "MINUTE",
+
+  /**  弧度 */
+  RADIAN: "RADIAN"
+};
+
+/**
+ * @enum BufferRadiusUnit
+ * @memberOf SuperMap
+ * @description  缓冲区距离单位枚举。
+ * 该类定义了一系列缓冲距离单位类型。
+ * @type {string}
+ */
+
+var BufferRadiusUnit = SuperMap.BufferRadiusUnit = {
+  /**  厘米 */
+  CENTIMETER: "CENTIMETER",
+
+  /**  分米 */
+  DECIMETER: "DECIMETER",
+
+  /**  英尺 */
+  FOOT: "FOOT",
+
+  /**  英寸 */
+  INCH: "INCH",
+
+  /**  千米 */
+  KILOMETER: "KILOMETER",
+
+  /**  米 */
+  METER: "METER",
+
+  /**  英里 */
+  MILE: "MILE",
+
+  /**  毫米 */
+  MILLIMETER: "MILLIMETER",
+
+  /**  码 */
+  YARD: "YARD"
+};
+
+/**
+ * @enum EngineType
+ * @memberOf SuperMap
+ * @description  数据源引擎类型枚举。
+ * @type {string}
+ */
+
+var EngineType = SuperMap.EngineType = {
+  /** 影像只读引擎类型,文件引擎,针对通用影像格式如 BMP,JPG,TIFF 以及超图自定义影像格式 SIT 等。 */
+  IMAGEPLUGINS: "IMAGEPLUGINS",
+
+  /**  OGC 引擎类型,针对于 Web 数据源,Web 引擎,目前支持的类型有 WMS,WFS,WCS。 */
+  OGC: "OGC",
+
+  /**  Oracle 引擎类型,针对 Oracle 数据源,数据库引擎。 */
+  ORACLEPLUS: "ORACLEPLUS",
+
+  /**  SDB 引擎类型,文件引擎,即 SDB 数据源。 */
+  SDBPLUS: "SDBPLUS",
+
+  /**  SQL Server 引擎类型,针对 SQL Server 数据源,数据库引擎 */
+  SQLPLUS: "SQLPLUS",
+
+  /**  UDB 引擎类型,文件引擎。 */
+  UDB: "UDB"
+};
+
+/**
+ * @enum ThemeGraphTextFormat
+ * @memberOf SuperMap
+ * @description  统计专题图文本显示格式枚举。
+ * @type {string}
+ */
+
+var ThemeGraphTextFormat = SuperMap.ThemeGraphTextFormat = {
+  /**  标题。以各子项的标题来进行标注。 */
+  CAPTION: "CAPTION",
+
+  /**  标题 + 百分数。以各子项的标题和所占的百分比来进行标注。 */
+  CAPTION_PERCENT: "CAPTION_PERCENT",
+
+  /**  标题 + 实际数值。以各子项的标题和真实数值来进行标注。 */
+  CAPTION_VALUE: "CAPTION_VALUE",
+
+  /**  百分数。以各子项所占的百分比来进行标注。 */
+  PERCENT: "PERCENT",
+
+  /**  实际数值。以各子项的真实数值来进行标注。 */
+  VALUE: "VALUE"
+};
+
+/**
+ * @enum ThemeGraphType
+ * @memberOf SuperMap
+ * @description  统计专题图类型枚举。
+ * @type {string}
+ */
+
+var ThemeGraphType = SuperMap.ThemeGraphType = {
+  /**  面积图。 */
+  AREA: "AREA",
+
+  /**  柱状图。 */
+  BAR: "BAR",
+
+  /**  三维柱状图。 */
+  BAR3D: "BAR3D",
+
+  /**  折线图。 */
+  LINE: "LINE",
+
+  /**  饼图。 */
+  PIE: "PIE",
+
+  /**  三维饼图。 */
+  PIE3D: "PIE3D",
+
+  /**  点状图。 */
+  POINT: "POINT",
+
+  /**  环状图。 */
+  RING: "RING",
+
+  /**  玫瑰图。 */
+  ROSE: "ROSE",
+
+  /**  三维玫瑰图。 */
+  ROSE3D: "ROSE3D",
+
+  /**  堆叠柱状图。 */
+  STACK_BAR: "STACK_BAR",
+
+  /**  三维堆叠柱状图。 */
+  STACK_BAR3D: "STACK_BAR3D",
+
+  /**  阶梯图。 */
+  STEP: "STEP"
+};
+
+/**
+ * @enum GraphAxesTextDisplayMode
+ * @memberOf SuperMap
+ * @description  统计专题图坐标轴文本显示模式。
+ * @type {string}
+ */
+
+var GraphAxesTextDisplayMode = SuperMap.GraphAxesTextDisplayMode = {
+  /**  显示全部文本。 */
+  ALL: "ALL",
+
+  /**  不显示。 */
+  NONE: "NONE",
+
+  /**  显示Y轴的文本。 */
+  YAXES: "YAXES"
+};
+
+/**
+ * @enum GraduatedMode
+ * @memberOf SuperMap
+ * @description  专题图分级模式枚举。
+ *
+ * @type {string}
+ */
+
+var GraduatedMode = SuperMap.GraduatedMode = {
+  /**  常量分级模式。 */
+  CONSTANT: "CONSTANT",
+
+  /** 对数分级模式。 */
+  LOGARITHM: "LOGARITHM",
+
+  /**  平方根分级模式。 */
+  SQUAREROOT: "SQUAREROOT"
+};
+
+/**
+ * @enum RangeMode
+ * @memberOf SuperMap
+ * @description  范围分段专题图分段方式枚举。
+ * @type {string}
+ */
+
+var RangeMode = SuperMap.RangeMode = {
+  /**  自定义分段法。 */
+  CUSTOMINTERVAL: "CUSTOMINTERVAL",
+
+  /**  等距离分段法。 */
+  EQUALINTERVAL: "EQUALINTERVAL",
+
+  /**  对数分段法。 */
+  LOGARITHM: "LOGARITHM",
+
+  /**  等计数分段法。 */
+  QUANTILE: "QUANTILE",
+
+  /**  平方根分段法。 */
+  SQUAREROOT: "SQUAREROOT",
+
+  /**  标准差分段法。 */
+  STDDEVIATION: "STDDEVIATION"
+};
+
+/**
+ * @enum ThemeType
+ * @memberOf SuperMap
+ * @description  专题图类型枚举。
+ * @type {string}
+ */
+
+var ThemeType = SuperMap.ThemeType = {
+  /** 点密度专题图。 */
+  DOTDENSITY: "DOTDENSITY",
+
+  /** 等级符号专题图。 */
+  GRADUATEDSYMBOL: "GRADUATEDSYMBOL",
+
+  /** 统计专题图。 */
+  GRAPH: "GRAPH",
+
+  /** 标签专题图。 */
+  LABEL: "LABEL",
+
+  /** 分段专题图。 */
+  RANGE: "RANGE",
+
+  /** 単值专题图。 */
+  UNIQUE: "UNIQUE"
+};
+
+/**
+ * @enum ColorGradientType
+ * @memberOf SuperMap
+ * @description  渐变颜色枚举。
+ * @type {string}
+ */
+
+var ColorGradientType = SuperMap.ColorGradientType = {
+  /** 黑白渐变色。 */
+  BLACK_WHITE: "BLACKWHITE",
+
+  /** 蓝黑渐变色。 */
+  BLUE_BLACK: "BLUEBLACK",
+
+  /** 蓝红渐变色。 */
+  BLUE_RED: "BLUERED",
+
+  /** 蓝白渐变色。 */
+  BLUE_WHITE: "BLUEWHITE",
+
+  /** 青黑渐变色。 */
+  CYAN_BLACK: "CYANBLACK",
+
+  /** 青蓝渐变色。 */
+  CYAN_BLUE: "CYANBLUE",
+
+  /** 青绿渐变色。 */
+  CYAN_GREEN: "CYANGREEN",
+
+  /** 青白渐变色。 */
+  CYAN_WHITE: "CYANWHITE",
+
+  /** 绿黑渐变色。 */
+  GREEN_BLACK: "GREENBLACK",
+
+  /** 绿蓝渐变色。 */
+  GREEN_BLUE: "GREENBLUE",
+
+  /** 绿橙紫渐变色。 */
+  GREEN_ORANGE_VIOLET: "GREENORANGEVIOLET",
+
+  /** 绿红渐变色。 */
+  GREEN_RED: "GREENRED",
+
+  /** 蓝红渐变色。 */
+  GREEN_WHITE: "GREENWHITE",
+
+  /** 粉黑渐变色。 */
+  PINK_BLACK: "PINKBLACK",
+
+  /** 粉蓝渐变色。 */
+  PINK_BLUE: "PINKBLUE",
+
+  /** 粉红渐变色。 */
+  PINK_RED: "PINKRED",
+
+  /** 粉白渐变色。 */
+  PINK_WHITE: "PINKWHITE",
+
+  /** 彩虹色。 */
+  RAIN_BOW: "RAINBOW",
+
+  /** 红黑渐变色。 */
+  RED_BLACK: "REDBLACK",
+
+  /** 红白渐变色。 */
+  RED_WHITE: "REDWHITE",
+
+  /** 光谱渐变。 */
+  SPECTRUM: "SPECTRUM",
+
+  /** 地形渐变,用于三维显示效果较好。 */
+  TERRAIN: "TERRAIN",
+
+  /** 黄黑渐变色。 */
+  YELLOW_BLACK: "YELLOWBLACK",
+
+  /** 黄蓝渐变色。 */
+  YELLOW_BLUE: "YELLOWBLUE",
+
+  /** 黄绿渐变色。 */
+  YELLOW_GREEN: "YELLOWGREEN",
+
+  /** 黄红渐变色。 */
+  YELLOW_RED: "YELLOWRED",
+
+  /** 黄白渐变色。 */
+  YELLOW_WHITE: "YELLOWWHITE"
+};
+
+/**
+ * @enum TextAlignment
+ * @memberOf SuperMap
+ * @description  文本对齐枚举。
+ * @type {string}
+ */
+
+var TextAlignment = SuperMap.TextAlignment = {
+  /** 左上角对齐。 */
+  TOPLEFT: "TOPLEFT",
+
+  /** 顶部居中对齐。 */
+  TOPCENTER: "TOPCENTER",
+
+  /** 右上角对齐。 */
+  TOPRIGHT: "TOPRIGHT",
+
+  /** 基准线左对齐。 */
+  BASELINELEFT: "BASELINELEFT",
+
+  /** 基准线居中对齐。 */
+  BASELINECENTER: "BASELINECENTER",
+
+  /** 基准线右对齐。 */
+  BASELINERIGHT: "BASELINERIGHT",
+
+  /** 左下角对齐。 */
+  BOTTOMLEFT: "BOTTOMLEFT",
+
+  /** 底部居中对齐。 */
+  BOTTOMCENTER: "BOTTOMCENTER",
+
+  /** 右下角对齐。 */
+  BOTTOMRIGHT: "BOTTOMRIGHT",
+
+  /** 左中对齐。 */
+  MIDDLELEFT: "MIDDLELEFT",
+
+  /** 中心对齐。 */
+  MIDDLECENTER: "MIDDLECENTER",
+
+  /** 右中对齐。 */
+  MIDDLERIGHT: "MIDDLERIGHT"
+};
+
+/**
+ * @enum FillGradientMode
+ * @memberOf SuperMap
+ * @description  渐变填充风格的渐变类型枚举。
+ * @type {string}
+ */
+
+var FillGradientMode = SuperMap.FillGradientMode = {
+  /** 无渐变。 */
+  NONE: "NONE",
+
+  /** 线性渐变填充。 */
+  LINEAR: "LINEAR",
+
+  /** 辐射渐变填充。 */
+  RADIAL: "RADIAL",
+
+  /** 圆锥渐变填充。 */
+  CONICAL: "CONICAL",
+
+  /** 四角渐变填充。 */
+  SQUARE: "SQUARE"
+};
+
+/**
+ * @enum AlongLineDirection
+ * @memberOf SuperMap
+ * @description  标签沿线标注方向枚举。
+ * @type {string}
+ */
+
+var AlongLineDirection = SuperMap.AlongLineDirection = {
+  /** 沿线的法线方向放置标签。 */
+  NORMAL: "ALONG_LINE_NORMAL",
+
+  /** 从下到上,从左到右放置。 */
+  LB_TO_RT: "LEFT_BOTTOM_TO_RIGHT_TOP",
+
+  /** 从上到下,从左到右放置。 */
+  LT_TO_RB: "LEFT_TOP_TO_RIGHT_BOTTOM",
+
+  /** 从下到上,从右到左放置。 */
+  RB_TO_LT: "RIGHT_BOTTOM_TO_LEFT_TOP",
+
+  /** 从上到下,从右到左放置。 */
+  RT_TO_LB: "RIGHT_TOP_TO_LEFT_BOTTOM"
+};
+
+/**
+ * @enum LabelBackShape
+ * @memberOf SuperMap
+ * @description  标签专题图中标签背景的形状枚举。
+ * @type {string}
+ */
+
+var LabelBackShape = SuperMap.LabelBackShape = {
+  /** 菱形背景,即标签背景的形状为菱形。 */
+  DIAMOND: "DIAMOND",
+
+  /** 椭圆形背景,即标签背景的行状为椭圆形。 */
+  ELLIPSE: "ELLIPSE",
+
+  /** 符号背景,即标签背景的形状为设定的符号。 */
+  MARKER: "MARKER",
+
+  /** 空背景,即不使用任何形状作为标签的背景。 */
+  NONE: "NONE",
+
+  /** 矩形背景,即标签背景的形状为矩形。 */
+  RECT: "RECT",
+
+  /** 圆角矩形背景,即标签背景的形状为圆角矩形。 */
+  ROUNDRECT: "ROUNDRECT",
+
+  /** 三角形背景,即标签背景的形状为三角形。 */
+  TRIANGLE: "TRIANGLE"
+};
+
+/**
+ * @enum LabelOverLengthMode
+ * @memberOf SuperMap
+ * @description  标签专题图中超长标签的处理模式枚举。
+ * @type {string}
+ */
+
+var LabelOverLengthMode = SuperMap.LabelOverLengthMode = {
+  /** 换行显示。 */
+  NEWLINE: "NEWLINE",
+
+  /** 对超长标签不进行处理。 */
+  NONE: "NONE",
+
+  /** 省略超出部分。 */
+  OMIT: "OMIT"
+};
+
+/**
+ * @enum DirectionType
+ * @memberOf SuperMap
+ * @description  网络分析中方向枚举。
+ * 在行驶引导子项中使用。
+ * @type {string}
+ */
+
+var DirectionType = SuperMap.DirectionType = {
+  /** 东。 */
+  EAST: "EAST",
+
+  /** 无方向。 */
+  NONE: "NONE",
+
+  /** 北。 */
+  NORTH: "NORTH",
+
+  /** 南。 */
+  SOURTH: "SOURTH",
+
+  /** 西。 */
+  WEST: "WEST"
+};
+
+/**
+ * @enum SideType
+ * @memberOf SuperMap
+ * @description  行驶位置枚举。
+ * 表示在行驶在路的左边、右边或者路上的枚举,该类用在行驶导引子项类中。
+ * @type {string}
+ */
+
+var SideType = SuperMap.SideType = {
+  /** 路的左侧。 */
+  LEFT: "LEFT",
+
+  /** 在路上(即路的中间)。 */
+  MIDDLE: "MIDDLE",
+
+  /** 无效值。 */
+  NONE: "NONE",
+
+  /** 路的右侧。 */
+  RIGHT: "RIGHT"
+};
+
+/**
+ * @enum SupplyCenterType
+ * @memberOf SuperMap
+ * @description  资源供给中心类型枚举。
+ * 该枚举定义了网络分析中资源中心点的类型,主要用于资源分配和选址分区。
+ * 资源供给中心点的类型包括非中心,固定中心和可选中心。固定中心用于资源分配分析; 固定中心和可选中心用于选址分析;非中心在两种网络分析时都不予考虑。
+ * @type {string}
+ */
+
+var SupplyCenterType = SuperMap.SupplyCenterType = {
+  /** 固定中心点。 */
+  FIXEDCENTER: "FIXEDCENTER",
+
+  /** 非中心点。 */
+  NULL: "NULL",
+
+  /** 可选中心点。 */
+  OPTIONALCENTER: "OPTIONALCENTER"
+};
+
+/**
+ * @enum TurnType
+ * @memberOf SuperMap
+ * @description  转弯方向枚举。
+ * 用在行驶引导子项类中,表示转弯的方向。
+ * @type {string}
+ */
+
+var TurnType = SuperMap.TurnType = {
+  /** 向前直行。 */
+  AHEAD: "AHEAD",
+
+  /** 掉头。 */
+  BACK: "BACK",
+
+  /** 终点,不拐弯。 */
+  END: "END",
+
+  /** 左转弯。 */
+  LEFT: "LEFT",
+
+  /** 无效值。 */
+  NONE: "NONE",
+
+  /** 右转弯。 */
+  RIGHT: "RIGHT"
+};
+
+/**
+ * @enum BufferEndType
+ * @memberOf SuperMap
+ * @description  缓冲区分析BufferEnd类型。
+ * @type {string}
+ */
+
+var BufferEndType = SuperMap.BufferEndType = {
+  /** FLAT */
+  FLAT: "FLAT",
+
+  /** ROUND */
+  ROUND: "ROUND"
+};
+
+/**
+ * @enum OverlayOperationType
+ * @memberOf SuperMap
+ * @description  叠加分析类型枚举。
+ * @type {string}
+ */
+
+var OverlayOperationType = SuperMap.OverlayOperationType = {
+  /** 操作数据集(几何对象)裁剪被操作数据集(几何对象)。 */
+  CLIP: "CLIP",
+
+  /** 在被操作数据集(几何对象)上擦除掉与操作数据集(几何对象)相重合的部分。 */
+  ERASE: "ERASE",
+
+  /**对被操作数据集(几何对象)进行同一操作,即操作执行后,被操作数据集(几何对象)包含来自操作数据集(几何对象)的几何形状。 */
+  IDENTITY: "IDENTITY",
+
+  /** 对两个数据集(几何对象)求交,返回两个数据集(几何对象)的交集。 */
+  INTERSECT: "INTERSECT",
+
+  /** 对两个面数据集(几何对象)进行合并操作。 */
+  UNION: "UNION",
+
+  /** 对两个面数据集(几何对象)进行更新操作。 */
+  UPDATE: "UPDATE",
+
+  /** 对两个面数据集(几何对象)进行对称差操作。 */
+  XOR: "XOR"
+};
+
+/**
+ * @enum OutputType
+ * @memberOf SuperMap
+ * @description  分布式分析输出类型枚举。
+ * @type {string}
+ */
+
+var OutputType = SuperMap.OutputType = {
+  /** INDEXEDHDFS */
+  INDEXEDHDFS: "INDEXEDHDFS",
+
+  /** UDB */
+  UDB: "UDB",
+
+  /** MONGODB */
+  MONGODB: "MONGODB",
+
+  /** PG */
+  PG: "PG"
+};
+
+/**
+ * @enum SmoothMethod
+ * @memberOf SuperMap
+ * @description  光滑方法枚举。
+ * 用于从Grid 或DEM数据生成等值线或等值面时对等值线或者等值面的边界线进行平滑处理的方法。
+ * @type {string}
+ */
+
+var SmoothMethod = SuperMap.SmoothMethod = {
+  /** B 样条法。 */
+  BSPLINE: "BSPLINE",
+
+  /** 磨角法。 */
+  POLISH: "POLISH"
+};
+
+/**
+ * @enum SurfaceAnalystMethod
+ * @memberOf SuperMap
+ * @description  表面分析方法枚举。
+ * 通过对数据进行表面分析,能够挖掘原始数据所包含的信息,使某些细节明显化,易于分析。
+ * @type {string}
+ */
+
+var SurfaceAnalystMethod = SuperMap.SurfaceAnalystMethod = {
+  /** 等值线提取。 */
+  ISOLINE: "ISOLINE",
+
+  /** 等值面提取。 */
+  ISOREGION: "ISOREGION"
+};
+
+/**
+ * @enum DataReturnMode
+ * @memberOf SuperMap
+ * @description  数据返回模式枚举。
+ * 该枚举用于指定空间分析返回结果模式,包含返回数据集标识和记录集、只返回数据集标识(数据集名称@数据源名称)及只返回记录集三种模式。
+ * @type {string}
+ */
+
+var DataReturnMode = SuperMap.DataReturnMode = {
+  /** 返回结果数据集标识(数据集名称@数据源名称)和记录集(RecordSet)。 */
+  DATASET_AND_RECORDSET: "DATASET_AND_RECORDSET",
+
+  /** 只返回数据集标识(数据集名称@数据源名称)。 */
+  DATASET_ONLY: "DATASET_ONLY",
+
+  /** 只返回记录集(RecordSet)。 */
+  RECORDSET_ONLY: "RECORDSET_ONLY"
+};
+
+/**
+ * @enum EditType
+ * @memberOf SuperMap
+ * @description  要素集更新模式枚举。
+ * 该枚举用于指定数据服务中要素集更新模式,包含添加要素集、更新要素集和删除要素集。
+ * @type {string}
+ */
+
+var EditType = SuperMap.EditType = {
+  /** 增加操作。 */
+  ADD: "add",
+
+  /** 修改操作。 */
+  UPDATE: "update",
+
+  /** 删除操作。 */
+  DELETE: "delete"
+};
+
+/**
+ * @enum TransferTactic
+ * @memberOf SuperMap
+ * @description  公交换乘策略枚举。
+ * 该枚举用于指定公交服务中要素集更新模式,包含添加要素集、更新要素集和删除要素集。
+ * @type {string}
+ */
+
+var TransferTactic = SuperMap.TransferTactic = {
+  /** 时间短。 */
+  LESS_TIME: "LESS_TIME",
+
+  /** 少换乘。 */
+  LESS_TRANSFER: "LESS_TRANSFER",
+
+  /** 少步行。 */
+  LESS_WALK: "LESS_WALK",
+
+  /** 距离最短。 */
+  MIN_DISTANCE: "MIN_DISTANCE"
+};
+
+/**
+ * @enum TransferPreference
+ * @memberOf SuperMap
+ * @description  公交换乘策略枚举。
+ * 该枚举用于指定交通换乘服务中设置地铁优先、公交优先、不乘地铁、无偏好等偏好设置。
+ * @type {string}
+ */
+
+var TransferPreference = SuperMap.TransferPreference = {
+  /** 公交汽车优先。 */
+  BUS: "BUS",
+
+  /** 地铁优先。 */
+  SUBWAY: "SUBWAY",
+
+  /** 不乘坐地铁。 */
+  NO_SUBWAY: "NO_SUBWAY",
+
+  /** 无乘车偏好。 */
+  NONE: "NONE"
+};
+
+/**
+ * @enum GridType
+ * @memberOf SuperMap
+ * @description  地图背景格网类型枚举。
+ * @type {string}
+ */
+
+var GridType = SuperMap.GridType = {
+  /** 十字叉丝。 */
+  CROSS: "CROSS",
+
+  /** 网格线。 */
+  GRID: "GRID",
+
+  /** 点。 */
+  POINT: "POINT"
+};
+
+/**
+ * @enum ColorSpaceType
+ * @memberOf SuperMap
+ * @description  色彩空间枚举。
+ * 由于成色原理的不同,决定了显示器、投影仪这类靠色光直接合成颜色的颜色设备和打印机、
+ * 印刷机这类靠使用颜料的印刷设备在生成颜色方式上的区别。
+ * 针对上述不同成色方式,SuperMap 提供两种色彩空间,
+ * 分别为 RGB 和 CMYK。RGB 主要用于显示系统中,CMYK 主要用于印刷系统中。
+ * @type {string}
+ */
+
+var ColorSpaceType = SuperMap.ColorSpaceType = {
+  /** 该类型主要在印刷系统使用。 */
+  CMYK: "CMYK",
+
+  /** 该类型主要在显示系统中使用。 */
+  RGB: "RGB"
+};
+
+/**
+ * @enum LayerType
+ * @memberOf SuperMap
+ * @description  图层类型。
+ * @type {string}
+ */
+
+var LayerType = SuperMap.LayerType = {
+  /** SuperMap UGC 类型图层。如矢量图层、栅格(Grid)图层、影像图层。 */
+  UGC: "UGC",
+
+  /** WMS 图层。 */
+  WMS: "WMS",
+
+  /** WFS 图层。 */
+  WFS: "WFS",
+
+  /** 自定义图层。 */
+  CUSTOM: "CUSTOM"
+};
+
+/**
+ * @enum UGCLayerType
+ * @memberOf SuperMap
+ * @description  UGC图层类型。
+ * @type {string}
+ */
+
+var UGCLayerType = SuperMap.UGCLayerType = {
+  /** 专题图层。 */
+  THEME: "THEME",
+
+  /** 矢量图层。 */
+  VECTOR: "VECTOR",
+
+  /** 栅格图层。。 */
+  GRID: "GRID",
+
+  /** 影像图层。 */
+  IMAGE: "IMAGE"
+};
+
+/**
+ * @enum StatisticMode
+ * @memberOf SuperMap
+ * @description  字段统计方法类型。
+ * @type {string}
+ */
+
+var StatisticMode = SuperMap.StatisticMode = {
+  /** 统计所选字段的平均值。 */
+  AVERAGE: "AVERAGE",
+
+  /** 统计所选字段的最大值。 */
+  MAX: "MAX",
+
+  /** 统计所选字段的最小值。 */
+  MIN: "MIN",
+
+  /** 统计所选字段的标准差 */
+  STDDEVIATION: "STDDEVIATION",
+
+  /** 统计所选字段的总和。 */
+  SUM: "SUM",
+
+  /** 统计所选字段的方差。 */
+  VARIANCE: "VARIANCE"
+};
+
+/**
+ * @enum PixelFormat
+ * @memberOf SuperMap
+ * @description  栅格与影像数据存储的像素格式枚举。
+ * @type {string}
+ */
+
+var PixelFormat = SuperMap.PixelFormat = {
+  /** 每个像元用16个比特(即2个字节)表示。 */
+  BIT16: "BIT16",
+
+  /** 每个像元用32个比特(即4个字节)表示。 */
+  BIT32: "BIT32",
+
+  /** 每个像元用64个比特(即8个字节)表示,只提供给栅格数据集使用。 */
+  BIT64: "BIT64",
+
+  /** 每个像元用4个字节来表示,只提供给栅格数据集使用。 */
+  SINGLE: "SINGLE",
+
+  /** 每个像元用8个字节来表示,只提供给栅格数据集使用。 */
+  DOUBLE: "DOUBLE",
+
+  /** 每个像元用1个比特表示。 */
+  UBIT1: "UBIT1",
+
+  /** 每个像元用4个比特来表示。 */
+  UBIT4: "UBIT4",
+
+  /** 每个像元用8个比特(即1个字节)来表示。 */
+  UBIT8: "UBIT8",
+
+  /** 每个像元用24个比特(即3个字节)来表示。 */
+  UBIT24: "UBIT24",
+
+  /** 每个像元用32个比特(即4个字节)来表示。 */
+  UBIT32: "UBIT32"
+};
+
+/**
+ * @enum SearchMode
+ * @memberOf SuperMap
+ * @description  内插时使用的样本点的查找方式枚举
+ * @type {string}
+ */
+
+var SearchMode = SuperMap.SearchMode = {
+  /** 使用 KDTREE 的固定点数方式查找参与内插分析的点。 */
+  KDTREE_FIXED_COUNT: "KDTREE_FIXED_COUNT",
+
+  /** 使用 KDTREE 的定长方式查找参与内插分析的点。 */
+  KDTREE_FIXED_RADIUS: "KDTREE_FIXED_RADIUS",
+
+  /** 不进行查找,使用所有的输入点进行内插分析。 */
+  NONE: "NONE",
+
+  /** 使用 QUADTREE 方式查找参与内插分析的点,仅对样条(RBF)插值和普通克吕金(Kriging)有用。 */
+  QUADTREE: "QUADTREE"
+};
+
+/**
+ * @enum InterpolationAlgorithmType
+ * @memberOf SuperMap
+ * @description  插值分析的算法的类型
+ * @type {string}
+ */
+
+var InterpolationAlgorithmType = SuperMap.InterpolationAlgorithmType = {
+  /** 普通克吕金插值法。 */
+  KRIGING: "KRIGING",
+
+  /** 简单克吕金插值法。 */
+  SimpleKriging: "SimpleKriging",
+
+  /** 泛克吕金插值法。 */
+  UniversalKriging: "UniversalKriging"
+};
+
+/**
+ * @enum VariogramMode
+ * @memberOf SuperMap
+ * @description  克吕金(Kriging)插值时的半变函数类型枚举
+ * @type {string}
+ */
+
+var VariogramMode = SuperMap.VariogramMode = {
+  /** 指数函数。 */
+  EXPONENTIAL: "EXPONENTIAL",
+
+  /** 高斯函数。 */
+  GAUSSIAN: "GAUSSIAN",
+
+  /** 球型函数。 */
+  SPHERICAL: "SPHERICAL"
+};
+
+/**
+ * @enum Exponent
+ * @memberOf SuperMap
+ * @description  定义了泛克吕金(UniversalKriging)插值时样点数据中趋势面方程的阶数
+ * @type {string}
+ */
+
+var Exponent = SuperMap.Exponent = {
+  /** 阶数为1。 */
+  EXP1: "EXP1",
+
+  /** 阶数为2。 */
+  EXP2: "EXP2"
+};
+
+/**
+ * @enum ClientType
+ * @memberOf SuperMap
+ * @description token申请的客户端标识类型
+ * @type {string}
+ */
+
+var ClientType = SuperMap.ClientType = {
+  /** 指定的 IP 地址。 */
+  IP: "IP",
+
+  /** 指定的 URL。 */
+  REFERER: "Referer",
+
+  /** 发送申请令牌请求的客户端 IP。 */
+  REQUESTIP: "RequestIP",
+
+  /** 不做任何验证。 */
+  NONE: "NONE",
+
+  /** SERVER。 */
+  SERVER: "SERVER",
+
+  /** WEB。 */
+  WEB: "WEB"
+};
+
+/**
+ * @enum ChartType
+ * @memberOf SuperMap
+ * @description 客户端专题图图表类型
+ * @type {string}
+ */
+
+var ChartType = SuperMap.ChartType = {
+  /** 柱状图。 */
+  BAR: "Bar",
+
+  /** 三维柱状图。 */
+  BAR3D: "Bar3D",
+
+  /** 圆形图。 */
+  CIRCLE: "Circle",
+
+  /** 饼图。 */
+  PIE: "Pie",
+
+  /** 散点图。 */
+  POINT: "Point",
+
+  /** 折线图。 */
+  LINE: "Line",
+
+  /** 环状图。 */
+  RING: "Ring"
+};
+
+/**
+ * @enum ClipAnalystMode
+ * @memberOf SuperMap
+ * @description  裁剪分析模式
+ * @type {string}
+ */
+
+var ClipAnalystMode = SuperMap.ClipAnalystMode = {
+  /** CLIP。 */
+  CLIP: "clip",
+
+  /** INTERSECT。 */
+  INTERSECT: "intersect"
+};
+
+/**
+ * @enum AnalystAreaUnit
+ * @memberOf SuperMap
+ * @description 分布式分析面积单位
+ * @type {string}
+ */
+
+var AnalystAreaUnit = SuperMap.AnalystAreaUnit = {
+  /** 平方米。 */
+  "SQUAREMETER": "SquareMeter",
+
+  /** 平方千米。 */
+  "SQUAREKILOMETER": "SquareKiloMeter",
+
+  /** 公顷。 */
+  "HECTARE": "Hectare",
+
+  /** 公亩。 */
+  "ARE": "Are",
+
+  /** 英亩。 */
+  "ACRE": "Acre",
+
+  /** 平方英尺。 */
+  "SQUAREFOOT": "SquareFoot",
+
+  /** 平方码。 */
+  "SQUAREYARD": "SquareYard",
+
+  /** 平方英里。 */
+  "SQUAREMILE": "SquareMile"
+};
+
+/**
+ * @enum AnalystSizeUnit
+ * @memberOf SuperMap
+ * @description 分布式分析单位
+ * @type {string}
+ */
+
+var AnalystSizeUnit = SuperMap.AnalystSizeUnit = {
+  /** 米。 */
+  "METER": "Meter",
+
+  /** 千米。 */
+  "KILOMETER": "Kilometer",
+
+  /** 码。 */
+  "YARD": "Yard",
+
+  /** 英尺。 */
+  "FOOT": "Foot",
+
+  /** 英里。 */
+  "MILE": "Mile"
+};
+
+/**
+ * @enum StatisticAnalystMode
+ * @memberOf SuperMap
+ * @description 分布式分析统计模式
+ * @type {string}
+ */
+
+var StatisticAnalystMode = SuperMap.StatisticAnalystMode = {
+  /** 统计所选字段的最大值。 */
+  "MAX": "max",
+
+  /** 统计所选字段的最小值。 */
+  "MIN": "min",
+
+  /** 统计所选字段的平均值。 */
+  "AVERAGE": "average",
+
+  /** 统计所选字段的总和。 */
+  "SUM": "sum",
+
+  /** 统计所选字段的方差。 */
+  "VARIANCE": "variance",
+
+  /** 统计所选字段的标准差 */
+  "STDDEVIATION": "stdDeviation"
+};
+
+/**
+ * @enum SummaryType
+ * @memberOf SuperMap
+ * @description 分布式分析聚合类型
+ * @type {string}
+ */
+
+var SummaryType = SuperMap.SummaryType = {
+  /** 格网聚合。 */
+  "SUMMARYMESH": "SUMMARYMESH",
+
+  /** 多边形聚合。 */
+  "SUMMARYREGION": "SUMMARYREGION"
+};
+
+/**
+ * @enum TopologyValidatorRule
+ * @memberOf SuperMap
+ * @description  拓扑检查模式枚举。该类定义了拓扑检查操作模式常量。
+ * @type {string}
+ */
+
+var TopologyValidatorRule = SuperMap.TopologyValidatorRule = {
+  /** 面内无重叠,用于对面数据进行拓扑检查。 */
+  REGIONNOOVERLAP: "REGIONNOOVERLAP",
+
+  /** 面与面无重叠,用于对面数据进行拓扑检查。 */
+  REGIONNOOVERLAPWITH: "REGIONNOOVERLAPWITH",
+
+  /** 面被面包含,用于对面数据进行拓扑检查。 */
+  REGIONCONTAINEDBYREGION: "REGIONCONTAINEDBYREGION",
+
+  /** 面被面覆盖,用于对面数据进行拓扑检查。 */
+  REGIONCOVEREDBYREGION: "REGIONCOVEREDBYREGION",
+
+  /** 线与线无重叠,用于对线数据进行拓扑检查。 */
+  LINENOOVERLAP: "LINENOOVERLAP",
+
+  /** 线内无重叠,用于对线数据进行拓扑检查。 */
+  LINENOOVERLAPWITH: "LINENOOVERLAPWITH",
+
+  /** 点不相同,用于对点数据进行拓扑检查。 */
+  POINTNOIDENTICAL: "POINTNOIDENTICAL"
+};
+
+/**
+ * @enum AggregationType
+ * @memberOf SuperMap
+ * @description  聚合查询枚举类,该类定义了Es数据服务中聚合查询模式常量
+ * @type {string}
+ */
+
+var AggregationType = SuperMap.AggregationType = {
+  /** 格网聚合类型。 */
+  GEOHASH_GRID: "geohash_grid",
+
+  /** 过滤聚合类型。 */
+  FILTER: "filter"
+};
+
+/**
+ * @enum AggregationType
+ * @memberOf SuperMap
+ * @description  聚合查询中filter查询枚举类
+ * @type {string}
+ */
+
+var AggregationQueryBuilderType = SuperMap.AggregationQueryBuilderType = {
+  /** 范围查询。 */
+  GEO_BOUNDING_BOX: "geo_bounding_box"
+};
+
+/**
+ * @enum GetFeatureMode
+ * @memberOf SuperMap
+ * @description feature 查询方式。
+ * @type {string}
+ */
+
+var GetFeatureMode = SuperMap.GetFeatureMode = {
+  /** 通过范围查询来获取要素。 */
+  BOUNDS: "BOUNDS",
+
+  /** 通过几何对象的缓冲区来获取要素。 */
+  BUFFER: "BUFFER",
+
+  /** 通过 ID 来获取要素。 */
+  ID: "ID",
+
+  /** 通过空间查询模式来获取要素。 */
+  SPATIAL: "SPATIAL",
+
+  /** 通过 SQL 查询来获取要素。 */
+  SQL: 'SQL'
+};
+
+/**
+ * @enum RasterFunctionType
+ * @memberOf SuperMap
+ * @description 栅格分析方法。
+ * @type {string}
+ */
+
+var RasterFunctionType = SuperMap.RasterFunctionType = {
+  /** 归一化植被指数。 */
+  NDVI: "NDVI",
+
+  /** 阴影面分析。 */
+  HILLSHADE: "HILLSHADE"
+};
+
+/**
+ * @enum ResourceType
+ * @memberOf SuperMap
+ * @description iportal资源类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var ResourceType = SuperMap.ResourceType = {
+  /** 地图。 */
+  MAP: "MAP",
+
+  /** 服务。 */
+  SERVICE: "SERVICE",
+
+  /** 场景。 */
+  SCENE: "SCENE",
+
+  /** 数据。 */
+  DATA: "DATA",
+
+  /** 洞察。 */
+  INSIGHTS_WORKSPACE: "INSIGHTS_WORKSPACE",
+
+  /** 大屏。 */
+  MAP_DASHBOARD: "MAP_DASHBOARD"
+};
+
+/**
+ * @enum OrderBy
+ * @memberOf SuperMap
+ * @description iportal资源排序字段。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var OrderBy = SuperMap.OrderBy = {
+  /** 按更新时间排序 */
+  UPDATETIME: "UPDATETIME",
+
+  /** 按热度(可能是访问量、下载量)排序 */
+  HEATLEVEL: "HEATLEVEL",
+
+  /** 按相关性排序 */
+  RELEVANCE: "RELEVANCE"
+};
+
+/**
+ * @enum OrderType
+ * @memberOf SuperMap
+ * @description iportal资源升序还是降序过滤
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var OrderType = SuperMap.OrderType = {
+  /** 升序 */
+  ASC: "ASC",
+
+  /** 降序 */
+  DESC: "DESC"
+};
+
+/**
+ * @enum SearchType
+ * @memberOf SuperMap
+ * @description iportal资源查询的范围进行过滤
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var SearchType = SuperMap.SearchType = {
+  /** 公开资源。 */
+  PUBLIC: "PUBLIC",
+
+  /** 我的资源。 */
+  MY_RES: "MY_RES",
+
+  /** 我的群组资源。 */
+  MYGROUP_RES: "MYGROUP_RES",
+
+  /** 我的部门资源。 */
+  MYDEPARTMENT_RES: "MYDEPARTMENT_RES",
+
+  /** 分享给我的资源。 */
+  SHARETOME_RES: "SHARETOME_RES"
+};
+
+/**
+ * @enum AggregationTypes
+ * @memberOf SuperMap
+ * @description iportal资源聚合查询的类型
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var AggregationTypes = SuperMap.AggregationTypes = {
+  /** 标签 */
+  TAG: "TAG",
+
+  /** 资源类型 */
+  TYPE: "TYPE"
+};
+
+/**
+ * @enum PermissionType
+ * @memberOf SuperMap
+ * @description iportal资源权限类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var PermissionType = SuperMap.PermissionType = {
+  /** 可检索 */
+  SEARCH: "SEARCH",
+
+  /** 可查看 */
+  READ: "READ",
+
+  /** 可编辑 */
+  READWRITE: "READWRITE",
+
+  /** 可删除 */
+  DELETE: "DELETE",
+
+  /** 可下载,包括可读、可检索 */
+  DOWNLOAD: "DOWNLOAD"
+};
+
+/**
+ * @enum EntityType
+ * @memberOf SuperMap
+ * @description iportal资源实体类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var EntityType = SuperMap.EntityType = {
+  /** 部门 */
+  DEPARTMENT: "DEPARTMENT",
+
+  /** 用户组 */
+  GROUP: "GROUP",
+
+  /** 群组 */
+  IPORTALGROUP: "IPORTALGROUP",
+
+  /** 角色 */
+  ROLE: "ROLE",
+
+  /** 用户 */
+  USER: "USER"
+};
+
+/**
+ * @enum DataItemType
+ * @memberOf SuperMap
+ * @description iportal数据类型。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var DataItemType = SuperMap.DataItemType = {
+  /** 工作空间 sxwu, smwu, sxw, smw */
+  WORKSPACE: "WORKSPACE",
+
+  /** udb 数据源 */
+  UDB: "UDB",
+
+  /** shp空间数据 */
+  SHP: "SHP",
+
+  /** excel数据 */
+  EXCEL: "EXCEL",
+
+  /** csv数据 */
+  CSV: "CSV",
+
+  /** geojson数据。 */
+  GEOJSON: "GEOJSON",
+
+  /** smtiles */
+  SMTILES: "SMTILES",
+
+  /** svtiles */
+  SVTILES: "SVTILES",
+
+  /** mbtiles */
+  MBTILES: "MBTILES",
+
+  /** tpk */
+  TPK: "TPK",
+
+  /** ugc v5 */
+  UGCV5: "UGCV5",
+
+  /** UGCV5_MVT  */
+  UGCV5_MVT: "UGCV5_MVT",
+
+  /** json数据  */
+  JSON: "JSON"
+};
+
+/**
+ * @enum WebExportFormatType
+ * @memberOf SuperMap
+ * @description Web 打印输出的格式。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var WebExportFormatType = SuperMap.WebExportFormatType = {
+  /** png */
+  PNG: "PNG",
+
+  /** pdf */
+  PDF: "PDF"
+};
+
+/**
+ * @enum WebScaleOrientationType
+ * @memberOf SuperMap
+ * @description Web 比例尺的方位样式。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var WebScaleOrientationType = SuperMap.WebScaleOrientationType = {
+  /** horizontal labels below */
+  HORIZONTALLABELSBELOW: "HORIZONTALLABELSBELOW",
+
+  /** horizontal labels above */
+  HORIZONTALLABELSABOVE: "HORIZONTALLABELSABOVE",
+
+  /** vertical labels left */
+  VERTICALLABELSLEFT: "VERTICALLABELSLEFT",
+
+  /** vertical labels right */
+  VERTICALLABELSRIGHT: "VERTICALLABELSRIGHT"
+};
+
+/**
+ * @enum WebScaleType
+ * @memberOf SuperMap
+ * @description Web 比例尺的样式。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var WebScaleType = SuperMap.WebScaleType = {
+  /** line */
+  LINE: "LINE",
+
+  /** bar */
+  BAR: "BAR",
+
+  /** bar sub */
+  BAR_SUB: "BAR_SUB"
+};
+
+/**
+ * @enum WebScaleUnit
+ * @memberOf SuperMap
+ * @description Web 比例尺的单位制。
+ * @version 10.0.1
+ * @type {string}
+ */
+
+var WebScaleUnit = SuperMap.WebScaleUnit = {
+  /** meter */
+  METER: "METER",
+
+  /** foot */
+  FOOT: "FOOT",
+
+  /** degrees */
+  DEGREES: "DEGREES"
+};
+
+;// CONCATENATED MODULE: ./src/common/iServer/DatasourceConnectionInfo.js
+function DatasourceConnectionInfo_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function DatasourceConnectionInfo_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function DatasourceConnectionInfo_createClass(Constructor, protoProps, staticProps) { if (protoProps) DatasourceConnectionInfo_defineProperties(Constructor.prototype, protoProps); if (staticProps) DatasourceConnectionInfo_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+ // eslint-disable-line no-unused-vars
+
+/**
+ * @class SuperMap.DatasourceConnectionInfo
+ * @category  iServer Data
+ * @classdesc 数据源连接信息类。该类包括了进行数据源连接的所有信息,如所要连接的服务器名称、数据库名称、用户名以及密码等。
+ *            当保存为工作空间时, 工作空间中的数据源的连接信息都将存储到工作空间文件中。对于不同类型的数据源,其连接信息有所区别。
+ *            所以在使 用该类所包含的成员时,请注意该成员所适用的数据源类型。对于从数据源对象中返回的数据连接信息对象,只有 connect 方法可以被修改,
+ *            其他内容是不可以被修改的。对于用户创建的数据源连接信息对象,其内容都可以修改。
+ * @category iServer Data
+ * @param {Object} options - 参数。 
+ * @param {string} options.alias - 数据源别名。 
+ * @param {string} options.dataBase - 数据源连接的数据库名。 
+ * @param {boolean} [options.connect] - 数据源是否自动连接数据。 
+ * @param {string} [options.driver] - 使用 ODBC(Open Database Connectivity,开放数据库互连)的数据库的驱动程序名。 
+ * @param {SuperMap.EngineType} [options.engineType] - 数据源连接的引擎类型。 
+ * @param {boolean} [options.exclusive] - 是否以独占方式打开数据源。 
+ * @param {boolean} [options.OpenLinkTable] - 是否把数据库中的其他非 SuperMap 数据表作为 LinkTable 打开。 
+ * @param {string} [options.password] - 登录数据源连接的数据库或文件的密码。 
+ * @param {boolean} [options.readOnly] - 是否以只读方式打开数据源。 
+ * @param {string} [options.server] - 数据库服务器名或 SDB 文件名。 
+ * @param {string} [options.user] - 登录数据库的用户名。 
+ */
+
+var DatasourceConnectionInfo = /*#__PURE__*/function () {
+  function DatasourceConnectionInfo(options) {
+    DatasourceConnectionInfo_classCallCheck(this, DatasourceConnectionInfo);
+
+    /**
+     * @member {string} SuperMap.DatasourceConnectionInfo.prototype.alias
+     * @description 数据源别名。
+     */
+    this.alias = null;
+    /**
+     * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.connect]
+     * @description 数据源是否自动连接数据。
+     */
+
+    this.connect = null;
+    /**
+     * @member {string} SuperMap.DatasourceConnectionInfo.prototype.dataBase
+     * @description 数据源连接的数据库名。
+     */
+
+    this.dataBase = null;
+    /**
+     * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.driver]
+     * @description 使用 ODBC(Open Database Connectivity,开放数据库互连) 的数据库的驱动程序名。
+     * 其中,对于 SQL Server 数据库与 iServer 发布的 WMTS 服务,此为必设参数。
+     * 对于 SQL Server 数据库,它使用 ODBC 连接,所设置的驱动程序名为 "SQL Server" 或 "SQL Native Client";
+     * 对于 iServer 发布的 WMTS 服务,设置的驱动名称为 "WMTS"。
+     */
+
+    this.driver = null;
+    /**
+     * @member {SuperMap.EngineType} [SuperMap.DatasourceConnectionInfo.prototype.engineType]
+     * @description 数据源连接的引擎类型。
+     */
+
+    this.engineType = null;
+    /**
+     * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.exclusive]
+     * @description 是否以独占方式打开数据源。
+     */
+
+    this.exclusive = null;
+    /**
+     * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.OpenLinkTable]
+     * @description 是否把数据库中的其他非 SuperMap 数据表作为 LinkTable 打开。
+     */
+
+    this.OpenLinkTable = null;
+    /**
+     * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.password]
+     * @description 登录数据源连接的数据库或文件的密码。
+     */
+
+    this.password = null;
+    /**
+     * @member {boolean} [SuperMap.DatasourceConnectionInfo.prototype.readOnly]
+     * @description 是否以只读方式打开数据源。
+     */
+
+    this.readOnly = null;
+    /**
+     * @member {string} [SuperMap.DatasourceConnectionInfo.prototype.server]
+     * @description 数据库服务器名、文件名或服务地址。
+     * 1.对于 SDB 和 UDB 文件,为其文件的绝对路径。注意:当绝对路径的长度超过 UTF-8 编码格式的 260 字节长度,该数据源无法打开。
+     * 2.对于 Oracle 数据库,其服务器名为其 TNS 服务名称。
+     * 3.对于 SQL Server 数据库,其服务器名为其系统的 DSN(Database Source Name) 名称。
+     * 4.对于 PostgreSQL 数据库,其服务器名为 “IP:端口号”,默认的端口号是 5432。
+     * 5.对于 DB2 数据库,已经进行了编目,所以不需要进行服务器的设置。
+     * 6.对于 Kingbase 数据库,其服务器名为其 IP 地址。
+     * 7.对于 GoogleMaps 数据源,其服务器地址,默认设置为 “{@link http://maps.google.com}”,且不可更改。
+     * 8.对于 SuperMapCould 数据源,为其服务地址。
+     * 9.对于 MAPWORLD 数据源,为其服务地址,默认设置为 “{@link http://www.tianditu.cn}”,且不可更改。
+     * 10.对于 OGC 和 REST 数据源,为其服务地址。
+     */
+
+    this.server = null;
+    /**
+     * @member {string} SuperMap.DatasourceConnectionInfo.prototype.user
+     * @description 登录数据库的用户名。
+     */
+
+    this.user = null;
+
+    if (options) {
+      Util.extend(this, options);
+    }
+
+    this.CLASS_NAME = "SuperMap.DatasourceConnectionInfo";
+  }
+  /**
+   * @function SuperMap.DatasourceConnectionInfo.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  DatasourceConnectionInfo_createClass(DatasourceConnectionInfo, [{
+    key: "destroy",
+    value: function destroy() {
+      var me = this;
+      me.alias = null;
+      me.connect = null;
+      me.dataBase = null;
+      me.driver = null;
+      me.engineType = null;
+      me.exclusive = null;
+      me.OpenLinkTable = null;
+      me.password = null;
+      me.readOnly = null;
+      me.server = null;
+      me.user = null;
+    }
+  }]);
+
+  return DatasourceConnectionInfo;
+}();
+SuperMap.DatasourceConnectionInfo = DatasourceConnectionInfo;
+;// CONCATENATED MODULE: ./src/common/iServer/OutputSetting.js
+function OutputSetting_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function OutputSetting_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function OutputSetting_createClass(Constructor, protoProps, staticProps) { if (protoProps) OutputSetting_defineProperties(Constructor.prototype, protoProps); if (staticProps) OutputSetting_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.OutputSetting
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析输出类型设置类。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.DatasourceConnectionInfo} options.datasourceInfo - 数据源连接信息。
+ * @param {string} [options.datasetName='analystResult'] - 结果数据集名称。
+ * @param {SuperMap.OutputType} [options.type=SuperMap.OutputType.UDB] - 输出类型。
+ * @param {string} [options.outputPath] - 分析结果输出路径。
+ */
+
+var OutputSetting = /*#__PURE__*/function () {
+  function OutputSetting(options) {
+    OutputSetting_classCallCheck(this, OutputSetting);
+
+    /**
+     * @member {SuperMap.OutputType} SuperMap.OutputSetting.prototype.type
+     * @description 分布式分析的输出类型。
+     */
+    this.type = OutputType.UDB;
+    /**
+     * @member {string} [SuperMap.OutputSetting.prototype.datasetName='analystResult']
+     * @description 分布式分析的输出结果数据集名称。
+     */
+
+    this.datasetName = "analystResult";
+    /**
+     * @member {SuperMap.DatasourceConnectionInfo} SuperMap.OutputSetting.prototype.datasourceInfo
+     * @description 分布式分析的输出结果数据源连接信息。
+     */
+
+    this.datasourceInfo = null;
+    /**
+     * @member {string} [SuperMap.OutputSetting.prototype.outputPath]
+     * @description 分布式分析的分析结果输出路径。
+     */
+
+    this.outputPath = "";
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.OutputSetting";
+  }
+  /**
+   * @function SuperMap.OutputSetting.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  OutputSetting_createClass(OutputSetting, [{
+    key: "destroy",
+    value: function destroy() {
+      var me = this;
+      me.type = null;
+      me.datasetName = null;
+      me.outputPath = null;
+
+      if (me.datasourceInfo instanceof DatasourceConnectionInfo) {
+        me.datasourceInfo.destroy();
+        me.datasourceInfo = null;
+      }
+    }
+  }]);
+
+  return OutputSetting;
+}();
+SuperMap.OutputSetting = OutputSetting;
+;// CONCATENATED MODULE: ./src/common/iServer/MappingParameters.js
+function MappingParameters_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function MappingParameters_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function MappingParameters_createClass(Constructor, protoProps, staticProps) { if (protoProps) MappingParameters_defineProperties(Constructor.prototype, protoProps); if (staticProps) MappingParameters_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.MappingParameters
+ * @category  iServer ProcessingService
+ * @classdesc 分析后结果可视化的参数类。
+ * @param {Object} options - 参数。
+ * @param {Array.<SuperMap.ThemeGridRangeItem>} [options.items] - 栅格分段专题图子项数组。
+ * @param {number} [options.numericPrecision=1] - 精度,此字段用于设置分析结果标签专题图中标签数值的精度,如“1”表示精确到小数点的后一位。
+ * @param {SuperMap.RangeMode} [options.rangeMode=SuperMap.RangeMode.EQUALINTERVAL] - 专题图分段模式。
+ * @param {number} [options.rangeCount] - 专题图分段个数。
+ * @param {SuperMap.ColorGradientType} [options.colorGradientType=SuperMap.ColorGradientType.YELLOW_RED] - 专题图颜色渐变模式。
+ */
+
+var MappingParameters = /*#__PURE__*/function () {
+  function MappingParameters(options) {
+    MappingParameters_classCallCheck(this, MappingParameters);
+
+    /**
+     * @member {Array.<SuperMap.ThemeGridRangeItem>} [SuperMap.MappingParameters.prototype.items]
+     * @description 栅格分段专题图子项数组。
+     */
+    this.items = null;
+    /**
+     * @member {number} [SuperMap.MappingParameters.prototype.numericPrecision=1]
+     * @description 精度,此字段用于设置分析结果标签专题图中标签数值的精度,如“1”表示精确到小数点的后一位。
+     */
+
+    this.numericPrecision = 1;
+    /**
+     * @member {SuperMap.RangeMode} [SuperMap.MappingParameters.prototype.RangeMode=SuperMap.RangeMode.EQUALINTERVAL]
+     * @description 专题图分段模式。
+     */
+
+    this.rangeMode = RangeMode.EQUALINTERVAL;
+    /**
+     * @member {number} [SuperMap.MappingParameters.prototype.rangeCount]
+     * @description 专题图分段个数。
+     */
+
+    this.rangeCount = "";
+    /**
+     * @member {SuperMap.ColorGradientType} [SuperMap.MappingParameters.prototype.colorGradientType=SuperMap.ColorGradientType.YELLOW_RED]
+     * @description 专题图颜色渐变模式。
+     */
+
+    this.colorGradientType = ColorGradientType.YELLOW_RED;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.MappingParameters";
+  }
+  /**
+   * @function SuperMap.MappingParameters.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  MappingParameters_createClass(MappingParameters, [{
+    key: "destroy",
+    value: function destroy() {
+      var me = this;
+
+      if (me.items) {
+        if (me.items.length > 0) {
+          for (var item in me.items) {
+            me.items[item].destroy();
+            me.items[item] = null;
+          }
+        }
+
+        me.items = null;
+      }
+
+      me.numericPrecision = null;
+      me.rangeMode = null;
+      me.rangeCount = null;
+      me.colorGradientType = null;
+    }
+  }]);
+
+  return MappingParameters;
+}();
+SuperMap.MappingParameters = MappingParameters;
+;// CONCATENATED MODULE: ./src/common/iServer/KernelDensityJobParameter.js
+function KernelDensityJobParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function KernelDensityJobParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function KernelDensityJobParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) KernelDensityJobParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) KernelDensityJobParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.KernelDensityJobParameter
+ * @category iServer ProcessingService DensityAnalyst
+ * @classdesc 密度分析任务参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.datasetName - 数据集名。 
+ * @param {string} options.fields - 权重索引。 
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。 
+ * @param {number} [options.resolution=80] - 分辨率。 
+ * @param {number} [options.method=0] - 分析方法。 
+ * @param {number} [options.meshType=0] - 分析类型。 
+ * @param {number} [options.radius=300] - 分析的影响半径。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var KernelDensityJobParameter = /*#__PURE__*/function () {
+  function KernelDensityJobParameter(options) {
+    KernelDensityJobParameter_classCallCheck(this, KernelDensityJobParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.KernelDensityJobParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {SuperMap.Bounds|L.Bounds|ol.extent} [SuperMap.KernelDensityJobParameter.prototype.query]
+     * @description 分析范围。 
+     */
+
+    this.query = "";
+    /**
+     * @member {number} [SuperMap.KernelDensityJobParameter.prototype.resolution=80]
+     * @description 网格大小。
+     */
+
+    this.resolution = 80;
+    /**
+     * @member {number} [SuperMap.KernelDensityJobParameter.prototype.method=0]
+     * @description 分析方法。
+     */
+
+    this.method = 0;
+    /**
+     * @member {number} [SuperMap.KernelDensityJobParameter.prototype.meshType=0]
+     * @description 分析类型。
+     */
+
+    this.meshType = 0;
+    /**
+     * @member {string} SuperMap.KernelDensityJobParameter.prototype.fields
+     * @description 权重索引。
+     */
+
+    this.fields = "";
+    /**
+     * @member {number} [SuperMap.KernelDensityJobParameter.prototype.radius=300]
+     * @description 分析的影响半径。
+     */
+
+    this.radius = 300;
+    /**
+     * @member {SuperMap.AnalystSizeUnit} [SuperMap.KernelDensityJobParameter.prototype.meshSizeUnit=SuperMap.AnalystSizeUnit.METER]
+     * @description 网格大小单位。
+     */
+
+    this.meshSizeUnit = AnalystSizeUnit.METER;
+    /**
+     * @member {SuperMap.AnalystSizeUnit} [SuperMap.KernelDensityJobParameter.prototype.radiusUnit=SuperMap.AnalystSizeUnit.METER]
+     * @description 搜索半径单位。
+     */
+
+    this.radiusUnit = AnalystSizeUnit.METER;
+    /**
+     * @member {SuperMap.AnalystAreaUnit} [SuperMap.KernelDensityJobParameter.prototype.areaUnit=SuperMap.AnalystAreaUnit.SQUAREMILE]
+     * @description 面积单位。
+     */
+
+    this.areaUnit = AnalystAreaUnit.SQUAREMILE;
+    /**
+     * @member {SuperMap.OutputSetting} SuperMap.KernelDensityJobParameter.prototype.output
+     * @description 输出参数设置类
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.KernelDensityJobParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.KernelDensityJobParameter";
+  }
+  /**
+   * @function SuperMap.KernelDensityJobParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  KernelDensityJobParameter_createClass(KernelDensityJobParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.query = null;
+      this.resolution = null;
+      this.method = null;
+      this.radius = null;
+      this.meshType = null;
+      this.fields = null;
+      this.meshSizeUnit = null;
+      this.radiusUnit = null;
+      this.areaUnit = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.KernelDensityJobParameter.toObject
+     * @param {SuperMap.KernelDensityJobParameter} kernelDensityJobParameter - 密度分析任务参数类。
+     * @param {SuperMap.KernelDensityJobParameter} tempObj - 密度分析任务参数对象。
+     * @description 将密度分析任务参数对象转换为 JSON 对象。
+     * @returns JSON 对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(kernelDensityJobParameter, tempObj) {
+      for (var name in kernelDensityJobParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = kernelDensityJobParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = kernelDensityJobParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+
+        if (name === 'query' && kernelDensityJobParameter[name]) {
+          tempObj['analyst'][name] = kernelDensityJobParameter[name].toBBOX();
+        } else {
+          tempObj['analyst'][name] = kernelDensityJobParameter[name];
+        }
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = kernelDensityJobParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return KernelDensityJobParameter;
+}();
+SuperMap.KernelDensityJobParameter = KernelDensityJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SingleObjectQueryJobsParameter.js
+function SingleObjectQueryJobsParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SingleObjectQueryJobsParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SingleObjectQueryJobsParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleObjectQueryJobsParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleObjectQueryJobsParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SingleObjectQueryJobsParameter
+ * @category  iServer ProcessingService Query
+ * @classdesc 单对象空间查询分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetQuery - 查询对象所在的数据集名称。
+ * @param {SuperMap.SpatialQueryMode} [options.mode=SuperMap.SpatialQueryMode.CONTAIN] - 空间查询模式。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var SingleObjectQueryJobsParameter = /*#__PURE__*/function () {
+  function SingleObjectQueryJobsParameter(options) {
+    SingleObjectQueryJobsParameter_classCallCheck(this, SingleObjectQueryJobsParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.datasetQuery
+     * @description 查询对象所在的数据集名称。
+     */
+
+    this.datasetQuery = "";
+    /**
+     * @member {string} SuperMap.SingleObjectQueryJobsParameter.prototype.geometryQuery
+     * @description 查询对象所在的几何对象。
+     */
+
+    this.geometryQuery = "";
+    /**
+     * @member {SuperMap.SpatialQueryMode} [SuperMap.SingleObjectQueryJobsParameter.prototype.mode=SuperMap.SpatialQueryMode.CONTAIN]
+     * @description 空间查询模式 。
+     */
+
+    this.mode = SpatialQueryMode.CONTAIN;
+    /**
+     * @member {SuperMap.OutputSetting} [SuperMap.SingleObjectQueryJobsParameter.prototype.output]
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.SingleObjectQueryJobsParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.SingleObjectQueryJobsParameter";
+  }
+  /**
+   * @function SuperMap.SingleObjectQueryJobsParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  SingleObjectQueryJobsParameter_createClass(SingleObjectQueryJobsParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.datasetQuery = null;
+      this.geometryQuery = null;
+      this.mode = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.SingleObjectQueryJobsParameter.toObject
+     * @param {Object} singleObjectQueryJobsParameter - 单对象空间查询分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成单对象空间查询分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(singleObjectQueryJobsParameter, tempObj) {
+      for (var name in singleObjectQueryJobsParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = singleObjectQueryJobsParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = singleObjectQueryJobsParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+        tempObj['analyst'][name] = singleObjectQueryJobsParameter[name];
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = singleObjectQueryJobsParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return SingleObjectQueryJobsParameter;
+}();
+SuperMap.SingleObjectQueryJobsParameter = SingleObjectQueryJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryAttributesJobsParameter.js
+function SummaryAttributesJobsParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryAttributesJobsParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryAttributesJobsParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryAttributesJobsParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryAttributesJobsParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.SummaryAttributesJobsParameter
+ * @category  iServer ProcessingService SummaryAttributes
+ * @classdesc 属性汇总分析任务参数类
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.groupField - 分组字段。
+ * @param {string} options.attributeField - 属性字段。
+ * @param {string} options.statisticModes - 统计模式。
+ * @param {SuperMap.OutputSetting} [options.output] -输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var SummaryAttributesJobsParameter = /*#__PURE__*/function () {
+  function SummaryAttributesJobsParameter(options) {
+    SummaryAttributesJobsParameter_classCallCheck(this, SummaryAttributesJobsParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.datasetName
+     * @description 汇总数据集名称。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.groupField
+     * @description 分组字段。
+     */
+
+    this.groupField = "";
+    /**
+     * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.attributeField
+     * @description 属性字段。
+     */
+
+    this.attributeField = "";
+    /**
+     * @member {string} SuperMap.SummaryAttributesJobsParameter.prototype.statisticModes
+     * @description 属性汇总统计模式。
+     */
+
+    this.statisticModes = "";
+    /**
+     * @member {SuperMap.OutputSetting} SuperMap.SummaryAttributesJobsParameter.prototype.output
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.SummaryAttributesJobsParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.SummaryAttributesJobsParameter";
+  }
+  /**
+   * @function SuperMap.SummaryAttributesJobsParameter.destroy
+   * @override
+   */
+
+
+  SummaryAttributesJobsParameter_createClass(SummaryAttributesJobsParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.groupField = null;
+      this.attributeField = null;
+      this.statisticModes = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.SummaryAttributesJobsParameter.toObject
+     * @param {Object} SummaryAttributesJobsParameter - 属性汇总任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成属性汇总分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(SummaryAttributesJobsParameter, tempObj) {
+      for (var name in SummaryAttributesJobsParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = SummaryAttributesJobsParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = SummaryAttributesJobsParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+        tempObj['analyst'][name] = SummaryAttributesJobsParameter[name];
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = SummaryAttributesJobsParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return SummaryAttributesJobsParameter;
+}();
+SuperMap.SummaryAttributesJobsParameter = SummaryAttributesJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryMeshJobParameter.js
+function SummaryMeshJobParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryMeshJobParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryMeshJobParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryMeshJobParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryMeshJobParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryMeshJobParameter
+ * @category  iServer ProcessingService AggregatePoints
+ * @classdesc 点聚合分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。
+ * @param {number} options.fields - 权重索引。
+ * @param {number} [options.resolution=100] - 分辨率。
+ * @param {SuperMap.StatisticAnalystMode} [options.statisticModes=SuperMap.StatisticAnalystMode.AVERAGE] - 分析模式。
+ * @param {number} [options.meshType=0] - 分析类型。
+ * @param {SuperMap.SummaryType} [options.type=SuperMap.SummaryType.SUMMARYMESH] - 聚合类型。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var SummaryMeshJobParameter = /*#__PURE__*/function () {
+  function SummaryMeshJobParameter(options) {
+    SummaryMeshJobParameter_classCallCheck(this, SummaryMeshJobParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.SummaryMeshJobParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.SummaryMeshJobParameter.prototype.regionDataset
+     * @description 聚合面数据集(聚合类型为多边形聚合时使用的参数)。
+     */
+
+    this.regionDataset = "";
+    /**
+     * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.SummaryMeshJobParameter.prototype.query
+     * @description 分析范围(聚合类型为网格面聚合时使用的参数)。
+     */
+
+    this.query = "";
+    /**
+     * @member {number} [SuperMap.SummaryMeshJobParameter.prototype.resolution=100]
+     * @description 分辨率(聚合类型为网格面聚合时使用的参数)。
+     */
+
+    this.resolution = 100;
+    /**
+     * @member {number} [SuperMap.SummaryMeshJobParameter.prototype.meshType=0]
+     * @description  网格面类型(聚合类型为网格面聚合时使用的参数),取值:0 或 1。
+     */
+
+    this.meshType = 0;
+    /**
+     * @member {SuperMap.StatisticAnalystMode} [SuperMap.SummaryMeshJobParameter.prototype.statisticModes=SuperMap.StatisticAnalystMode.AVERAGE]
+     * @description 统计模式。
+     */
+
+    this.statisticModes = StatisticAnalystMode.AVERAGE;
+    /**
+     * @member {number} SuperMap.SummaryMeshJobParameter.prototype.fields
+     * @description 权重字段。
+     */
+
+    this.fields = "";
+    /**
+     * @member {SuperMap.SummaryType} [SuperMap.SummaryMeshJobParameter.prototype.type=SuperMap.SummaryType.SUMMARYMESH]
+     * @description 聚合类型。
+     */
+
+    this.type = SummaryType.SUMMARYMESH;
+    /**
+     * @member {SuperMap.OutputSetting} [SuperMap.SummaryMeshJobParameter.prototype.output]
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.SummaryMeshJobParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.SummaryMeshJobParameter";
+  }
+  /**
+   * @function SuperMap.SummaryMeshJobParameter.destroy
+   * @override
+   */
+
+
+  SummaryMeshJobParameter_createClass(SummaryMeshJobParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.query = null;
+      this.resolution = null;
+      this.statisticModes = null;
+      this.meshType = null;
+      this.fields = null;
+      this.regionDataset = null;
+      this.type = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.SummaryMeshJobParameter.toObject
+     * @param {Object} summaryMeshJobParameter - 点聚合分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成点聚合分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(summaryMeshJobParameter, tempObj) {
+      for (var name in summaryMeshJobParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = summaryMeshJobParameter[name];
+          continue;
+        }
+
+        if (name === "type") {
+          tempObj['type'] = summaryMeshJobParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = summaryMeshJobParameter[name];
+          continue;
+        }
+
+        if (summaryMeshJobParameter.type === 'SUMMARYMESH' && name !== 'regionDataset' || summaryMeshJobParameter.type === 'SUMMARYREGION' && !contains(['meshType', 'resolution', 'query'], name)) {
+          tempObj['analyst'] = tempObj['analyst'] || {};
+
+          if (name === 'query' && summaryMeshJobParameter[name]) {
+            tempObj['analyst'][name] = summaryMeshJobParameter[name].toBBOX();
+          } else {
+            tempObj['analyst'][name] = summaryMeshJobParameter[name];
+          }
+
+          if (name === 'mappingParameters') {
+            tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+            tempObj['analyst']['mappingParameters'] = summaryMeshJobParameter[name];
+          }
+        }
+      }
+
+      function contains(arr, obj) {
+        var i = arr.length;
+
+        while (i--) {
+          if (arr[i] === obj) {
+            return true;
+          }
+        }
+
+        return false;
+      }
+    }
+  }]);
+
+  return SummaryMeshJobParameter;
+}();
+SuperMap.SummaryMeshJobParameter = SummaryMeshJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryRegionJobParameter.js
+function SummaryRegionJobParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryRegionJobParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryRegionJobParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryRegionJobParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryRegionJobParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.SummaryRegionJobParameter
+ * @category  iServer ProcessingService SummaryRegion
+ * @classdesc 区域汇总分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.query] - 分析范围(默认为全图范围)。
+ * @param {string} [options.standardFields] - 标准属性字段名称。
+ * @param {string} [options.weightedFields] - 权重字段名称。
+ * @param {SuperMap.StatisticAnalystMode} [options.standardStatisticModes] - 标准属性字段的统计模式。standardSummaryFields 为 true 时必填。
+ * @param {SuperMap.StatisticAnalystMode} [options.weightedStatisticModes] - 权重字段的统计模式。weightedSummaryFields 为 true 时必填。 
+ * @param {boolean} [options.sumShape=true] - 是否统计长度或面积。
+ * @param {boolean} [options.standardSummaryFields=false] - 是否以标准属字段统计。
+ * @param {boolean} [options.weightedSummaryFields=false] - 是否以权重字段统计。
+ * @param {number} [options.resolution=100] - 网格大小。
+ * @param {number} [options.meshType=0] - 网格面汇总类型。
+ * @param {SuperMap.AnalystSizeUnit} [options.meshSizeUnit=SuperMap.AnalystSizeUnit.METER] - 网格大小单位。
+ * @param {SuperMap.SummaryType} [options.type=SuperMap.SummaryType.SUMMARYMESH] - 汇总类型。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var SummaryRegionJobParameter = /*#__PURE__*/function () {
+  function SummaryRegionJobParameter(options) {
+    SummaryRegionJobParameter_classCallCheck(this, SummaryRegionJobParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.SummaryRegionJobParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.SummaryRegionJobParameter.prototype.regionDataset
+     * @description 汇总数据源(多边形汇总时用到的参数)。
+     */
+
+    this.regionDataset = "";
+    /**
+     * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.sumShape=true]
+     * @description 是否统计长度或面积。
+     */
+
+    this.sumShape = true;
+    /**
+     * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.SummaryRegionJobParameter.prototype.query
+     * @description 分析范围。
+     */
+
+    this.query = "";
+    /**
+     * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.standardSummaryFields=false]
+     * @description 是否以标准属字段统计。
+     */
+
+    this.standardSummaryFields = false;
+    /**
+     * @member {string} SuperMap.SummaryRegionJobParameter.prototype.standardFields
+     * @description 标准属性字段名称。仅支持系统字段以外的整形、长整形、浮点型的字段的名称。standardSummaryFields 为 true 时必填。 
+     */
+
+    this.standardFields = "";
+    /**
+     * @member {SuperMap.StatisticAnalystMode} SuperMap.SummaryRegionJobParameter.prototype.standardStatisticModes
+     * @description 标准属性字段的统计模式。standardSummaryFields 为 true 时必填。
+     */
+
+    this.standardStatisticModes = "";
+    /**
+     * @member {boolean} [SuperMap.SummaryRegionJobParameter.prototype.weightedSummaryFields=false]
+     * @description 是否以权重字段统计。
+     */
+
+    this.weightedSummaryFields = false;
+    /**
+     * @member {string} SuperMap.SummaryRegionJobParameter.prototype.weightedFields
+     * @description 权重字段名称。仅支持系统字段以外的整形、长整形、浮点型的字段的名称。weightedSummaryFields 为 true 时必填。 
+     */
+
+    this.weightedFields = "";
+    /**
+     * @member {SuperMap.StatisticAnalystMode} SuperMap.SummaryRegionJobParameter.prototype.weightedStatisticModes
+     * @description 以权重字段统计的统计模式。权重字段的统计模式。weightedSummaryFields 为 true 时必填。 
+     */
+
+    this.weightedStatisticModes = "";
+    /**
+     * @member {number} [SuperMap.SummaryRegionJobParameter.prototype.meshType=0]
+     * @description 网格面汇总类型。
+     */
+
+    this.meshType = 0;
+    /**
+     * @member {number} [SuperMap.SummaryRegionJobParameter.prototype.resolution=100]
+     * @description 网格大小。
+     */
+
+    this.resolution = 100;
+    /**
+     * @member {SuperMap.AnalystSizeUnit} [SuperMap.SummaryRegionJobParameter.prototype.meshSizeUnit=SuperMap.AnalystSizeUnit.METER]
+     * @description 网格大小单位。
+     */
+
+    this.meshSizeUnit = AnalystSizeUnit.METER;
+    /**
+     * @member {SuperMap.SummaryType} [SuperMap.SummaryRegionJobParameter.prototype.type=SuperMap.SummaryType.SUMMARYMESH]
+     * @description 汇总类型。
+     */
+
+    this.type = SummaryType.SUMMARYMESH;
+    /**
+     * @member {SuperMap.OutputSetting} SuperMap.SummaryRegionJobParameter.prototype.output
+     * @description 输出参数设置类
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.SummaryRegionJobParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.SummaryRegionJobParameter";
+  }
+  /**
+   * @function SuperMap.SummaryRegionJobParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  SummaryRegionJobParameter_createClass(SummaryRegionJobParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.sumShape = null;
+      this.regionDataset = null;
+      this.query = null;
+      this.standardSummaryFields = null;
+      this.standardFields = null;
+      this.standardStatisticModes = null;
+      this.weightedSummaryFields = null;
+      this.weightedFields = null;
+      this.weightedStatisticModes = null;
+      this.meshType = null;
+      this.resolution = null;
+      this.meshSizeUnit = null;
+      this.type = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.SummaryRegionJobParameter.toObject
+     * @param {Object} summaryRegionJobParameter - 矢量裁剪分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成区域汇总分析服务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(summaryRegionJobParameter, tempObj) {
+      for (var name in summaryRegionJobParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = summaryRegionJobParameter[name];
+          continue;
+        }
+
+        if (name === "type") {
+          tempObj['type'] = summaryRegionJobParameter[name];
+          continue;
+        }
+
+        if (name === "type") {
+          tempObj['type'] = summaryRegionJobParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = summaryRegionJobParameter[name];
+          continue;
+        }
+
+        if (summaryRegionJobParameter.type === "SUMMARYREGION" || summaryRegionJobParameter.type === "SUMMARYMESH" && name !== "regionDataset") {
+          tempObj['analyst'] = tempObj['analyst'] || {};
+
+          if (name === 'query' && summaryRegionJobParameter[name]) {
+            tempObj['analyst'][name] = summaryRegionJobParameter[name].toBBOX();
+          } else {
+            tempObj['analyst'][name] = summaryRegionJobParameter[name];
+          }
+
+          if (name === 'mappingParameters') {
+            tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+            tempObj['analyst']['mappingParameters'] = summaryRegionJobParameter[name];
+          }
+        }
+      }
+    }
+  }]);
+
+  return SummaryRegionJobParameter;
+}();
+SuperMap.SummaryRegionJobParameter = SummaryRegionJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/OverlayGeoJobParameter.js
+function OverlayGeoJobParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function OverlayGeoJobParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function OverlayGeoJobParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) OverlayGeoJobParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) OverlayGeoJobParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.OverlayGeoJobParameter
+ * @category iServer ProcessingService OverlayAnalyst
+ * @classdesc 叠加分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetOverlay - 叠加对象所在的数据集名称。
+ * @param {string} options.srcFields - 输入数据需要保留的字段。
+ * @param {string} [options.overlayFields] - 叠加数据需要保留的字段。对分析模式为 clip、update、erase 时,此参数无效。
+ * @param {string} [options.mode] - 叠加分析模式。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var OverlayGeoJobParameter = /*#__PURE__*/function () {
+  function OverlayGeoJobParameter(options) {
+    OverlayGeoJobParameter_classCallCheck(this, OverlayGeoJobParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.OverlayGeoJobParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.OverlayGeoJobParameter.prototype.datasetOverlay
+     * @description 叠加对象所在的数据集名称。
+     */
+
+    this.datasetOverlay = "";
+    /**
+     * @member {string} [SuperMap.OverlayGeoJobParameter.prototype.mode]
+     * @description 叠加分析模式。
+     */
+
+    this.mode = "";
+    /**
+     * @member {string} SuperMap.OverlayGeoJobParameter.prototype.srcFields
+     * @description 输入数据需要保留的字段。
+     */
+
+    this.srcFields = "";
+    /**
+     * @member {string} SuperMap.OverlayGeoJobParameter.prototype.overlayFields
+     * @description 叠加数据需要保留的字段,对分析模式为 clip、update、erase 时,此参数无效。
+     */
+
+    this.overlayFields = "";
+    /**
+     * @member {SuperMap.OutputSetting} [SuperMap.OverlayGeoJobParameter.prototype.output]
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+    * @member {SuperMap.MappingParameters} [SuperMap.OverlayGeoJobParameter.prototype.mappingParameters]
+    * @description 分析后结果可视化的参数类。   
+    */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.OverlayGeoJobParameter";
+  }
+  /**
+   * @function SuperMap.OverlayGeoJobParameter.destroy
+   * @override
+   */
+
+
+  OverlayGeoJobParameter_createClass(OverlayGeoJobParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.datasetOverlay = null;
+      this.mode = null;
+      this.srcFields = null;
+      this.overlayFields = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.OverlayGeoJobParameter.toObject
+     * @param {Object} OverlayGeoJobParameter - 点聚合分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成点聚合分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(OverlayGeoJobParameter, tempObj) {
+      for (var name in OverlayGeoJobParameter) {
+        if (name == "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = OverlayGeoJobParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = OverlayGeoJobParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+        tempObj['analyst'][name] = OverlayGeoJobParameter[name];
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = OverlayGeoJobParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return OverlayGeoJobParameter;
+}();
+SuperMap.OverlayGeoJobParameter = OverlayGeoJobParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/BuffersAnalystJobsParameter.js
+function BuffersAnalystJobsParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function BuffersAnalystJobsParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function BuffersAnalystJobsParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) BuffersAnalystJobsParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) BuffersAnalystJobsParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.BuffersAnalystJobsParameter
+ * @category iServer ProcessingService BufferAnalyst
+ * @classdesc 缓冲区分析任务参数类。
+ * @param {Object} options - 参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {(SuperMap.Bounds|L.Bounds|ol.extent)} [options.bounds] - 分析范围(默认为全图范围)。
+ * @param {string} [options.distance='15'] - 缓冲距离,或缓冲区半径。
+ * @param {string} [options.distanceField='pickup_latitude'] - 缓冲区分析距离字段。
+ * @param {SuperMap.AnalystSizeUnit} [options.distanceUnit=SuperMap.AnalystSizeUnit.METER] - 缓冲距离单位单位。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。
+ */
+
+var BuffersAnalystJobsParameter = /*#__PURE__*/function () {
+  function BuffersAnalystJobsParameter(options) {
+    BuffersAnalystJobsParameter_classCallCheck(this, BuffersAnalystJobsParameter);
+
+    /**
+     * @member {string} SuperMap.BuffersAnalystJobsParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+    this.datasetName = '';
+    /**
+     * @member {(SuperMap.Bounds|L.Bounds|ol.extent)} SuperMap.BuffersAnalystJobsParameter.prototype.bounds
+     * @description 分析范围。
+     */
+
+    this.bounds = '';
+    /**
+     * @member {string} [SuperMap.BuffersAnalystJobsParameter.prototype.distance='15']
+     * @description 缓冲距离,或称为缓冲区半径。当缓冲距离字段位空时,此参数有效。
+     */
+
+    this.distance = '';
+    /**
+     * @member {string} [SuperMap.BuffersAnalystJobsParameter.prototype.distanceField='pickup_latitude']
+     * @description 缓冲距离字段。
+     */
+
+    this.distanceField = '';
+    /**
+     * @member {SuperMap.AnalystSizeUnit} [SuperMap.BuffersAnalystJobsParameter.prototype.distanceUnit=SuperMap.AnalystSizeUnit.METER]
+     * @description 缓冲距离单位。
+     */
+
+    this.distanceUnit = AnalystSizeUnit.METER;
+    /**
+     * @member {string} SuperMap.BuffersAnalystJobsParameter.prototype.dissolveField
+     * @description 融合字段,根据字段值对缓冲区结果面对象进行融合。
+     */
+
+    this.dissolveField = '';
+    /**
+     * @member {SuperMap.OutputSetting} [SuperMap.BuffersAnalystJobsParameter.prototype.output]
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.BuffersAnalystJobsParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。
+     */
+
+    this.mappingParameters = null;
+
+    if (!options) {
+      return this;
+    }
+
+    Util.extend(this, options);
+    this.CLASS_NAME = 'SuperMap.BuffersAnalystJobsParameter';
+  }
+  /**
+   * @function SuperMap.BuffersAnalystJobsParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  BuffersAnalystJobsParameter_createClass(BuffersAnalystJobsParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.bounds = null;
+      this.distance = null;
+      this.distanceField = null;
+      this.distanceUnit = null;
+      this.dissolveField = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.BuffersAnalystJobsParameter.toObject
+     * @param {SuperMap.BuffersAnalystJobsParameter} BuffersAnalystJobsParameter - 缓冲区分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成缓冲区分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(BuffersAnalystJobsParameter, tempObj) {
+      for (var name in BuffersAnalystJobsParameter) {
+        if (name === 'datasetName') {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = BuffersAnalystJobsParameter[name];
+          continue;
+        }
+
+        if (name === 'output') {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = BuffersAnalystJobsParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+
+        if (name === 'bounds' && BuffersAnalystJobsParameter[name]) {
+          tempObj['analyst'][name] = BuffersAnalystJobsParameter[name].toBBOX();
+        } else {
+          tempObj['analyst'][name] = BuffersAnalystJobsParameter[name];
+        }
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = BuffersAnalystJobsParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return BuffersAnalystJobsParameter;
+}();
+SuperMap.BuffersAnalystJobsParameter = BuffersAnalystJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/TopologyValidatorJobsParameter.js
+function TopologyValidatorJobsParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function TopologyValidatorJobsParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function TopologyValidatorJobsParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) TopologyValidatorJobsParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) TopologyValidatorJobsParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.TopologyValidatorJobsParameter
+ * @category  iServer ProcessingService TopologyValidator
+ * @classdesc 拓扑检查分析任务参数类。
+ * @param {Object} options - 必填参数。
+ * @param {string} options.datasetName - 数据集名。
+ * @param {string} options.datasetTopology -检查对象所在的数据集名称。
+ * @param {SuperMap.TopologyValidatorRule} [options.rule=SuperMap.TopologyValidatorRule.REGIONNOOVERLAP] - 拓扑检查规则。
+ * @param {string} [options.tolerance] - 容限。
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var TopologyValidatorJobsParameter = /*#__PURE__*/function () {
+  function TopologyValidatorJobsParameter(options) {
+    TopologyValidatorJobsParameter_classCallCheck(this, TopologyValidatorJobsParameter);
+
+    if (!options) {
+      return;
+    }
+    /**
+     * @member {string} SuperMap.TopologyValidatorJobsParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.TopologyValidatorJobsParameter.prototype.datasetTopology
+     * @description 拓扑检查对象所在的数据集名称。
+     */
+
+    this.datasetTopology = "";
+    /**
+     * @member {string} [SuperMap.TopologyValidatorJobsParameter.prototype.tolerance]
+     * @description 容限,指定的拓扑错误检查时使用的容限。
+     */
+
+    this.tolerance = "";
+    /**
+     * @member {SuperMap.TopologyValidatorRule} [SuperMap.TopologyValidatorJobsParameter.prototype.rule=SuperMap.TopologyValidatorRule.REGIONNOOVERLAP]
+     * @description 拓扑检查模式。
+     */
+
+    this.rule = TopologyValidatorRule.REGIONNOOVERLAP;
+    /**
+     * @member {SuperMap.OutputSetting} [SuperMap.TopologyValidatorJobsParameter.prototype.output]
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.TopologyValidatorJobsParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.TopologyValidatorJobsParameter";
+  }
+  /**
+   * @function SuperMap.TopologyValidatorJobsParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  TopologyValidatorJobsParameter_createClass(TopologyValidatorJobsParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.datasetTopology = null;
+      this.tolerance = null;
+      this.rule = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.TopologyValidatorJobsParameter.toObject
+     * @param {Object} TopologyValidatorJobsParameter -拓扑检查分析任务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 生成拓扑检查分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(TopologyValidatorJobsParameter, tempObj) {
+      for (var name in TopologyValidatorJobsParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = TopologyValidatorJobsParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = TopologyValidatorJobsParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+        tempObj['analyst'][name] = TopologyValidatorJobsParameter[name];
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = TopologyValidatorJobsParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return TopologyValidatorJobsParameter;
+}();
+SuperMap.TopologyValidatorJobsParameter = TopologyValidatorJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/GeoCodingParameter.js
+function GeoCodingParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function GeoCodingParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function GeoCodingParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) GeoCodingParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) GeoCodingParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.GeoCodingParameter
+ * @category  iServer AddressMatch
+ * @classdesc 地理正向匹配参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.address - 地点关键词。 
+ * @param {number} [options.fromIndex] - 设置返回对象的起始索引值。 
+ * @param {number} [options.toIndex] - 设置返回对象的结束索引值。 
+ * @param {Array.<string>} [options.filters] - 过滤字段,限定查询区域。 
+ * @param {string} [options.prjCoordSys] - 查询结果的坐标系。 
+ * @param {number} [options.maxReturn] - 最大返回结果数。
+ */
+
+var GeoCodingParameter = /*#__PURE__*/function () {
+  function GeoCodingParameter(options) {
+    GeoCodingParameter_classCallCheck(this, GeoCodingParameter);
+
+    if (options.filters && typeof options.filters === 'string') {
+      options.filters = options.filters.split(',');
+    }
+    /**
+     * @member {string} SuperMap.GeoCodingParameter.prototype.address
+     * @description 地点关键词。
+     */
+
+
+    this.address = null;
+    /**
+     * @member {number} [SuperMap.GeoCodingParameter.prototype.fromIndex]
+     * @description 设置返回对象的起始索引值。
+     */
+
+    this.fromIndex = null;
+    /**
+     * @member {number} [SuperMap.GeoCodingParameter.prototype.toIndex]
+     * @description 设置返回对象的结束索引值。
+     */
+
+    this.toIndex = null;
+    /**
+     * @member {Array.<string>} [SuperMap.GeoCodingParameter.prototype.filters]
+     * @description 过滤字段,限定查询区域。
+     */
+
+    this.filters = null;
+    /**
+     * @member {string} [SuperMap.GeoCodingParameter.prototype.prjCoordSys]
+     * @description  查询结果的坐标系。
+     */
+
+    this.prjCoordSys = null;
+    /**
+     * @member {number} [SuperMap.GeoCodingParameter.prototype.maxReturn]
+     * @description 最大返回结果数。
+     */
+
+    this.maxReturn = null;
+    Util.extend(this, options);
+  }
+  /**
+   * @function SuperMap.GeoCodingParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  GeoCodingParameter_createClass(GeoCodingParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.address = null;
+      this.fromIndex = null;
+      this.toIndex = null;
+      this.filters = null;
+      this.prjCoordSys = null;
+      this.maxReturn = null;
+    }
+  }]);
+
+  return GeoCodingParameter;
+}();
+SuperMap.GeoCodingParameter = GeoCodingParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/GeoDecodingParameter.js
+function GeoDecodingParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function GeoDecodingParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function GeoDecodingParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) GeoDecodingParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) GeoDecodingParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.GeoDecodingParameter
+ * @category iServer AddressMatch
+ * @classdesc 地理反向匹配参数类。
+ * @param {Object} options - 参数。 
+ * @param {number} options.x - 查询位置的横坐标。 
+ * @param {number} options.y - 查询位置的纵坐标。 
+ * @param {number} [options.fromIndex] - 设置返回对象的起始索引值。 
+ * @param {Array.<string>} [options.filters] - 过滤字段,限定查询区域。 
+ * @param {string} [options.prjCoordSys] - 查询结果的坐标系。 
+ * @param {number} [options.maxReturn] - 最大返回结果数。 
+ * @param {number} [options.geoDecodingRadius] - 查询半径。
+ */
+
+var GeoDecodingParameter = /*#__PURE__*/function () {
+  function GeoDecodingParameter(options) {
+    GeoDecodingParameter_classCallCheck(this, GeoDecodingParameter);
+
+    if (options.filters) {
+      options.filters = options.filters.split(',');
+    }
+    /**
+     * @member {number} SuperMap.GeoDecodingParameter.prototype.x
+     * @description 查询位置的横坐标。
+     */
+
+
+    this.x = null;
+    /**
+     * @member {number} SuperMap.GeoDecodingParameter.prototype.y
+     * @description 查询位置的纵坐标。
+     */
+
+    this.y = null;
+    /**
+     * @member {number} [SuperMap.GeoDecodingParameter.prototype.fromIndex]
+     * @description  设置返回对象的起始索引值。
+     */
+
+    this.fromIndex = null;
+    /**
+     * @member {number} [SuperMap.GeoDecodingParameter.prototype.toIndex]
+     * @description 设置返回对象的结束索引值。
+     */
+
+    this.toIndex = null;
+    /**
+     * @member {Array.<string>} [SuperMap.GeoDecodingParameter.prototype.filters]
+     * @description 过滤字段,限定查询区域。
+     */
+
+    this.filters = null;
+    /**
+     * @member {string} [SuperMap.GeoDecodingParameter.prototype.prjCoordSys]
+     * @description 查询结果的坐标系。
+     */
+
+    this.prjCoordSys = null;
+    /**
+     *  @member {number} [SuperMap.GeoDecodingParameter.prototype.maxReturn]
+     *  @description 最大返回结果数。
+     */
+
+    this.maxReturn = null;
+    /**
+     * @member {number} SuperMap.GeoDecodingParameter.prototype.geoDecodingRadius
+     * @description 查询半径。
+     */
+
+    this.geoDecodingRadius = null;
+    Util.extend(this, options);
+  }
+  /**
+   * @function SuperMap.GeoDecodingParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  GeoDecodingParameter_createClass(GeoDecodingParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.x = null;
+      this.y = null;
+      this.fromIndex = null;
+      this.toIndex = null;
+      this.filters = null;
+      this.prjCoordSys = null;
+      this.maxReturn = null;
+      this.geoDecodingRadius = null;
+    }
+  }]);
+
+  return GeoDecodingParameter;
+}();
+SuperMap.GeoDecodingParameter = GeoDecodingParameter;
+;// CONCATENATED MODULE: ./src/classic/SuperMap.js
+var SuperMap_SuperMap = window.SuperMap = window.SuperMap || {};
+SuperMap_SuperMap.REST = SuperMap_SuperMap.REST || {};
+
+;// CONCATENATED MODULE: external "function(){try{return mapv}catch(e){return {}}}()"
+var external_function_try_return_mapv_catch_e_return_namespaceObject = function(){try{return mapv}catch(e){return {}}}();
+;// CONCATENATED MODULE: ./src/common/util/MapCalculateUtil.js
+
+var getMeterPerMapUnit = function getMeterPerMapUnit(mapUnit) {
+  var earchRadiusInMeters = 6378137;
+  var meterPerMapUnit;
+
+  if (mapUnit === Unit.METER) {
+    meterPerMapUnit = 1;
+  } else if (mapUnit === Unit.DEGREE) {
+    // 每度表示多少米。
+    meterPerMapUnit = Math.PI * 2 * earchRadiusInMeters / 360;
+  } else if (mapUnit === Unit.KILOMETER) {
+    meterPerMapUnit = 1.0e-3;
+  } else if (mapUnit === Unit.INCH) {
+    meterPerMapUnit = 1 / 2.5399999918e-2;
+  } else if (mapUnit === Unit.FOOT) {
+    meterPerMapUnit = 0.3048;
+  } else {
+    return meterPerMapUnit;
+  }
+
+  return meterPerMapUnit;
+};
+function getWrapNum(x) {
+  var includeMax = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+  var includeMin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  var range = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [-180, 180];
+  var max = range[1],
+      min = range[0],
+      d = max - min;
+
+  if (x === max && includeMax) {
+    return x;
+  }
+
+  if (x === min && includeMin) {
+    return x;
+  }
+
+  var tmp = ((x - min) % d + d) % d;
+
+  if (tmp === 0 && includeMax) {
+    return max;
+  }
+
+  return ((x - min) % d + d) % d + min;
+}
+function conversionDegree(degrees) {
+  var degree = parseInt(degrees);
+  var fraction = parseInt((degrees - degree) * 60);
+  var second = parseInt(((degrees - degree) * 60 - fraction) * 60);
+  fraction = parseInt(fraction / 10) === 0 ? "0".concat(fraction) : fraction;
+  second = parseInt(second / 10) === 0 ? "0".concat(second) : second;
+  return "".concat(degree, "\xB0").concat(fraction, "'").concat(second);
+}
+;// CONCATENATED MODULE: ./src/classic/overlay/mapv/MapVRenderer.js
+function MapVRenderer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { MapVRenderer_typeof = function _typeof(obj) { return typeof obj; }; } else { MapVRenderer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return MapVRenderer_typeof(obj); }
+
+function MapVRenderer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function MapVRenderer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function MapVRenderer_createClass(Constructor, protoProps, staticProps) { if (protoProps) MapVRenderer_defineProperties(Constructor.prototype, protoProps); if (staticProps) MapVRenderer_defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (MapVRenderer_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class MapVRenderer
+ * @classdesc MapV渲染器。
+ * @private
+ * @extends {mapv.baiduMapLayer}
+ * @param {SuperMap.Map} map - 待渲染的地图。
+ * @param {SuperMap.Layer.MapVLayer} layer - 待渲染的图层。
+ * @param {Mapv.DataSet} dataSet - 待渲染的数据集,数据所属坐标系要求与 map 保持一致。
+ * @param {Object} options - 渲染的参数。
+ */
+
+var MapVBaseLayer = external_function_try_return_mapv_catch_e_return_namespaceObject.baiduMapLayer ? external_function_try_return_mapv_catch_e_return_namespaceObject.baiduMapLayer.__proto__ : Function;
+var MapVRenderer = /*#__PURE__*/function (_MapVBaseLayer) {
+  _inherits(MapVRenderer, _MapVBaseLayer);
+
+  var _super = _createSuper(MapVRenderer);
+
+  function MapVRenderer(map, layer, dataSet, options) {
+    var _this;
+
+    MapVRenderer_classCallCheck(this, MapVRenderer);
+
+    _this = _super.call(this, map, dataSet, options);
+
+    if (!MapVBaseLayer) {
+      return _possibleConstructorReturn(_this, _assertThisInitialized(_this));
+    }
+
+    var self = _assertThisInitialized(_this);
+
+    options = options || {};
+    self.init(options);
+    self.argCheck(options);
+    _this.canvasLayer = layer;
+    _this.clickEvent = _this.clickEvent.bind(_assertThisInitialized(_this));
+    _this.mousemoveEvent = _this.mousemoveEvent.bind(_assertThisInitialized(_this));
+
+    _this.bindEvent();
+
+    return _this;
+  }
+  /**
+   * @function MapvRenderer.prototype.clickEvent
+   * @description 点击事件。
+   * @param {Object} e -  触发对象。
+   */
+
+
+  MapVRenderer_createClass(MapVRenderer, [{
+    key: "clickEvent",
+    value: function clickEvent(e) {
+      var pixel = e.xy;
+
+      _get(_getPrototypeOf(MapVRenderer.prototype), "clickEvent", this).call(this, pixel, e);
+    }
+    /**
+     * @function MapvRenderer.prototype.mousemoveEvent
+     * @description 鼠标移动事件。
+     * @param {Object} e - 触发对象。
+     */
+
+  }, {
+    key: "mousemoveEvent",
+    value: function mousemoveEvent(e) {
+      var pixel = e.xy;
+
+      _get(_getPrototypeOf(MapVRenderer.prototype), "mousemoveEvent", this).call(this, pixel, e);
+    }
+    /**
+     * @function MapvRenderer.prototype.bindEvent
+     * @description 绑定鼠标移动和鼠标点击事件。
+     */
+
+  }, {
+    key: "bindEvent",
+    value: function bindEvent() {
+      var map = this.map;
+
+      if (this.options.methods) {
+        if (this.options.methods.click) {
+          map.events.on({
+            'click': this.clickEvent
+          });
+        }
+
+        if (this.options.methods.mousemove) {
+          map.events.on({
+            'mousemove': this.mousemoveEvent
+          });
+        }
+      }
+    }
+    /**
+     * @function MapvRenderer.prototype.unbindEvent
+     * @description 解绑鼠标移动和鼠标滑动触发的事件。
+     */
+
+  }, {
+    key: "unbindEvent",
+    value: function unbindEvent() {
+      var map = this.map;
+
+      if (this.options.methods) {
+        if (this.options.methods.click) {
+          map.events.un({
+            'click': this.clickEvent
+          });
+        }
+
+        if (this.options.methods.mousemove) {
+          map.events.un({
+            'mousemove': this.mousemoveEvent
+          });
+        }
+      }
+    }
+    /**
+     * @function MapvRenderer.prototype.getContext
+     * @description 获取信息。
+     */
+
+  }, {
+    key: "getContext",
+    value: function getContext() {
+      return this.canvasLayer && this.canvasLayer.canvasContext;
+    }
+    /**
+     * @function MapvRenderer.prototype.addData
+     * @description 追加数据
+     * @param {oject} data - 待添加的数据。
+     * @param {oject} options - 待添加的数据信息。
+     */
+
+  }, {
+    key: "addData",
+    value: function addData(data, options) {
+      var _data = data;
+
+      if (data && data.get) {
+        _data = data.get();
+      }
+
+      this.dataSet.add(_data);
+      this.update({
+        options: options
+      });
+    }
+    /**
+     * @function MapvRenderer.prototype.updateData
+     * @description 更新覆盖原数据。
+     * @param {oject} data - 待更新的数据。
+     * @param {oject} options - 待更新的数据信息。
+     */
+
+  }, {
+    key: "setData",
+    value: function setData(data, options) {
+      var _data = data;
+
+      if (data && data.get) {
+        _data = data.get();
+      }
+
+      this.dataSet = this.dataSet || new external_function_try_return_mapv_catch_e_return_namespaceObject.DataSet();
+      this.dataSet.set(_data);
+      this.update({
+        options: options
+      });
+    }
+    /**
+     * @function MapvRenderer.prototype.getData
+     * @description 获取数据。
+     */
+
+  }, {
+    key: "getData",
+    value: function getData() {
+      return this.dataSet;
+    }
+    /**
+     * @function MapvRenderer.prototype.removeData
+     * @description 删除符合过滤条件的数据。
+     * @param {function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。
+     */
+
+  }, {
+    key: "removeData",
+    value: function removeData(_filter) {
+      if (!this.dataSet) {
+        return;
+      }
+
+      var newData = this.dataSet.get({
+        filter: function filter(data) {
+          return _filter != null && typeof _filter === "function" ? !_filter(data) : true;
+        }
+      });
+      this.dataSet.set(newData);
+      this.update({
+        options: null
+      });
+    }
+    /**
+     * @function MapvRenderer.prototype.clearData
+     * @description 清除数据。
+     */
+
+  }, {
+    key: "clearData",
+    value: function clearData() {
+      this.dataSet && this.dataSet.clear();
+      this.update({
+        options: null
+      });
+    }
+    /**
+     * @function MapvRenderer.prototype.render
+     * @description 着色。
+     * @param {number} time
+     */
+
+  }, {
+    key: "render",
+    value: function render(time) {
+      this._canvasUpdate(time);
+    }
+    /**
+     * @function MapvRenderer.prototype.transferToMercator
+     * @description 墨卡托坐标为经纬度。
+     * @deprecated
+     */
+
+  }, {
+    key: "transferToMercator",
+    value: function transferToMercator() {
+      if (this.options.coordType && ["bd09mc", "coordinates_mercator"].indexOf(this.options.coordType) > -1) {
+        var data = this.dataSet.get();
+        data = this.dataSet.transferCoordinate(data, function (coordinates) {
+          var pixel = SuperMap_SuperMap.Projection.transform({
+            x: coordinates[0],
+            y: coordinates[1]
+          }, "EPSG:3857", "EPSG:4326");
+          return [pixel.x, pixel.y];
+        }, 'coordinates', 'coordinates');
+
+        this.dataSet._set(data);
+      }
+    }
+  }, {
+    key: "_canvasUpdate",
+    value: function _canvasUpdate(time) {
+      if (!this.canvasLayer) {
+        return;
+      }
+
+      var self = this;
+      var animationOptions = self.options.animation;
+      var context = this.getContext();
+      var map = this.map;
+
+      if (self.isEnabledTime()) {
+        if (time === undefined) {
+          this.clear(context);
+          return;
+        }
+
+        if (this.context === '2d') {
+          context.save();
+          context.globalCompositeOperation = 'destination-out';
+          context.fillStyle = 'rgba(0, 0, 0, .1)';
+          context.fillRect(0, 0, context.canvas.width, context.canvas.height);
+          context.restore();
+        }
+      } else {
+        this.clear(context);
+      }
+
+      if (this.context === '2d') {
+        for (var key in self.options) {
+          context[key] = self.options[key];
+        }
+      } else {
+        context.clear(context.COLOR_BUFFER_BIT);
+      }
+
+      if (self.options.minZoom && map.getZoom() < self.options.minZoom || self.options.maxZoom && map.getZoom() > self.options.maxZoom) {
+        return;
+      }
+
+      var layer = self.canvasLayer;
+      var dataGetOptions = {
+        fromColumn: 'coordinates',
+        transferCoordinate: function transferCoordinate(coordinate) {
+          // var coord = layer.transferToMapLatLng({lon: coordinate[0], lat: coordinate[1]});
+          var coord = {
+            lon: coordinate[0],
+            lat: coordinate[1]
+          };
+          var worldPoint = map.getViewPortPxFromLonLat(coord);
+          return [worldPoint.x, worldPoint.y];
+        }
+      };
+
+      if (time !== undefined) {
+        dataGetOptions.filter = function (item) {
+          var trails = animationOptions.trails || 10;
+          return time && item.time > time - trails && item.time < time;
+        };
+      }
+
+      var data = self.dataSet.get(dataGetOptions);
+      this.processData(data); // 一个像素是多少米
+
+      var zoomUnit = map.getResolution() * getMeterPerMapUnit('DEGREE'); // // 兼容unit为'm'的情况
+
+      if (self.options.unit === 'm') {
+        if (self.options.size) {
+          self.options._size = self.options.size / zoomUnit;
+        }
+
+        if (self.options.width) {
+          self.options._width = self.options.width / zoomUnit;
+        }
+
+        if (self.options.height) {
+          self.options._height = self.options.height / zoomUnit;
+        }
+      } else {
+        self.options._size = self.options.size;
+        self.options._height = self.options.height;
+        self.options._width = self.options.width;
+      }
+
+      var worldPoint = map.getViewPortPxFromLonLat(layer.transferToMapLatLng({
+        lon: 0,
+        lat: 0
+      }));
+      this.drawContext(context, data, self.options, worldPoint);
+      self.options.updateCallback && self.options.updateCallback(time);
+    }
+  }, {
+    key: "init",
+    value: function init(options) {
+      var self = this;
+      self.options = options;
+      this.initDataRange(options);
+      this.context = self.options.context || '2d';
+
+      if (self.options.zIndex) {
+        this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);
+      }
+
+      this.initAnimator();
+    }
+    /**
+     * @function MapvRenderer.prototype.addAnimatorEvent
+     * @description 添加动画事件。
+     */
+
+  }, {
+    key: "addAnimatorEvent",
+    value: function addAnimatorEvent() {
+      this.map.events.on({
+        'movestart': this.animatorMovestartEvent.bind(this)
+      });
+      this.map.events.on({
+        'moveend': this.animatorMoveendEvent.bind(this)
+      });
+    }
+    /**
+     * @function MapvRenderer.prototype.clear
+     * @description 清除环境。
+     * @param {Object} context - 当前环境。
+     */
+
+  }, {
+    key: "clear",
+    value: function clear(context) {
+      context && context.clearRect && context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+    }
+    /**
+     * @function MapvRenderer.prototype.show
+     * @description 展示渲染效果。
+     */
+
+  }, {
+    key: "show",
+    value: function show() {
+      this.map.addLayer(this.canvasLayer);
+    }
+    /**
+     * @function MapvRenderer.prototype.hide
+     * @description 隐藏渲染效果。
+     */
+
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.map.removeLayer(this.canvasLayer);
+    }
+    /**
+     * @function MapvRenderer.prototype.draw
+     * @description 渲染绘制。
+     */
+
+  }, {
+    key: "draw",
+    value: function draw() {
+      this.canvasLayer.redraw();
+    }
+  }]);
+
+  return MapVRenderer;
+}(MapVBaseLayer);
+;// CONCATENATED MODULE: ./src/classic/overlay/MapVLayer.js
+function MapVLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { MapVLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { MapVLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return MapVLayer_typeof(obj); }
+
+function MapVLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function MapVLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function MapVLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) MapVLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) MapVLayer_defineProperties(Constructor, staticProps); return Constructor; }
+
+function MapVLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { MapVLayer_get = Reflect.get; } else { MapVLayer_get = function _get(target, property, receiver) { var base = MapVLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return MapVLayer_get(target, property, receiver || target); }
+
+function MapVLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = MapVLayer_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function MapVLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) MapVLayer_setPrototypeOf(subClass, superClass); }
+
+function MapVLayer_setPrototypeOf(o, p) { MapVLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return MapVLayer_setPrototypeOf(o, p); }
+
+function MapVLayer_createSuper(Derived) { var hasNativeReflectConstruct = MapVLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = MapVLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = MapVLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return MapVLayer_possibleConstructorReturn(this, result); }; }
+
+function MapVLayer_possibleConstructorReturn(self, call) { if (call && (MapVLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return MapVLayer_assertThisInitialized(self); }
+
+function MapVLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function MapVLayer_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function MapVLayer_getPrototypeOf(o) { MapVLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return MapVLayer_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.Layer.MapVLayer
+ * @category  Visualization MapV
+ * @classdesc MapV 图层。
+ * @extends {SuperMap.Layer}
+ * @param {string} name - 图层名。
+ * @param {Object} options - 可选参数。
+ * @param {Mapv.DataSet} options.dataSet - mapv 的 dataSet 对象。
+ * @param {Object} options.options - mapv 绘图风格配置信息。
+ */
+
+var MapVLayer = /*#__PURE__*/function (_SuperMap$Layer) {
+  MapVLayer_inherits(MapVLayer, _SuperMap$Layer);
+
+  var _super = MapVLayer_createSuper(MapVLayer);
+
+  function MapVLayer(name, options) {
+    var _this;
+
+    MapVLayer_classCallCheck(this, MapVLayer);
+
+    _this = _super.call(this, name, options);
+    /**
+     * @member {mapv.DataSet} SuperMap.Layer.MapVLayer.prototype.dataSet
+     * @description mapv dataset 对象。
+     */
+
+    _this.dataSet = null;
+    /**
+     * @member {Object} SuperMap.Layer.MapVLayer.prototype.options
+     * @description mapv 绘图风格配置信息。
+     */
+
+    _this.options = null;
+    /**
+     * @member {boolean} [SuperMap.Layer.MapVLayer.prototype.supported=false]
+     * @description 当前浏览器是否支持 canvas 绘制。决定了 MapV 图是否可用,内部判断使用。
+     */
+
+    _this.supported = false;
+    /**
+     * @member {Canvas} SuperMap.Layer.MapVLayer.prototype.canvas
+     * @description MapV 图主绘制面板。
+     */
+
+    _this.canvas = null;
+    /**
+     * @private
+     * @member {CanvasContext} SuperMap.Layer.MapVLayer.prototype.canvasContext
+     * @description MapV 图主绘制对象。
+     */
+
+    _this.canvasContext = null;
+
+    if (options) {
+      SuperMap_SuperMap.Util.extend(MapVLayer_assertThisInitialized(_this), options);
+    } //MapV图要求使用canvas绘制,判断是否支持
+
+
+    _this.canvas = document.createElement('canvas');
+
+    if (!_this.canvas.getContext) {
+      return MapVLayer_possibleConstructorReturn(_this);
+    }
+
+    _this.supported = true; //构建绘图面板
+
+    _this.canvas.style.position = 'absolute';
+    _this.canvas.style.top = 0 + 'px';
+    _this.canvas.style.left = 0 + 'px';
+
+    _this.div.appendChild(_this.canvas);
+
+    var context = _this.options && _this.options.context || '2d';
+    _this.canvasContext = _this.canvas.getContext(context);
+    var global$2 = typeof window === 'undefined' ? {} : window;
+    var devicePixelRatio = _this.devicePixelRatio = global$2.devicePixelRatio || 1;
+
+    if (context == '2d') {
+      _this.canvasContext.scale(devicePixelRatio, devicePixelRatio);
+    }
+
+    _this.attribution = "© 2018 百度 <a href='https://mapv.baidu.com' target='_blank'>MapV</a> with <span>© <a target='_blank' href='https://iclient.supermap.io' " + "style='color: #08c;text-decoration: none;'>SuperMap iClient</a></span>";
+    _this.CLASS_NAME = 'SuperMap.Layer.MapVLayer';
+    return _this;
+  }
+  /**
+   * @function SuperMap.Layer.MapVLayer.prototype.destroy
+   * @override
+   */
+
+
+  MapVLayer_createClass(MapVLayer, [{
+    key: "destroy",
+    value: function destroy() {
+      if (this.renderer && this.renderer.animator) {
+        this.renderer.animator.stop();
+        this.renderer.animator = null;
+      }
+
+      this.dataSet = null;
+      this.options = null;
+      this.renderer = null;
+      this.supported = null;
+      this.canvas = null;
+      this.canvasContext = null;
+      this.maxWidth = null;
+      this.maxHeight = null;
+
+      MapVLayer_get(MapVLayer_getPrototypeOf(MapVLayer.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.addData
+     * @description 追加数据。
+     * @param {mapv.DataSet} dataSet - mapv 数据集。
+     * @param {Object} options - mapv 绘图参数。
+     */
+
+  }, {
+    key: "addData",
+    value: function addData(dataSet, options) {
+      this.renderer && this.renderer.addData(dataSet, options);
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.
+     * @description 设置数据。
+     * @param {mapv.DataSet} dataSet - mapv 数据集。
+     * @param {Object} options - mapv 绘图参数。
+     */
+
+  }, {
+    key: "setData",
+    value: function setData(dataSet, options) {
+      this.renderer && this.renderer.setData(dataSet, options);
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.getData
+     * @description 获取数据。
+     * @returns {mapv.DataSet} - mapv 数据集。
+     */
+
+  }, {
+    key: "getData",
+    value: function getData() {
+      if (this.renderer) {
+        this.dataSet = this.renderer.getData();
+      }
+
+      return this.dataSet;
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.removeData
+     * @description 删除符合过滤条件的数据。
+     * @param {function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。
+     * @example
+     *  filter=function(data){
+     *    if(data.id=="1"){
+     *      return true
+     *    }
+     *    return false;
+     *  }
+     */
+
+  }, {
+    key: "removeData",
+    value: function removeData(filter) {
+      this.renderer && this.renderer.removeData(filter);
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.clearData
+     * @description 清除数据
+     */
+
+  }, {
+    key: "clearData",
+    value: function clearData() {
+      this.renderer.clearData();
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.setMap
+     * @description 图层已经添加到 Map 中。
+     *              如果当前浏览器支持 canvas,则开始渲染要素;如果不支持则移除图层。
+     * @param {SuperMap.Map} map - 需要绑定的 map 对象。
+     */
+
+  }, {
+    key: "setMap",
+    value: function setMap(map) {
+      MapVLayer_get(MapVLayer_getPrototypeOf(MapVLayer.prototype), "setMap", this).call(this, map);
+
+      this.renderer = new MapVRenderer(map, this, this.dataSet, this.options);
+
+      if (!this.supported) {
+        this.map.removeLayer(this);
+      } else {
+        this.redraw();
+      }
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.moveTo
+     * @description 重置当前 MapV 图层的 div,再一次与 Map 控件保持一致。
+     *              修改当前显示范围,当平移或者缩放结束后开始重绘 MapV 图的渲染效果。
+     * @param {SuperMap.Bounds} bounds - 图层范围。
+     * @param {boolean} [zoomChanged] - 缩放级别是否改变。
+     * @param {boolean} [dragging] - 是否拖动。
+     */
+
+  }, {
+    key: "moveTo",
+    value: function moveTo(bounds, zoomChanged, dragging) {
+      MapVLayer_get(MapVLayer_getPrototypeOf(MapVLayer.prototype), "moveTo", this).call(this, bounds, zoomChanged, dragging);
+
+      if (!this.supported) {
+        return;
+      }
+
+      this.zoomChanged = zoomChanged;
+
+      if (!dragging) {
+        this.div.style.visibility = 'hidden';
+        this.div.style.left = -parseInt(this.map.layerContainerDiv.style.left) + 'px';
+        this.div.style.top = -parseInt(this.map.layerContainerDiv.style.top) + 'px';
+        /*this.canvas.style.left = this.div.style.left;
+         this.canvas.style.top = this.div.style.top;*/
+
+        var size = this.map.getSize();
+        this.div.style.width = parseInt(size.w) + 'px';
+        this.div.style.height = parseInt(size.h) + 'px';
+        this.canvas.width = parseInt(size.w);
+        this.canvas.height = parseInt(size.h);
+        this.canvas.style.width = this.div.style.width;
+        this.canvas.style.height = this.div.style.height;
+        this.maxWidth = size.w;
+        this.maxHeight = size.h;
+        this.div.style.visibility = '';
+
+        if (!zoomChanged) {
+          this.renderer && this.renderer.render();
+        }
+      }
+
+      if (zoomChanged) {
+        this.renderer && this.renderer.render();
+      }
+    }
+    /**
+     * @function SuperMap.Layer.MapVLayer.prototype.transferToMapLatLng
+     * @description 将经纬度转成底图的投影坐标。
+     * @param {SuperMap.Lonlat} latLng - 经纬度坐标。
+     * @deprecated
+     */
+
+  }, {
+    key: "transferToMapLatLng",
+    value: function transferToMapLatLng(latLng) {
+      var source = 'EPSG:4326',
+          dest = 'EPSG:4326';
+      var unit = this.map.getUnits() || 'degree';
+
+      if (['m', 'meter'].indexOf(unit.toLowerCase()) > -1) {
+        dest = 'EPSG:3857';
+      }
+
+      return new SuperMap_SuperMap.LonLat(latLng.lon, latLng.lat).transform(source, dest);
+    }
+  }]);
+
+  return MapVLayer;
+}(SuperMap_SuperMap.Layer);
+SuperMap_SuperMap.Layer.MapVLayer = MapVLayer;
+;// CONCATENATED MODULE: ./src/classic/overlay/mapv/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+;// CONCATENATED MODULE: ./src/classic/overlay/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+;// CONCATENATED MODULE: ./src/common/commontypes/Credential.js
+function Credential_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function Credential_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function Credential_createClass(Constructor, protoProps, staticProps) { if (protoProps) Credential_defineProperties(Constructor.prototype, protoProps); if (staticProps) Credential_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+/**
+ * @class SuperMap.Credential
+ * @category Security
+ * @classdesc SuperMap 的安全证书类,其中包括 token 等安全验证信息。</br>
+ * 需要使用用户名和密码在:"http://localhost:8090/iserver/services/security/tokens" 下申请 value。</br>
+ * 获得形如:"2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ.." 的 value。</br>
+ * 目前支持的功能包括:地图服务、专题图、量算、查询、公交换乘、空间分析、网络分析,不支持轮询功能。</br>
+ * @param {string} value - 访问受安全限制的服务时用于通过安全认证的验证信息。
+ * @param {string} [name='token'] - 验证信息前缀,name=value 部分的 name 部分。
+ * @example
+ * var pixcel = new SuperMap.Credential("valueString","token");
+ * pixcel.destroy();
+ */
+
+var Credential = /*#__PURE__*/function () {
+  function Credential(value, name) {
+    Credential_classCallCheck(this, Credential);
+
+    /**
+     * @member {string} SuperMap.Bounds.prototype.value
+     * @description 访问受安全限制的服务时用于通过安全认证的验证信息。
+     */
+    this.value = value ? value : "";
+    /**
+     * @member {string} [SuperMap.Bounds.prototype.name='token']
+     * @description 验证信息前缀,name=value 部分的 name 部分。
+     */
+
+    this.name = name ? name : "token";
+    this.CLASS_NAME = "SuperMap.Credential";
+  }
+  /**
+   * @function SuperMap.Credential.prototype.getUrlParameters
+   * @example
+   * var credential = new SuperMap.Credential("valueString","token");
+   * //这里 str = "token=valueString";
+   * var str = credential.getUrlParameters();
+   * @returns {string} 返回安全信息组成的 url 片段。
+   */
+
+
+  Credential_createClass(Credential, [{
+    key: "getUrlParameters",
+    value: function getUrlParameters() {
+      //当需要其他安全信息的时候,则需要return this.name + "=" + this.value + "&" + "...";的形式添加。
+      return this.name + "=" + this.value;
+    }
+    /**
+     * @function SuperMap.Bounds.prototype.getValue
+     * @description 获取 value。
+     * @example
+     * var credential = new SuperMap.Credential("2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ..","token");
+     * //这里 str = "2OMwGmcNlrP2ixqv1Mk4BuQMybOGfLOrljruX6VcYMDQKc58Sl9nMHsqQaqeBx44jRvKSjkmpZKK1L596y7skQ..";
+     * var str = credential.getValue();
+     * @returns {string} 返回 value 字符串,在 iServer 服务下该 value 值即为 token 值。
+     */
+
+  }, {
+    key: "getValue",
+    value: function getValue() {
+      return this.value;
+    }
+    /**
+     *
+     * @function SuperMap.Credential.prototype.destroy
+     * @description 销毁此对象。销毁后此对象的所有属性为 null,而不是初始值。
+     * @example
+     * var credential = new SuperMap.Credential("valueString","token");
+     * credential.destroy();
+     */
+
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.value = null;
+      this.name = null;
+    }
+  }]);
+
+  return Credential;
+}();
+/**
+ * @member {SuperMap.Credential} SuperMap.Credential.CREDENTIAL
+ * @description 这个对象保存一个安全类的实例,在服务端需要安全验证的时候必须进行设置。
+ * @constant
+ * @example
+ * 代码实例:
+ *  // 当iServer启用服务安全的时候,下边的代码是必须的。安全证书类能够接收一个value和一个name参数。
+ *  var value = "(以iServer为例,这里是申请的token值)";
+ *  var name = "token";
+ *  // 默认name参数为token,所以当使用iServer服务的时候可以不进行设置。
+ *  SuperMap.Credential.CREDENTIAL = new SuperMap.Credential(value, name);
+ *
+ */
+
+Credential.CREDENTIAL = null;
+SuperMap.Credential = Credential;
+;// CONCATENATED MODULE: ./src/common/format/Format.js
+function Format_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function Format_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function Format_createClass(Constructor, protoProps, staticProps) { if (protoProps) Format_defineProperties(Constructor.prototype, protoProps); if (staticProps) Format_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.Format
+ * @classdesc 读写各种格式的格式类基类。其子类应该包含并实现 read 和 write 方法。
+ * @category BaseTypes Format
+ * @param {Object} options - 可选参数。
+ * @param {boolean} [options.keepData=false] - 如果设置为 true, data 属性会指向被解析的对象(例如 JSON 或 xml 数据对象)。
+ * @param {Object} [options.data] - 当 keepData 属性设置为 true,这是传递给 read 操作的要被解析的字符串。
+ */
+
+var Format = /*#__PURE__*/function () {
+  function Format(options) {
+    Format_classCallCheck(this, Format);
+
+    /**
+     * @member {Object} SuperMap.Format.prototype.data 
+     * @description 当 keepData 属性设置为 true,这是传递给 read 操作的要被解析的字符串。
+     */
+    this.data = null;
+    /**
+     * APIProperty: keepData
+     * @member {Object} [SuperMap.Format.prototype.keepData=false]
+     * @description 保持最近读到的数据的引用(通过 <data> 属性)。
+     */
+
+    this.keepData = false;
+    Util.extend(this, options);
+    this.options = options;
+    this.CLASS_NAME = "SuperMap.Format";
+  }
+  /**
+   * @function SuperMap.Format.prototype.destroy
+   * @description 销毁该格式类,释放相关资源。
+   */
+
+
+  Format_createClass(Format, [{
+    key: "destroy",
+    value: function destroy() {//用来销毁该格式类,释放相关资源
+    }
+    /**
+     * @function SuperMap.Format.prototype.read
+     * @description 来从字符串中读取数据。
+     * @param {string} data - 读取的数据。
+     */
+
+  }, {
+    key: "read",
+    value: function read(data) {// eslint-disable-line no-unused-vars
+      //用来从字符串中读取数据
+    }
+    /**
+     * @function SuperMap.Format.prototype.write
+     * @description 将对象写成字符串。
+     * @param {Object} object - 可序列化的对象。
+     * @returns {string} 对象被写成字符串。
+     */
+
+  }, {
+    key: "write",
+    value: function write(object) {// eslint-disable-line no-unused-vars
+      //用来写字符串
+    }
+  }]);
+
+  return Format;
+}();
+SuperMap.Format = SuperMap.Format || Format;
+;// CONCATENATED MODULE: ./src/common/format/JSON.js
+function JSON_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { JSON_typeof = function _typeof(obj) { return typeof obj; }; } else { JSON_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return JSON_typeof(obj); }
+
+function JSON_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function JSON_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function JSON_createClass(Constructor, protoProps, staticProps) { if (protoProps) JSON_defineProperties(Constructor.prototype, protoProps); if (staticProps) JSON_defineProperties(Constructor, staticProps); return Constructor; }
+
+function JSON_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) JSON_setPrototypeOf(subClass, superClass); }
+
+function JSON_setPrototypeOf(o, p) { JSON_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return JSON_setPrototypeOf(o, p); }
+
+function JSON_createSuper(Derived) { var hasNativeReflectConstruct = JSON_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = JSON_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = JSON_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return JSON_possibleConstructorReturn(this, result); }; }
+
+function JSON_possibleConstructorReturn(self, call) { if (call && (JSON_typeof(call) === "object" || typeof call === "function")) { return call; } return JSON_assertThisInitialized(self); }
+
+function JSON_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function JSON_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function JSON_getPrototypeOf(o) { JSON_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return JSON_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+/**
+ * @class SuperMap.Format.JSON
+ * @classdesc 安全的读写 JSON 的解析类。使用 {@link SuperMap.Format.JSON} 构造函数创建新实例。
+ * @category BaseTypes Format
+ * @param {Object} [options] - 参数。
+ * @param {string} [options.indent="    "] - 用于格式化输出,indent 字符串会在每次缩进的时候使用一次。
+ * @param {string} [options.space=" "] - 用于格式化输出,space 字符串会在名值对的 ":" 后边添加。
+ * @param {string} [options.newline="\n"] - 用于格式化输出, newline 字符串会用在每一个名值对或数组项末尾。
+ * @param {number} [options.level=0] - 用于格式化输出, 表示的是缩进级别。
+ * @param {boolean} [options.pretty=false] - 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+ * @param {boolean} [options.nativeJSON] - 需要被注册的监听器对象。
+ * @extends {SuperMap.Format}
+ */
+
+var JSONFormat = /*#__PURE__*/function (_Format) {
+  JSON_inherits(JSONFormat, _Format);
+
+  var _super = JSON_createSuper(JSONFormat);
+
+  function JSONFormat(options) {
+    var _this;
+
+    JSON_classCallCheck(this, JSONFormat);
+
+    _this = _super.call(this, options);
+    /**
+     * @member {string} [SuperMap.Format.JSON.prototype.indent="    "]
+     * @description 用于格式化输出,indent 字符串会在每次缩进的时候使用一次。
+     */
+
+    _this.indent = "    ";
+    /**
+     * @member {string} [SuperMap.Format.JSON.prototype.space=" "]
+     * @description 用于格式化输出,space 字符串会在名值对的 ":" 后边添加。
+     */
+
+    _this.space = " ";
+    /**
+     * @member {string} [SuperMap.Format.JSON.prototype.newline="\n"]
+     * @description 用于格式化输出, newline 字符串会用在每一个名值对或数组项末尾。
+     */
+
+    _this.newline = "\n";
+    /**
+     * @member {integer} [SuperMap.Format.JSON.prototype.level=0] 
+     * @description 用于格式化输出, 表示的是缩进级别。
+     */
+
+    _this.level = 0;
+    /**
+     * @member {boolean} [SuperMap.Format.JSON.prototype.pretty=false]
+     * @description 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+     */
+
+    _this.pretty = false;
+    /**
+     * @member {boolean} SuperMap.Format.JSON.prototype.nativeJSON 
+     * @description 判断浏览器是否原生支持 JSON 格式数据。
+     */
+
+    _this.nativeJSON = function () {
+      return !!(window.JSON && typeof JSON.parse === "function" && typeof JSON.stringify === "function");
+    }();
+
+    _this.CLASS_NAME = "SuperMap.Format.JSON";
+    /**
+     * @member SuperMap.Format.JSON.prototype.serialize
+     * @description 提供一些类型对象转 JSON 字符串的方法。
+     */
+
+    _this.serialize = {
+      /**
+       * @function SuperMap.Format.JSON.serialize.object
+       * @description 把对象转换为 JSON 字符串。
+       * @param {Object} object - 可序列化的对象。
+       * @returns {string} JSON 字符串。
+       */
+      'object': function object(_object) {
+        // three special objects that we want to treat differently
+        if (_object == null) {
+          return "null";
+        }
+
+        if (_object.constructor === Date) {
+          return this.serialize.date.apply(this, [_object]);
+        }
+
+        if (_object.constructor === Array) {
+          return this.serialize.array.apply(this, [_object]);
+        }
+
+        var pieces = ['{'];
+        this.level += 1;
+        var key, keyJSON, valueJSON;
+        var addComma = false;
+
+        for (key in _object) {
+          if (_object.hasOwnProperty(key)) {
+            // recursive calls need to allow for sub-classing
+            keyJSON = this.write.apply(this, [key, this.pretty]);
+            valueJSON = this.write.apply(this, [_object[key], this.pretty]);
+
+            if (keyJSON != null && valueJSON != null) {
+              if (addComma) {
+                pieces.push(',');
+              }
+
+              pieces.push(this.writeNewline(), this.writeIndent(), keyJSON, ':', this.writeSpace(), valueJSON);
+              addComma = true;
+            }
+          }
+        }
+
+        this.level -= 1;
+        pieces.push(this.writeNewline(), this.writeIndent(), '}');
+        return pieces.join('');
+      },
+
+      /**
+       * @function SuperMap.Format.JSON.serialize.array
+       * @description 把数组转换成 JSON 字符串。
+       * @param {Array} array - 可序列化的数组。
+       * @returns {string} JSON 字符串。
+       */
+      'array': function array(_array) {
+        var json;
+        var pieces = ['['];
+        this.level += 1;
+
+        for (var i = 0, len = _array.length; i < len; ++i) {
+          // recursive calls need to allow for sub-classing
+          json = this.write.apply(this, [_array[i], this.pretty]);
+
+          if (json != null) {
+            if (i > 0) {
+              pieces.push(',');
+            }
+
+            pieces.push(this.writeNewline(), this.writeIndent(), json);
+          }
+        }
+
+        this.level -= 1;
+        pieces.push(this.writeNewline(), this.writeIndent(), ']');
+        return pieces.join('');
+      },
+
+      /**
+       * @function SuperMap.Format.JSON.serialize.string
+       * @description 把字符串转换成 JSON 字符串。
+       * @param {string} string - 可序列化的字符串。
+       * @returns {string} JSON 字符串。
+       */
+      'string': function string(_string) {
+        // If the string contains no control characters, no quote characters, and no
+        // backslash characters, then we can simply slap some quotes around it.
+        // Otherwise we must also replace the offending characters with safe
+        // sequences.
+        var m = {
+          '\b': '\\b',
+          '\t': '\\t',
+          '\n': '\\n',
+          '\f': '\\f',
+          '\r': '\\r',
+          '"': '\\"',
+          '\\': '\\\\'
+        };
+        /*eslint-disable no-control-regex*/
+
+        if (/["\\\x00-\x1f]/.test(_string)) {
+          return '"' + _string.replace(/([\x00-\x1f\\"])/g, function (a, b) {
+            var c = m[b];
+
+            if (c) {
+              return c;
+            }
+
+            c = b.charCodeAt();
+            return "\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
+          }) + '"';
+        }
+
+        return '"' + _string + '"';
+      },
+
+      /**
+       * @function SuperMap.Format.JSON.serialize.number
+       * @description 把数字转换成 JSON 字符串。
+       * @param {number} number - 可序列化的数字。
+       * @returns {string} JSON 字符串。
+       */
+      'number': function number(_number) {
+        return isFinite(_number) ? String(_number) : "null";
+      },
+
+      /**
+       * @function SuperMap.Format.JSON.serialize.boolean
+       * @description Transform a boolean into a JSON string.
+       * @param {boolean} bool - The boolean to be serialized.
+       * @returns {string} A JSON string representing the boolean.
+       */
+      'boolean': function boolean(bool) {
+        return String(bool);
+      },
+
+      /**
+       * @function SuperMap.Format.JSON.serialize.object
+       * @description 将日期对象转换成 JSON 字符串。
+       * @param {Date} date - 可序列化的日期对象。
+       * @returns {string} JSON 字符串。
+       */
+      'date': function date(_date) {
+        function format(number) {
+          // Format integers to have at least two digits.
+          return number < 10 ? '0' + number : number;
+        }
+
+        return '"' + _date.getFullYear() + '-' + format(_date.getMonth() + 1) + '-' + format(_date.getDate()) + 'T' + format(_date.getHours()) + ':' + format(_date.getMinutes()) + ':' + format(_date.getSeconds()) + '"';
+      }
+    };
+    return _this;
+  }
+  /**
+   * @function SuperMap.Format.JSON.prototype.read
+   * @description 将一个符合 JSON 结构的字符串进行解析。
+   * @param {string} json - 符合 JSON 结构的字符串。
+   * @param {function} filter - 过滤方法,最终结果的每一个键值对都会调用该过滤方法,并在对应的值的位置替换成该方法返回的值。
+   * @returns {Object} 对象,数组,字符串或数字。
+   */
+
+
+  JSON_createClass(JSONFormat, [{
+    key: "read",
+    value: function read(json, filter) {
+      var object;
+
+      if (this.nativeJSON) {
+        try {
+          object = JSON.parse(json, filter);
+        } catch (e) {// Fall through if the regexp test fails.
+        }
+      }
+
+      if (this.keepData) {
+        this.data = object;
+      }
+
+      return object;
+    }
+    /**
+     * @function SuperMap.Format.JSON.prototype.write
+     * @description 序列化一个对象到一个符合 JSON 格式的字符串。
+     * @param {(object|string|Array|number|boolean)} value - 需要被序列化的对象,数组,字符串,数字,布尔值。
+     * @param {boolean} [pretty=false] - 是否在序列化的时候使用额外的空格控制结构。在 write 方法中使用。
+     * @returns {string} 符合 JSON 格式的字符串。
+     *
+     */
+
+  }, {
+    key: "write",
+    value: function write(value, pretty) {
+      this.pretty = !!pretty;
+      var json = null;
+
+      var type = JSON_typeof(value);
+
+      if (this.serialize[type]) {
+        try {
+          json = !this.pretty && this.nativeJSON ? JSON.stringify(value) : this.serialize[type].apply(this, [value]);
+        } catch (err) {//SuperMap.Console.error("Trouble serializing: " + err);
+        }
+      }
+
+      return json;
+    }
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeIndent
+     * @description 根据缩进级别输出一个缩进字符串。
+     * @private
+     * @returns {string} 一个适当的缩进字符串。
+     */
+
+  }, {
+    key: "writeIndent",
+    value: function writeIndent() {
+      var pieces = [];
+
+      if (this.pretty) {
+        for (var i = 0; i < this.level; ++i) {
+          pieces.push(this.indent);
+        }
+      }
+
+      return pieces.join('');
+    }
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeNewline
+     * @description 在格式化输出模式情况下输出代表新一行的字符串。
+     * @private
+     * @returns {string} 代表新的一行的字符串。
+     */
+
+  }, {
+    key: "writeNewline",
+    value: function writeNewline() {
+      return this.pretty ? this.newline : '';
+    }
+    /**
+     * @function SuperMap.Format.JSON.prototype.writeSpace
+     * @private
+     * @description 在格式化输出模式情况下输出一个代表空格的字符串。
+     * @returns {string} 一个空格。
+     */
+
+  }, {
+    key: "writeSpace",
+    value: function writeSpace() {
+      return this.pretty ? this.space : '';
+    }
+  }]);
+
+  return JSONFormat;
+}(Format);
+SuperMap.Format.JSON = JSONFormat;
+;// CONCATENATED MODULE: ./src/common/iServer/CommonServiceBase.js
+function CommonServiceBase_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function CommonServiceBase_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function CommonServiceBase_createClass(Constructor, protoProps, staticProps) { if (protoProps) CommonServiceBase_defineProperties(Constructor.prototype, protoProps); if (staticProps) CommonServiceBase_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.CommonServiceBase
+ * @category  iServer
+ * @classdesc 对接 iServer 各种服务的 Service 的基类。
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {Object} options.eventListeners - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {string} [options.proxy] - 服务代理地址。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {boolean} [options.withCredentials=false] - 请求是否携带 cookie。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var CommonServiceBase = /*#__PURE__*/function () {
+  function CommonServiceBase(url, options) {
+    CommonServiceBase_classCallCheck(this, CommonServiceBase);
+
+    var me = this;
+    this.EVENT_TYPES = ["processCompleted", "processFailed"];
+    this.events = null;
+    this.eventListeners = null;
+    this.url = null;
+    this.urls = null;
+    this.proxy = null;
+    this.serverType = null;
+    this.index = null;
+    this.length = null;
+    this.options = null;
+    this.totalTimes = null;
+    this.POLLING_TIMES = 3;
+    this._processSuccess = null;
+    this._processFailed = null;
+    this.isInTheSameDomain = null;
+    this.withCredentials = false;
+
+    if (Util.isArray(url)) {
+      me.urls = url;
+      me.length = url.length;
+      me.totalTimes = me.length;
+
+      if (me.length === 1) {
+        me.url = url[0];
+      } else {
+        me.index = parseInt(Math.random() * me.length);
+        me.url = url[me.index];
+      }
+    } else {
+      me.totalTimes = 1;
+      me.url = url;
+    }
+
+    if (Util.isArray(url) && !me.isServiceSupportPolling()) {
+      me.url = url[0];
+      me.totalTimes = 1;
+    }
+
+    me.serverType = me.serverType || ServerType.ISERVER;
+    options = options || {};
+    this.crossOrigin = options.crossOrigin;
+    this.headers = options.headers;
+    Util.extend(this, options);
+    me.isInTheSameDomain = Util.isInTheSameDomain(me.url);
+    me.events = new Events(me, null, me.EVENT_TYPES, true);
+
+    if (me.eventListeners instanceof Object) {
+      me.events.on(me.eventListeners);
+    }
+
+    this.CLASS_NAME = "SuperMap.CommonServiceBase";
+  }
+  /**
+   * @function SuperMap.CommonServiceBase.prototype.destroy
+   * @description 释放资源,将引用的资源属性置空。
+   */
+
+
+  CommonServiceBase_createClass(CommonServiceBase, [{
+    key: "destroy",
+    value: function destroy() {
+      var me = this;
+
+      if (Util.isArray(me.urls)) {
+        me.urls = null;
+        me.index = null;
+        me.length = null;
+        me.totalTimes = null;
+      }
+
+      me.url = null;
+      me.options = null;
+      me._processSuccess = null;
+      me._processFailed = null;
+      me.isInTheSameDomain = null;
+      me.EVENT_TYPES = null;
+
+      if (me.events) {
+        me.events.destroy();
+        me.events = null;
+      }
+
+      if (me.eventListeners) {
+        me.eventListeners = null;
+      }
+    }
+    /**
+     * @function  SuperMap.CommonServiceBase.prototype.request
+     * @description: 该方法用于向服务发送请求。
+     * @param {Object} options - 参数。
+     * @param {string} [options.method='GET'] - 请求方式,包括 "GET","POST","PUT","DELETE"。
+     * @param {string} [options.url] - 发送请求的地址。
+     * @param {Object} [options.params] - 作为查询字符串添加到 URL 中的一组键值对,此参数只适用于 GET 方式发送的请求。
+     * @param {string} [options.data] - 发送到服务器的数据。
+     * @param {function} options.success - 请求成功后的回调函数。
+     * @param {function} options.failure - 请求失败后的回调函数。
+     * @param {Object} [options.scope] - 如果回调函数是对象的一个公共方法,设定该对象的范围。
+     * @param {boolean} [options.isInTheSameDomain] - 请求是否在当前域中。
+     * @param {boolean} [options.withCredentials=false] - 请求是否携带 cookie。
+     * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+     * @param {Object} [options.headers] - 请求头。
+     */
+
+  }, {
+    key: "request",
+    value: function request(options) {
+      var me = this;
+      options.url = options.url || me.url;
+      options.proxy = options.proxy || me.proxy;
+      options.withCredentials = options.withCredentials != undefined ? options.withCredentials : me.withCredentials;
+      options.crossOrigin = options.crossOrigin != undefined ? options.crossOrigin : me.crossOrigin;
+      options.headers = options.headers || me.headers;
+      options.isInTheSameDomain = me.isInTheSameDomain; //为url添加安全认证信息片段
+
+      var credential = this.getCredential(options.url);
+
+      if (credential) {
+        options.url = Util.urlAppend(options.url, credential.getUrlParameters());
+      }
+
+      me.calculatePollingTimes();
+      me._processSuccess = options.success;
+      me._processFailed = options.failure;
+      options.scope = me;
+      options.success = me.getUrlCompleted;
+      options.failure = me.getUrlFailed;
+      me.options = options;
+
+      me._commit(me.options);
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getCredential
+     * @description  获取凭据信息
+     * @param {string} url - 服务地址。
+     * @returns {SuperMap.Credential} 凭据信息对象。
+     */
+
+  }, {
+    key: "getCredential",
+    value: function getCredential(url) {
+      var keyUrl = url,
+          credential,
+          value;
+
+      switch (this.serverType) {
+        case ServerType.IPORTAL:
+          value = SecurityManager.getToken(keyUrl);
+          credential = value ? new Credential(value, "token") : null;
+
+          if (!credential) {
+            value = SecurityManager.getKey(keyUrl);
+            credential = value ? new Credential(value, "key") : null;
+          }
+
+          break;
+
+        case ServerType.ONLINE:
+          value = SecurityManager.getKey(keyUrl);
+          credential = value ? new Credential(value, "key") : null;
+          break;
+
+        default:
+          //iServer or others
+          value = SecurityManager.getToken(keyUrl);
+          credential = value ? new Credential(value, "token") : null;
+          break;
+      }
+
+      return credential;
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getUrlCompleted
+     * @description 请求成功后执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+
+  }, {
+    key: "getUrlCompleted",
+    value: function getUrlCompleted(result) {
+      var me = this;
+
+      me._processSuccess(result);
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.getUrlFailed
+     * @description 请求失败后执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+
+  }, {
+    key: "getUrlFailed",
+    value: function getUrlFailed(result) {
+      var me = this;
+
+      if (me.totalTimes > 0) {
+        me.totalTimes--;
+        me.ajaxPolling();
+      } else {
+        me._processFailed(result);
+      }
+    }
+    /**
+     *
+     * @function SuperMap.CommonServiceBase.prototype.ajaxPolling
+     * @description 请求失败后,如果剩余请求失败次数不为 0,重新获取 URL 发送请求
+     */
+
+  }, {
+    key: "ajaxPolling",
+    value: function ajaxPolling() {
+      var me = this,
+          url = me.options.url,
+          re = /^http:\/\/([a-z]{9}|(\d+\.){3}\d+):\d{0,4}/;
+      me.index = parseInt(Math.random() * me.length);
+      me.url = me.urls[me.index];
+      url = url.replace(re, re.exec(me.url)[0]);
+      me.options.url = url;
+      me.options.isInTheSameDomain = Util.isInTheSameDomain(url);
+
+      me._commit(me.options);
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.calculatePollingTimes
+     * @description 计算剩余请求失败执行次数。
+     */
+
+  }, {
+    key: "calculatePollingTimes",
+    value: function calculatePollingTimes() {
+      var me = this;
+
+      if (me.times) {
+        if (me.totalTimes > me.POLLING_TIMES) {
+          if (me.times > me.POLLING_TIMES) {
+            me.totalTimes = me.POLLING_TIMES;
+          } else {
+            me.totalTimes = me.times;
+          }
+        } else {
+          if (me.times < me.totalTimes) {
+            me.totalTimes = me.times;
+          }
+        }
+      } else {
+        if (me.totalTimes > me.POLLING_TIMES) {
+          me.totalTimes = me.POLLING_TIMES;
+        }
+      }
+
+      me.totalTimes--;
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.isServiceSupportPolling
+     * @description 判断服务是否支持轮询。
+     */
+
+  }, {
+    key: "isServiceSupportPolling",
+    value: function isServiceSupportPolling() {
+      var me = this;
+      return !(me.CLASS_NAME === "SuperMap.REST.ThemeService" || me.CLASS_NAME === "SuperMap.REST.EditFeaturesService");
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.serviceProcessCompleted
+     * @description 状态完成,执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+
+  }, {
+    key: "serviceProcessCompleted",
+    value: function serviceProcessCompleted(result) {
+      result = Util.transformResult(result);
+      this.events.triggerEvent("processCompleted", {
+        result: result
+      });
+    }
+    /**
+     * @function SuperMap.CommonServiceBase.prototype.serviceProcessFailed
+     * @description 状态失败,执行此方法。
+     * @param {Object} result - 服务器返回的结果对象。
+     */
+
+  }, {
+    key: "serviceProcessFailed",
+    value: function serviceProcessFailed(result) {
+      result = Util.transformResult(result);
+      var error = result.error || result;
+      this.events.triggerEvent("processFailed", {
+        error: error
+      });
+    }
+  }, {
+    key: "_commit",
+    value: function _commit(options) {
+      if (options.method === "POST" || options.method === "PUT") {
+        if (options.params) {
+          options.url = Util.urlAppend(options.url, Util.getParameterString(options.params || {}));
+        }
+
+        options.params = options.data;
+      }
+
+      FetchRequest.commit(options.method, options.url, options.params, {
+        headers: options.headers,
+        withCredentials: options.withCredentials,
+        crossOrigin: options.crossOrigin,
+        timeout: options.async ? 0 : null,
+        proxy: options.proxy
+      }).then(function (response) {
+        if (response.text) {
+          return response.text();
+        }
+
+        if (response.json) {
+          return response.json();
+        }
+
+        return response;
+      }).then(function (text) {
+        var result = text;
+
+        if (typeof text === "string") {
+          result = new JSONFormat().read(text);
+        }
+
+        if (!result || result.error || result.code >= 300 && result.code !== 304) {
+          if (result && result.error) {
+            result = {
+              error: result.error
+            };
+          } else {
+            result = {
+              error: result
+            };
+          }
+        }
+
+        if (result.error) {
+          var failure = options.scope ? FunctionExt.bind(options.failure, options.scope) : options.failure;
+          failure(result);
+        } else {
+          result.succeed = result.succeed == undefined ? true : result.succeed;
+          var success = options.scope ? FunctionExt.bind(options.success, options.scope) : options.success;
+          success(result);
+        }
+      })["catch"](function (e) {
+        var failure = options.scope ? FunctionExt.bind(options.failure, options.scope) : options.failure;
+        failure(e);
+      });
+    }
+  }]);
+
+  return CommonServiceBase;
+}();
+SuperMap.CommonServiceBase = CommonServiceBase;
+/**
+ * 服务器请求回调函数
+ * @callback RequestCallback
+ * @example
+ * var requestCallback = function (serviceResult){
+ *      console.log(serviceResult.result);
+ * }
+ * new QueryService(url).queryByBounds(param, requestCallback);
+ * @param {Object} serviceResult
+ * @param {Object} serviceResult.result 服务器返回结果。
+ * @param {Object} serviceResult.object 发布应用程序事件的对象。
+ * @param {Object} serviceResult.type 事件类型。
+ * @param {Object} serviceResult.element 接受浏览器事件的 DOM 节点。
+ */
+;// CONCATENATED MODULE: ./src/common/iServer/AddressMatchService.js
+function AddressMatchService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AddressMatchService_typeof = function _typeof(obj) { return typeof obj; }; } else { AddressMatchService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AddressMatchService_typeof(obj); }
+
+function AddressMatchService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function AddressMatchService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function AddressMatchService_createClass(Constructor, protoProps, staticProps) { if (protoProps) AddressMatchService_defineProperties(Constructor.prototype, protoProps); if (staticProps) AddressMatchService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function AddressMatchService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AddressMatchService_get = Reflect.get; } else { AddressMatchService_get = function _get(target, property, receiver) { var base = AddressMatchService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AddressMatchService_get(target, property, receiver || target); }
+
+function AddressMatchService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AddressMatchService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function AddressMatchService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AddressMatchService_setPrototypeOf(subClass, superClass); }
+
+function AddressMatchService_setPrototypeOf(o, p) { AddressMatchService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AddressMatchService_setPrototypeOf(o, p); }
+
+function AddressMatchService_createSuper(Derived) { var hasNativeReflectConstruct = AddressMatchService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AddressMatchService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AddressMatchService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AddressMatchService_possibleConstructorReturn(this, result); }; }
+
+function AddressMatchService_possibleConstructorReturn(self, call) { if (call && (AddressMatchService_typeof(call) === "object" || typeof call === "function")) { return call; } return AddressMatchService_assertThisInitialized(self); }
+
+function AddressMatchService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function AddressMatchService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function AddressMatchService_getPrototypeOf(o) { AddressMatchService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AddressMatchService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.AddressMatchService
+ * @category iServer AddressMatch
+ * @classdesc 地址匹配服务,包括正向匹配和反向匹配。
+ * @param {string} url - 地址匹配服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var AddressMatchService_AddressMatchService = /*#__PURE__*/function (_CommonServiceBase) {
+  AddressMatchService_inherits(AddressMatchService, _CommonServiceBase);
+
+  var _super = AddressMatchService_createSuper(AddressMatchService);
+
+  function AddressMatchService(url, options) {
+    var _this;
+
+    AddressMatchService_classCallCheck(this, AddressMatchService);
+
+    _this = _super.call(this, url, options);
+    _this.options = options || {};
+    _this.CLASS_NAME = 'SuperMap.AddressMatchService';
+    return _this;
+  }
+  /**
+   * @function SuperMap.AddressMatchService.prototype.destroy
+   * @override
+   */
+
+
+  AddressMatchService_createClass(AddressMatchService, [{
+    key: "destroy",
+    value: function destroy() {
+      AddressMatchService_get(AddressMatchService_getPrototypeOf(AddressMatchService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.AddressMatchService.prototype.code
+     * @param {string} url - 正向地址匹配服务地址。
+     * @param {SuperMap.GeoCodingParameter} params - 正向地址匹配服务参数。
+     */
+
+  }, {
+    key: "code",
+    value: function code(url, params) {
+      if (!(params instanceof GeoCodingParameter)) {
+        return;
+      }
+
+      this.processAsync(url, params);
+    }
+    /**
+     * @function SuperMap.AddressMatchService.prototype.decode
+     * @param {string} url - 反向地址匹配服务地址。
+     * @param {SuperMap.GeoDecodingParameter} params - 反向地址匹配服务参数。
+     */
+
+  }, {
+    key: "decode",
+    value: function decode(url, params) {
+      if (!(params instanceof GeoDecodingParameter)) {
+        return;
+      }
+
+      this.processAsync(url, params);
+    }
+    /**
+     * @function SuperMap.AddressMatchService.prototype.processAsync
+     * @description 负责将客户端的动态分段服务参数传递到服务端。
+     * @param {string} url - 服务地址。
+     * @param {Object} params - 参数。
+     */
+
+  }, {
+    key: "processAsync",
+    value: function processAsync(url, params) {
+      this.request({
+        method: 'GET',
+        url: url,
+        params: params,
+        scope: this,
+        success: this.serviceProcessCompleted,
+        failure: this.serviceProcessFailed
+      });
+    }
+    /**
+     * @function SuperMap.AddressMatchService.prototype.serviceProcessCompleted
+     * @param {Object} result - 服务器返回的结果对象。
+     * @description 服务流程是否完成
+     */
+
+  }, {
+    key: "serviceProcessCompleted",
+    value: function serviceProcessCompleted(result) {
+      if (result.succeed) {
+        delete result.succeed;
+      }
+
+      AddressMatchService_get(AddressMatchService_getPrototypeOf(AddressMatchService.prototype), "serviceProcessCompleted", this).call(this, result);
+    }
+    /**
+     * @function SuperMap.AddressMatchService.prototype.serviceProcessCompleted
+     * @param {Object} result - 服务器返回的结果对象。
+     * @description 服务流程是否失败
+     */
+
+  }, {
+    key: "serviceProcessFailed",
+    value: function serviceProcessFailed(result) {
+      AddressMatchService_get(AddressMatchService_getPrototypeOf(AddressMatchService.prototype), "serviceProcessFailed", this).call(this, result);
+    }
+  }]);
+
+  return AddressMatchService;
+}(CommonServiceBase);
+SuperMap.AddressMatchService = AddressMatchService_AddressMatchService;
+;// CONCATENATED MODULE: ./src/classic/services/AddressMatchService.js
+function services_AddressMatchService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { services_AddressMatchService_typeof = function _typeof(obj) { return typeof obj; }; } else { services_AddressMatchService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return services_AddressMatchService_typeof(obj); }
+
+function services_AddressMatchService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function services_AddressMatchService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function services_AddressMatchService_createClass(Constructor, protoProps, staticProps) { if (protoProps) services_AddressMatchService_defineProperties(Constructor.prototype, protoProps); if (staticProps) services_AddressMatchService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function services_AddressMatchService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) services_AddressMatchService_setPrototypeOf(subClass, superClass); }
+
+function services_AddressMatchService_setPrototypeOf(o, p) { services_AddressMatchService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return services_AddressMatchService_setPrototypeOf(o, p); }
+
+function services_AddressMatchService_createSuper(Derived) { var hasNativeReflectConstruct = services_AddressMatchService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = services_AddressMatchService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = services_AddressMatchService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return services_AddressMatchService_possibleConstructorReturn(this, result); }; }
+
+function services_AddressMatchService_possibleConstructorReturn(self, call) { if (call && (services_AddressMatchService_typeof(call) === "object" || typeof call === "function")) { return call; } return services_AddressMatchService_assertThisInitialized(self); }
+
+function services_AddressMatchService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function services_AddressMatchService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function services_AddressMatchService_getPrototypeOf(o) { services_AddressMatchService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return services_AddressMatchService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+/**
+ * @class SuperMap.REST.AddressMatchService
+ * @category  iServer AddressMatch
+ * @classdesc 地址匹配服务,包括正向匹配和反向匹配。
+ * @extends {SuperMap.CommonServiceBase}
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var AddressMatchService = /*#__PURE__*/function (_CommonServiceBase) {
+  services_AddressMatchService_inherits(AddressMatchService, _CommonServiceBase);
+
+  var _super = services_AddressMatchService_createSuper(AddressMatchService);
+
+  function AddressMatchService(url, options) {
+    var _this;
+
+    services_AddressMatchService_classCallCheck(this, AddressMatchService);
+
+    _this = _super.call(this, url, options);
+    _this.CLASS_NAME = "SuperMap.REST.AddressMatchService";
+    return _this;
+  }
+  /**
+   * @function SuperMap.REST.AddressMatchService.prototype.code
+   * @description 正向匹配。
+   * @param {SuperMap.GeoCodingParameter} params - 正向匹配参数。
+   * @param {RequestCallback} callback - 回调函数。
+   */
+
+
+  services_AddressMatchService_createClass(AddressMatchService, [{
+    key: "code",
+    value: function code(params, callback) {
+      var me = this;
+      var addressMatchService = new AddressMatchService_AddressMatchService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        }
+      });
+      addressMatchService.code(me.url + '/geocoding', params);
+    }
+    /**
+     * @function SuperMap.REST.AddressMatchService.prototype.decode
+     * @description 反向匹配。
+     * @param {SuperMap.GeoDecodingParameter} params - 反向匹配参数。
+     * @param {RequestCallback} callback - 回调函数。
+     */
+
+  }, {
+    key: "decode",
+    value: function decode(params, callback) {
+      var me = this;
+      var addressMatchService = new AddressMatchService_AddressMatchService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        }
+      });
+      addressMatchService.decode(me.url + '/geodecoding', params);
+    }
+  }]);
+
+  return AddressMatchService;
+}(CommonServiceBase);
+SuperMap_SuperMap.REST.AddressMatchService = AddressMatchService;
+;// CONCATENATED MODULE: ./src/common/iServer/ProcessingServiceBase.js
+function ProcessingServiceBase_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ProcessingServiceBase_typeof = function _typeof(obj) { return typeof obj; }; } else { ProcessingServiceBase_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ProcessingServiceBase_typeof(obj); }
+
+function ProcessingServiceBase_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function ProcessingServiceBase_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function ProcessingServiceBase_createClass(Constructor, protoProps, staticProps) { if (protoProps) ProcessingServiceBase_defineProperties(Constructor.prototype, protoProps); if (staticProps) ProcessingServiceBase_defineProperties(Constructor, staticProps); return Constructor; }
+
+function ProcessingServiceBase_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ProcessingServiceBase_get = Reflect.get; } else { ProcessingServiceBase_get = function _get(target, property, receiver) { var base = ProcessingServiceBase_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ProcessingServiceBase_get(target, property, receiver || target); }
+
+function ProcessingServiceBase_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ProcessingServiceBase_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function ProcessingServiceBase_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ProcessingServiceBase_setPrototypeOf(subClass, superClass); }
+
+function ProcessingServiceBase_setPrototypeOf(o, p) { ProcessingServiceBase_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ProcessingServiceBase_setPrototypeOf(o, p); }
+
+function ProcessingServiceBase_createSuper(Derived) { var hasNativeReflectConstruct = ProcessingServiceBase_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ProcessingServiceBase_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ProcessingServiceBase_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ProcessingServiceBase_possibleConstructorReturn(this, result); }; }
+
+function ProcessingServiceBase_possibleConstructorReturn(self, call) { if (call && (ProcessingServiceBase_typeof(call) === "object" || typeof call === "function")) { return call; } return ProcessingServiceBase_assertThisInitialized(self); }
+
+function ProcessingServiceBase_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function ProcessingServiceBase_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function ProcessingServiceBase_getPrototypeOf(o) { ProcessingServiceBase_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ProcessingServiceBase_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.ProcessingServiceBase
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析服务基类
+ * @extends {SuperMap.CommonServiceBase}
+ * @param {string} url - 分布式分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。
+ * @param {number} options.index - 服务访问地址在数组中的位置。
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var ProcessingServiceBase = /*#__PURE__*/function (_CommonServiceBase) {
+  ProcessingServiceBase_inherits(ProcessingServiceBase, _CommonServiceBase);
+
+  var _super = ProcessingServiceBase_createSuper(ProcessingServiceBase);
+
+  function ProcessingServiceBase(url, options) {
+    var _this;
+
+    ProcessingServiceBase_classCallCheck(this, ProcessingServiceBase);
+
+    options = options || {};
+    /*
+     * Constant: EVENT_TYPES
+     * {Array.<string>}
+     * 此类支持的事件类型
+     * - *processCompleted* 创建成功后触发的事件。
+     * - *processFailed* 创建失败后触发的事件 。
+     * - *processRunning* 创建过程的整个阶段都会触发的事件,用于获取创建过程的状态 。
+     */
+
+    options.EVENT_TYPES = ["processCompleted", "processFailed", "processRunning"];
+    _this = _super.call(this, url, options);
+    _this.CLASS_NAME = "SuperMap.ProcessingServiceBase";
+    return _this;
+  }
+  /**
+   * @function SuperMap.ProcessingServiceBase.prototype.destroy
+   * @override
+   */
+
+
+  ProcessingServiceBase_createClass(ProcessingServiceBase, [{
+    key: "destroy",
+    value: function destroy() {
+      ProcessingServiceBase_get(ProcessingServiceBase_getPrototypeOf(ProcessingServiceBase.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.ProcessingServiceBase.prototype.getJobs
+     * @description 获取分布式分析任务。
+     * @param {string} url - 资源地址。
+     */
+
+  }, {
+    key: "getJobs",
+    value: function getJobs(url) {
+      var me = this;
+      FetchRequest.get(me._processUrl(url), null, {
+        proxy: me.proxy
+      }).then(function (response) {
+        return response.json();
+      }).then(function (result) {
+        me.events.triggerEvent("processCompleted", {
+          result: result
+        });
+      })["catch"](function (e) {
+        me.eventListeners.processFailed({
+          error: e
+        });
+      });
+    }
+    /**
+     * @function SuperMap.ProcessingServiceBase.prototype.addJob
+     * @description 添加分布式分析任务。
+     * @param {string} url - 资源根地址。
+     * @param {Object} params - 创建一个空间分析的请求参数。
+     * @param {string} paramType - 请求参数类型。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addJob",
+    value: function addJob(url, params, paramType, seconds) {
+      var me = this,
+          parameterObject = null;
+
+      if (params && params instanceof paramType) {
+        parameterObject = new Object();
+        paramType.toObject(params, parameterObject);
+      }
+
+      var headers = Object.assign({
+        'Content-Type': 'application/x-www-form-urlencoded'
+      }, me.headers || {});
+      var options = {
+        proxy: me.proxy,
+        headers: headers,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        isInTheSameDomain: me.isInTheSameDomain
+      };
+      FetchRequest.post(me._processUrl(url), JSON.stringify(parameterObject), options).then(function (response) {
+        return response.json();
+      }).then(function (result) {
+        if (result.succeed) {
+          me.serviceProcessCompleted(result, seconds);
+        } else {
+          me.serviceProcessFailed(result);
+        }
+      })["catch"](function (e) {
+        me.serviceProcessFailed({
+          error: e
+        });
+      });
+    }
+  }, {
+    key: "serviceProcessCompleted",
+    value: function serviceProcessCompleted(result, seconds) {
+      result = Util.transformResult(result);
+      seconds = seconds || 1000;
+      var me = this;
+
+      if (result) {
+        var id = setInterval(function () {
+          FetchRequest.get(me._processUrl(result.newResourceLocation), {
+            _t: new Date().getTime()
+          }).then(function (response) {
+            return response.json();
+          }).then(function (job) {
+            me.events.triggerEvent("processRunning", {
+              id: job.id,
+              state: job.state
+            });
+
+            if (job.state.runState === 'LOST' || job.state.runState === 'KILLED' || job.state.runState === 'FAILED') {
+              clearInterval(id);
+              me.events.triggerEvent("processFailed", {
+                error: job.state.errorMsg,
+                state: job.state.runState
+              });
+            }
+
+            if (job.state.runState === 'FINISHED' && job.setting.serviceInfo) {
+              clearInterval(id);
+              me.events.triggerEvent("processCompleted", {
+                result: job
+              });
+            }
+          })["catch"](function (e) {
+            clearInterval(id);
+            me.events.triggerEvent("processFailed", {
+              error: e
+            });
+          });
+        }, seconds);
+      }
+    }
+  }, {
+    key: "serviceProcessFailed",
+    value: function serviceProcessFailed(result) {
+      ProcessingServiceBase_get(ProcessingServiceBase_getPrototypeOf(ProcessingServiceBase.prototype), "serviceProcessFailed", this).call(this, result);
+    }
+  }, {
+    key: "_processUrl",
+    value: function _processUrl(url) {
+      if (SecurityManager.getToken(url)) {
+        url = Util.urlAppend(url, 'token=' + SecurityManager.getToken(url));
+      }
+
+      return url;
+    }
+  }]);
+
+  return ProcessingServiceBase;
+}(CommonServiceBase);
+SuperMap.ProcessingServiceBase = ProcessingServiceBase;
+;// CONCATENATED MODULE: ./src/common/iServer/KernelDensityJobsService.js
+function KernelDensityJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { KernelDensityJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { KernelDensityJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return KernelDensityJobsService_typeof(obj); }
+
+function KernelDensityJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function KernelDensityJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function KernelDensityJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) KernelDensityJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) KernelDensityJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function KernelDensityJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { KernelDensityJobsService_get = Reflect.get; } else { KernelDensityJobsService_get = function _get(target, property, receiver) { var base = KernelDensityJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return KernelDensityJobsService_get(target, property, receiver || target); }
+
+function KernelDensityJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = KernelDensityJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function KernelDensityJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) KernelDensityJobsService_setPrototypeOf(subClass, superClass); }
+
+function KernelDensityJobsService_setPrototypeOf(o, p) { KernelDensityJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return KernelDensityJobsService_setPrototypeOf(o, p); }
+
+function KernelDensityJobsService_createSuper(Derived) { var hasNativeReflectConstruct = KernelDensityJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = KernelDensityJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = KernelDensityJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return KernelDensityJobsService_possibleConstructorReturn(this, result); }; }
+
+function KernelDensityJobsService_possibleConstructorReturn(self, call) { if (call && (KernelDensityJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return KernelDensityJobsService_assertThisInitialized(self); }
+
+function KernelDensityJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function KernelDensityJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function KernelDensityJobsService_getPrototypeOf(o) { KernelDensityJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return KernelDensityJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.KernelDensityJobsService
+ * @category  iServer ProcessingService DensityAnalyst
+ * @classdesc 核密度分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url -核密度分析服务地址。
+ * @param {Object} options - 交互服务时所需可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var KernelDensityJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  KernelDensityJobsService_inherits(KernelDensityJobsService, _ProcessingServiceBas);
+
+  var _super = KernelDensityJobsService_createSuper(KernelDensityJobsService);
+
+  function KernelDensityJobsService(url, options) {
+    var _this;
+
+    KernelDensityJobsService_classCallCheck(this, KernelDensityJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/density');
+    _this.CLASS_NAME = "SuperMap.KernelDensityJobsService";
+    return _this;
+  }
+  /**
+   * @function SuperMap.KernelDensityJobsService.prototype.destroy
+   * @override
+   */
+
+
+  KernelDensityJobsService_createClass(KernelDensityJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      KernelDensityJobsService_get(KernelDensityJobsService_getPrototypeOf(KernelDensityJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.getKernelDensityJobs
+     * @description 获取核密度分析任务
+     */
+
+  }, {
+    key: "getKernelDensityJobs",
+    value: function getKernelDensityJobs() {
+      KernelDensityJobsService_get(KernelDensityJobsService_getPrototypeOf(KernelDensityJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.getKernelDensityJobs
+     * @description 获取指定id的核密度分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getKernelDensityJob",
+    value: function getKernelDensityJob(id) {
+      KernelDensityJobsService_get(KernelDensityJobsService_getPrototypeOf(KernelDensityJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.KernelDensityJobsService.prototype.addKernelDensityJob
+     * @description 新建核密度分析服务
+     * @param {SuperMap.KernelDensityJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addKernelDensityJob",
+    value: function addKernelDensityJob(params, seconds) {
+      KernelDensityJobsService_get(KernelDensityJobsService_getPrototypeOf(KernelDensityJobsService.prototype), "addJob", this).call(this, this.url, params, KernelDensityJobParameter, seconds);
+    }
+  }]);
+
+  return KernelDensityJobsService;
+}(ProcessingServiceBase);
+SuperMap.KernelDensityJobsService = KernelDensityJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SingleObjectQueryJobsService.js
+function SingleObjectQueryJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleObjectQueryJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleObjectQueryJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleObjectQueryJobsService_typeof(obj); }
+
+function SingleObjectQueryJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SingleObjectQueryJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SingleObjectQueryJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleObjectQueryJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleObjectQueryJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function SingleObjectQueryJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleObjectQueryJobsService_get = Reflect.get; } else { SingleObjectQueryJobsService_get = function _get(target, property, receiver) { var base = SingleObjectQueryJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleObjectQueryJobsService_get(target, property, receiver || target); }
+
+function SingleObjectQueryJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = SingleObjectQueryJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function SingleObjectQueryJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleObjectQueryJobsService_setPrototypeOf(subClass, superClass); }
+
+function SingleObjectQueryJobsService_setPrototypeOf(o, p) { SingleObjectQueryJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleObjectQueryJobsService_setPrototypeOf(o, p); }
+
+function SingleObjectQueryJobsService_createSuper(Derived) { var hasNativeReflectConstruct = SingleObjectQueryJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleObjectQueryJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleObjectQueryJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleObjectQueryJobsService_possibleConstructorReturn(this, result); }; }
+
+function SingleObjectQueryJobsService_possibleConstructorReturn(self, call) { if (call && (SingleObjectQueryJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleObjectQueryJobsService_assertThisInitialized(self); }
+
+function SingleObjectQueryJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function SingleObjectQueryJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function SingleObjectQueryJobsService_getPrototypeOf(o) { SingleObjectQueryJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleObjectQueryJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.SingleObjectQueryJobsService
+ * @category  iServer ProcessingService Query
+ * @classdesc 单对象查询分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 单对象空间查询分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var SingleObjectQueryJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  SingleObjectQueryJobsService_inherits(SingleObjectQueryJobsService, _ProcessingServiceBas);
+
+  var _super = SingleObjectQueryJobsService_createSuper(SingleObjectQueryJobsService);
+
+  function SingleObjectQueryJobsService(url, options) {
+    var _this;
+
+    SingleObjectQueryJobsService_classCallCheck(this, SingleObjectQueryJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/query');
+    _this.CLASS_NAME = 'SuperMap.SingleObjectQueryJobsService';
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  SingleObjectQueryJobsService_createClass(SingleObjectQueryJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      SingleObjectQueryJobsService_get(SingleObjectQueryJobsService_getPrototypeOf(SingleObjectQueryJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.SingleObjectQueryJobsService.protitype.getQueryJobs
+     * @description 获取单对象空间查询分析所有任务
+     */
+
+  }, {
+    key: "getQueryJobs",
+    value: function getQueryJobs() {
+      SingleObjectQueryJobsService_get(SingleObjectQueryJobsService_getPrototypeOf(SingleObjectQueryJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.KernelDensityJobsService.protitype.getQueryJob
+     * @description 获取指定id的单对象空间查询分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getQueryJob",
+    value: function getQueryJob(id) {
+      SingleObjectQueryJobsService_get(SingleObjectQueryJobsService_getPrototypeOf(SingleObjectQueryJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.SingleObjectQueryJobsService.protitype.addQueryJob
+     * @description 新建单对象空间查询分析服务
+     * @param {SuperMap.SingleObjectQueryJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addQueryJob",
+    value: function addQueryJob(params, seconds) {
+      SingleObjectQueryJobsService_get(SingleObjectQueryJobsService_getPrototypeOf(SingleObjectQueryJobsService.prototype), "addJob", this).call(this, this.url, params, SingleObjectQueryJobsParameter, seconds);
+    }
+  }]);
+
+  return SingleObjectQueryJobsService;
+}(ProcessingServiceBase);
+SuperMap.SingleObjectQueryJobsService = SingleObjectQueryJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryMeshJobsService.js
+function SummaryMeshJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SummaryMeshJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { SummaryMeshJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SummaryMeshJobsService_typeof(obj); }
+
+function SummaryMeshJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryMeshJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryMeshJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryMeshJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryMeshJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function SummaryMeshJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SummaryMeshJobsService_get = Reflect.get; } else { SummaryMeshJobsService_get = function _get(target, property, receiver) { var base = SummaryMeshJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SummaryMeshJobsService_get(target, property, receiver || target); }
+
+function SummaryMeshJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = SummaryMeshJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function SummaryMeshJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SummaryMeshJobsService_setPrototypeOf(subClass, superClass); }
+
+function SummaryMeshJobsService_setPrototypeOf(o, p) { SummaryMeshJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SummaryMeshJobsService_setPrototypeOf(o, p); }
+
+function SummaryMeshJobsService_createSuper(Derived) { var hasNativeReflectConstruct = SummaryMeshJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SummaryMeshJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SummaryMeshJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SummaryMeshJobsService_possibleConstructorReturn(this, result); }; }
+
+function SummaryMeshJobsService_possibleConstructorReturn(self, call) { if (call && (SummaryMeshJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return SummaryMeshJobsService_assertThisInitialized(self); }
+
+function SummaryMeshJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function SummaryMeshJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function SummaryMeshJobsService_getPrototypeOf(o) { SummaryMeshJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SummaryMeshJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.SummaryMeshJobsService
+ * @category  iServer ProcessingService AggregatePoints
+ * @classdesc 点聚合分析任务类。
+ * @param {string} url -点聚合分析任务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。<br>
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {number} options.index - 服务访问地址在数组中的位置。<br>
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var SummaryMeshJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  SummaryMeshJobsService_inherits(SummaryMeshJobsService, _ProcessingServiceBas);
+
+  var _super = SummaryMeshJobsService_createSuper(SummaryMeshJobsService);
+
+  function SummaryMeshJobsService(url, options) {
+    var _this;
+
+    SummaryMeshJobsService_classCallCheck(this, SummaryMeshJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/aggregatepoints');
+    _this.CLASS_NAME = 'SuperMap.SummaryMeshJobsService';
+    return _this;
+  }
+  /**
+   * @override
+   */
+
+
+  SummaryMeshJobsService_createClass(SummaryMeshJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      SummaryMeshJobsService_get(SummaryMeshJobsService_getPrototypeOf(SummaryMeshJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.getSummaryMeshJobs
+     * @description 获取点聚合分析任务
+     */
+
+  }, {
+    key: "getSummaryMeshJobs",
+    value: function getSummaryMeshJobs() {
+      SummaryMeshJobsService_get(SummaryMeshJobsService_getPrototypeOf(SummaryMeshJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.getSummaryMeshJob
+     * @description 获取指定ip的点聚合分析任务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getSummaryMeshJob",
+    value: function getSummaryMeshJob(id) {
+      SummaryMeshJobsService_get(SummaryMeshJobsService_getPrototypeOf(SummaryMeshJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.SummaryMeshJobsService.prototype.addSummaryMeshJob
+     * @description 新建点聚合分析服务
+     * @param {SuperMap.SummaryMeshJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addSummaryMeshJob",
+    value: function addSummaryMeshJob(params, seconds) {
+      SummaryMeshJobsService_get(SummaryMeshJobsService_getPrototypeOf(SummaryMeshJobsService.prototype), "addJob", this).call(this, this.url, params, SummaryMeshJobParameter, seconds);
+    }
+  }]);
+
+  return SummaryMeshJobsService;
+}(ProcessingServiceBase);
+SuperMap.SummaryMeshJobsService = SummaryMeshJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryRegionJobsService.js
+function SummaryRegionJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SummaryRegionJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { SummaryRegionJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SummaryRegionJobsService_typeof(obj); }
+
+function SummaryRegionJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryRegionJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryRegionJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryRegionJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryRegionJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function SummaryRegionJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SummaryRegionJobsService_get = Reflect.get; } else { SummaryRegionJobsService_get = function _get(target, property, receiver) { var base = SummaryRegionJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SummaryRegionJobsService_get(target, property, receiver || target); }
+
+function SummaryRegionJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = SummaryRegionJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function SummaryRegionJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SummaryRegionJobsService_setPrototypeOf(subClass, superClass); }
+
+function SummaryRegionJobsService_setPrototypeOf(o, p) { SummaryRegionJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SummaryRegionJobsService_setPrototypeOf(o, p); }
+
+function SummaryRegionJobsService_createSuper(Derived) { var hasNativeReflectConstruct = SummaryRegionJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SummaryRegionJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SummaryRegionJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SummaryRegionJobsService_possibleConstructorReturn(this, result); }; }
+
+function SummaryRegionJobsService_possibleConstructorReturn(self, call) { if (call && (SummaryRegionJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return SummaryRegionJobsService_assertThisInitialized(self); }
+
+function SummaryRegionJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function SummaryRegionJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function SummaryRegionJobsService_getPrototypeOf(o) { SummaryRegionJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SummaryRegionJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.SummaryRegionJobsService
+ * @category  iServer ProcessingService SummaryRegion
+ * @classdesc 区域汇总分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 区域汇总分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var SummaryRegionJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  SummaryRegionJobsService_inherits(SummaryRegionJobsService, _ProcessingServiceBas);
+
+  var _super = SummaryRegionJobsService_createSuper(SummaryRegionJobsService);
+
+  function SummaryRegionJobsService(url, options) {
+    var _this;
+
+    SummaryRegionJobsService_classCallCheck(this, SummaryRegionJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/summaryregion');
+    _this.CLASS_NAME = 'SuperMap.SummaryRegionJobsService';
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  SummaryRegionJobsService_createClass(SummaryRegionJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      SummaryRegionJobsService_get(SummaryRegionJobsService_getPrototypeOf(SummaryRegionJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.getSummaryRegionJobs
+     * @description 获取区域汇总分析任务集合。
+     */
+
+  }, {
+    key: "getSummaryRegionJobs",
+    value: function getSummaryRegionJobs() {
+      SummaryRegionJobsService_get(SummaryRegionJobsService_getPrototypeOf(SummaryRegionJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.getSummaryRegionJob
+     * @description 获取指定id的区域汇总分析任务。
+     * @param {string} id -要获取区域汇总分析任务的id
+     */
+
+  }, {
+    key: "getSummaryRegionJob",
+    value: function getSummaryRegionJob(id) {
+      SummaryRegionJobsService_get(SummaryRegionJobsService_getPrototypeOf(SummaryRegionJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.SummaryRegionJobsService.prototype.addSummaryRegionJob
+     * @description 新建区域汇总任务。
+     * @param {SuperMap.SummaryRegionJobParameter} params - 创建一个区域汇总任务的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addSummaryRegionJob",
+    value: function addSummaryRegionJob(params, seconds) {
+      SummaryRegionJobsService_get(SummaryRegionJobsService_getPrototypeOf(SummaryRegionJobsService.prototype), "addJob", this).call(this, this.url, params, SummaryRegionJobParameter, seconds);
+    }
+  }]);
+
+  return SummaryRegionJobsService;
+}(ProcessingServiceBase);
+SuperMap.SummaryRegionJobsService = SummaryRegionJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/VectorClipJobsParameter.js
+function VectorClipJobsParameter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function VectorClipJobsParameter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function VectorClipJobsParameter_createClass(Constructor, protoProps, staticProps) { if (protoProps) VectorClipJobsParameter_defineProperties(Constructor.prototype, protoProps); if (staticProps) VectorClipJobsParameter_defineProperties(Constructor, staticProps); return Constructor; }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+/**
+ * @class SuperMap.VectorClipJobsParameter
+ * @category  iServer ProcessingService VectorClip
+ * @classdesc 矢量裁剪分析任务参数类。
+ * @param {Object} options - 参数。 
+ * @param {string} options.datasetName - 数据集名。 
+ * @param {string} options.datasetOverlay - 裁剪对象数据集。 
+ * @param {SuperMap.ClipAnalystMode} [options.mode=SuperMap.ClipAnalystMode.CLIP] - 裁剪分析模式。 
+ * @param {SuperMap.OutputSetting} [options.output] - 输出参数设置。 
+ * @param {SuperMap.MappingParameters} [options.mappingParameters] - 分析后结果可视化的参数类。   
+ */
+
+var VectorClipJobsParameter = /*#__PURE__*/function () {
+  function VectorClipJobsParameter(options) {
+    VectorClipJobsParameter_classCallCheck(this, VectorClipJobsParameter);
+
+    options = options || {};
+    /**
+     * @member {string} SuperMap.VectorClipJobsParameter.prototype.datasetName
+     * @description 数据集名。
+     */
+
+    this.datasetName = "";
+    /**
+     * @member {string} SuperMap.VectorClipJobsParameter.prototype.datasetOverlay
+     * @description 裁剪对象数据集。
+     */
+
+    this.datasetVectorClip = "";
+    /**
+     * @member {string} SuperMap.VectorClipJobsParameter.prototype.geometryClip
+     * @description 裁剪几何对象。
+     */
+
+    this.geometryClip = "";
+    /**
+     * @member {SuperMap.ClipAnalystMode} [SuperMap.VectorClipJobsParameter.prototype.mode=ClipAnalystMode.CLIP]
+     * @description 裁剪分析模式 。
+     */
+
+    this.mode = ClipAnalystMode.CLIP;
+    /**
+     * @member {SuperMap.OutputSetting} SuperMap.VectorClipJobsParameter.prototype.output
+     * @description 输出参数设置类。
+     */
+
+    this.output = null;
+    /**
+     * @member {SuperMap.MappingParameters} [SuperMap.VectorClipJobsParameter.prototype.mappingParameters]
+     * @description 分析后结果可视化的参数类。   
+     */
+
+    this.mappingParameters = null;
+    Util.extend(this, options);
+    this.CLASS_NAME = "SuperMap.VectorClipJobsParameter";
+  }
+  /**
+   * @function SuperMap.VectorClipJobsParameter.prototype.destroy
+   * @description 释放资源,将引用资源的属性置空。
+   */
+
+
+  VectorClipJobsParameter_createClass(VectorClipJobsParameter, [{
+    key: "destroy",
+    value: function destroy() {
+      this.datasetName = null;
+      this.datasetVectorClip = null;
+      this.geometryClip = null;
+      this.mode = null;
+
+      if (this.output instanceof OutputSetting) {
+        this.output.destroy();
+        this.output = null;
+      }
+
+      if (this.mappingParameters instanceof MappingParameters) {
+        this.mappingParameters.destroy();
+        this.mappingParameters = null;
+      }
+    }
+    /**
+     * @function SuperMap.VectorClipJobsParameter.toObject
+     * @param {Object} vectorClipJobsParameter - 区域汇总分析服务参数。
+     * @param {Object} tempObj - 目标对象。
+     * @description 矢量裁剪分析任务对象。
+     */
+
+  }], [{
+    key: "toObject",
+    value: function toObject(vectorClipJobsParameter, tempObj) {
+      for (var name in vectorClipJobsParameter) {
+        if (name === "datasetName") {
+          tempObj['input'] = tempObj['input'] || {};
+          tempObj['input'][name] = vectorClipJobsParameter[name];
+          continue;
+        }
+
+        if (name === "output") {
+          tempObj['output'] = tempObj['output'] || {};
+          tempObj['output'] = vectorClipJobsParameter[name];
+          continue;
+        }
+
+        tempObj['analyst'] = tempObj['analyst'] || {};
+        tempObj['analyst'][name] = vectorClipJobsParameter[name];
+
+        if (name === 'mappingParameters') {
+          tempObj['analyst'][name] = tempObj['analyst'][name] || {};
+          tempObj['analyst']['mappingParameters'] = vectorClipJobsParameter[name];
+        }
+      }
+    }
+  }]);
+
+  return VectorClipJobsParameter;
+}();
+SuperMap.VectorClipJobsParameter = VectorClipJobsParameter;
+;// CONCATENATED MODULE: ./src/common/iServer/VectorClipJobsService.js
+function VectorClipJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { VectorClipJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { VectorClipJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return VectorClipJobsService_typeof(obj); }
+
+function VectorClipJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function VectorClipJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function VectorClipJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) VectorClipJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) VectorClipJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function VectorClipJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { VectorClipJobsService_get = Reflect.get; } else { VectorClipJobsService_get = function _get(target, property, receiver) { var base = VectorClipJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return VectorClipJobsService_get(target, property, receiver || target); }
+
+function VectorClipJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = VectorClipJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function VectorClipJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) VectorClipJobsService_setPrototypeOf(subClass, superClass); }
+
+function VectorClipJobsService_setPrototypeOf(o, p) { VectorClipJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return VectorClipJobsService_setPrototypeOf(o, p); }
+
+function VectorClipJobsService_createSuper(Derived) { var hasNativeReflectConstruct = VectorClipJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = VectorClipJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = VectorClipJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return VectorClipJobsService_possibleConstructorReturn(this, result); }; }
+
+function VectorClipJobsService_possibleConstructorReturn(self, call) { if (call && (VectorClipJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return VectorClipJobsService_assertThisInitialized(self); }
+
+function VectorClipJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function VectorClipJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function VectorClipJobsService_getPrototypeOf(o) { VectorClipJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return VectorClipJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.VectorClipJobsService
+ * @category  iServer ProcessingService VectorClip
+ * @classdesc 矢量裁剪分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url -矢量裁剪分析服务地址。
+ * @param {Object} options - 交互服务时所需可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var VectorClipJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  VectorClipJobsService_inherits(VectorClipJobsService, _ProcessingServiceBas);
+
+  var _super = VectorClipJobsService_createSuper(VectorClipJobsService);
+
+  function VectorClipJobsService(url, options) {
+    var _this;
+
+    VectorClipJobsService_classCallCheck(this, VectorClipJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/vectorclip');
+    _this.CLASS_NAME = 'SuperMap.VectorClipJobsService';
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  VectorClipJobsService_createClass(VectorClipJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      VectorClipJobsService_get(VectorClipJobsService_getPrototypeOf(VectorClipJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.VectorClipJobsService.protitype.getVectorClipJobs
+     * @description 获取矢量裁剪分析所有任务
+     */
+
+  }, {
+    key: "getVectorClipJobs",
+    value: function getVectorClipJobs() {
+      VectorClipJobsService_get(VectorClipJobsService_getPrototypeOf(VectorClipJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.KernelDensityJobsService.protitype.getVectorClipJob
+     * @description 获取指定id的矢量裁剪分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getVectorClipJob",
+    value: function getVectorClipJob(id) {
+      VectorClipJobsService_get(VectorClipJobsService_getPrototypeOf(VectorClipJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.VectorClipJobsService.protitype.addVectorClipJob
+     * @description 新建矢量裁剪分析服务
+     * @param {SuperMap.VectorClipJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addVectorClipJob",
+    value: function addVectorClipJob(params, seconds) {
+      VectorClipJobsService_get(VectorClipJobsService_getPrototypeOf(VectorClipJobsService.prototype), "addJob", this).call(this, this.url, params, VectorClipJobsParameter, seconds);
+    }
+  }]);
+
+  return VectorClipJobsService;
+}(ProcessingServiceBase);
+SuperMap.VectorClipJobsService = VectorClipJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/OverlayGeoJobsService.js
+function OverlayGeoJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { OverlayGeoJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { OverlayGeoJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return OverlayGeoJobsService_typeof(obj); }
+
+function OverlayGeoJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function OverlayGeoJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function OverlayGeoJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) OverlayGeoJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) OverlayGeoJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function OverlayGeoJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { OverlayGeoJobsService_get = Reflect.get; } else { OverlayGeoJobsService_get = function _get(target, property, receiver) { var base = OverlayGeoJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return OverlayGeoJobsService_get(target, property, receiver || target); }
+
+function OverlayGeoJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = OverlayGeoJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function OverlayGeoJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) OverlayGeoJobsService_setPrototypeOf(subClass, superClass); }
+
+function OverlayGeoJobsService_setPrototypeOf(o, p) { OverlayGeoJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return OverlayGeoJobsService_setPrototypeOf(o, p); }
+
+function OverlayGeoJobsService_createSuper(Derived) { var hasNativeReflectConstruct = OverlayGeoJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = OverlayGeoJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = OverlayGeoJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return OverlayGeoJobsService_possibleConstructorReturn(this, result); }; }
+
+function OverlayGeoJobsService_possibleConstructorReturn(self, call) { if (call && (OverlayGeoJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return OverlayGeoJobsService_assertThisInitialized(self); }
+
+function OverlayGeoJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function OverlayGeoJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function OverlayGeoJobsService_getPrototypeOf(o) { OverlayGeoJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return OverlayGeoJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.OverlayGeoJobsService
+ * @category iServer ProcessingService OverlayAnalyst
+ * @classdesc 叠加分析任务类。
+ * @param {string} url - 叠加分析任务地址。
+ * @param {Object} options - 参数。
+ * @param {SuperMap.Events} options.events - 处理所有事件的对象。
+ * @param {SuperMap.ServerType} [options.serverType=SuperMap.ServerType.ISERVER] - 服务器类型,ISERVER|IPORTAL|ONLINE。
+ * @param {Object} [options.eventListeners] - 事件监听器对象。有 processCompleted 属性可传入处理完成后的回调函数。processFailed 属性传入处理失败后的回调函数。
+ * @param {number} options.index - 服务访问地址在数组中的位置。
+ * @param {number} options.length - 服务访问地址数组长度。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var OverlayGeoJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  OverlayGeoJobsService_inherits(OverlayGeoJobsService, _ProcessingServiceBas);
+
+  var _super = OverlayGeoJobsService_createSuper(OverlayGeoJobsService);
+
+  function OverlayGeoJobsService(url, options) {
+    var _this;
+
+    OverlayGeoJobsService_classCallCheck(this, OverlayGeoJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/overlay');
+    _this.CLASS_NAME = 'SuperMap.OverlayGeoJobsService';
+    return _this;
+  }
+  /**
+   * @override
+   */
+
+
+  OverlayGeoJobsService_createClass(OverlayGeoJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      OverlayGeoJobsService_get(OverlayGeoJobsService_getPrototypeOf(OverlayGeoJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.getOverlayGeoJobs
+     * @description 获取叠加分析任务
+     */
+
+  }, {
+    key: "getOverlayGeoJobs",
+    value: function getOverlayGeoJobs() {
+      OverlayGeoJobsService_get(OverlayGeoJobsService_getPrototypeOf(OverlayGeoJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.getOverlayGeoJob
+     * @description 获取指定id的叠加分析任务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getOverlayGeoJob",
+    value: function getOverlayGeoJob(id) {
+      OverlayGeoJobsService_get(OverlayGeoJobsService_getPrototypeOf(OverlayGeoJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.OverlayGeoJobsService.prototype.addOverlayGeoJob
+     * @description 新建点叠加析服务
+     * @param {SuperMap.OverlayGeoJobParameter} params - 创建一个叠加分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addOverlayGeoJob",
+    value: function addOverlayGeoJob(params, seconds) {
+      OverlayGeoJobsService_get(OverlayGeoJobsService_getPrototypeOf(OverlayGeoJobsService.prototype), "addJob", this).call(this, this.url, params, OverlayGeoJobParameter, seconds);
+    }
+  }]);
+
+  return OverlayGeoJobsService;
+}(ProcessingServiceBase);
+SuperMap.OverlayGeoJobsService = OverlayGeoJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/BuffersAnalystJobsService.js
+function BuffersAnalystJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { BuffersAnalystJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { BuffersAnalystJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return BuffersAnalystJobsService_typeof(obj); }
+
+function BuffersAnalystJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function BuffersAnalystJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function BuffersAnalystJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) BuffersAnalystJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) BuffersAnalystJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function BuffersAnalystJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { BuffersAnalystJobsService_get = Reflect.get; } else { BuffersAnalystJobsService_get = function _get(target, property, receiver) { var base = BuffersAnalystJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return BuffersAnalystJobsService_get(target, property, receiver || target); }
+
+function BuffersAnalystJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = BuffersAnalystJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function BuffersAnalystJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) BuffersAnalystJobsService_setPrototypeOf(subClass, superClass); }
+
+function BuffersAnalystJobsService_setPrototypeOf(o, p) { BuffersAnalystJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return BuffersAnalystJobsService_setPrototypeOf(o, p); }
+
+function BuffersAnalystJobsService_createSuper(Derived) { var hasNativeReflectConstruct = BuffersAnalystJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = BuffersAnalystJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = BuffersAnalystJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return BuffersAnalystJobsService_possibleConstructorReturn(this, result); }; }
+
+function BuffersAnalystJobsService_possibleConstructorReturn(self, call) { if (call && (BuffersAnalystJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return BuffersAnalystJobsService_assertThisInitialized(self); }
+
+function BuffersAnalystJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function BuffersAnalystJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function BuffersAnalystJobsService_getPrototypeOf(o) { BuffersAnalystJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return BuffersAnalystJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.BuffersAnalystJobsService
+ * @category iServer ProcessingService BufferAnalyst
+ * @classdesc 缓冲区分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var BuffersAnalystJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  BuffersAnalystJobsService_inherits(BuffersAnalystJobsService, _ProcessingServiceBas);
+
+  var _super = BuffersAnalystJobsService_createSuper(BuffersAnalystJobsService);
+
+  function BuffersAnalystJobsService(url, options) {
+    var _this;
+
+    BuffersAnalystJobsService_classCallCheck(this, BuffersAnalystJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/buffers');
+    _this.CLASS_NAME = 'SuperMap.BuffersAnalystJobsService';
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  BuffersAnalystJobsService_createClass(BuffersAnalystJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      BuffersAnalystJobsService_get(BuffersAnalystJobsService_getPrototypeOf(BuffersAnalystJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.getBufferJobs
+     * @description 获取缓冲区分析所有任务
+     */
+
+  }, {
+    key: "getBuffersJobs",
+    value: function getBuffersJobs() {
+      BuffersAnalystJobsService_get(BuffersAnalystJobsService_getPrototypeOf(BuffersAnalystJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.getBufferJob
+     * @description 获取指定id的缓冲区分析服务
+     * @param {string} id - 指定要获取数据的id。
+     */
+
+  }, {
+    key: "getBuffersJob",
+    value: function getBuffersJob(id) {
+      BuffersAnalystJobsService_get(BuffersAnalystJobsService_getPrototypeOf(BuffersAnalystJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.BuffersAnalystJobsService.prototype.addBufferJob
+     * @description 新建缓冲区分析服务
+     * @param {SuperMap.BuffersAnalystJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addBuffersJob",
+    value: function addBuffersJob(params, seconds) {
+      BuffersAnalystJobsService_get(BuffersAnalystJobsService_getPrototypeOf(BuffersAnalystJobsService.prototype), "addJob", this).call(this, this.url, params, BuffersAnalystJobsParameter, seconds);
+    }
+  }]);
+
+  return BuffersAnalystJobsService;
+}(ProcessingServiceBase);
+SuperMap.BuffersAnalystJobsService = BuffersAnalystJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/TopologyValidatorJobsService.js
+function TopologyValidatorJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TopologyValidatorJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { TopologyValidatorJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TopologyValidatorJobsService_typeof(obj); }
+
+function TopologyValidatorJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function TopologyValidatorJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function TopologyValidatorJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) TopologyValidatorJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) TopologyValidatorJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function TopologyValidatorJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TopologyValidatorJobsService_get = Reflect.get; } else { TopologyValidatorJobsService_get = function _get(target, property, receiver) { var base = TopologyValidatorJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TopologyValidatorJobsService_get(target, property, receiver || target); }
+
+function TopologyValidatorJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TopologyValidatorJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function TopologyValidatorJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TopologyValidatorJobsService_setPrototypeOf(subClass, superClass); }
+
+function TopologyValidatorJobsService_setPrototypeOf(o, p) { TopologyValidatorJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TopologyValidatorJobsService_setPrototypeOf(o, p); }
+
+function TopologyValidatorJobsService_createSuper(Derived) { var hasNativeReflectConstruct = TopologyValidatorJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TopologyValidatorJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TopologyValidatorJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TopologyValidatorJobsService_possibleConstructorReturn(this, result); }; }
+
+function TopologyValidatorJobsService_possibleConstructorReturn(self, call) { if (call && (TopologyValidatorJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return TopologyValidatorJobsService_assertThisInitialized(self); }
+
+function TopologyValidatorJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function TopologyValidatorJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function TopologyValidatorJobsService_getPrototypeOf(o) { TopologyValidatorJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TopologyValidatorJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.TopologyValidatorJobsService
+ * @category  iServer ProcessingService TopologyValidator
+ * @classdesc 拓扑检查分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 拓扑检查分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var TopologyValidatorJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  TopologyValidatorJobsService_inherits(TopologyValidatorJobsService, _ProcessingServiceBas);
+
+  var _super = TopologyValidatorJobsService_createSuper(TopologyValidatorJobsService);
+
+  function TopologyValidatorJobsService(url, options) {
+    var _this;
+
+    TopologyValidatorJobsService_classCallCheck(this, TopologyValidatorJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/topologyvalidator');
+    _this.CLASS_NAME = "SuperMap.TopologyValidatorJobsService";
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  TopologyValidatorJobsService_createClass(TopologyValidatorJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      TopologyValidatorJobsService_get(TopologyValidatorJobsService_getPrototypeOf(TopologyValidatorJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.getTopologyValidatorJobs
+     * @description 获取拓扑检查分析所有任务
+     */
+
+  }, {
+    key: "getTopologyValidatorJobs",
+    value: function getTopologyValidatorJobs() {
+      TopologyValidatorJobsService_get(TopologyValidatorJobsService_getPrototypeOf(TopologyValidatorJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.getTopologyValidatorJob
+     * @description 获取指定id的拓扑检查分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getTopologyValidatorJob",
+    value: function getTopologyValidatorJob(id) {
+      TopologyValidatorJobsService_get(TopologyValidatorJobsService_getPrototypeOf(TopologyValidatorJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.TopologyValidatorJobsService.protitype.addTopologyValidatorJob
+     * @description 新建拓扑检查分析服务
+     * @param {SuperMap.TopologyValidatorJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addTopologyValidatorJob",
+    value: function addTopologyValidatorJob(params, seconds) {
+      TopologyValidatorJobsService_get(TopologyValidatorJobsService_getPrototypeOf(TopologyValidatorJobsService.prototype), "addJob", this).call(this, this.url, params, TopologyValidatorJobsParameter, seconds);
+    }
+  }]);
+
+  return TopologyValidatorJobsService;
+}(ProcessingServiceBase);
+SuperMap.TopologyValidatorJobsService = TopologyValidatorJobsService;
+;// CONCATENATED MODULE: ./src/common/iServer/SummaryAttributesJobsService.js
+function SummaryAttributesJobsService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SummaryAttributesJobsService_typeof = function _typeof(obj) { return typeof obj; }; } else { SummaryAttributesJobsService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SummaryAttributesJobsService_typeof(obj); }
+
+function SummaryAttributesJobsService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function SummaryAttributesJobsService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function SummaryAttributesJobsService_createClass(Constructor, protoProps, staticProps) { if (protoProps) SummaryAttributesJobsService_defineProperties(Constructor.prototype, protoProps); if (staticProps) SummaryAttributesJobsService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function SummaryAttributesJobsService_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SummaryAttributesJobsService_get = Reflect.get; } else { SummaryAttributesJobsService_get = function _get(target, property, receiver) { var base = SummaryAttributesJobsService_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SummaryAttributesJobsService_get(target, property, receiver || target); }
+
+function SummaryAttributesJobsService_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = SummaryAttributesJobsService_getPrototypeOf(object); if (object === null) break; } return object; }
+
+function SummaryAttributesJobsService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SummaryAttributesJobsService_setPrototypeOf(subClass, superClass); }
+
+function SummaryAttributesJobsService_setPrototypeOf(o, p) { SummaryAttributesJobsService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SummaryAttributesJobsService_setPrototypeOf(o, p); }
+
+function SummaryAttributesJobsService_createSuper(Derived) { var hasNativeReflectConstruct = SummaryAttributesJobsService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SummaryAttributesJobsService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SummaryAttributesJobsService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SummaryAttributesJobsService_possibleConstructorReturn(this, result); }; }
+
+function SummaryAttributesJobsService_possibleConstructorReturn(self, call) { if (call && (SummaryAttributesJobsService_typeof(call) === "object" || typeof call === "function")) { return call; } return SummaryAttributesJobsService_assertThisInitialized(self); }
+
+function SummaryAttributesJobsService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function SummaryAttributesJobsService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function SummaryAttributesJobsService_getPrototypeOf(o) { SummaryAttributesJobsService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SummaryAttributesJobsService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+/**
+ * @class SuperMap.SummaryAttributesJobsService
+ * @category  iServer ProcessingService SummaryAttributes
+ * @classdesc 属性汇总分析服务类
+ * @extends {SuperMap.ProcessingServiceBase}
+ * @param {string} url - 汇总统计分析服务地址。
+ * @param {Object} options - 参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var SummaryAttributesJobsService = /*#__PURE__*/function (_ProcessingServiceBas) {
+  SummaryAttributesJobsService_inherits(SummaryAttributesJobsService, _ProcessingServiceBas);
+
+  var _super = SummaryAttributesJobsService_createSuper(SummaryAttributesJobsService);
+
+  function SummaryAttributesJobsService(url, options) {
+    var _this;
+
+    SummaryAttributesJobsService_classCallCheck(this, SummaryAttributesJobsService);
+
+    _this = _super.call(this, url, options);
+    _this.url = Util.urlPathAppend(_this.url, 'spatialanalyst/summaryattributes');
+    _this.CLASS_NAME = "SuperMap.SummaryAttributesJobsService";
+    return _this;
+  }
+  /**
+   *@override
+   */
+
+
+  SummaryAttributesJobsService_createClass(SummaryAttributesJobsService, [{
+    key: "destroy",
+    value: function destroy() {
+      SummaryAttributesJobsService_get(SummaryAttributesJobsService_getPrototypeOf(SummaryAttributesJobsService.prototype), "destroy", this).call(this);
+    }
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.getSummaryAttributesJobs
+     * @description 获取属性汇总分析所有任务
+     */
+
+  }, {
+    key: "getSummaryAttributesJobs",
+    value: function getSummaryAttributesJobs() {
+      SummaryAttributesJobsService_get(SummaryAttributesJobsService_getPrototypeOf(SummaryAttributesJobsService.prototype), "getJobs", this).call(this, this.url);
+    }
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.getSummaryAttributesJob
+     * @description 获取指定id的属性汇总分析服务
+     * @param {string} id - 指定要获取数据的id
+     */
+
+  }, {
+    key: "getSummaryAttributesJob",
+    value: function getSummaryAttributesJob(id) {
+      SummaryAttributesJobsService_get(SummaryAttributesJobsService_getPrototypeOf(SummaryAttributesJobsService.prototype), "getJobs", this).call(this, Util.urlPathAppend(this.url, id));
+    }
+    /**
+     * @function SuperMap.SummaryAttributesJobsService.protitype.addSummaryAttributesJob
+     * @description 新建属性汇总分析服务
+     * @param {SuperMap.SummaryAttributesJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {number} seconds - 开始创建后,获取创建成功结果的时间间隔。
+     */
+
+  }, {
+    key: "addSummaryAttributesJob",
+    value: function addSummaryAttributesJob(params, seconds) {
+      SummaryAttributesJobsService_get(SummaryAttributesJobsService_getPrototypeOf(SummaryAttributesJobsService.prototype), "addJob", this).call(this, this.url, params, SummaryAttributesJobsParameter, seconds);
+    }
+  }]);
+
+  return SummaryAttributesJobsService;
+}(ProcessingServiceBase);
+SuperMap.SummaryAttributesJobsService = SummaryAttributesJobsService;
+;// CONCATENATED MODULE: ./src/classic/services/ProcessingService.js
+function ProcessingService_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ProcessingService_typeof = function _typeof(obj) { return typeof obj; }; } else { ProcessingService_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ProcessingService_typeof(obj); }
+
+function ProcessingService_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function ProcessingService_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function ProcessingService_createClass(Constructor, protoProps, staticProps) { if (protoProps) ProcessingService_defineProperties(Constructor.prototype, protoProps); if (staticProps) ProcessingService_defineProperties(Constructor, staticProps); return Constructor; }
+
+function ProcessingService_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ProcessingService_setPrototypeOf(subClass, superClass); }
+
+function ProcessingService_setPrototypeOf(o, p) { ProcessingService_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ProcessingService_setPrototypeOf(o, p); }
+
+function ProcessingService_createSuper(Derived) { var hasNativeReflectConstruct = ProcessingService_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ProcessingService_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ProcessingService_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ProcessingService_possibleConstructorReturn(this, result); }; }
+
+function ProcessingService_possibleConstructorReturn(self, call) { if (call && (ProcessingService_typeof(call) === "object" || typeof call === "function")) { return call; } return ProcessingService_assertThisInitialized(self); }
+
+function ProcessingService_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function ProcessingService_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function ProcessingService_getPrototypeOf(o) { ProcessingService_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ProcessingService_getPrototypeOf(o); }
+
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * @class SuperMap.REST.ProcessingService
+ * @category  iServer ProcessingService
+ * @classdesc 分布式分析相关服务类。
+ * @augments SuperMap.CommonServiceBase
+ * @example
+ * 用法:
+ * new SuperMap.REST.ProcessingService(url,options)
+ *    .getKernelDensityJobs(function(result){
+ *       //doSomething
+ * })
+ * @param {string} url - 分布式分析服务地址。
+ * @param {Object} options - 可选参数。
+ * @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
+ * @param {Object} [options.headers] - 请求头。
+ */
+
+var ProcessingService = /*#__PURE__*/function (_CommonServiceBase) {
+  ProcessingService_inherits(ProcessingService, _CommonServiceBase);
+
+  var _super = ProcessingService_createSuper(ProcessingService);
+
+  function ProcessingService(url, options) {
+    var _this;
+
+    ProcessingService_classCallCheck(this, ProcessingService);
+
+    _this = _super.call(this, url, options);
+    _this.kernelDensityJobs = {};
+    _this.summaryMeshJobs = {};
+    _this.queryJobs = {};
+    _this.summaryRegionJobs = {};
+    _this.vectorClipJobs = {};
+    _this.overlayGeoJobs = {};
+    _this.buffersJobs = {};
+    _this.topologyValidatorJobs = {};
+    _this.summaryAttributesJobs = {};
+    return _this;
+  }
+  /**
+   * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJobs
+   * @description 获取密度分析的列表。
+   * @param {function} callback - 请求结果的回调函数。
+   * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+   */
+
+
+  ProcessingService_createClass(ProcessingService, [{
+    key: "getKernelDensityJobs",
+    value: function getKernelDensityJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      kernelDensityJobsService.getKernelDensityJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJob
+     * @description 获取某一个密度分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getKernelDensityJob",
+    value: function getKernelDensityJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      kernelDensityJobsService.getKernelDensityJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addKernelDensityJob
+     * @description 新建一个密度分析。
+     * @param {SuperMap.KernelDensityJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addKernelDensityJob",
+    value: function addKernelDensityJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var kernelDensityJobsService = new KernelDensityJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.kernelDensityJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      kernelDensityJobsService.addKernelDensityJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getKernelDensityJobState
+     * @description 获取密度分析的状态。
+     * @param {string} id - 密度分析的 id。
+     * @returns {Object} - 密度分析的状态。
+     */
+
+  }, {
+    key: "getKernelDensityJobState",
+    value: function getKernelDensityJobState(id) {
+      return this.kernelDensityJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJobs
+     * @description 获取点聚合分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryMeshJobs",
+    value: function getSummaryMeshJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryMeshJobsService.getSummaryMeshJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJob
+     * @description 获取某一个点聚合分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryMeshJob",
+    value: function getSummaryMeshJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryMeshJobsService.getSummaryMeshJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryMeshJob
+     * @description 新建一个点聚合分析。
+     * @param {SuperMap.SummaryMeshJobParameter} params - 点聚合分析任务参数类。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+    */
+
+  }, {
+    key: "addSummaryMeshJob",
+    value: function addSummaryMeshJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryMeshJobsService = new SummaryMeshJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.summaryMeshJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      summaryMeshJobsService.addSummaryMeshJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryMeshJobState
+     * @description 获取点聚合分析的状态。
+     * @param {string} id - 点聚合分析的 id。
+     * @returns {Object} 点聚合分析的状态。
+     */
+
+  }, {
+    key: "getSummaryMeshJobState",
+    value: function getSummaryMeshJobState(id) {
+      return this.summaryMeshJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJobs
+     * @description 获取单对象查询分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getQueryJobs",
+    value: function getQueryJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      singleObjectQueryJobsService.getQueryJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJob
+     * @description 获取某一个单对象查询分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getQueryJob",
+    value: function getQueryJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      singleObjectQueryJobsService.getQueryJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addQueryJob
+     * @description 新建一个单对象查询分析。
+     * @param {SuperMap.SingleObjectQueryJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addQueryJob",
+    value: function addQueryJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          param = me._processParams(params),
+          format = me._processFormat(resultFormat);
+
+      var singleObjectQueryJobsService = new SingleObjectQueryJobsService(me.url, {
+        headers: me.headers,
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.queryJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      singleObjectQueryJobsService.addQueryJob(param, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getQueryJobState
+     * @description 获取单对象查询分析的状态。
+     * @param {string} id - 单对象查询分析的 id。
+     * @returns {Object} 单对象查询分析的状态
+     */
+
+  }, {
+    key: "getQueryJobState",
+    value: function getQueryJobState(id) {
+      return this.queryJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJobs
+     * @description 获取区域汇总分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryRegionJobs",
+    value: function getSummaryRegionJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+        proxy: me.proxy,
+        headers: me.headers,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryRegionJobsService.getSummaryRegionJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJob
+     * @description 获取某一个区域汇总分析。
+     * @param {string} id - 区域汇总分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryRegionJob",
+    value: function getSummaryRegionJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryRegionJobsService.getSummaryRegionJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryRegionJob
+     * @description 新建一个区域汇总分析。
+     * @param {SuperMap.SummaryRegionJobParameter} params -创建一个区域汇总分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addSummaryRegionJob",
+    value: function addSummaryRegionJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryRegionJobsService = new SummaryRegionJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.summaryRegionJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      summaryRegionJobsService.addSummaryRegionJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryRegionJobState
+     * @description 获取区域汇总分析的状态。
+     * @param {string} id - 区域汇总分析的 id。
+     * @returns {Object} 区域汇总分析的状态。
+     */
+
+  }, {
+    key: "getSummaryRegionJobState",
+    value: function getSummaryRegionJobState(id) {
+      return this.summaryRegionJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJobs
+     * @description 获取矢量裁剪分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getVectorClipJobs",
+    value: function getVectorClipJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var vectorClipJobsService = new VectorClipJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      vectorClipJobsService.getVectorClipJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJob
+     * @description 获取某一个矢量裁剪分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getVectorClipJob",
+    value: function getVectorClipJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var vectorClipJobsService = new VectorClipJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      vectorClipJobsService.getVectorClipJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addVectorClipJob
+     * @description 新建一个矢量裁剪分析。
+     * @param {SuperMap.VectorClipJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addVectorClipJob",
+    value: function addVectorClipJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          param = me._processParams(params),
+          format = me._processFormat(resultFormat);
+
+      var vectorClipJobsService = new VectorClipJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.vectorClipJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      vectorClipJobsService.addVectorClipJob(param, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getVectorClipJobState
+     * @description 获取矢量裁剪分析的状态。
+     * @param {string} id - 矢量裁剪分析的 id。
+     * @returns {Object} 矢量裁剪分析的状态。
+     */
+
+  }, {
+    key: "getVectorClipJobState",
+    value: function getVectorClipJobState(id) {
+      return this.vectorClipJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getOverlayGeoJobs
+     * @description 获取叠加分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getOverlayGeoJobs",
+    value: function getOverlayGeoJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      overlayGeoJobsService.getOverlayGeoJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getOverlayGeoJob
+     * @description 获取某一个叠加分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getOverlayGeoJob",
+    value: function getOverlayGeoJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      overlayGeoJobsService.getOverlayGeoJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addOverlayGeoJob
+     * @description 新建一个叠加分析。
+     * @param {SuperMap.OverlayGeoJobParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addOverlayGeoJob",
+    value: function addOverlayGeoJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var overlayGeoJobsService = new OverlayGeoJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.overlayGeoJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      overlayGeoJobsService.addOverlayGeoJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getoverlayGeoJobState
+     * @description 获取叠加分析的状态。
+     * @param {string} id - 叠加分析的 id。
+     * @returns {Object} 叠加分析的状态。
+     */
+
+  }, {
+    key: "getoverlayGeoJobState",
+    value: function getoverlayGeoJobState(id) {
+      return this.overlayGeoJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJobs
+     * @description 获取缓冲区分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getBuffersJobs",
+    value: function getBuffersJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      buffersAnalystJobsService.getBuffersJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJob
+     * @description 获取某一个缓冲区分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getBuffersJob",
+    value: function getBuffersJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      buffersAnalystJobsService.getBuffersJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addBuffersJob
+     * @description 新建一个缓冲区分析。
+     * @param {SuperMap.BuffersAnalystJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addBuffersJob",
+    value: function addBuffersJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var buffersAnalystJobsService = new BuffersAnalystJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.buffersJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      buffersAnalystJobsService.addBuffersJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getBuffersJobState
+     * @description 获取缓冲区分析的状态。
+     * @param {string} id - 缓冲区分析的 id。
+     * @returns {Object} 缓冲区分析的状态。
+     */
+
+  }, {
+    key: "getBuffersJobState",
+    value: function getBuffersJobState(id) {
+      return this.buffersJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJobs
+     * @description 获取拓扑检查分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getTopologyValidatorJobs",
+    value: function getTopologyValidatorJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      topologyValidatorJobsService.getTopologyValidatorJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJob
+     * @description 获取某一个拓扑检查分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getTopologyValidatorJob",
+    value: function getTopologyValidatorJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      topologyValidatorJobsService.getTopologyValidatorJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addTopologyValidatorJob
+     * @description 新建一个拓扑检查分析。
+     * @param {SuperMap.TopologyValidatorJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addTopologyValidatorJob",
+    value: function addTopologyValidatorJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var topologyValidatorJobsService = new TopologyValidatorJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.topologyValidatorJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      topologyValidatorJobsService.addTopologyValidatorJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getTopologyValidatorJobState
+     * @description 获取拓扑检查分析的状态。
+     * @param {string} id - 拓扑检查分析的 id。
+     * @returns {Object} 拓扑检查分析的状态。
+     */
+
+  }, {
+    key: "getTopologyValidatorJobState",
+    value: function getTopologyValidatorJobState(id) {
+      return this.topologyValidatorJobs[id];
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJobs
+     * @description 获取属性汇总分析的列表。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryAttributesJobs",
+    value: function getSummaryAttributesJobs(callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryAttributesJobsService.getSummaryAttributesJobs();
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJob
+     * @description 获取某一个属性汇总分析。
+     * @param {string} id - 空间分析的 id。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "getSummaryAttributesJob",
+    value: function getSummaryAttributesJob(id, callback, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback
+        },
+        format: format
+      });
+      summaryAttributesJobsService.getSummaryAttributesJob(id);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.addSummaryAttributesJob
+     * @description 新建一个属性汇总分析。
+     * @param {SuperMap.SummaryAttributesJobsParameter} params - 创建一个空间分析的请求参数。
+     * @param {function} callback - 请求结果的回调函数。
+     * @param {number} [seconds=1000] - 开始创建后,获取创建成功结果的时间间隔。
+     * @param {SuperMap.DataFormat} [resultFormat=SuperMap.DataFormat.GEOJSON] - 返回的结果类型。
+     */
+
+  }, {
+    key: "addSummaryAttributesJob",
+    value: function addSummaryAttributesJob(params, callback, seconds, resultFormat) {
+      var me = this,
+          format = me._processFormat(resultFormat);
+
+      var summaryAttributesJobsService = new SummaryAttributesJobsService(me.url, {
+        proxy: me.proxy,
+        withCredentials: me.withCredentials,
+        crossOrigin: me.crossOrigin,
+        headers: me.headers,
+        serverType: me.serverType,
+        eventListeners: {
+          scope: me,
+          processCompleted: callback,
+          processFailed: callback,
+          processRunning: function processRunning(job) {
+            me.summaryAttributesJobs[job.id] = job.state;
+          }
+        },
+        format: format
+      });
+      summaryAttributesJobsService.addSummaryAttributesJob(params, seconds);
+    }
+    /**
+     * @function SuperMap.REST.ProcessingService.prototype.getSummaryAttributesJobState
+     * @description 获取属性汇总分析的状态。
+     * @param {string} id - 属性汇总分析的 id。
+     * @returns {Object} 属性汇总分析的状态。
+     */
+
+  }, {
+    key: "getSummaryAttributesJobState",
+    value: function getSummaryAttributesJobState(id) {
+      return this.summaryAttributesJobs[id];
+    }
+  }, {
+    key: "_processFormat",
+    value: function _processFormat(resultFormat) {
+      return resultFormat ? resultFormat : DataFormat.GEOJSON;
+    }
+  }, {
+    key: "_processParams",
+    value: function _processParams(params) {
+      if (!params) {
+        return {};
+      }
+
+      if (params.geometryQuery) {
+        params.geometryQuery = this._convertPatams(params.geometryQuery);
+      }
+
+      if (params.geometryClip) {
+        params.geometryClip = this._convertPatams(params.geometryClip);
+      }
+
+      return params;
+    }
+  }, {
+    key: "_convertPatams",
+    value: function _convertPatams(points) {
+      var geometryParam = {};
+
+      if (points.length < 1) {
+        geometryParam = "";
+      } else {
+        var results = [];
+
+        for (var i = 0; i < points.length; i++) {
+          var point = {};
+          point.x = points[i].x;
+          point.y = points[i].y;
+          results.push(point);
+        }
+
+        geometryParam.type = "REGION";
+        geometryParam.points = results;
+      }
+
+      return geometryParam;
+    }
+  }]);
+
+  return ProcessingService;
+}(CommonServiceBase);
+SuperMap_SuperMap.REST.ProcessingService = ProcessingService;
+;// CONCATENATED MODULE: ./src/classic/services/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+;// CONCATENATED MODULE: ./src/classic/index.js
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}();
+/******/ })()
+;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 7 - 0
dist/classic/iclient-classic.min.js


+ 157 - 0
dist/classic/include-classic.js

@@ -0,0 +1,157 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
+ * This program are made available under the terms of the Apache License, Version 2.0
+ * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
+(function () {
+    var r = new RegExp("(^|(.*?\\/))(include-classic\.js)(\\?|$)"),
+        s = document.getElementsByTagName('script'),
+        targetScript;
+    for (var i = 0; i < s.length; i++) {
+        var src = s[i].getAttribute('src');
+        if (src) {
+            var m = src.match(r);
+            if (m) {
+                targetScript = s[i];
+                break;
+            }
+        }
+    }
+
+    function inputScript(url) {
+        var script = '<script type="text/javascript" src="' + url + '"><' + '/script>';
+        document.writeln(script);
+    }
+
+    function inputCSS(url) {
+        var css = '<link rel="stylesheet" href="' + url + '">';
+        document.writeln(css);
+    }
+
+    function inArray(arr, item) {
+        for (i in arr) {
+            if (arr[i] == item) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    function supportES6() {
+        var code = "'use strict'; class Foo {}; class Bar extends Foo {};";
+        try {
+            (new Function(code))();
+        } catch (err) {
+            return false;
+        }
+        if (!Array.from) {
+            return false;
+        }
+        return true;
+    }
+
+    //加载类库资源文件
+    function load() {
+        var includes = (targetScript.getAttribute('include') || "").split(",");
+        var excludes = (targetScript.getAttribute('exclude') || "").split(",");
+        if (!inArray(excludes, 'iclient8c')) {
+            if (!inArray(includes, 'iclient8c-plot')) {
+                window.excludePlot = true;
+            }
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/libs/SuperMap.Include.js");
+        }
+        if (inArray(includes, 'mapv')) {
+            inputScript("https://cdn.jsdelivr.net/npm/mapv@2.0.56/build/mapv.min.js");
+        }
+        if (inArray(includes, 'echarts')) {
+            inputScript('https://cdn.jsdelivr.net/npm/echarts@4.9.0/dist/echarts.min.js');
+        }
+        if (inArray(includes, 'nanoscroller')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/nanoscroller.css");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/jquery.nanoscroller.min.js");
+        }
+        if (inArray(includes, 'infoWindow')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plugins/infoWindow/infoWindow.css");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plugins/infoWindow/InfoWindow.js");
+        }
+        if (inArray(includes, 'heatmapColorCSS')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/heatmap.css");
+        }
+        if (!inArray(excludes, 'iclient-classic')) {
+            if (supportES6()) {
+                inputScript("../../dist/classic/iclient-classic-es6.min.js");
+            } else {
+                inputScript("../../dist/classic/iclient-classic.min.js");
+            }
+        }
+        if (inArray(includes, 'tianditu')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/layer/Tianditu.js");
+        }
+        if (inArray(includes, 'echarts-all')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/echarts-all.js");
+        }
+        if (inArray(includes, 'baidu')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/layer/Baidu.js");
+        }
+        if (inArray(includes, 'OSMBuildings-SuperMap')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/OSMBuildings-SuperMap.js");
+        }
+        if (inArray(includes, 'D3WindMap')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/D3WindMap.js");
+        }
+        if (inArray(includes, 'd3')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/d3.v3.min.js");
+        }
+        if (inArray(includes, 'three')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/third-party/Three/ThreeWebGL.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/third-party/Three/ThreeExtras.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/third-party/Three/RequestAnimationFrame.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/third-party/Three/Detector.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/third-party/globe.js");
+        }
+        if (inArray(includes, 'MapToImg')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/MapToImg.js");
+        }
+        if (inArray(includes, 'Bar')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Bar.js");
+        }
+        if (inArray(includes, 'Bar3D')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Bar3D.js");
+        }
+        if (inArray(includes, 'Circle')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Circle.js");
+        }
+        if (inArray(includes, 'Line')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Line.js");
+        }
+        if (inArray(includes, 'Pie')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Pie.js");
+        }
+        if (inArray(includes, 'Point')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Point.js");
+        }
+        if (inArray(includes, 'Ring')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/graph/Ring.js");
+        }
+        if (inArray(includes, 'style')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/theme/default/style.css");
+        }
+        if (inArray(includes, 'sm-doc')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/sm-doc.css");
+        }
+        if (inArray(includes, 'LargeFormatPrints')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/LargeFormatPrints.js");
+        }
+        if (inArray(includes, 'PlottingPanel')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/PlottingPanel.Include.js");
+        }
+        if (inArray(includes, 'bevInclude')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/bevInclude.js");
+        }
+        if (inArray(includes, 'DefaultStyleConfiguration')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/resource/Plugins/Plotting/DefaultStyleConfiguration.js");
+        }
+    }
+
+    load();
+    window.isLocal = false;
+    window.server = document.location.toString().match(/file:\/\//) ? "http://localhost:8090" : document.location.protocol + "//" + document.location.host;
+})();

BIN
images/attendance.png


BIN
images/bg.png


BIN
images/loading.gif


BIN
images/logo.png


BIN
images/marker.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 25 - 0
js/china.js


+ 111 - 0
js/common.js

@@ -0,0 +1,111 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+
+
+    //目前只支持中英文
+    window.initI18N= function (callback){
+        var path = getCommonScriptPath();
+        Localization.initializeI18N(path, function () {
+            if (window.isSite) {
+                localize();
+            }
+            $('html').attr("lang", utils.getLanguage());
+            Localization.localize();
+            onLoadCallBack(); //设置标题栏当前语言
+            callback && callback();
+        });
+        $('.icl-header').on('click', '.lang-option', function () {
+            var value = $(this).data('lang');
+            utils.setLanguage(value);
+            $('#lang').html($(this).html());
+            i18next.changeLanguage(value);
+            if (window.isSite) {
+                localize();
+                return;
+            }
+            window.location.reload();
+        });
+    }
+
+    function onLoadCallBack() {
+        var lan = utils.getLanguage();
+        var lang_text = $("[data-lang=" + lan + "]").html() || "中文";
+        $('#lang').html(lang_text);
+
+        setCurrentVersion();
+        resetCurrentVersionLink();
+    }
+
+    //设置头部版本号
+    function setCurrentVersion() {
+        var version = getVersion();
+        if (!version && window.preRelease) {
+            version = window.preRelease;
+        }
+        var versionText = version ? "" + version : "&nbsp;";
+        $('#version').html(versionText);
+    }
+
+    function getVersion() {
+        var pathname = window.location.pathname.replace("/en/", "/");
+        var match = pathname.match(/^\/(dev|(?:\d+\.)+\d)\/.*/);//匹配版本:dev|9.0.0
+        return match && match[1] ? match[1] : null;
+    }
+
+
+    //重置当前版本链接,不带版本号
+    function resetCurrentVersionLink() {
+        if (!window.version) {
+            return;
+        }
+
+        var version = window.version;
+        version = version.toString();
+        $(".icl-nav-version").each(function (key, item) {
+            if (item.href) {
+                var reg = new RegExp("(.*)\/(" + version + ")(\/.*)");
+                var match = item.href.match(reg);
+                if (match && match[1] && match[3]) {
+                    item.href = match[1] + match[3];
+                }
+            }
+        });
+    }
+
+    function localize() {
+        var lang = utils.getLanguage();
+        var pathname = window.location.pathname.replace("/en/", "/");
+        var hash = window.location.hash;
+        var href = window.location.origin + pathname;
+        if (lang === "en-US") {
+            if (getVersion()) {
+                href = window.location.origin + pathname.replace(/([^\/]*\/){1}([^\/]*)/, '$1$2/en');
+                //href = window.location.origin + pathname.replace(/([^\/]*\/){2}([^\/]*)/, '/$1$2/en');
+            } else if (window.isLocal) {
+                href = window.location.origin + pathname.replace(/(([^\/]*\/){3})([^\/]*)/, '$1$3/en')
+            } else {
+                href = window.location.origin + pathname.replace(/([^\/]*\/){1}([^\/]*)/, '/en/$2');
+                //href = window.location.origin + pathname.replace(/([^\/]*\/){1}([^\/]*)/, '/$2/en');
+            }
+
+        }
+        if ((window.location.origin + window.location.pathname + hash) === href + hash) {
+            return;
+        }
+        window.location = href + hash;
+    }
+
+    function getCommonScriptPath() {
+        var r = new RegExp("(^|(.*?\\/))(common\.js)(\\?|$)"),
+            s = document.getElementsByTagName('script'), relativePath;
+        for (var i = 0; i < s.length; i++) {
+            var src = s[i].getAttribute('src');
+            if (src) {
+                var m = src.match(r);
+                if (m) {
+                    relativePath = m[1] ? m[1].replace("js/", "") : "./";
+                    break;
+                }
+            }
+        }
+        return relativePath;
+    }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 21 - 0
js/echarts.min.js


+ 209 - 0
js/editor.js

@@ -0,0 +1,209 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+$(document).ready(function () {
+    window.initI18N(function(){
+    initPage();
+    bindEvents();
+    sidebarScrollFix();
+});
+});
+
+var aceEditor;
+var containExamples = true;
+
+function initPage() {
+    initSideBar();
+    initEditor();
+    screenResize();
+}
+
+function initSideBar() {
+    var config = exampleConfig;
+    var sideBar = $("ul#sidebar-menu");
+    for (var key in config) {
+        sideBar.append(createSideBarMenuItem(key, config[key], containExamples));
+    }
+    $(sideBar).ready(function () {
+        initSelect();
+    });
+
+}
+
+function screenResize() {
+    window.onresize = function () {
+        mapHeight();
+    };
+}
+
+//初始化编辑器
+function initCodeEditor() {
+    if (!aceEditor) {
+        aceEditor = ace.edit("editor");
+        aceEditor.setTheme("ace/theme/textmate");
+        aceEditor.getSession().setMode("ace/mode/html");
+        aceEditor.getSession().setUseWrapMode(true);
+        aceEditor.setShowPrintMargin(false);
+        aceEditor.$blockScrolling = Infinity;
+    }
+    aceEditor.setValue($('#editor').val());
+    aceEditor.clearSelection();
+    aceEditor.moveCursorTo(0, 0);
+}
+
+//初始化编辑器以及预览内容
+function initEditor() {
+    loadExampleHtml();
+    initCodeEditor();
+}
+
+function loadExampleHtml() {
+    var locationParam = getLocationParam();
+    if (!locationParam) {
+        return;
+    }
+    var href = window.location.toString();
+    var mapUrl = href.substr(0, href.lastIndexOf('/') + 1);
+    mapUrl = mapUrl + locationParam + ".html";
+    if (!mapUrl) {
+        return;
+    }
+    var html = $.ajax({
+        url: mapUrl,
+        async: false,
+        error: function (error) {
+            alert(resources.editor.envTips);
+            html = "";
+        }
+    }).responseText;
+    if (html && html != "") {
+        $('#editor').val(html);
+        loadPreview(html);
+    }
+}
+
+function getLocationParam() {
+    var param = window.location.toString();
+    if (param.indexOf("#") === -1) {
+        return null;
+    }
+    param = param.split("#");
+    if (param && param.length > 0) {
+        return param[1];
+    }
+}
+
+//运行代码
+function run() {
+    var iframeContent = $("#editor").val();
+    if (editor) {
+        iframeContent = aceEditor.getValue();
+    }
+    loadPreview(iframeContent);
+}
+
+//填充预览效果内容
+function loadPreview(content) {
+    var iFrame = createIFrame(),
+        iframeDocument = iFrame.contentWindow.document;
+    iFrame.contentWindow.resources=window.resources?window.resources.resources:{};
+    iframeDocument.open();
+    iframeDocument.write(content);
+    iframeDocument.close();
+    var doc = document;
+    iFrame.addEventListener('load', function () {
+        mapHeight();
+        setTimeout(function () {
+            doc.title = iframeDocument.title;
+        }, 100);
+
+    });
+
+    mapHeight();
+}
+
+function createIFrame() {
+    var preViewPane = $("#previewPane");
+    preViewPane.empty();
+    var iframe = document.createElement("iframe");
+    $(iframe).attr("id", "innerPage");
+    $(iframe).attr("name", "innerPage");
+    preViewPane.append(iframe);
+    return iframe;
+}
+
+//重置编辑器
+function refresh() {
+    initEditor();
+    run();
+}
+
+function initSelect() {
+    var hash = window.location.hash;
+    var id;
+    if (hash.indexOf("#") === -1) {
+        id = $("section#sidebar .thirdMenu a.link").first().attr('id');
+        window.location.hash = (id) ? "#" + id : window.location.hash;
+    } else {
+        id = hash.split("#")[1];
+    }
+    selectMenu(id);
+}
+
+function mapHeight() {
+    var doc = $("#innerPage").contents();
+    doc.find("html").height("100%");
+    doc.find("body").height("100%");
+}
+
+function bindEvents() {
+    $("#sidebar ul.third-menu a").click(function (evt) {
+        var target = $(evt.target).parent().parent();
+        var nodeId = evt.target.id;
+        //如果点击的是span节点还要往上一层
+        if (evt.target.localName === "span") {
+            nodeId = target.attr('id');
+        }
+
+        if (nodeId) {
+            //阻止冒泡防止上层事件响应导致修改url hash值
+            evt.preventDefault();
+            window.location.hash = "#" + nodeId;
+            initEditor();
+            evt.stopPropagation();
+        }
+    });
+    var codePane = $("#codePane");
+    var previewPane = $("#previewPane");
+    var expand = !!1;
+    $("#showCodeBtn").click(function () {
+        if (expand) {
+            //编辑器和预览宽度5:7
+            $(this).text(resources.editor.expand);
+            $(this).addClass("fa-arrows-alt");
+            $(this).removeClass(" fa-compress");
+            codePane.show(10, function () {
+                previewPane.removeClass("col-md-12");
+                previewPane.addClass("col-md-7");
+                codePane.addClass("col-md-5");
+            });
+        } else {
+            //预览独占一行
+            $(this).text(resources.editor.source);
+            $(this).addClass(" fa-compress");
+            $(this).removeClass("fa-arrows-alt");
+            codePane.hide(200, function () {
+                codePane.removeClass("col-md-5");
+                previewPane.removeClass("col-md-7");
+                previewPane.addClass("col-md-12");
+            });
+        }
+        expand = !expand;
+    });
+
+    window.addEventListener("hashchange", function () {
+        var hash = window.location.hash;
+        if (hash.indexOf("#") !== -1) {
+            var id = hash.split("#")[1];
+            selectMenu(id);
+        }
+    });
+}

+ 220 - 0
js/example.js

@@ -0,0 +1,220 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+$(document).ready(function () {
+    window.initI18N(function () {
+        initPage();
+        bindEvents();
+        //懒加载
+        var timeout = setTimeout(function () {
+            $("img.chart-thumb").lazyload();
+        }, 1000);
+
+    });
+});
+
+
+var exConfig = exampleConfig,
+    containExamples = false,
+    thumbLocation = getThumbLocation();
+
+//左侧层级不包含例子,只包含分类
+function initPage() {
+    var sideBar = $("ul#sidebar-menu");
+    var chartList = $("#charts-list");
+    for (var key in exConfig) {
+        sideBar.append(createSideBarMenuItem(key, exConfig[key], containExamples));
+        chartList.append(createGalleryItem(key, exConfig[key]));
+    }
+    resizeCharts();
+    initSelect();
+    sidebarScrollFix();
+}
+
+
+//初始化页面第一次加载
+function initSelect() {
+    var hash = window.location.hash;
+    if (hash.indexOf("#") === -1) {
+        var id = $('#sidebar li').first().children('a')[0].hash;
+
+        window.location.hash = (id) ? id : window.location.hash;
+    }
+    scroll();
+}
+
+
+//初始化示例面板
+function createGalleryItem(id, config) {
+    if (!config) {
+        return;
+    }
+    if (window.isLocal && config.localIgnore) {
+        return;
+    }
+    var categoryLi = $("<li class='category' id='" + id + "'></li>");
+    var title = utils.getLocalPairs(config, "name");
+    if (title) {
+        createGalleryItemTitle(id, title).appendTo(categoryLi);
+    }
+
+    if (config.content) {
+        createSubGalleryItem(config.content, id).appendTo(categoryLi);
+    }
+    return categoryLi;
+}
+
+
+function createSubGalleryItem(config, name) {
+    var categoryContentDiv = $("<div class='category-content'></div>");
+    for (var key in config) {
+        var configItem = config[key];
+        if (window.isLocal && configItem.localIgnore) {
+            continue;
+        }
+        var content = $("<div class='box box-default color-palette-box' id='" + name + '-' + key + "'></div>");
+        var title = utils.getLocalPairs(configItem, "name");
+        createSubGalleryItemTitle(key, title).appendTo(content);
+        if (configItem.content) {
+            createGalleryCharts(configItem.content).appendTo(content);
+
+        }
+        content.appendTo(categoryContentDiv);
+    }
+    return categoryContentDiv;
+}
+
+function createGalleryItemTitle(id, title) {
+    var menuItemIcon = exampleIconConfig[id];
+    return $("<h3 class='category-title' id='title_" + id + "'>" + "<i class='fa " + menuItemIcon + "'></i>" + "&nbsp;&nbsp;" + title + "</h3>");
+}
+
+function createSubGalleryItemTitle(id, title) {
+    return $("<div class='box-header'>" + "<h3 class='box-title' id='category-type-" + id + "'>" + "&nbsp;&nbsp;&nbsp;&nbsp;" + title + "</h4>" + "</h3>" + "</div>");
+}
+
+
+function createGalleryCharts(examples) {
+    var chartsDiv = $("<div class='box-body'></div>");
+    var len = (examples && examples.length) ? examples.length : 0;
+    for (var i = 0; i < len; i++) {
+        var exam = examples[i];
+        if (window.isLocal && exam.localIgnore) {
+            continue;
+        }
+        createGalleryChart(exam).appendTo(chartsDiv);
+    }
+    return chartsDiv;
+}
+
+function createGalleryChart(example) {
+    var target = "editor.html",
+        defaultThumb = "../img/thumb.png",
+        title = utils.getLocalPairs(example, "name"),
+        href = example.fileName ? example.fileName : "",
+        thumbnail = example.thumbnail ? thumbLocation + "/img/" + example.thumbnail : "",
+        version = example.version;
+
+    var chartDiv = $("<div class='col-xlg-2 col-lg-3 col-md-4 col-sm-6 col-xs-12'></div>");
+    var chart = $("<div class='chart'></div>");
+    var link = $("<a class='chart-link' target='_blank' href='" + target + "#" + href + "'></a>");
+    var chartTitle = $("<h5 class='chart-title'>" + title + "</h5>");
+    var newTip = $('<svg xmlns="http://www.w3.org/2000/svg" class="new-example" style="width:8px !important;height:8px;right: 1px;top: 1px;position: absolute;"><circle cx="4" cy="4" r="4" fill="#e14d57"></circle></svg>');
+    var thumb = $("<img class='chart-thumb' src='" + defaultThumb + "' data-original='" + thumbnail + "' style='display: inline'>");
+   
+    chartTitle.appendTo(link);
+    if (window.version === version) {
+        newTip.appendTo(link);
+    }
+    thumb.appendTo(link);
+    link.appendTo(chart);
+    chart.appendTo(chartDiv);
+
+    return chartDiv;
+}
+
+function getThumbLocation() {
+    var param = window.location.toString();
+    return param.substr(0, param.lastIndexOf('/'));
+}
+
+//chart宽高自适应
+function resizeCharts() {
+    var charts = $("#charts-list .chart .chart-thumb");
+    if (charts[0] && charts[0].offsetWidth) {
+        charts.height(charts[0].offsetWidth * 0.8);
+    } else {
+        charts.height(260 * 0.8);
+    }
+    window.onresize = function () {
+        resizeCharts();
+    }
+}
+
+//根据url滚动到页面相应的位置
+function scroll() {
+    var hash = window.location.hash;
+    var ele;
+
+    if (hash && hash.indexOf("#") !== -1) {
+        var param = hash.split("#")[1].split("-");
+        if (param.length === 1) {
+            ele = $(".category-title#title_" + param[0]);
+            selectMenu(param[0], param.length);
+        }
+
+        if (param.length == 2) {
+            //二级菜单里面的li
+            ele = $("#category-type-" + param[1]);
+            selectMenu(param[1], param.length);
+        }
+
+    }
+
+    if (ele && ele.offset()) {
+        $(window).animate({
+            scrollTop: ele.offset().top - 60
+        }, 0);
+    }
+}
+
+//绑定点击事件
+function bindEvents() {
+    var child = $("ul#sidebar-menu>li.treeview>ul>li");
+    var parent = $('ul.sidebar-menu>li').parent("ul");
+    //因为iManager只有1级所以,iManager点击的时候相当于一级菜单,其他的二级都要关闭.
+    if ($('ul.sidebar-menu>li#firstMenuiManager').find('ul').length == 0) {
+        if ($('ul.sidebar-menu>li#firstMenuiManager').click(function () {
+                $('ul#sidebar-menu>li>ul').slideUp(500);
+            }));
+    }
+    //一级菜单跳转
+    child.parent('ul').siblings('a').click(function (evt) {
+        if ($(this).siblings('ul').is(':visible') && $(this).siblings('ul').children('li').hasClass('active')) {
+            evt.stopPropagation(); //阻止点击事件触发折叠的冒泡
+        }
+        window.location = evt.currentTarget.href;
+    });
+
+    //二级菜单跳转,不用 boot自带
+    window.addEventListener("hashchange", function () {
+        scroll();
+    });
+}
+
+var openTimer; // 定义展开的延时
+var animationSpeed = 500;
+$(window).on('scroll', function () {
+    if ($('ul.sidebar-menu>li').hasClass('active')) {
+        var parent = $('ul.sidebar-menu>li').parent("ul");
+
+        //设置0.1秒后再打开,目的是为了防止滚轮拉快 中途经过的展开和折叠效果还来不及完成而产生的重叠效果;
+        if (openTimer) {
+            clearTimeout(openTimer);
+        }
+        openTimer = setTimeout(function () {
+            parent.children('li.active').children('ul').slideDown(animationSpeed, function () {
+                parent.children('li.active').children('ul').css('display', 'block');
+            })
+        }, 100);
+    }
+    $('ul.sidebar-menu>li').not("li.active").children('ul').css('display', 'none');
+});

+ 191 - 0
js/include-web.js

@@ -0,0 +1,191 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+(function () {
+    var r = new RegExp("(^|(.*?\\/))(include-web\.js)(\\?|$)"),
+        s = document.getElementsByTagName('script'), targetScript;
+    for (var i = 0; i < s.length; i++) {
+        var src = s[i].getAttribute('src');
+        if (src) {
+            var m = src.match(r);
+            if (m) {
+                targetScript = s[i];
+                break;
+            }
+        }
+    }
+
+    function inputScript(url) {
+        var script = '<script type="text/javascript" src="' + url + '"><' + '/script>';
+        document.writeln(script);
+    }
+
+    function inputCSS(url) {
+        var css = '<link rel="stylesheet" href="' + url + '">';
+        document.writeln(css);
+    }
+
+    function inArray(arr, item) {
+        for (i in arr) {
+            if (arr[i] == item) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //加载类库资源文件
+    function load() {
+        var includes = (targetScript.getAttribute('include') || "").split(",");
+        var excludes = (targetScript.getAttribute('exclude') || "").split(",");
+        inputScript("../js/tokengenerator.js");
+        var jQueryInclude = false;
+        if (!inArray(excludes, 'example-i18n')) {
+            inputScript("https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js");
+
+            inputScript("https://cdn.bootcss.com/i18next/10.0.7/i18next.min.js");
+            inputScript("https://cdn.bootcss.com/jquery-i18next/1.2.1/jquery-i18next.min.js");
+
+            inputScript("../js/utils.js");
+            inputScript("../js/localization.js");
+            document.writeln("<script>Localization.initializeI18N('../', function () {Localization.localize();Localization.initGlobal();}); </script>");
+            jQueryInclude = true;
+        }
+        if (inArray(includes, 'jquery') && !jQueryInclude) {
+            inputScript("https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js");
+        }
+
+        if (inArray(includes, 'bootstrap')) {
+            inputScript("https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js");
+            inputCSS("https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css");
+            inputScript("https://cdn.bootcss.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js");
+        }
+        if (inArray(includes, 'bootstrap-css')) {
+            inputCSS("https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css")
+        }
+
+        if (inArray(includes, 'bootstrap-js')) {
+            inputScript("https://cdn.bootcss.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js");
+        }
+
+        if (inArray(includes, 'jquery-ui')) {
+            inputCSS("https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.css");
+            inputScript("https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.min.js");
+        }
+
+        if (inArray(includes, 'template')) {
+            inputScript("https://iclient.supermap.io/web/libs/art-template/template-web.js");
+        }
+        if (inArray(includes, 'randomcolor')) {
+            inputScript("https://cdn.bootcss.com/randomcolor/0.5.2/randomColor.min.js");
+        }
+        if (inArray(includes, 'papaparse')) {
+            inputScript("https://cdn.bootcss.com/PapaParse/4.3.2/papaparse.min.js");
+        }
+        if (inArray(includes, 'moment')) {
+            inputScript("https://cdn.bootcss.com/moment.js/2.18.1/moment.min.js");
+            inputScript("https://cdn.bootcss.com/moment.js/2.18.1/locale/zh-cn.js");
+        }
+        if (inArray(includes, 'bootstrap-datetimepicker')) {
+            inputCSS("https://cdn.bootcss.com/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css");
+            inputScript("https://cdn.bootcss.com/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js");
+        }
+        if (inArray(includes, 'bootstrap-select')) {
+            inputCSS("https://cdn.bootcss.com/bootstrap-select/1.12.2/css/bootstrap-select.min.css");
+            inputScript("https://cdn.bootcss.com/bootstrap-select/1.12.2/js/bootstrap-select.min.js");
+        }
+        if (inArray(includes, 'geohash')) {
+            inputScript("https://iclient.supermap.io/web/libs/geohash/geohash.js");
+        }
+        if (inArray(includes, 'dat-gui')) {
+            inputScript("https://cdn.bootcss.com/dat-gui/0.7.6/dat.gui.js");
+            datGuiI18N();
+        }
+        if (inArray(includes, 'admin-lte')) {
+            inputCSS("https://iclient.supermap.io/web/libs/admin-lte/css/AdminLTE.min.css");
+            inputCSS("https://iclient.supermap.io/web/libs/admin-lte/css/skins/skin-blue.min.css");
+            inputCSS("https://iclient.supermap.io/web/libs/font-awesome/css/font-awesome.min.css");
+            inputScript("https://iclient.supermap.io/web/libs/admin-lte/js/app.min.js");
+        }
+        if (inArray(includes, 'jquery.scrollto')) {
+            inputScript("https://iclient.supermap.io/web/libs/jquery.scrollto/jquery.scrollTo.min.js");
+        }
+        if (inArray(includes, 'ace')) {
+            inputScript("https://cdn.bootcss.com/ace/1.2.6/ace.js");
+        }
+        if (inArray(includes, 'widgets.alert')) {
+            inputScript("../js/widgets.js");
+        }
+
+        if (inArray(includes, 'widgets')) {
+            inputCSS("https://cdn.bootcss.com/css-loader/2.2.0/css-loader.css");
+            inputScript("../js/widgets.js");
+        }
+        if (inArray(includes, 'zTree')) {
+            inputCSS("https://cdn.bootcss.com/zTree.v3/3.5.29/css/zTreeStyle/zTreeStyle.min.css");
+            inputScript("https://cdn.bootcss.com/zTree.v3/3.5.29/js/jquery.ztree.all.min.js");
+        }
+        if (inArray(includes, 'jquery-scontextMenu')) {
+            inputCSS("https://cdn.bootcss.com/jquery-contextmenu/2.6.3/jquery.contextMenu.min.css");
+            inputScript("https://cdn.bootcss.com/jquery-contextmenu/2.6.3/jquery.contextMenu.min.js");
+        }
+        if (inArray(includes, 'colorpicker')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/jquery.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/jquery.colorpicker.js");
+        }
+        if (inArray(includes, 'fileupLoad')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/jquery.js");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/fileupLoad.js");
+        }
+        if (inArray(includes, 'sticklr')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/jquery-sticklr.css");
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/icon.css");
+        }
+        if (inArray(includes, 'responsive')) {
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/css/bootstrap-responsive.min.css");
+        }
+        if (inArray(includes, 'lazyload')) {
+            inputScript("https://cdn.bootcss.com/jquery_lazyload/1.9.7/jquery.lazyload.min.js");
+        }
+        if (inArray(includes, 'i18n')) {
+            inputScript("https://cdn.bootcss.com/i18next/10.0.7/i18next.min.js");
+            inputScript("https://cdn.bootcss.com/jquery-i18next/1.2.1/jquery-i18next.min.js");
+        }
+        if (inArray(includes, 'react')) {
+            inputScript("https://iclient.supermap.io/web/libs/react/16.4.2/react.production.min.js");
+            inputScript("https://iclient.supermap.io/web/libs/react/16.4.2/react-dom.production.min.js");
+            inputScript("https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js");
+        }
+        if (inArray(includes, 'vue')) {
+            inputScript("https://iclient.supermap.io/web/libs/vue/2.5.17/vue.min.js");
+        }
+        if (inArray(includes, 'ionRangeSlider')) {
+            inputCSS("https://cdn.bootcss.com/ion-rangeslider/2.2.0/css/ion.rangeSlider.css");
+            inputCSS("https://cdn.bootcss.com/normalize/8.0.0/normalize.css");
+            inputCSS("https://cdn.bootcss.com/ion-rangeslider/2.2.0/css/ion.rangeSlider.skinHTML5.css");
+            inputScript("https://cdn.bootcss.com/ion-rangeslider/2.2.0/js/ion.rangeSlider.min.js");
+        }
+        if (inArray(includes, 'plottingPanel')) {
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/zTree/jquery.ztree.core.js");
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/zTree/css/zTreeStyle.css");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/jquery-easyui-1.4.4/jquery.easyui.min.js");
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/jquery-easyui-1.4.4/css/easyui.css");
+            inputScript("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/colorpicker/js/colorpicker.js");
+            inputCSS("https://iclient.supermap.io/web/libs/iclient8c/examples/js/plottingPanel/colorpicker/css/colorpicker.css");
+        }
+    }
+
+    function datGuiI18N() {
+        document.writeln("<script>function registerEventListener(evt,fn){" +
+            "if(window.attachEvent){window.attachEvent('on'+evt,fn);}" +
+            "else{window.addEventListener(evt,fn,false);}" +
+            "}</script>");
+        document.writeln("<script>registerEventListener('load',function() { " +
+            "dat.GUI.TEXT_CLOSED=resources.text_close;dat.GUI.TEXT_OPEN=resources.text_open;" +
+            "})</script>")
+    }
+
+    load();
+    window.isLocal = false;
+    window.server = document.location.toString().match(/file:\/\//) ? "http://localhost:9000" : document.location.protocol + "//" + document.location.host;
+    window.version = "10.1.1";
+    window.preRelease = "";
+})();

+ 1309 - 0
js/jquery.liMarquee.js

@@ -0,0 +1,1309 @@
+/*
+ * jQuery liMarquee v 4.6
+ *
+ * Copyright 2013, Linnik Yura | LI MASS CODE | http://masscode.ru
+ * http://masscode.ru/index.php/k2/item/44-limarquee
+ * Free to use
+ *
+ * Last Update 20.11.2014
+ */
+(function ($) {
+	var methods = {
+		init: function (options) {
+			var p = {
+				direction: 'left', //Указывает направление движения содержимого контейнера (left | right | up | down)
+				loop: -1, //Задает, сколько раз будет прокручиваться содержимое. "-1" для бесконечного воспроизведения движения
+				scrolldelay: 0, //Величина задержки в миллисекундах между движениями
+				scrollamount: 50, //Скорость движения контента (px/sec)
+				circular: true, //Если "true" - строка непрерывная 
+				drag: true, //Если "true" - включено перетаскивание строки
+				runshort: true, //Если "true" - короткая строка тоже "бегает", "false" - стоит на месте
+				hoverstop: true, //true - строка останавливается при наведении курсора мыши, false - строка не останавливается
+				inverthover: false, //false - стандартное поведение. Если "true" - строка начинает движение только при наведении курсора
+				xml: false //Путь к xml файлу с нужным текстом
+			};
+			if (options) {
+				$.extend(p, options);
+			}
+
+			return this.each(function () {
+				var enterEvent = 'mouseenter';
+				var leaveEvent = 'mouseleave';
+				if(p.inverthover){
+					enterEvent = 'mouseleave';
+					leaveEvent = 'mouseenter';	
+				}
+				
+								
+				var
+					loop = p.loop,
+					strWrap = $(this).addClass('str_wrap').data({scrollamount:p.scrollamount}),
+					fMove = false;
+					
+				
+				
+				var strWrapStyle = strWrap.attr('style'); 
+				
+				if(strWrapStyle){
+					var wrapStyleArr = strWrapStyle.split(';');
+					var startHeight = false;
+					for(var i=0; i < wrapStyleArr.length; i++){
+						var str = $.trim(wrapStyleArr[i]);					
+						var tested =  str.search(/^height/g);
+						if(tested != -1){
+							startHeight = parseFloat(strWrap.css('height'));
+						}
+					}
+				}
+
+				var code = function () {
+					
+					strWrap.off('mouseleave');
+					strWrap.off('mouseenter');
+					strWrap.off('mousemove');
+					strWrap.off('mousedown');
+					strWrap.off('mouseup');
+
+					
+					if(!$('.str_move',strWrap).length){
+						strWrap.wrapInner($('<div>').addClass('str_move'));
+					}
+					
+					var
+					strMove = $('.str_move', strWrap).addClass('str_origin'),
+					strMoveClone = strMove.clone().removeClass('str_origin').addClass('str_move_clone'),
+					time = 0;
+
+					if (!p.hoverstop) {
+						strWrap.addClass('noStop');
+					}
+
+					var circCloneHor = function(){
+						strMoveClone.clone().css({
+							left:'100%',
+							right:'auto',							
+							width: strMove.width()
+						}).appendTo(strMove);
+						strMoveClone.css({
+							right: '100%',
+							left:'auto',
+							width: strMove.width()
+						}).appendTo(strMove);
+					}
+					
+					var circCloneVert = function(){
+						strMoveClone.clone().css({
+							top: '100%',
+							bottom:'auto',
+							height: strMove.height()
+						}).appendTo(strMove);
+						strMoveClone.css({
+							bottom: '100%',
+							top:'auto',
+							height:strMove.height()
+						}).appendTo(strMove);
+					}
+					
+					
+					
+					if (p.direction == 'left') {
+						strWrap.height(strMove.outerHeight())
+						if (strMove.width() > strWrap.width()) {
+							var leftPos = -strMove.width();
+							
+							if (p.circular) {
+								
+								if (!p.xml) {
+									circCloneHor()
+									leftPos = -(strMove.width() + (strMove.width() - strWrap.width()));
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									left:strWrap.width()	
+								})
+							}
+							var
+							strMoveLeft = strWrap.width(),
+								k1 = 0,
+								timeFunc1 = function () {
+									var
+									fullS = Math.abs(leftPos),
+										time = (fullS / strWrap.data('scrollamount')) * 1000;
+									if (parseFloat(strMove.css('left')) != 0) {
+										fullS = (fullS + strWrap.width());
+										time = (fullS - (strWrap.width() - parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
+									}
+									return time;
+								},
+								moveFuncId1 = false,
+								moveFunc1 = function () {
+									if (loop != 0) {
+										strMove.stop(true).animate({
+											left: leftPos
+										}, timeFunc1(), 'linear', function () {
+											$(this).css({
+												left: strWrap.width()
+											});
+											if (loop == -1) {
+												moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
+											} else {
+												loop--;
+												moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
+											}
+										});
+									}
+								};
+								strWrap.data({
+									moveId: moveFuncId1	,
+									moveF : moveFunc1
+								})
+								if(!p.inverthover){
+									moveFunc1();
+								}
+							
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									clearTimeout(moveFuncId1);
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc1();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										//drag
+										var dragLeft;
+										var dir = 1;
+										var newX;
+										var oldX = e.clientX;
+										//drag
+										
+										strMoveLeft = strMove.position().left;
+										k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+										
+										
+										
+										$(this).on('mousemove', function (e) {
+											fMove = true;
+											
+											//drag
+											newX = e.clientX;
+											if(newX > oldX){
+												dir = 1
+											}else{
+												dir = -1
+											}
+											oldX = newX	
+											dragLeft = k1 + (e.clientX - strWrap.offset().left);
+											
+											if (!p.circular) {
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+											}else{
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = 0;
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > 0 && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+	
+											}
+											
+											
+											strMove.stop(true).css({
+												left: dragLeft
+											});
+											//drag
+											
+										
+											
+										}).on('mouseup', function () {
+											$(this).off('mousemove');
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+											
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								strMove.css({
+									left: strWrap.width()
+								});
+								var
+								strMoveLeft = strWrap.width(),
+									k1 = 0,
+									timeFunc = function () {
+										time = (strMove.width() + strMove.position().left) / strWrap.data('scrollamount') * 1000;
+										return time;
+									};
+								var moveFunc = function () {
+									var leftPos = -strMove.width();
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: strWrap.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										}
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragLeft;
+											var dir = 1;
+											var newX;
+											var oldX = e.clientX;
+											//drag
+											
+											strMoveLeft = strMove.position().left;
+											k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+												
+												
+												//drag
+												newX = e.clientX;
+												if(newX > oldX){
+													dir = 1
+												}else{
+													dir = -1
+												}
+												oldX = newX	
+												dragLeft = k1 + (e.clientX - strWrap.offset().left);
+												
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												
+												
+												strMove.stop(true).css({
+													left: dragLeft
+												});
+												
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'right') {
+						strWrap.height(strMove.outerHeight())
+						strWrap.addClass('str_right');
+						strMove.css({
+							left: -strMove.width(),
+							right: 'auto'
+						})
+						
+						if (strMove.width() > strWrap.width()) {
+							var leftPos = strWrap.width();
+							strMove.css({
+								left: 0
+							})
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneHor()
+									//Определяем крайнюю точку
+									leftPos = strMove.width();
+								}
+							}
+							
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = strWrap.width(), //крайняя точка
+									time = (fullS / strWrap.data('scrollamount')) * 1000; //время
+								if (parseFloat(strMove.css('left')) != 0) {
+									fullS = (strMove.width() + strWrap.width());
+									time = (fullS - (strMove.width() + parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
+								}
+								return time;
+							};
+							var moveFunc = function () {
+
+								if (loop != 0) {
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: -strMove.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							strWrap.data({
+								moveF : moveFunc
+							})
+					
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										
+										//drag
+										var dragLeft;
+										var dir = 1;
+										var newX;
+										var oldX = e.clientX;
+										//drag
+										
+										strMoveLeft = strMove.position().left;
+										k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+											
+											//drag
+											newX = e.clientX;
+											if(newX > oldX){
+												dir = 1
+											}else{
+												dir = -1
+											}
+											oldX = newX	
+											dragLeft = k2 + (e.clientX - strWrap.offset().left);
+
+
+											if (!p.circular) {
+
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+											}else{
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = 0;
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > 0 && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+	
+											}
+											
+											strMove.stop(true).css({
+												left: dragLeft
+											});
+											
+
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+														
+							if (p.runshort) {
+								
+								var k2 = 0;
+								var timeFunc = function () {
+									time = (strWrap.width() - strMove.position().left) / strWrap.data('scrollamount') * 1000;
+									return time;
+								};
+								var moveFunc = function () {
+									var leftPos = strWrap.width();
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: -strMove.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+
+								strWrap.data({
+									moveF : moveFunc
+								})
+
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragLeft;
+											var dir = 1;
+											var newX;
+											var oldX = e.clientX;
+											//drag
+											
+											strMoveLeft = strMove.position().left;
+											k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+												
+												
+												
+												//drag
+												newX = e.clientX;
+												if(newX > oldX){
+													dir = 1
+												}else{
+													dir = -1
+												}
+												oldX = newX	
+												dragLeft = k2 + (e.clientX - strWrap.offset().left);
+												
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+
+												strMove.stop(true).css({
+													left:dragLeft
+												});
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'up') {
+						strWrap.addClass('str_vertical');
+						
+						if (strMove.height() > strWrap.height()) {
+							var topPos = -strMove.height();
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneVert();									
+									topPos = -(strMove.height() + (strMove.height() - strWrap.height()));
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									top:strWrap.height()	
+								})
+							}
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = Math.abs(topPos),
+									time = (fullS / strWrap.data('scrollamount')) * 1000;
+								if (parseFloat(strMove.css('top')) != 0) {
+									fullS = (fullS + strWrap.height());
+									time = (fullS - (strWrap.height() - parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
+								}
+								
+								return time;
+							};
+							var moveFunc = function () {
+								if (loop != 0) {
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: strWrap.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							
+							strWrap.data({
+								moveF : moveFunc
+							})
+							
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										//drag
+										var dragTop;
+										var dir = 1;
+										var newY;
+										var oldY = e.clientY;
+										//drag
+										
+										
+										strMoveTop = strMove.position().top;
+										k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+
+											//drag
+											newY = e.clientY;
+											if(newY > oldY){
+												dir = 1
+											}else{
+												if(newY < oldY){
+													dir = -1
+												}
+											}
+											oldY = newY	
+											dragTop = k2 + e.clientY - strWrap.offset().top;
+
+
+											if (!p.circular){
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+											}else{
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = 0;
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > 0 && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+											}
+
+
+											strMove.stop(true).css({
+												top: dragTop
+											});
+											//drag
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								strMove.css({
+									top: strWrap.height()
+								});
+								var k2 = 0;
+								var timeFunc = function () {
+									
+									time = (strMove.height() + strMove.position().top) / strWrap.data('scrollamount') * 1000;
+									
+									return time;
+								};
+								var moveFunc = function () {
+									var topPos = -strMove.height();
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: strWrap.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragTop;
+											var dir = 1;
+											var newY;
+											var oldY = e.clientY;
+											//drag
+											
+											strMoveTop = strMove.position().top;
+											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+											$(this).on('mousemove', function (e) {
+												
+												
+												fMove = true;
+
+												//drag
+												newY = e.clientY;
+												if(newY > oldY){
+													dir = 1
+												}else{
+													if(newY < oldY){
+														dir = -1
+													}
+												}
+												oldY = newY	
+												dragTop = k2 + e.clientY - strWrap.offset().top;
+												
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+												//*drag
+												
+												strMove.stop(true).css({
+													top: dragTop
+												});
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'down') {
+
+						strWrap.addClass('str_vertical').addClass('str_down');
+						strMove.css({
+							top: -strMove.height(),
+							bottom: 'auto'
+						})
+						if (strMove.height() > strWrap.height()) {
+							var topPos = strWrap.height();
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneVert();									
+									topPos = strMove.height();
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									top:-strMove.height()
+								})
+							}
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = strWrap.height(), //крайняя точка
+									time = (fullS / strWrap.data('scrollamount')) * 1000; //время
+
+								if (parseFloat(strMove.css('top')) != 0) {
+									fullS = (strMove.height() + strWrap.height());
+									time = (fullS - (strMove.height() + parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
+								}
+								return time;
+							};
+							var moveFunc = function () {
+
+								if (loop != 0) {
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: -strMove.height()
+										});
+										if (loop == -1) {
+
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							strWrap.data({
+								moveF : moveFunc
+							})
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										//drag
+										var dragTop;
+										var dir = 1;
+										var newY;
+										var oldY = e.clientY;
+										//drag
+										
+										
+										strMoveTop = strMove.position().top;
+										k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+											
+											//drag
+											newY = e.clientY;
+											if(newY > oldY){
+												dir = 1
+											}else{
+												if(newY < oldY){
+													dir = -1
+												}
+											}
+											oldY = newY	
+											dragTop = k2 + e.clientY - strWrap.offset().top;
+
+
+											if (!p.circular){
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+											}else{
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = 0;
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > 0 && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+											}
+
+
+											strMove.stop(true).css({
+												top: dragTop
+											});
+											//drag
+
+
+
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								var k2 = 0;
+								var timeFunc = function () {
+									time = (strWrap.height() - strMove.position().top) / strWrap.data('scrollamount') * 1000;
+									return time;
+								};
+								var moveFunc = function () {
+									var topPos = strWrap.height();
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: -strMove.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragTop;
+											var dir = 1;
+											var newY;
+											var oldY = e.clientY;
+											//drag
+											
+											strMoveTop = strMove.position().top;
+											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+
+												//drag
+												newY = e.clientY;
+												if(newY > oldY){
+													dir = 1
+												}else{
+													if(newY < oldY){
+														dir = -1
+													}
+												}
+												oldY = newY	
+												dragTop = k2 + e.clientY - strWrap.offset().top;
+	
+	
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+												//*drag
+												
+												strMove.stop(true).css({
+													top: dragTop
+												});
+												
+												
+												
+												
+												
+												
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											})
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					
+					
+					
+					
+				}
+				if (p.xml) {
+					$.ajax({
+						url: p.xml,
+						dataType: "xml",
+						success: function (xml) {
+							var xmlTextEl = $(xml).find('text');
+							var xmlTextLength = xmlTextEl.length;
+							for(var i = 0; i < xmlTextLength; i++){
+								var xmlElActive = xmlTextEl.eq(i);
+								var xmlElContent = xmlElActive.text();
+								var xmlItemEl = $('<span>').text(xmlElContent).appendTo(strWrap);
+								
+								if(p.direction == 'left' || p.direction == 'right'){
+									xmlItemEl.css({display:'inline-block',textAlign:'right'});	
+									if(i > 0){
+										xmlItemEl.css({width:strWrap.width()+xmlItemEl.width()});	
+									}
+								}
+								if(p.direction == 'down' || p.direction == 'up'){
+									xmlItemEl.css({display:'block',textAlign:'left'});	
+										if(i > 0){
+											xmlItemEl.css({paddingTop:strWrap.height()});
+										}
+								}
+								
+							}
+							code();
+						}
+					});
+				} else {
+					code();
+				}
+				strWrap.data({
+					ini:code,
+					startheight: startHeight	
+				})
+				
+				
+				
+				
+			});
+		},
+		update: function () {
+			var el = $(this);
+			var str_origin = $('.str_origin',el);
+			var str_move_clone = $('.str_move_clone',el);
+			str_origin.stop(true);
+			str_move_clone.remove();
+			el.data('ini')();
+		},
+		destroy: function () {
+			
+			var el = $(this);
+			var elMove = $('.str_move',el);
+			var startHeight = el.data('startheight');
+			
+			$('.str_move_clone',el).remove();
+			el.off('mouseenter');
+			el.off('mousedown');
+			el.off('mouseup');
+			el.off('mouseleave');
+			el.off('mousemove');
+			el.removeClass('noStop').removeClass('str_vertical').removeClass('str_active').removeClass('no_drag').removeClass('str_static').removeClass('str_right').removeClass('str_down');
+			
+			var elStyle = el.attr('style'); 
+			if(elStyle){
+				var styleArr = elStyle.split(';');
+				for(var i=0; i < styleArr.length; i++){
+					var str = $.trim(styleArr[i]);
+					var tested =  str.search(/^height/g);
+					if(tested != -1){
+						styleArr[i] = '';	
+					}
+				}
+				var newArr = styleArr.join(';');
+				var newStyle =  newArr.replace(/;+/g,';')
+			
+				if(newStyle == ';'){
+					el.removeAttr('style');	
+				}else{
+					el.attr('style',newStyle);	
+				}
+				
+				if(startHeight){
+					el.css({height:startHeight})	
+				}
+			}
+			elMove.stop(true);
+
+			if(elMove.length){
+				var context = elMove.html();
+				elMove.remove();
+				el.html(context);
+			}
+	
+		},
+		pause: function(){	
+			var el = $(this);
+			var elMove = $('.str_move',el);
+			elMove.stop(true);
+		}, 
+		play: function(){
+			var el = $(this);
+			$(this).off('mousemove');
+			el.data('moveF')();	
+		}
+		
+	};
+	$.fn.liMarquee = function (method) {
+		if (methods[method]) {
+			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+		} else if (typeof method === 'object' || !method) {
+			return methods.init.apply(this, arguments);
+		} else {
+			$.error('Метод ' + method + ' в jQuery.liMarquee не существует');
+		}
+	};
+})(jQuery);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
js/jquery.min.js


+ 128 - 0
js/localization.js

@@ -0,0 +1,128 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+/***
+ * 该文件用来根据语言环境加载相应的示例页面文本提示
+ * notice:
+ * 1.依赖jQuery
+ * 2.配置:依赖locales目录,具体的文本键值对在locales下的resources.js文件中配置。
+ * 3.使用:在具体的示例页使用键值对,命名空间为resources.
+ *   如 alert(resources.msg_tip),alert(resources.text_btn)
+ */
+var Localization = {
+    //初始化加载国际化资源文件
+    initializeI18N: null,
+    //执行翻译替换
+    localize: null,
+    //挂在全局变量
+    initGlobal: null
+};
+(function (nameSpace, $) {
+    var targetScript = (function () {
+        var r = new RegExp("(^|(.*?\\/js\\/))(localization\.js)(\\?|$)"),
+            s = document.getElementsByTagName('script');
+        for (var i = 0; i < s.length; i++) {
+            var src = s[i].getAttribute('src');
+            if (src && src.match(r)) {
+                return s[i];
+            }
+        }
+    })();
+
+
+    function initializeI18N(path, callback) {
+        var localPath = path + "./locales",
+            file = "/resources.js";
+
+        var filePathMap = {
+            "en-US": localPath + "/en-US" + file,
+            "zh-CN": localPath + "/zh-CN" + file
+        };
+
+        //脚本加载完成标志
+        var lang = utils.getLanguage();
+
+        inputScript(filePathMap[lang], function () {
+
+            i18next.init({
+                lng: lang,
+                whitelist: ["zh-CN", "en-US"],
+                fallbackLng: ["zh-CN", "en-US"]
+            },function(){
+                if (window.isSite) {
+                    var webResourceURL = '../../web/locales/'+lang+'/resources.js';
+                    $.get(webResourceURL, function () {
+                        for (var name in window.webResources) {
+                            var subWeb = window.webResources[name];
+                            var subExamples = window.examplesResources[name];
+                            //重名以webResource为准
+                            if (typeof window.webResources[name] == 'object') {
+    
+                                if (!subExamples) {
+                                    subExamples = {};
+                                }
+                                for (var name1 in subWeb) {
+                                    subExamples[name1] = subWeb[name1];
+                                }
+                            } else {
+                                subExamples[name1] = subWeb[name];
+                            }
+    
+                        }
+                        window.resources = window.examplesResources;
+                        i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
+                        callback && callback();
+    
+                    })
+    
+                } else {
+                    window.resources = window.examplesResources;
+                    i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
+                    callback && callback();
+                }
+            });
+            
+
+        });
+
+    }
+
+    //国际化dom中的文本
+    function localize() {
+        jqueryI18next.init(i18next, $);
+        $("html").localize(); //翻译页面所有含data-i18n属性的标签的文本
+    }
+
+    //全局变量挂载
+    function initGlobal(root) {
+        var rootNameSpace = root || window;
+        if (rootNameSpace.resources) {
+            rootNameSpace.oldResources = rootNameSpace.resources;
+        }
+        //example只开放资源映射到resources字段
+        var resources = i18next.getResourceBundle && i18next.getResourceBundle(utils.getLanguage());
+        rootNameSpace.resources = resources && resources.resources;
+    }
+
+    //插入script
+    function inputScript(url, callback) {
+        var script = document.createElement("script");
+        script.type = "text/javascript";
+        if (script.readyState) { //for IE
+            script.onreadystatechange = function () {
+                if (script.readyState === "loaded" || script.readyState === "complete") {
+                    script.onreadystatechange = null;
+                    callback && callback();
+                }
+            };
+        } else { //for Others
+            script.onload = function () {
+                callback && callback();
+            };
+        }
+        script.src = url;
+        targetScript.parentElement.insertBefore(script, targetScript);
+    }
+
+    nameSpace.initializeI18N = initializeI18N;
+    nameSpace.localize = localize;
+    nameSpace.initGlobal = initGlobal;
+})(Localization, jQuery);

+ 248 - 0
js/plottingPanel/PlotPanel.js

@@ -0,0 +1,248 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+L.supermap.plotting.initPlotPanel = function(div, serverUrl, drawControl){
+    var plotPanel = document.getElementById(div);
+
+    var treeNodeStyle = document.createElement("div");
+    treeNodeStyle.style.height = '50%';
+    treeNodeStyle.style.width = '100%';
+    treeNodeStyle.style.border = '1px solid #617775';
+    treeNodeStyle.style.overflow ='scroll';
+
+    var treeNode = document.createElement("div");
+    treeNode.id = "tree";
+    treeNode.className = "ztree";
+
+    var iconNodeStyle = document.createElement("div");
+    iconNodeStyle.style.height = '50%';
+    iconNodeStyle.style.width = '100%';
+
+    var iconNode = document.createElement("div");
+    iconNode.id = "icon";
+    iconNode.style.height = '100%';
+    iconNode.style.width = '100%';
+    iconNode.style.border = '1px solid #617775';
+    iconNode.style.overflow ='scroll';
+
+    treeNodeStyle.appendChild(treeNode);
+    iconNodeStyle.appendChild(iconNode);
+
+    plotPanel.appendChild(treeNodeStyle);
+    plotPanel.appendChild(iconNodeStyle);
+
+    function beforeClickTreeNode(treeId, treeNode){
+        var tree = $.fn.zTree.getZTreeObj(treeId);
+        if (treeNode.isParent) {
+            tree.expandNode(treeNode);
+            return false;
+        } else {
+            var iconNode = document.getElementById("icon");
+            iconNode.innerHTML = "";
+            createDrawNodes(treeNode, iconNode, drawControl, serverUrl);
+        }
+    }
+
+    var setting = {
+        view: {
+            dblClickExpand: false,
+            showLine: true,
+            selectedMulti: false
+        },
+        data: {
+            simpleData: {
+                enable:true,
+                idKey: "id",
+                pIdKey: "pId",
+                rootPId: 0
+            }
+        },
+        callback: {
+            beforeClick: beforeClickTreeNode
+        }
+    };
+
+    var symbolLibManager = L.supermap.plotting.symbolLibManager(serverUrl);
+    if(symbolLibManager.isInitializeOK()){
+        var symbolTreeData = analysisSymbolTree(symbolLibManager);
+
+        $.fn.zTree.init($("#tree"), setting, symbolTreeData);
+    } else {
+        symbolLibManager.on(SuperMap.Plot.Event.initializecompleted, function(result){
+            if(result.libIDs.length !== 0){
+                var symbolTreeData = analysisSymbolTree(symbolLibManager);
+                $.fn.zTree.init($("#tree"), setting, symbolTreeData);
+            }});
+        symbolLibManager.initializeAsync();
+    }
+}
+
+function analysisSymbolTree(symbolLibManager) {
+    var treeData = [];
+    var idIndex = addBasicCellTreeNodes(treeData);
+    var idIndex = addRouteTreeNodes(treeData);
+
+    for(var i = 0; i < symbolLibManager.getSymbolLibNumber(); i++){
+        var symbolLib = symbolLibManager.getSymbolLibByIndex(i);
+        var rootSymbolInfo = symbolLib.getRootSymbolInfo();
+        var rootSymbolIconUrl = symbolLib.getRootSymbolIconUrl();
+
+        if(rootSymbolInfo.symbolNodeType === "SYMBOL_GROUP"){
+            var rootNode = new Object();
+            rootNode.id = idIndex+i;
+            rootNode.pId = 0;
+            rootNode.name = rootSymbolInfo.symbolName;
+            rootNode.fullName = rootSymbolInfo.symbolName +"/";
+            treeData.push(rootNode);
+
+            idIndex = innerAnalysisSymbolTree(rootSymbolInfo.childNodes, treeData, rootNode, rootSymbolIconUrl);
+        }
+
+    }
+
+    return treeData;
+}
+
+function createDrawNodes(treeNode, iconNode, drawControl, serverUrl){
+    var drawNodeClick = function(){
+        if(drawControl !== null){
+            drawControl.handler.libID = this.libID;
+            drawControl.handler.code = this.symbolCode;
+            drawControl.handler.serverUrl = this.serverUrl;
+
+            drawControl.handler.disable();
+            drawControl.handler.enable();
+        }
+    }
+
+    var me = this;
+    var drawData = treeNode.drawData;
+
+    var table = document.createElement("table");
+    table.style.height = "100%";
+    table.style.width = "100%";
+    var i = 0;
+    var rowLength = (drawData.length%3 === 0) ? drawData.length/3 : drawData.length/3+1;
+    for(var j = 0; j < rowLength; j++){
+        var tr = document.createElement("tr");
+        for(var k = 0; k < 3; k++){
+            if(drawData[i]){
+                //存储菜单信息
+                var td = document.createElement("td");
+                var drawNode = document.createElement("div");
+                drawNode.onclick = drawNodeClick;
+                drawNode.style.textAlign = "center";
+                drawNode.id = drawData[i].libID+ ""+ drawData[i].symbolCode;
+                drawNode.libID = drawData[i].libID;
+                drawNode.symbolCode = drawData[i].symbolCode;
+                drawNode.serverUrl = serverUrl;
+                //图片
+                var img = document.createElement("img");
+                img.src = drawData[i].icon;
+                //文本
+                var text = document.createElement("div");
+                text.innerHTML =  drawData[i].symbolName;
+
+                drawNode.appendChild(img);
+                drawNode.appendChild(text);
+                td.appendChild(drawNode);
+
+                tr.appendChild(td);
+            }
+            i++;
+        }
+        table.appendChild(tr);
+    }
+
+    iconNode.appendChild(table);
+}
+
+function addBasicCellTreeNodes(treeData){
+    var cellRootNode = new Object();
+    cellRootNode.id = 1;
+    cellRootNode.pId = 0;
+    cellRootNode.name = "基本标号";
+    cellRootNode.fullName = "BasicCell" +"/";
+    cellRootNode.drawData = [];
+    treeData.push(cellRootNode);
+
+    var symbolCode = [24, 28, 29, 31, 34, 410, 32, 590, 360, 390, 400, 350, 26, 370, 380, 44, 48, 320
+        , 1019, 1022,1024,321,1023,1025
+        ,1013, 1014, 1016, 1017,1026
+        ,1001, 1003, 1004,1028];
+    var symbolName = ["折线", "平行四边形", "圆", "椭圆", "注记", "正多边形", "多边形", "贝赛尔曲线", "闭合贝赛尔曲线"
+        , "集结地", "大括号", "梯形", "矩形", "弓形", "扇形", "弧线", "平行线", "注记指示框"
+        , "同心圆", "组合圆","标注框","多角标注框","自由线",  "节点链"
+        , "跑道形", "八字形", "箭头线", "沿线注记","线型标注"
+        , "对象间连线", "多边形区域","扇形区域","铁丝网"];
+    var cellId = cellRootNode.id + 1;
+    for(var i = 0; i < symbolCode.length; i++){
+        var drawCellNode = {
+            id: cellId++,
+            pId: 0,
+            icon:"../img/plottingPanel/" + cellRootNode.fullName + symbolCode[i] + ".png",
+            symbolCode: symbolCode[i],
+            libID: 0,
+            symbolName: symbolName[i]
+        };
+        cellRootNode.drawData.push(drawCellNode);
+    }
+
+    return cellId;
+}
+
+function addRouteTreeNodes(treeData){
+    var cellRootNode = new Object();
+    cellRootNode.id = 1;
+    cellRootNode.pId = 0;
+    cellRootNode.name = "航线对象";
+    cellRootNode.drawData = [];
+    treeData.push(cellRootNode);
+
+    var symbolCode = [1005,1006,1007];
+    var symbolName = ["航线1","航线2","航线3"];
+    var cellId = cellRootNode.id + 1;
+    for(var i = 0; i < symbolCode.length; i++){
+        var drawCellNode = {
+            id: cellId++,
+            pId: 0,
+            icon:"../img/plottingPanel/BasicCell/RouteIcon/" + symbolCode[i] + ".png",
+            symbolCode: symbolCode[i],
+            libID: 0,
+            symbolName: symbolName[i]
+        };
+        cellRootNode.drawData.push(drawCellNode);
+    }
+
+    return cellId;
+}
+
+function innerAnalysisSymbolTree(childSymbolInfos, treeData, parentNode, rootSymbolIconUrl){
+    var drawData = [];
+    var treeNodeId = parentNode.id+1;
+    for(var i = 0; i < childSymbolInfos.length; i++){
+        if(childSymbolInfos[i].symbolNodeType === "SYMBOL_GROUP"){
+            var treeNode = new Object();
+            treeNode.id = treeNodeId++;
+            treeNode.pId = parentNode.id;
+            treeNode.name = childSymbolInfos[i].symbolName;
+            treeNode.fullName = parentNode.fullName + childSymbolInfos[i].symbolName+"/";
+            treeData.push(treeNode);
+
+            treeNodeId = innerAnalysisSymbolTree(childSymbolInfos[i].childNodes, treeData, treeNode, rootSymbolIconUrl);
+        } else if(childSymbolInfos[i].symbolNodeType === "SYMBOL_NODE"){
+            var drawNode = new Object();
+            drawNode.id = treeNodeId++;
+            drawNode.pId = parentNode.id;
+            drawNode.icon = rootSymbolIconUrl + parentNode.fullName + childSymbolInfos[i].symbolCode + ".png";
+            drawNode.symbolCode = childSymbolInfos[i].symbolCode;
+            drawNode.libID = childSymbolInfos[i].libID;
+            drawNode.symbolName = childSymbolInfos[i].symbolName + "_" + childSymbolInfos[i].symbolCode;
+            drawData.push(drawNode);
+        }
+    }
+
+    if(drawData.length !== 0){
+        parentNode.drawData = drawData;
+    }
+
+    return treeNodeId;
+}

+ 57 - 0
js/plottingPanel/PlottingPanel.Include.js

@@ -0,0 +1,57 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+(function () {
+    var r = new RegExp("(^|(.*?\\/))(PlottingPanel.Include\.js)(\\?|$)"),
+        s = document.getElementsByTagName('script'), targetScript;
+    for (var i = 0; i < s.length; i++) {
+        var src = s[i].getAttribute('src');
+        if (src) {
+            var m = src.match(r);
+            if (m) {
+                targetScript = s[i];
+                break;
+            }
+        }
+    }
+
+    function inputScript(url) {
+        var script = '<script type="text/javascript" src="' + url + '"><' + '/script>';
+        document.writeln(script);
+    }
+
+    function inputCSS(url) {
+        var css = '<link rel="stylesheet" href="' + url + '">';
+        document.writeln(css);
+    }
+
+    function inArray(arr, item) {
+        for (i in arr) {
+            if (arr[i] == item) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //加载类库资源文件
+    function load() {
+        var includes = (targetScript.getAttribute('include') || "").split(",");
+        var excludes = (targetScript.getAttribute('exclude') || "").split(",");
+
+        if (inArray(includes, 'PlotPanel')) {
+            inputScript("../js/plottingPanel/PlotPanel.js");
+        }
+        if (inArray(includes, 'StylePanel')) {
+            inputScript("../js/plottingPanel/customEditor/ColorpickerEditor.js");
+            inputScript("../js/plottingPanel/PublicStyleFunction.js");
+            inputScript("../js/plottingPanel/StylePanel.js");
+        }
+        if (inArray(includes, 'SMLInfosPanel')) {
+            inputScript("../js/plottingPanel/SMLInfosPanel.js");
+        }
+        if (inArray(includes, 'iPortalStylePanel')) {
+            inputScript("../js/plottingPanel/iPortalStylePanel.js");
+        }
+    }
+
+    load();
+})();

+ 1533 - 0
js/plottingPanel/PublicStyleFunction.js

@@ -0,0 +1,1533 @@
+var group = ["标号","解除锁定","对象可见性","常用:点", "主线", "衬线", "填充","注记", "子标号" ];
+var displayName =["锁定","可见性","LibID","Code"];
+var displayLineStyleName = [ "线宽", "线颜色","线型","线透明度" ];
+var displaySurroundLineName = ["衬线类型", "衬线宽", "衬线颜色", "衬线透明度"];
+var displayFillStyleName = ["填充", "填充色", "填充透明度","渐变填充方式","填充背景色","填充背景透明度","渐变填充角度","渐变填充水平偏移","渐变填充竖直偏移"];
+var displayNameDot = ["旋转角度", "随图缩放", "镜像", "标号级别","位置点偏移","偏移线类型","宽高锁定","标号Width", "标号Height"];
+var displayTextContentName =["注记内容", "注记位置", "注记大小", "注记颜色", "注记字体","注记距离",
+    "字间距","字宽百分比","字体描边", "描边色", "描边宽度",
+    "文字背景", "背景色", "文字阴影", "阴影色", "阴影偏移量X", "阴影偏移量Y"];
+var groupNew =["组合类型","箭头类型","沿线类型","边框属性","半径","轨道设置","节点设置","连线类型","折线设置"];
+var displayNameNew = ["箭头","箭身","箭尾",
+    "起始","终止",
+    "路径线","贝塞尔曲线","显示箭头","避让",
+    "标注框边框","圆角边框","对象标注边框",
+    "半径类型","半径角度","注记一","注记二",
+    "卫星轨道",
+    "节点类型","节点旋转角度",
+    "对象间连线",
+    "折线显示",
+    "文字对齐方式"];
+function collectionPropertyGridRows(featuresParameter) {
+    var features = [];
+    var styles=[];
+    for(var i=0;i<featuresParameter.length;i++){
+         styles.push(featuresParameter[i].style);
+         if(featuresParameter[i].geometry === undefined) {
+             features.push(featuresParameter[i]);
+         }else{
+             features.push(featuresParameter[i].geometry);
+         }
+    }
+    var rows = [];
+    if(features.length === 0){
+        return rows = [];
+    }
+    var dotSelectFeatures = [];
+    var algoSelectFeatures = [];
+    var sameFeatures = [];
+    var otherFeatures = [];
+    var selectfeatures = [];
+    for(var i = 0; i < features.length; i++){
+        if(features[i].libID === features[0].libID && features[i].code === features[0].code) {
+            sameFeatures.push(features[i]);//是否是同一个标号
+        }
+    }
+    if(sameFeatures.length !== features.length){
+        for(var i = 0; i < features.length; i++){
+            if(features[i].symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL){
+                dotSelectFeatures.push(features[i]);//是否全是不同点标号
+            } else if(features[i].symbolType === SuperMap.Plot.SymbolType.ALGOSYMBOL){
+                algoSelectFeatures.push(features[i]); //是否全是不同线面标号
+            } else {
+                otherFeatures.push(features[i]);
+            }
+        }
+    }
+    if(sameFeatures.length === features.length){
+        selectfeatures = features;
+    } else if(dotSelectFeatures.length === features.length){
+        selectfeatures = dotSelectFeatures;
+    } else if(algoSelectFeatures.length === features.length){
+        selectfeatures = algoSelectFeatures;
+    } else if(dotSelectFeatures.length > 0 && algoSelectFeatures.length > 0 && otherFeatures.length === 0 ){
+        selectfeatures = features;
+    } else if(otherFeatures.length > 0){
+        selectfeatures = features;
+    }
+    var  selectfeature = selectfeatures[0];
+    var styleObject = styles[0];
+
+    if(selectfeatures.length === sameFeatures.length){
+        rows = [
+            { "name": "标号几何ID", "value":selectfeature.symbolType, "group": group[0] },
+            { "name": "标号库ID", "value": selectfeature.libID, "group": group[0] },
+            { "name": "标号Code", "value": selectfeature.code, "group": group[0] },
+            { "name": "标号名字", "value": selectfeature.symbolName, "group": group[0]}
+        ];
+    }
+
+    //标号锁定
+    var lockedObj = new Object();
+    lockedObj.group = group[1];
+    lockedObj.name = displayName[0];
+    lockedObj.editor = {"type": 'checkbox', "options": {"on": true, "off": false}};
+    lockedObj.value = checkboxValueToString(selectfeature.getLocked());
+    //标号可见性
+    var visibilityObj = new Object();
+    visibilityObj.group = group[2];
+    visibilityObj.name = displayName[1];
+    visibilityObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getDisplayRows()}};
+    //visibilityObj.value = displayToString(selectfeature.style.display);
+    visibilityObj.value = displayToString(styleObject.display);
+    rows.push(lockedObj);
+    if(selectfeature.getLocked()) {
+        return rows;
+    }
+    rows.push(visibilityObj);
+    if(selectfeatures.length===sameFeatures.length || selectfeatures.length===dotSelectFeatures.length ||selectfeatures.length===algoSelectFeatures.length) {
+        rows = rows.concat(symbolPropertyObject(selectfeature,styleObject));
+    }
+    //addExtendProperty(rows,selectfeature);
+    return rows;
+
+}
+
+function checkboxValueToString(checkboxValue){
+    if(checkboxValue === true){
+        return "true";
+    } else if(checkboxValue === false){
+        return "false";
+    }
+}
+function fromCheckboxValue(checkboxStr){
+    if(checkboxStr === "true"){
+        return true;
+    } else if(checkboxStr === "false"){
+        return false;
+    }
+}
+/***
+ * 对象可见性
+ */
+function getDisplayRows() {
+    var rows = [];
+    rows.push({"value": "display", "text": "显示"});
+    rows.push({"value": "none", "text": "不显示"});
+    return rows;
+}
+function displayToString(display) {
+    if(display &&display === "none"){
+        return "不显示";
+    }
+    return "显示";
+}
+/**
+ * 8C使用线型
+ */
+function get8CLineStyleRows() {
+    var rows = [];
+    rows.push({"value": "solid", "text": "solid"});
+    rows.push({"value": "dot", "text": "dot"});
+    rows.push({"value": "dash", "text": "dash"});
+    rows.push({"value": "dashdot", "text": "dashdot"});
+    rows.push({"value": "longdash", "text": "longdash"});
+    rows.push({"value": "longdashdot", "text": "longdashdot"});
+    return rows;
+}
+/**
+ * 9D使用线型
+ */
+function lineStyleToString(lineStyle) {
+    if(lineStyle == 1)
+        return "长虚线";
+    else if(lineStyle == 2)
+        return "由点构成的直线";
+    else if(lineStyle == 3)
+        return "由线划线段组成的直线";
+    else if(lineStyle == 4)
+        return "由重复的线划点图案构成的直线";
+    else if(lineStyle == 0)
+        return "实线";
+    else if(lineStyle)
+        return "实线";
+}
+function getLineStyleRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "实线"});//实线(solid)
+    rows.push({"value": "1", "text": "长虚线"});//长虚线(longdash) //虚线(dash)
+    rows.push({"value": "2", "text": "由点构成的直线"});//由点构成的直线(dot)
+    rows.push({"value": "3", "text": "由线划线段组成的直线"});//由线划线段组成的直线(dashdot)(longdashdot)
+    rows.push({"value": "4", "text": "由重复的线划点图案构成的直线"});//由重复的划线点图案构成的直线
+    return rows;
+}
+/**
+ *注记位置
+ */
+function getAnnotationRows(geometry){
+    var annotations = [];
+    annotations.push({"value": "0", "text": "左上"});
+    annotations.push({"value": "1", "text": "左下"});
+    annotations.push({"value": "2", "text": "右上"});
+    annotations.push({"value": "3", "text": "右下"});
+    annotations.push({"value": "4", "text": "上"});
+    annotations.push({"value": "5", "text": "下"});
+    annotations.push({"value": "6", "text": "左"});
+    annotations.push({"value": "7", "text": "右"});
+    if(geometry.symbolData && geometry.symbolData.middleMarkExist)
+        annotations.push({"value": "8", "text": "中间"});
+    return annotations;
+}
+function annotationToString(annotation) {
+    if(annotation === 0)
+        return "左上";
+    else if(annotation === 1)
+        return "左下";
+    else if(annotation === 2)
+        return "右上";
+    else if(annotation === 3)
+        return "右下";
+    else if(annotation === 4)
+        return "上";
+    else if(annotation === 5)
+        return "下";
+    else if(annotation === 6)
+        return "左";
+    else if(annotation === 7)
+        return "右";
+    else if(annotation === 8)
+        return "中间";
+}
+/**
+ * 标号级别
+ */
+function symbolRankToString(symbolRank) {
+    if(symbolRank == 0)
+        return "无级别";
+    else if(symbolRank == 1)
+        return "军区级";
+    else if(symbolRank == 2)
+        return "副大军区级";
+    else if(symbolRank == 3)
+        return "集团军级";
+    else if(symbolRank == 4)
+        return "师级";
+    else if(symbolRank == 5)
+        return "旅级";
+    else if(symbolRank == 6)
+        return "团级";
+    else if(symbolRank == 7)
+        return "营级";
+    else if(symbolRank == 8)
+        return "连级";
+    else if(symbolRank == 9)
+        return "排级";
+}
+function getSymbolRankRows(geometry) {
+    var symbolRanks = [];
+    if(geometry.symbolData && geometry.symbolData.symbolRanks){
+        symbolRanks = geometry.symbolData.symbolRanks;
+    }
+    var rows = [];
+    rows.push({"value": "0", "text": "无级别"});
+    for(var i = 0; i < symbolRanks.length; i++)
+    {
+        if(symbolRanks[i] == 1)
+            rows.push({"value": "1", "text": "军区级"});
+        else if(symbolRanks[i] == 2)
+            rows.push({"value": "2", "text": "副大军区级"});
+        else if(symbolRanks[i] == 3)
+            rows.push({"value": "3", "text": "集团军级"});
+        else if(symbolRanks[i] == 4)
+            rows.push({"value": "4", "text": "师级"});
+        else if(symbolRanks[i] == 5)
+            rows.push({"value": "5", "text": "旅级"});
+        else if(symbolRanks[i] == 6)
+            rows.push({"value": "6", "text": "团级"});
+        else if(symbolRanks[i] == 7)
+            rows.push({"value": "7", "text": "营级"});
+        else if(symbolRanks[i] == 8)
+            rows.push({"value": "8", "text": "连级"});
+        else if(symbolRanks[i] == 9)
+            rows.push({"value": "9", "text": "排级"});
+    }
+    return rows;
+}
+/**
+ * 衬线
+ */
+function surroundLineTypeToString(symbolType, surroundLineType) {
+    if(symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL){
+        if(surroundLineType === 0)
+            return "无衬线";
+        else if(surroundLineType === 1)
+            return "有衬线";
+    } else {
+        if(surroundLineType === 0)
+            return "无衬线";
+        else if(surroundLineType === 1)
+            return "内侧衬线";
+        else if(surroundLineType === 2)
+            return "外侧衬线";
+        else if(surroundLineType === 3)
+            return "双侧衬线";
+    }
+}
+function getSurroundLineTypeRows(symbolType) {
+    var rows = [];
+    if(symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL){
+        rows.push({"value": "0", "text": "无衬线"});
+        rows.push({"value": "1", "text": "有衬线"});
+    } else {
+        rows.push({"value": "0", "text": "无衬线"});
+        rows.push({"value": "1", "text": "内侧衬线"});
+        rows.push({"value": "2", "text": "外侧衬线"});
+        rows.push({"value": "3", "text": "双侧衬线"});
+    }
+    return rows;
+}
+/**
+ * 填充
+ */
+function fillGradientModeToString(fillGradientMode) {
+    if(fillGradientMode === "NONE"){
+        return "无渐变";
+    } else if(fillGradientMode === "LINEAR"){
+        return "线性渐变";
+    } else if(fillGradientMode === "RADIAL"){
+        return "辐射渐变";
+    } else {
+        return "无渐变";
+    }
+}
+function getFillGradientModeRows() {
+    var rows = [];
+    rows.push({"value": "NONE", "text": "无渐变"});
+    rows.push({"value": "LINEAR", "text": "线性渐变"});
+    rows.push({"value": "RADIAL", "text": "辐射渐变"});
+    return rows;
+}
+function fillToString(fillSymbolID,selectfeature) {
+        if(fillSymbolID === 0){
+            return "实填充";
+        } else if(fillSymbolID === 1){
+            return "无填充";
+        }
+    if (selectfeature.symbolType !== SuperMap.Plot.SymbolType.SYMBOLTEXT) {
+       if(fillSymbolID === 2){
+            return "向上斜填充";
+        } else if(fillSymbolID === 3){
+            return "十字填充";
+        } else if(fillSymbolID === 4){
+            return "交叉填充";
+        } else if(fillSymbolID === 5){
+            return "反斜线填充";
+        } else if(fillSymbolID === 6){
+            return "水平填充";
+        } else if(fillSymbolID === 7){
+            return "竖直填充";
+        }
+
+    }
+
+}
+function getFillRows(selectfeature) {
+    var rows = [];
+    rows.push({"value": 0, "text": "实填充"});
+    rows.push({"value": 1, "text": "无填充"});
+    if (selectfeature.symbolType !== SuperMap.Plot.SymbolType.SYMBOLTEXT) {
+        rows.push({"value": 2, "text": "向上斜填充"});
+        rows.push({"value": 3, "text": "十字填充"});
+        rows.push({"value": 4, "text": "交叉填充"});
+        rows.push({"value": 5, "text": "反斜线填充"});
+        rows.push({"value": 6, "text": "水平填充"});
+        rows.push({"value": 7, "text": "竖直填充"});
+    }
+    return rows;
+}
+/**
+ * 偏移线类型
+ */
+function positionOffsetTypeToString(positionOffsetType) {
+    if(positionOffsetType === 0){
+        return "直线";
+    } else if(positionOffsetType === 1){
+        return "线粗渐变";
+    }
+}
+function getPositionOffsetTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "直线"});
+    rows.push({"value": "1", "text": "线粗渐变"});
+    return rows;
+}
+/**
+ * 沿线注记
+ */
+function getShowRows() {
+    var rows = [];
+    rows.push({"value": "true", "text": "显示"});
+    rows.push({"value": "false", "text": "不显示"});
+    return rows;
+}
+function showToString(show){
+    if(show === true){
+        return "显示";
+    } else if(show === false){
+        return "不显示";
+    }
+}
+function relLineTextToString(relLineText) {
+    if(relLineText === SuperMap.Plot.RelLineText.ONLINE)
+        return "线上";
+    else if(relLineText === SuperMap.Plot.RelLineText.ONLEFTLINE)
+        return "线左";
+    else if(relLineText === SuperMap.Plot.RelLineText.ONRIGHTLINE)
+        return "线右";
+    else if(relLineText === SuperMap.Plot.RelLineText.ONBOTHLINE)
+        return "双侧";
+}
+function getRelLineTextRows(){
+    var annotations = [];
+    annotations.push({"value": "0", "text": "线上"});
+    annotations.push({"value": "1", "text": "线左"});
+    annotations.push({"value": "2", "text": "线右"});
+    annotations.push({"value": "3", "text": "双侧"});
+    return annotations;
+}
+/***
+ * 对象间连线
+ */
+function lineRelationTypeToString(lineRelationType) {
+    if (lineRelationType == 0)
+        return "实直线";
+    else if (lineRelationType == 1)
+        return "虚直线";
+    else if (lineRelationType == 2)
+        return "箭头线";
+}
+function getLineRelationTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "实直线"});
+    rows.push({"value": "1", "text": "虚直线"});
+    rows.push({"value": "2", "text": "箭头线"});
+    return rows;
+}
+/**
+ * 航线节点类型
+ */
+function routeNodeTypeToString(routeNodeType) {
+    if (routeNodeType === SuperMap.Plot.RouteNodeType.AIMING)
+        return "瞄准点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.COMMONROUTE)
+        return "普通航路点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.EXPANDING)
+        return "展开点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.INITIAL)
+        return "初始点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.LANCH)
+        return "发射点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.RENDEZVOUS)
+        return "会合点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.STANDBY)
+        return "待机点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.SUPPLY)
+        return "补给点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.TAKEOFF)
+        return "起飞点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.TURNING)
+        return "转弯点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.VISUALINITAL)
+        return "可视初始点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.VOLLEY)
+        return "齐射点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.WEAPONLAUNCH)
+        return "武器发射点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.TARGET)
+        return "目标点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.ATTACK)
+        return "攻击点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.SUPPRESS)
+        return "压制点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.EIGHTSPIRAL)
+        return "八字盘旋点";
+    else if (routeNodeType == SuperMap.Plot.RouteNodeType.HAPPYVALLEY)
+        return "跑马圈点";
+}
+function getRouteNodeTypeRows() {
+    var rows = [];
+    rows.push({"value": "AIMING", "text": "瞄准点"});
+    rows.push({"value": "COMMONROUTE", "text": "普通航路点"});
+    rows.push({"value": "EXPANDING", "text": "展开点"});
+    rows.push({"value": "INITIAL", "text": "初始点"});
+    rows.push({"value": "LANCH", "text": "发射点"});
+    rows.push({"value": "RENDEZVOUS", "text": "会合点"});
+    rows.push({"value": "STANDBY", "text": "待机点"});
+    rows.push({"value": "SUPPLY", "text": "补给点"});
+    rows.push({"value": "TAKEOFF", "text": "起飞点"});
+    rows.push({"value": "TURNING", "text": "转弯点"});
+    rows.push({"value": "VISUALINITAL", "text": "可视初始点"});
+    rows.push({"value": "VOLLEY", "text": "齐射点"});
+    rows.push({"value": "WEAPONLAUNCH", "text": "武器发射点"});
+    rows.push({"value": "TARGET", "text": "目标点"});
+    rows.push({"value": "ATTACK", "text": "攻击点"});
+    rows.push({"value": "SUPPRESS", "text": "压制点"});
+    rows.push({"value": "EIGHTSPIRAL", "text": "八字盘旋点"});
+    rows.push({"value": "HAPPYVALLEY", "text": "跑马圈点"});
+    return rows;
+}
+/**
+ *箭头线
+ */
+function arrowTypeToString(arrowType) {
+    if (arrowType == 0)
+        return "双线箭头";
+    else if (arrowType == 1)
+        return "实心三角形";
+    else if (arrowType == 2)
+        return "无箭头";
+}
+function getArrowTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "双线箭头"});
+    rows.push({"value": "1", "text": "实心三角形"});
+    rows.push({"value": "2", "text": "无箭头"});
+    return rows;
+}
+/**
+ * 扇形区域
+ */
+function radiusTypeToString(radiusType) {
+    if (radiusType == 0)
+        return "不显示";
+    else if (radiusType == 1)
+        return "直线";
+    else if (radiusType == 2)
+        return "箭头线";
+}
+function getRadiusTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "不显示"});
+    rows.push({"value": "1", "text": "直线"});
+    rows.push({"value": "2", "text": "箭头线"});
+    return rows;
+}
+/**
+ * 标注框
+ */
+function textBoxTypeToString(textBoxType) {
+    if (textBoxType == 0)
+        return "带角矩形边框";
+    else if (textBoxType == 1)
+        return "矩形边框";
+    else if (textBoxType == 3)
+        return "无边框";
+}
+function getTextBoxTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "带角矩形边框"});
+    rows.push({"value": "1", "text": "矩形边框"});
+    rows.push({"value": "3", "text": "无边框"});
+    return rows;
+}
+/**
+ * 线型标注框
+ */
+function lineMarkingTypeToString(lineMarkingType) {
+    if(lineMarkingType === 1){
+        return "矩形边框";
+    } else if(lineMarkingType === 2){
+        return "线型底边";
+    }
+}
+function getLineMarkingTypeRows() {
+    var rows = [];
+    rows.push({"value": "1", "text": "矩形边框"});
+    rows.push({"value": "2", "text": "线型底边"});
+    return rows;
+}
+/**
+ * 复合箭头
+ * 箭头、箭身、箭尾
+ */
+function getArrowHeadTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "双线箭头"});
+    rows.push({"value": "2", "text": "燕尾箭头"});
+    rows.push({"value": "3", "text": "实心三角形"});
+    rows.push({"value": "6", "text": "新燕尾箭头"});
+    rows.push({"value": "-1", "text": "无箭头"});
+    return rows;
+}
+function arrowHeadTypeToString(arrowHeadType) {
+    if (arrowHeadType == 0)
+        return "双线箭头";
+    else if (arrowHeadType == 2)
+        return "燕尾箭头";
+    else if (arrowHeadType == 3)
+        return "实心三角形";
+    else if (arrowHeadType == 6)
+        return "新燕尾箭头";
+    else if (arrowHeadType == -1)
+        return "无箭头";
+}
+function arrowBodyTypeToString(arrowBodyType) {
+    if (arrowBodyType == 0)
+        return "折线";
+    else if (arrowBodyType == 1)
+        return "贝塞尔曲线";
+    else if (arrowBodyType == 5)
+        return "新增箭身";
+
+}
+function getArrowBodyTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "折线"});
+    rows.push({"value": "1", "text": "贝塞尔曲线"});
+    rows.push({"value": "5", "text": "新增箭身"});
+    return rows;
+}
+function arrowTailTypeToString(arrowTailType) {
+    if (arrowTailType == 0)
+        return "无箭尾";
+    else if (arrowTailType == 1)
+        return "直线箭尾";
+    else if (arrowTailType == 3)
+        return "燕尾箭尾";
+}
+function getArrowTailTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "无箭尾"});
+    rows.push({"value": "1", "text": "直线箭尾"});
+    rows.push({"value": "3", "text": "燕尾箭尾"});
+    return rows;
+}
+/**
+ * 线面标号子标号
+ */
+function libIDToString(libID) {
+    if (libID == 421)
+        return "421(警用库)";
+    else if (libID == 100)
+        return "100(军队库)";
+    else if (libID == 123)
+        return "123(武警库)";
+    else if (libID == 900)
+        return "900(人防库)";
+}
+function subSymbolsTypeString(subSymbolsLength,geometry){
+    if(subSymbolsLength===0){
+        return "";
+    }else {
+        if(geometry.libID===100){
+            if(geometry.getSubSymbols()[0].code === 100){
+                return "陆军";
+            }else if(geometry.getSubSymbols()[0].code === 200){
+                return "海军";
+            }else if(geometry.getSubSymbols()[0].code === 300) {
+                return "空军";
+            }
+        }else if(geometry.libID===123){
+            if(geometry.getSubSymbols()[0].code === 10101){
+                return "武装警察部队";
+            }else if(geometry.getSubSymbols()[0].code === 10102){
+                return "防爆装甲";
+            }else if(geometry.getSubSymbols()[0].code === 10103) {
+                return "火炮";
+            }
+        }else if(geometry.libID===900){
+            if(geometry.getSubSymbols()[0].code === 910200){
+                return "人民防空重点城市";
+            }else if(geometry.getSubSymbols()[0].code === 910300){
+                return "人民防空基本指挥所";
+            }else if(geometry.getSubSymbols()[0].code === 910402) {
+                return "水路抢修专业队";
+            }
+        }else if(geometry.libID===0){
+            if(geometry.getSubSymbols()[0].code === 9){
+                return "刑警";
+            }else if(geometry.getSubSymbols()[0].code === 80103){
+                return "交警";
+            }else if(geometry.getSubSymbols()[0].code === 80109){
+                return "专业警";
+            }
+        }
+    }
+}
+function getSubSymbolsTypeRows(geometry){
+    var rows = [];
+    rows.push({"value": "0", "text": ""});
+    if(geometry.libID===100){
+        rows.push({"value": "100", "text": "陆军"});
+        rows.push({"value": "200", "text": "海军"});
+        rows.push({"value": "300", "text": "空军"});
+    }else if(geometry.libID===123){
+        rows.push({"value": "10101", "text": "武装警察部队"});
+        rows.push({"value": "10102", "text": "防爆装甲"});
+        rows.push({"value": "10103", "text": "火炮"});
+    }else if(geometry.libID===900){
+        rows.push({"value": "910200", "text": "人民防空重点城市"});
+        rows.push({"value": "910300", "text": "人民防空基本指挥所"});
+        rows.push({"value": "910402", "text": "水路抢修专业队"});
+    }else if(geometry.libID===0){
+        rows.push({"value": "9", "text": "刑警"});
+        rows.push({"value": "80103", "text": "交警"});
+        rows.push({"value": "80109", "text": "专业警"});
+    }
+    return rows;
+}
+/**
+ * 文字对齐
+ * 注记指示框、标注框、多角标注框、线型标注框
+ */
+function fontAlignTypeToString(alignType) {
+    if(alignType === 'lm')
+        return "左对齐";
+    else if(alignType === 'rm')
+        return "右对齐";
+    else if(alignType === 'cm')
+        return "中间对齐";
+    else if(alignType === 'lt')
+        return "左上对齐";
+    else if(alignType === 'lb')
+        return "左下对齐";
+    else if(alignType === 'rt')
+        return "右上对齐";
+    else if(alignType === 'rb')
+        return "右下对齐";
+}
+function getFontAlignTypeRows() {
+    var rows = [];
+    rows.push({"value": "0", "text": "左对齐"});
+    rows.push({"value": "1", "text": "右对齐"});
+    rows.push({"value": "2", "text": "居中对齐"});
+    rows.push({"value": "3", "text": "左上对齐"});
+    rows.push({"value": "4", "text": "左下对齐"});
+    rows.push({"value": "5", "text": "右上对齐"});
+    rows.push({"value": "6", "text": "右下对齐"});
+    return rows;
+}
+function fontAlignTypeValue (value) {
+    if (value === '0'){
+        return 'lm';
+    }else if(value === '1'){
+        return 'rm';
+    }else if (value === '2'){
+        return 'cm';
+    }else if (value === '3'){
+        return 'lt';
+    }else if (value === '4'){
+        return 'lb';
+    }else if (value === '5'){
+        return 'rt';
+    }else if (value === '6'){
+        return 'rb';
+    }
+}
+
+
+//判断标号类型分类
+function checkSymbolType(selectfeature){
+   if( selectfeature.symbolType === SuperMap.Plot.SymbolType.GROUPOBJECT ||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.FLAGGROUP||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.AIRROUTE||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYROUTE||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.MISSILEROUTE||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.ROUTENODE||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.LITERATESIGN||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.SATELLITE||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.SATELLITETIMEWINDOWS||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYDEPLOYMENT||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.AIRDEPLOYMENT||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT||
+       selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT1 ||
+       selectfeature.symbolType===SuperMap.Plot.SymbolType.TEXTSYMBOL
+      ) {
+       return false;
+   }else{
+       return true;
+   }
+}
+
+function isCanAddText(selectfeature){
+        if( selectfeature.symbolType === SuperMap.Plot.SymbolType.POLYLINESYMBOL ||//直线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.PARALLELOGRAM ||//平行四边形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.CIRCLESYMBOL ||//圆
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ELLIPSESYMBOL ||//椭圆
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.REGULARPOLYGON ||//正多边形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ARBITRARYPOLYGONSYMBOL ||//任意多边形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.POLYBEZIERSYMBOL ||//贝塞尔曲线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.POLYBEZIERCLOSESYMBOL ||//闭合贝塞尔曲线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.KIDNEY ||//集结地
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.BRACESYMBOL ||//大括号
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.TRAPEZOIDSYMBOL ||//梯形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.RECTANGLESYMBOL ||//矩形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.CHORDSYMBOL ||//弓形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.PIESYMBOL ||//扇形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ARCSYMBOL ||//弧线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.PARALLELLINE ||//平行线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ANNOFRAMESYMBOL ||//注记指示框
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.CONCENTRICCIRCLE||//同心圆
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.COMBINATIONALCIRCLE||//组合圆
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ANNOFRAMESYMBOLM ||//多角标注框
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXTBOX ||//标注框
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.FREECURVE ||//自由曲线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.NODECHAIN ||//节点链
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.RUNWAY ||//跑道形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.CURVEEIGHT ||//8字形
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ARROWLINE ||//箭头线
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.PATHTEXT ||//沿线注记
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.POLYGONREGION ||//多边形区域
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.ARCREGION ||//扇形区域
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.LINEMARKING //线型标注
+        ){
+            return true;
+        }
+}
+
+
+
+function symbolPropertyObject(selectfeature,styleObject) {
+
+    //线形:线宽
+    var lineWidthObj = new Object();
+    lineWidthObj.group = group[4];
+    lineWidthObj.name = displayLineStyleName[0];
+    lineWidthObj.editor = "text";
+    if(styleObject.weight !==undefined){
+        lineWidthObj.value = styleObject.weight;
+    }else{
+        if(selectfeature.symbolType === SuperMap.Plot.SymbolType.GROUPOBJECT){
+            lineWidthObj.value = selectfeature.getStrokeWidth();
+        }else{
+            lineWidthObj.value = styleObject.strokeWidth;
+        }
+    }
+
+
+    //线形:线色
+    var lineColorObj = new Object();
+    lineColorObj.group = group[4];
+    lineColorObj.name = displayLineStyleName[1];
+    lineColorObj.editor = "colorpicker";
+    if(styleObject.color !==undefined){
+        lineColorObj.value = styleObject.color;
+    }else{
+        if(selectfeature.symbolType === SuperMap.Plot.SymbolType.GROUPOBJECT){
+            lineColorObj.value = selectfeature.getStrokeColor();
+        }else{
+            lineColorObj.value = styleObject.strokeColor;
+        }
+    }
+
+    //线形:线型
+    var lineStyleObj = new Object();
+    lineStyleObj.group = group[4];
+    lineStyleObj.name = displayLineStyleName[2];
+    if(styleObject.lineSymbolID !== undefined){
+        lineStyleObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getLineStyleRows()}};
+        lineStyleObj.value = lineStyleToString(styleObject.lineSymbolID);
+    }else{
+        lineStyleObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": get8CLineStyleRows() }};
+        lineStyleObj.value = styleObject.strokeDashstyle;
+    }
+
+
+    //线形:线透明度
+    var lineOpaqueRateObj = new Object();
+    lineOpaqueRateObj.group = group[4];
+    lineOpaqueRateObj.name = displayLineStyleName[3];
+    lineOpaqueRateObj.editor = "text";
+    if( styleObject.opacity !==undefined){
+        lineOpaqueRateObj.value = styleObject.opacity;
+    }else{
+        lineOpaqueRateObj.value = styleObject.strokeOpacity;
+    }
+
+
+    //衬线:衬线类型
+    var surroundLineTypeObj = new Object();
+    surroundLineTypeObj.group = group[5];
+    surroundLineTypeObj.name = displaySurroundLineName[0];
+    surroundLineTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getSurroundLineTypeRows(selectfeature.symbolType)}};
+    if(checkSymbolType(selectfeature)===true){
+        surroundLineTypeObj.value = surroundLineTypeToString(selectfeature.symbolType, selectfeature.getSurroundLineType());
+    }
+
+    //衬线:衬线宽
+    var surroundLineWidthObj = new Object();
+    surroundLineWidthObj.group = group[5];
+    surroundLineWidthObj.name = displaySurroundLineName[1];
+    surroundLineWidthObj.editor = "text";
+    surroundLineWidthObj.value = styleObject.surroundLineWidth;
+
+    //衬线:衬线色
+    var surroundLineColorObj = new Object();
+    surroundLineColorObj.group = group[5];
+    surroundLineColorObj.name = displaySurroundLineName[2];
+    surroundLineColorObj.editor = "colorpicker";
+    surroundLineColorObj.value = styleObject.surroundLineColor;
+
+    //衬线:衬线透明度
+    var surroundLineColorOpaObj = new Object();
+    surroundLineColorOpaObj.group = group[5];
+    surroundLineColorOpaObj.name = displaySurroundLineName[3];
+    surroundLineColorOpaObj.editor = "text";
+    surroundLineColorOpaObj.value = styleObject.surroundLineColorOpacity;
+
+    //填充:填充
+    var fillObj = new Object();
+    fillObj.group = group[6];
+    fillObj.name = displayFillStyleName[0];
+    fillObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getFillRows(selectfeature)}};
+    fillObj.value = fillToString(parseFloat(styleObject.fillSymbolID),selectfeature);
+
+    //填充:填充色
+    var fillforeColorObj = new Object();
+    fillforeColorObj.group = group[6];
+    fillforeColorObj.name = displayFillStyleName[1];
+    fillforeColorObj.editor = "colorpicker";
+    fillforeColorObj.value = styleObject.fillColor;
+
+    //填充:填充透明度
+    var fillOpaqueRateObj = new Object();
+    fillOpaqueRateObj.group = group[6];
+    fillOpaqueRateObj.name = displayFillStyleName[2];
+    fillOpaqueRateObj.editor = "text";
+    fillOpaqueRateObj.value = styleObject.fillOpacity;
+
+    //填充:渐变填充方式
+    var fillGradientModeObj = new Object();
+    fillGradientModeObj.group = group[6];
+    fillGradientModeObj.name = displayFillStyleName[3];
+    fillGradientModeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getFillGradientModeRows()}};
+    fillGradientModeObj.value = fillGradientModeToString(styleObject.fillGradientMode);
+
+    //填充:填充背景色
+    var fillBackColorObj = new Object();
+    fillBackColorObj.group = group[6];
+    fillBackColorObj.name = displayFillStyleName[4];
+    fillBackColorObj.editor = "colorpicker";
+    fillBackColorObj.value = styleObject.fillBackColor;
+
+    //填充:填充背景透明度
+    var fillBackOpacityObj = new Object();
+    fillBackOpacityObj.group = group[6];
+    fillBackOpacityObj.name = displayFillStyleName[5];
+    fillBackOpacityObj.editor = "text";
+    fillBackOpacityObj.value = styleObject.fillBackOpacity;
+
+    //填充:渐变填充角度
+    var fillBackAngleObj = new Object();
+    fillBackAngleObj.group = group[6];
+    fillBackAngleObj.name = displayFillStyleName[6];
+    fillBackAngleObj.editor = "text";
+    fillBackAngleObj.value = styleObject.fillAngle;
+
+    //填充:渐变填充水平偏移
+    var fillBackXObj = new Object();
+    fillBackXObj.group = group[6];
+    fillBackXObj.name = displayFillStyleName[7];
+    fillBackXObj.editor = "text";
+    fillBackXObj.value = styleObject.fillCenterOffsetX;
+
+    //填充:渐变填充竖直偏移
+    var fillBackYObj = new Object();
+    fillBackYObj.group = group[6];
+    fillBackYObj.name = displayFillStyleName[8];
+    fillBackYObj.editor = "text";
+    fillBackYObj.value = styleObject.fillCenterOffsetY;
+
+    //注记:注记内容
+    var textContentObj = new Object();
+    textContentObj.group = group[7];
+    textContentObj.name = displayTextContentName[0];
+    textContentObj.editor = "text";
+    textContentObj.value = selectfeature.getTextContent();
+    //注记:注记位置
+    var markPosObj  = new Object();
+    markPosObj.group = group[7];
+    markPosObj.name = displayTextContentName[1];
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.PATHTEXT) {
+        markPosObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getRelLineTextRows(selectfeature.getRelLineText()) }};
+        markPosObj.value = relLineTextToString(selectfeature.getRelLineText());
+    }else{
+        markPosObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getAnnotationRows(selectfeature) }};
+        markPosObj.value = annotationToString(selectfeature.getTextPosition());
+    }
+    //注记:注记字体大小
+    var fontSizeObj  = new Object();
+    fontSizeObj.group = group[7];
+    fontSizeObj.name = displayTextContentName[2];
+    fontSizeObj.editor = "text";
+    fontSizeObj.value = styleObject.fontSize;
+
+    //注记:注记字体颜色
+    var fontColorObj  = new Object();
+    fontColorObj.group = group[7];
+    fontColorObj.name = displayTextContentName[3];
+    fontColorObj.editor = "colorpicker";
+    fontColorObj.value = styleObject.fontColor;
+
+
+    //注记:注记字体名称
+    var fontFamilyObj  = new Object();
+    fontFamilyObj.group = group[7];
+    fontFamilyObj.name = displayTextContentName[4];
+    fontFamilyObj.editor = "text";
+    fontFamilyObj.value = styleObject.fontFamily;
+
+
+    //注记:注记与标号的间距
+    var fontSpaceObj  = new Object();
+    fontSpaceObj.group = group[7];
+    fontSpaceObj.name = displayTextContentName[5];
+    fontSpaceObj.editor = "text";
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.PATHTEXT || selectfeature.symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL){
+        fontSpaceObj.value = selectfeature.getSpace();
+    }
+    //注记:字间距
+    var fontSpaceObj1  = new Object();
+    fontSpaceObj1.group = group[7];
+    fontSpaceObj1.name = displayTextContentName[6];
+    fontSpaceObj1.editor = "text";
+    fontSpaceObj1.value = styleObject.fontSpace;
+
+    //注记:字宽百分比
+    var fontPercentObj  = new Object();
+    fontPercentObj.group = group[7];
+    fontPercentObj.name = displayTextContentName[7];
+    fontPercentObj.editor = "text";
+    fontPercentObj.value = styleObject.fontPercent;
+    //注记:字体描边
+    var fontStrokeObj  = new Object();
+    fontStrokeObj.group = group[7];
+    fontStrokeObj.name = displayTextContentName[8];
+    fontStrokeObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+    fontStrokeObj.value = checkboxValueToString(styleObject.fontStroke);
+    //注记:描边色
+    var fontStrokeColorObj  = new Object();
+    fontStrokeColorObj.group = group[7];
+    fontStrokeColorObj.name = displayTextContentName[9];
+    fontStrokeColorObj.editor = "colorpicker";
+    fontStrokeColorObj.value = styleObject.fontStrokeColor;
+    //注记:描边宽度
+    var fontStrokeWidthObj  = new Object();
+    fontStrokeWidthObj.group = group[7];
+    fontStrokeWidthObj.name = displayTextContentName[10];
+    fontStrokeWidthObj.editor = "text";
+    fontStrokeWidthObj.value = styleObject.fontStrokeWidth;
+    //注记:文字背景
+    var fontBackObj  = new Object();
+    fontBackObj.group = group[7];
+    fontBackObj.name = displayTextContentName[11];
+    fontBackObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+    fontBackObj.value = checkboxValueToString(styleObject.fontBackground);
+    //注记:背景色
+    var fontBackColorObj  = new Object();
+    fontBackColorObj.group = group[7];
+    fontBackColorObj.name = displayTextContentName[12];
+    fontBackColorObj.editor = "colorpicker";
+    fontBackColorObj.value = styleObject.fontBackgroundColor;
+    //注记:文字阴影
+    var fontShadowObj  = new Object();
+    fontShadowObj.group = group[7];
+    fontShadowObj.name = displayTextContentName[13];
+    fontShadowObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+    fontShadowObj.value = checkboxValueToString(styleObject.fontShadow);
+    //注记:阴影色
+    var fontShadowColorObj  = new Object();
+    fontShadowColorObj.group = group[7];
+    fontShadowColorObj.name = displayTextContentName[14];
+    fontShadowColorObj.editor = "colorpicker";
+    fontShadowColorObj.value = styleObject.fontShadowColor;
+    //注记:阴影偏移量X
+    var fontShadowOffsetXObj  = new Object();
+    fontShadowOffsetXObj.group = group[7];
+    fontShadowOffsetXObj.name = displayTextContentName[15];
+    fontShadowOffsetXObj.editor = "text";
+    fontShadowOffsetXObj.value = styleObject.fontShadowOffsetX;
+    //注记:阴影偏移量Y
+    var fontShadowOffsetYObj  = new Object();
+    fontShadowOffsetYObj.group = group[7];
+    fontShadowOffsetYObj.name = displayTextContentName[16];
+    fontShadowOffsetYObj.editor = "text";
+    fontShadowOffsetYObj.value = styleObject.fontShadowOffsetY;
+
+
+    var rows = [];
+    //线形
+    var lineRows = [];
+    lineRows.push(lineWidthObj);
+    lineRows.push(lineColorObj);
+    lineRows.push(lineStyleObj);
+    lineRows.push(lineOpaqueRateObj);
+    //衬线
+    var surroundLineRows =[];
+    surroundLineRows.push(surroundLineTypeObj);
+    surroundLineRows.push(surroundLineWidthObj);
+    surroundLineRows.push(surroundLineColorObj);
+    surroundLineRows.push(surroundLineColorOpaObj);
+    //填充
+    var fillRows =[];
+    fillRows.push(fillObj);
+    fillRows.push(fillGradientModeObj);
+    if(styleObject.fillGradientMode === "NONE" && styleObject.fillSymbolID === 0){
+        fillRows.push(fillforeColorObj);
+        fillRows.push(fillOpaqueRateObj);
+    }else if(styleObject.fillGradientMode === "NONE" &&
+        styleObject.fillSymbolID !== 0 &&
+        styleObject.fillSymbolID !== 1){
+        fillRows.push(fillforeColorObj);
+        fillRows.push(fillOpaqueRateObj);
+        fillRows.push(fillBackColorObj);
+        fillRows.push(fillBackOpacityObj);
+    }else if(styleObject.fillGradientMode !== "NONE"){
+        fillRows.push(fillforeColorObj);
+        fillRows.push(fillOpaqueRateObj);
+        fillRows.push(fillBackColorObj);
+        if(styleObject.fillGradientMode === "LINEAR"){
+            fillRows.push(fillBackAngleObj);
+        }
+        fillRows.push(fillBackXObj);
+        if(styleObject.fillGradientMode === "RADIAL"){
+            fillRows.push(fillBackYObj);
+        }
+    }
+
+
+
+    //文字
+    var textRows = [];
+    textRows.push(textContentObj);
+    textRows.push(fontColorObj);
+    textRows.push(fontFamilyObj);
+    textRows.push(fontSizeObj);
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.PATHTEXT ||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL) {
+        textRows.push(markPosObj);
+        if(selectfeature.getTextPosition() !== 8){
+            textRows.push(fontSpaceObj);
+        }
+    }
+    if(selectfeature.symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL ||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.TEXTSYMBOL
+    ){
+        textRows.push(fontPercentObj);
+        textRows.push(fontSpaceObj1);
+        textRows.push(fontStrokeObj);
+        if (styleObject.fontStroke === true) {
+            textRows.push(fontStrokeColorObj);
+            textRows.push(fontStrokeWidthObj);
+        }
+        textRows.push(fontBackObj);
+        if(styleObject.fontBackground === true){
+            textRows.push(fontBackColorObj);
+        }
+        textRows.push(fontShadowObj);
+        if (styleObject.fontShadow === true) {
+            textRows.push(fontShadowColorObj);
+            textRows.push(fontShadowOffsetXObj);
+            textRows.push(fontShadowOffsetYObj);
+        }
+    }
+
+
+
+     //图元文本
+    if(selectfeature.symbolType === SuperMap.Plot.SymbolType.TEXTSYMBOL){
+        rows = rows.concat(textRows);
+    }
+    if(selectfeature.symbolType === SuperMap.Plot.SymbolType.GROUPOBJECT||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.FLAGGROUP||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.AIRROUTE||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYROUTE||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.MISSILEROUTE||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.LITERATESIGN||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.AIRDEPLOYMENT||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT1||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.SATELLITETIMEWINDOWS||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYDEPLOYMENT
+    ){
+        rows = rows.concat(lineRows);
+       if(selectfeature.symbolType === SuperMap.Plot.SymbolType.AIRDEPLOYMENT||
+           selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYDEPLOYMENT){
+           rows = rows.concat(fillRows);
+       }
+        if(selectfeature.symbolType === SuperMap.Plot.SymbolType.NAVYDEPLOYMENT||
+            selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT1){
+            rows.push(textContentObj);
+            rows.push(fontColorObj);
+            rows.push(fontFamilyObj);
+            rows.push(fontSizeObj);
+        }
+    }
+
+    //点标号自己独有属性
+    if(selectfeature.symbolType === SuperMap.Plot.SymbolType.DOTSYMBOL){
+        //常用:点:旋转角度
+        var dotSymbolRotateObj  = new Object();
+        dotSymbolRotateObj.group = group[3];
+        dotSymbolRotateObj.name = displayNameDot[0];
+        dotSymbolRotateObj.editor = "text";
+        dotSymbolRotateObj.value = selectfeature.getRotate();
+        //常用:点:随图缩放
+        var dotScaleByMap  = new Object();
+        dotScaleByMap.group = group[3];
+        dotScaleByMap.name = displayNameDot[1];
+        dotScaleByMap.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+        dotScaleByMap.value = checkboxValueToString(selectfeature.getScaleByMap());
+        //常用:点:镜像
+        var dotSymbolNegativeImageObj  = new Object();
+        dotSymbolNegativeImageObj.group = group[3];
+        dotSymbolNegativeImageObj.name = displayNameDot[2];
+        dotSymbolNegativeImageObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+        dotSymbolNegativeImageObj.value = checkboxValueToString(selectfeature.getNegativeImage());
+        //常用:点:标号级别
+        var dotSymbolRankObj  = new Object();
+        dotSymbolRankObj.group = group[3];
+        dotSymbolRankObj.name = displayNameDot[3];
+        dotSymbolRankObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getSymbolRankRows(selectfeature) }};
+        dotSymbolRankObj.value = symbolRankToString(selectfeature.getSymbolRank());
+        //常用:点:位置点偏移
+        var dotPositionOffset  = new Object();
+        dotPositionOffset.group = group[3];
+        dotPositionOffset.name = displayNameDot[4];
+        dotPositionOffset.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+        dotPositionOffset.value = checkboxValueToString(selectfeature.getPositionOffset());
+        //常用:点:偏移线类型
+        var dotPositionOffsetType  = new Object();
+        dotPositionOffsetType.group = group[3];
+        dotPositionOffsetType.name = displayNameDot[5];
+        dotPositionOffsetType.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getPositionOffsetTypeRows() }};
+        dotPositionOffsetType.value = positionOffsetTypeToString(selectfeature.getPositionOffsetType());
+        //常用:点:宽高限定
+        var dotSymbolWidthHeightLimit  = new Object();
+        dotSymbolWidthHeightLimit.group = group[3];
+        dotSymbolWidthHeightLimit.name = displayNameDot[6];
+        dotSymbolWidthHeightLimit.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+        dotSymbolWidthHeightLimit.value = checkboxValueToString(selectfeature.getWidthHeightLimit());
+        //常用:点:军标大小
+        var dotSymbolWidthObj = new Object();
+        dotSymbolWidthObj.group = group[3];
+        dotSymbolWidthObj.name = displayNameDot[7];
+        dotSymbolWidthObj.editor = "text";
+        dotSymbolWidthObj.value = selectfeature.getSymbolSize().w;
+        var dotSymbolHeightObj = new Object();
+        dotSymbolHeightObj.group = group[3];
+        dotSymbolHeightObj.name = displayNameDot[8];
+        dotSymbolHeightObj.editor = "text";
+        dotSymbolHeightObj.value = selectfeature.getSymbolSize().h;
+
+        var dotSymbolRows = [];
+        dotSymbolRows.push(dotSymbolRotateObj);
+        dotSymbolRows.push(dotScaleByMap);
+        dotSymbolRows.push(dotSymbolNegativeImageObj);
+        dotSymbolRows.push(dotSymbolRankObj);
+        dotSymbolRows.push(dotPositionOffset);
+        dotSymbolRows.push(dotPositionOffsetType);
+        dotSymbolRows.push(dotSymbolWidthHeightLimit);
+        dotSymbolRows.push(dotSymbolWidthObj);
+        dotSymbolRows.push(dotSymbolHeightObj);
+        dotSymbolRows = dotSymbolRows.concat(lineRows);
+        dotSymbolRows = dotSymbolRows.concat(surroundLineRows);
+        dotSymbolRows = dotSymbolRows.concat(fillRows);
+        dotSymbolRows = dotSymbolRows.concat(textRows);
+        rows = rows.concat(dotSymbolRows);
+    }
+
+    if(selectfeature.symbolType !== SuperMap.Plot.SymbolType.DOTSYMBOL && checkSymbolType(selectfeature) === true){
+        var algoSymbolRows =[];
+        //线面标号子标号
+        for (var i = 0; i < selectfeature.getSubSymbols().length; i++) {
+            var objectSubCode = new Object();
+            objectSubCode.group = group[8];
+            objectSubCode.name = displayName[3];
+            objectSubCode.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getSubSymbolsTypeRows(selectfeature) }};
+            objectSubCode.index = i;
+            objectSubCode.value = selectfeature.getSubSymbols()[i].code;
+            algoSymbolRows.push(objectSubCode);
+        }
+        if((0 === selectfeature.getSubSymbols().length && selectfeature.libID === 0 && selectfeature.code === 1025)||
+            (0 === selectfeature.getSubSymbols().length && selectfeature.libID === 100 && selectfeature.code === 25200)||
+            (0 === selectfeature.getSubSymbols().length && selectfeature.libID === 100 && selectfeature.code === 3020901)||
+            (0 === selectfeature.getSubSymbols().length && selectfeature.libID === 100 && selectfeature.code === 23400) ||
+            (0 === selectfeature.getSubSymbols().length && selectfeature.libID === 100 && selectfeature.code === 30800) ||
+            (0 === selectfeature.getSubSymbols().length && selectfeature.libID === 100 && selectfeature.code === 26400)
+        ){
+            var objectSubCode1 = new Object();
+            objectSubCode1.group = group[8];
+            objectSubCode1.name = displayName[3];
+            objectSubCode1.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getSubSymbolsTypeRows(selectfeature) }};
+            objectSubCode1.index = i;
+            objectSubCode1.value = subSymbolsTypeString(selectfeature.getSubSymbols().length,selectfeature);
+            algoSymbolRows.push(objectSubCode1);
+        }
+        if(selectfeature.code === 1025 && selectfeature.getSubSymbols().length > 0){
+            var objectLibID = new Object();
+            objectLibID.group = group[8];
+            objectLibID.name = displayName[2];
+            objectLibID.editor = "text";
+            objectLibID.value = libIDToString(selectfeature.getSubSymbols()[0].libID);
+            algoSymbolRows.push(objectLibID);
+        }
+        //四个点以上含4个点可以设置成折线显示
+        if (typeof selectfeature.isCanPolyLineConnectCode !== "undefined" && selectfeature.isCanPolyLineConnectCode()=== true ) {
+            var algoLineType = new Object();
+            algoLineType.group = groupNew[8];
+            algoLineType.name = displayNameNew[20];
+            algoLineType.editor = {"type": 'checkbox', "options": {"on": true, "off": false}};
+            algoLineType.value = checkboxValueToString(selectfeature.getPolylineConnectLocationPoint());
+            algoSymbolRows.push(algoLineType);
+        }
+        algoSymbolRows = algoSymbolRows.concat(lineRows);
+        algoSymbolRows = algoSymbolRows.concat(surroundLineRows);
+        algoSymbolRows = algoSymbolRows.concat(fillRows);
+        if(isCanAddText(selectfeature)===true){
+            algoSymbolRows = algoSymbolRows.concat(textRows);
+        }
+        rows = rows.concat(algoSymbolRows);
+    }
+
+    //注记指示框、多角标注框、标注框、线型标注框
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.ANNOFRAMESYMBOL||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.ANNOFRAMESYMBOLM||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXTBOX||
+        selectfeature.symbolType === SuperMap.Plot.SymbolType.LINEMARKING){
+        //文字对齐方式
+        var fontAlignType  = new Object();
+        fontAlignType.group = group[7];
+        fontAlignType.name = displayNameNew[21];
+        fontAlignType.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getFontAlignTypeRows() }};
+        fontAlignType.value =  fontAlignTypeToString(styleObject.labelAlign);
+        rows.push(fontAlignType);
+        //标注框边框
+        if(selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXTBOX){
+            //标注框边框
+            var textBoxTypeObj  = new Object();
+            textBoxTypeObj.group = groupNew[3];
+            textBoxTypeObj.name = displayNameNew[9];
+            textBoxTypeObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getTextBoxTypeRows() }};
+            textBoxTypeObj.value = textBoxTypeToString(selectfeature.getTextBoxType());
+            //圆角边框
+            var roundBoxObj  = new Object();
+            roundBoxObj.group = groupNew[3];
+            roundBoxObj.name = displayNameNew[10];
+            roundBoxObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+            roundBoxObj.value = checkboxValueToString(selectfeature.getRoundBox());
+
+            rows.push(textBoxTypeObj);
+            rows.push(roundBoxObj);
+        }
+        //线型标注框边框
+        if(selectfeature.symbolType === SuperMap.Plot.SymbolType.LINEMARKING){
+            var lineMarkingTextBoxTypeObj  = new Object();
+            lineMarkingTextBoxTypeObj.group = groupNew[3];
+            lineMarkingTextBoxTypeObj.name = displayNameNew[9];
+            lineMarkingTextBoxTypeObj.editor = { "type": 'combobox', "options": { "valueField": 'value', "textField": 'text', "data": getLineMarkingTypeRows() }};
+            lineMarkingTextBoxTypeObj.value = lineMarkingTypeToString(selectfeature.getTextBoxType());
+            rows.push(lineMarkingTextBoxTypeObj);
+        }
+    }
+
+    //箭头线自己独有属性
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.ARROWLINE && selectfeature.libID === 0) {
+        var arrowTypeStartObj = new Object();
+        arrowTypeStartObj.group = groupNew[1];
+        arrowTypeStartObj.name = displayNameNew[3];
+        arrowTypeStartObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getArrowTypeRows(selectfeature)}};
+        arrowTypeStartObj.value = arrowTypeToString(selectfeature.getStartArrowType());
+        var arrowTypeEndObj = new Object();
+        arrowTypeEndObj.group = groupNew[1];
+        arrowTypeEndObj.name = displayNameNew[4];
+        arrowTypeEndObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getArrowTypeRows(selectfeature)}};
+        arrowTypeEndObj.value = arrowTypeToString(selectfeature.getEndArrowType());
+        rows.push(arrowTypeStartObj);
+        rows.push(arrowTypeEndObj);
+    }
+
+
+    //沿线注记自己独有属性
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.PATHTEXT) {
+        var showPathLineObj = new Object();
+        showPathLineObj.group = groupNew[2];
+        showPathLineObj.name = displayNameNew[5];
+        showPathLineObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getShowRows()}};
+        showPathLineObj.value = showToString(selectfeature.getShowPathLine());
+        var isCurveObj = new Object();
+        isCurveObj.group = groupNew[2];
+        isCurveObj.name = displayNameNew[6];
+        isCurveObj.editor = {"type": 'checkbox', "options": {"on": true, "off": false}};
+        isCurveObj.value = checkboxValueToString(selectfeature.getIsCurveLine());
+        var showPathLineArrowObj = new Object();
+        showPathLineArrowObj.group = groupNew[2];
+        showPathLineArrowObj.name = displayNameNew[7];
+        showPathLineArrowObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getShowRows()}};
+        showPathLineArrowObj.value = showToString(selectfeature.getShowPathLineArrow());
+        var isAvoidObj = new Object();
+        isAvoidObj.group = groupNew[2];
+        isAvoidObj.name = displayNameNew[8];
+        isAvoidObj.editor = {"type": 'checkbox', "options": {"on": true, "off": false}};
+        isAvoidObj.value = checkboxValueToString(selectfeature.getIsAvoidLine());
+        rows.push(showPathLineObj);
+        rows.push(isCurveObj);
+        rows.push(showPathLineArrowObj);
+        if(selectfeature.getRelLineText() === SuperMap.Plot.RelLineText.ONLINE){
+            rows.push(isAvoidObj);
+        }
+    }
+
+    //对象间连线
+    if (selectfeature.symbolType ===  SuperMap.Plot.SymbolType.LINERELATION) {
+        var lineRelationTypeObj = new Object();
+        lineRelationTypeObj.name = displayNameNew[19];
+        lineRelationTypeObj.value = lineRelationTypeToString(selectfeature.getLineRelationType());
+        lineRelationTypeObj.group = groupNew[7];
+        lineRelationTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getLineRelationTypeRows()}};
+        rows.push(lineRelationTypeObj);
+    }
+    //扇形区域
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.ARCREGION) {
+        if (selectfeature.radiusLineType != null){
+            var radiusLineTypeObj = new Object();
+            radiusLineTypeObj.name = displayNameNew[12];
+            radiusLineTypeObj.value = radiusTypeToString(selectfeature.getRadiusLineType());
+            radiusLineTypeObj.group = groupNew[4];
+            radiusLineTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getRadiusTypeRows(selectfeature)}};
+            rows.push(radiusLineTypeObj);
+        }
+        if (selectfeature.radiusText != null) {
+            var radiusPosAngleObj = new Object();
+            radiusPosAngleObj.name = displayNameNew[13];
+            radiusPosAngleObj.value = selectfeature.getRadiusTextPos();
+            radiusPosAngleObj.group = groupNew[4];
+            radiusPosAngleObj.editor = "text";
+            var upTextObj = new Object();
+            upTextObj.name = displayNameNew[14];
+            upTextObj.value = selectfeature.getRadiusText(0);
+            upTextObj.group = groupNew[4];
+            upTextObj.editor = "text";
+            var downTextObj = new Object();
+            downTextObj.name = displayNameNew[15];
+            downTextObj.value = selectfeature.getRadiusText(1);
+            downTextObj.group = groupNew[4];
+            downTextObj.editor = "text";
+
+            rows.push(radiusPosAngleObj);
+            rows.push(upTextObj);
+            rows.push(downTextObj);
+        }
+
+    }
+
+    //航线
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.ROUTENODE) {
+        rows = rows.concat(lineRows);
+        var routeNodeTypeObj = new Object();
+        routeNodeTypeObj.name = displayNameNew[17];
+        routeNodeTypeObj.value = routeNodeTypeToString(selectfeature.routeNode.type);
+        routeNodeTypeObj.group = groupNew[6];
+        routeNodeTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getRouteNodeTypeRows()}};
+        var routeNodeRotate = new Object();
+        routeNodeRotate.name = displayNameNew[18];
+        routeNodeRotate.value = selectfeature.routeNode.rotate;
+        routeNodeRotate.group = groupNew[6];
+        routeNodeRotate.editor = "text";
+        rows.push(routeNodeTypeObj);
+        if (selectfeature.routeNode.type === SuperMap.Plot.RouteNodeType.STANDBY) {
+            rows.push(routeNodeRotate);
+        }
+    }
+
+    //对象标注的标注内容和标注边框
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT) {
+        var textContentObj1 = new Object();
+        textContentObj1.group = group[7];
+        textContentObj1.name = displayTextContentName[0];
+        textContentObj1.editor = "text";
+        textContentObj1.value = selectfeature.symbolTexts[0].textContent;
+        rows.push(textContentObj1);
+        if(selectfeature.symbolTexts.length == 2){
+            var textContentObj2 = new Object();
+            textContentObj2.group = group[7];
+            textContentObj2.name = displayTextContentName[0] + "2";
+            textContentObj2.editor = "text";
+            textContentObj2.value = selectfeature.symbolTexts[1].textContent;
+            rows.push(textContentObj2);
+        }
+        rows.push(fontColorObj);
+        rows.push(fontFamilyObj);
+        rows.push(fontSizeObj);
+        var symbolTextFrameObj  = new Object();
+        symbolTextFrameObj.group = groupNew[3];
+        symbolTextFrameObj.name = displayNameNew[11];
+        symbolTextFrameObj.editor = { "type": 'checkbox', "options":{ "on":true, "off":false }};
+        symbolTextFrameObj.value = checkboxValueToString(selectfeature.getFrame());
+        rows.push(symbolTextFrameObj);
+        if(selectfeature.getFrame() === true){
+            rows.push(lineWidthObj);
+            rows.push(lineColorObj);
+            rows.push(lineOpaqueRateObj);
+            rows.push(fillObj);
+            rows.push(fillforeColorObj);
+            rows.push(fillOpaqueRateObj);
+
+
+
+
+        }
+
+    }
+
+
+    //卫星
+    if (selectfeature.symbolType === SuperMap.Plot.SymbolType.SATELLITE) {
+        var visibleObj = new Object();
+        visibleObj.name = displayNameNew[16];
+        visibleObj.value = showToString(selectfeature.getVisible());
+        visibleObj.group = groupNew[5];
+        visibleObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getShowRows()}};
+        rows = rows.concat(lineRows);
+        rows.push(textContentObj);
+        rows.push(fontColorObj);
+        rows.push(fontFamilyObj);
+        rows.push(fontSizeObj);
+        rows.push(visibleObj);
+    }
+
+    //复合箭头自己独有属性
+    if (selectfeature.libID === 22 && selectfeature.code === 1016) {
+        var arrowHeadTypeObj = new Object();
+        arrowHeadTypeObj.group = groupNew[0];
+        arrowHeadTypeObj.name = displayNameNew[0];
+        arrowHeadTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getArrowHeadTypeRows()}};
+        arrowHeadTypeObj.value = arrowHeadTypeToString(selectfeature.getArrowHeadType());
+
+        var arrowBodyTypeObj = new Object();
+        arrowBodyTypeObj.group = groupNew[0];
+        arrowBodyTypeObj.name =  displayNameNew[1];
+        arrowBodyTypeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getArrowBodyTypeRows()}};
+        arrowBodyTypeObj.value = arrowBodyTypeToString(selectfeature.getArrowBodyType());
+
+        var arrowTailTypepeObj = new Object();
+        arrowTailTypepeObj.group = groupNew[0];
+        arrowTailTypepeObj.name = displayNameNew[2];
+        arrowTailTypepeObj.editor = {"type": 'combobox', "options": {"valueField": 'value', "textField": 'text', "data": getArrowTailTypeRows()}};
+        arrowTailTypepeObj.value = arrowTailTypeToString(selectfeature.getArrowTailType());
+
+        rows.push(arrowHeadTypeObj);
+        rows.push(arrowBodyTypeObj);
+        rows.push(arrowTailTypepeObj);
+    }
+    return rows;
+}

+ 100 - 0
js/plottingPanel/SMLInfosPanel.js

@@ -0,0 +1,100 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+L.supermap.plotting.initSMLInfosPanel = function(div, smlInfos, clickTreeNode){
+    var smlInfosPanel = document.getElementById(div);
+
+    var treeNodeStyle = document.createElement("div");
+    treeNodeStyle.style.height = '100%';
+    treeNodeStyle.style.width = '100%';
+    treeNodeStyle.style.border = '1px solid #617775';
+    treeNodeStyle.style.overflow ='scroll';
+
+    var treeNode = document.createElement("div");
+    treeNode.id = "tree";
+    treeNode.className = "ztree";
+
+    treeNodeStyle.appendChild(treeNode);
+
+    smlInfosPanel.appendChild(treeNodeStyle);
+
+    function beforeClickTreeNode(treeId, treeNode){
+        var tree = $.fn.zTree.getZTreeObj(treeId);
+        if (treeNode.isParent) {
+            tree.expandNode(treeNode);
+            if (treeNode.pId===1) {
+                //me.clickSmlFileName = treeNode.name;
+                if(clickTreeNode && typeof(clickTreeNode) === "function"){
+                    clickTreeNode(treeNode.name)
+                }
+                //me.events.triggerEvent("clickTreeNode");
+            }
+            return false;
+        }
+    }
+
+    var setting = {
+        view: {
+            dblClickExpand: false,
+            showLine: true,
+            selectedMulti: false,
+            showIcon:false
+        },
+        data: {
+            simpleData: {
+                enable:true,
+                idKey: "id",
+                pIdKey: "pId",
+                rootPId: 0
+            }
+        },
+        callback: {
+            beforeClick: beforeClickTreeNode
+
+        }
+    };
+
+    var symbolTreeData = analysisSMLInfos(smlInfos);
+    $.fn.zTree.init($("#tree"), setting, symbolTreeData);
+}
+
+function analysisSMLInfos(smlInfos){
+    var treeData = [];
+
+    var cellRootNode = new Object();
+    cellRootNode.id = 1;
+    cellRootNode.pId = 0;
+    cellRootNode.name = "态势图文件列表";
+    cellRootNode.fullName = "态势图文件列表" +"/";
+    treeData.push(cellRootNode);
+
+    var cellId = cellRootNode.id + 1;
+
+    var nid= cellId+1;
+    for(var i = 0; i < smlInfos.length; i++){
+        var info = new SuperMap.Plot.SMLInfoStruct(smlInfos[i]);
+
+        var result = info;
+
+        var rootNode = new Object();
+        rootNode.id = cellId++;
+        rootNode.pId = 1;
+        rootNode.name = smlInfos[i].SMLFileName;
+        treeData.push(rootNode);
+
+
+        cellId = rootNode.id + 1;
+
+        var key = ["SMLAuthor","SMLDepat","SMLDesc","SMLName","SMLSeclevel","SMLTime"];
+        var value = [result.SMLAuthor,result.SMLDepat,result.SMLDesc,result.SMLName,result.SMLSeclevel,result.SMLTime];
+
+        for(var j = 0; j < 6; j++){
+            var chrootNode = new Object();
+            chrootNode.id = cellId++;
+            chrootNode.pId = rootNode.id;
+            chrootNode.name = key[j]+":"+value[j];
+
+            treeData.push(chrootNode);
+        }
+    }
+
+    return treeData;
+}

+ 655 - 0
js/plottingPanel/StylePanel.js

@@ -0,0 +1,655 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+var selectFeatures = [];
+//var groupIndex = 0;
+L.supermap.plotting.initStylePanel = function(div, serverUrl, editControl){
+    editControl.on(SuperMap.Plot.Event.featuresselected, function(event){
+        showFeatureProperty(event);
+    });
+    editControl.on(SuperMap.Plot.Event.featuresmodified, function(event){
+        showFeatureProperty(event);
+    });
+    editControl.on(SuperMap.Plot.Event.featuresunselected, function(event){
+        hideFeatureProperty(event);
+    });
+    function afterModifySelectFeature(rowIndex, rowData, changes){
+        var updated = $('#pg').propertygrid('getChanges', "updated");
+        if(updated.length !== 0 ){
+           //var  groups = $('#pg').propertygrid("groups");
+           // for(var i=0;i<groups.length;i++){
+           //     if(updated[0].group === groups[i].value){
+           //         groupIndex = i;
+           //     }
+           // }
+            new Promise(function(resolve,reject) {
+                if(updated.length !== 0) {
+                    updateSelectFeature(updated[0], selectFeatures, serverUrl);
+                }
+                for(var i = 0; i < selectFeatures.length; i++){
+                    if(selectFeatures[i].graphic){
+                        selectFeatures[i].graphic.updateImage();
+                    }
+                }
+                $('#pg').propertygrid('loadData', collectionPropertyGridRows(selectFeatures));
+                //$('#pg').propertygrid('collapseGroup');
+                //$('#pg').propertygrid('expandGroup',0);
+                //$('#pg').propertygrid('expandGroup',groupIndex);
+                return;
+            }).then(function(selectFeatures) {
+                    for(var i = 0; i < selectFeatures.length; i++){
+                        if(selectFeatures[i].graphic){
+                            selectFeatures[i].graphic.updateImage();
+                        }
+                    }
+                    $('#pg').propertygrid('loadData', collectionPropertyGridRows(selectFeatures));
+                    //$('#pg').propertygrid('collapseGroup');
+                    //$('#pg').propertygrid('expandGroup',0);
+                    return;
+
+                })
+        }
+
+    }
+    var stylePanel = document.getElementById(div);
+    var pg = document.createElement("table");
+    pg.id = "pg";
+    pg.className = "easyui-propertygrid";
+    stylePanel.appendChild(pg);
+    $('#pg').propertygrid({
+        showGroup:true,
+        columns: [[
+            { field: 'name', title: 'Name', width: 100, resizable: true },
+            { field: 'value', title: 'Value', width: 100, resizable: false
+            }
+        ]],
+        onAfterEdit: afterModifySelectFeature
+    });
+}
+
+function showFeatureProperty(event) {
+    for(var index in event.features){
+        var sIndex = SuperMap.Util.indexOf(selectFeatures, event.features[index]);
+        if(sIndex === -1){
+            selectFeatures.push(event.features[index]);
+        }
+    }
+
+    var rows = [];
+    if(selectFeatures.length !== 0){
+        var rows = collectionPropertyGridRows(selectFeatures);
+    }
+    $('#pg').propertygrid('loadData', rows);
+    //$('#pg').propertygrid('collapseGroup');
+    //$('#pg').propertygrid('expandGroup',0);
+    //$('#pg').propertygrid('expandGroup',groupIndex);
+}
+function hideFeatureProperty(event) {
+    for(var index in event.features){
+        var sIndex = SuperMap.Util.indexOf(selectFeatures, event.features[index]);
+        if(sIndex !== -1){
+            selectFeatures.splice(sIndex, 1);
+        }
+    }
+
+    var rows = [];
+    if(selectFeatures.length !== 0){
+        var rows = collectionPropertyGridRows(selectFeatures);
+    }
+    $('#pg').propertygrid('loadData', rows);
+}
+
+function updateSelectFeature(updated, selectfeatures) {
+    var transaction = new SuperMap.Plot.Transaction();
+    L.supermap.plotting.getControl(this.map).getTransManager().add(transaction);
+    for(var i=0;i<selectfeatures.length;i++){
+        var transInfo = new SuperMap.Plot.TransactionInfo();
+        transInfo.layerId = selectfeatures[i].layer._leaflet_id;
+        transInfo.uuid = selectfeatures[i].uuid;
+        if (updated != null) {
+            switch(updated.name) {
+                case displayName[0]:
+                    transInfo.functionName = "setLocked";
+                    transInfo.undoParams = [selectfeatures[i].getLocked()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setLocked(fromCheckboxValue(updated.value));
+                    break;
+                case  displayName[1]:
+                    transInfo.propertyName = "display";
+                    transInfo.undoValue = selectfeatures[i].style.display;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].setStyle({display: updated.value});
+                    break;
+                case displayLineStyleName[0]:
+                    transInfo.propertyName = "weight";
+                    transInfo.undoValue = selectfeatures[i].style.weight;
+                    transInfo.redoValue = parseInt(updated.value);
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.LITERATESIGN){
+                        selectfeatures[i].route.applyTextStyle({weight: parseInt(updated.value)});
+                    }else{
+                        selectfeatures[i].setStyle({weight: parseInt(updated.value)});
+                    }
+                    break;
+                case displayLineStyleName[1]:
+                    transInfo.propertyName = "color";
+                    transInfo.undoValue = [selectfeatures[i].style.color];
+                    transInfo.redoValue = [updated.value];
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.LITERATESIGN){
+                        selectfeatures[i].route.applyTextStyle({color: updated.value});
+                    }else{
+                        selectfeatures[i].setStyle({color: updated.value});
+                    }
+                    break;
+                case displayLineStyleName[2]:
+                    transInfo.propertyName = "lineSymbolID";
+                    transInfo.undoValue = selectfeatures[i].style.lineSymbolID;
+                    transInfo.redoValue = updated.value;
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.LITERATESIGN){
+                        selectfeatures[i].route.applyTextStyle({lineSymbolID: updated.value});
+                    }else{
+                        selectfeatures[i].setStyle({lineSymbolID: updated.value});
+                    }
+                    break;
+                case displayLineStyleName[3]:
+                {
+                    var opacity = parseFloat(updated.value) < 0 ? 0 : parseFloat(updated.value);
+                    opacity = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "opacity";
+                    transInfo.undoValue = selectfeatures[i].style.opacity;
+                    transInfo.redoValue = opacity;
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.LITERATESIGN){
+                        selectfeatures[i].route.applyTextStyle({opacity: opacity});
+                    }else{
+                        selectfeatures[i].setStyle({opacity: opacity});
+                    }
+                }
+                    break;
+                case displaySurroundLineName[0]:
+                    transInfo.functionName = "setSurroundLineType";
+                    transInfo.undoParams = [selectfeatures[i].getSurroundLineType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setSurroundLineType(parseInt(updated.value));
+                    break;
+                case displaySurroundLineName[1]:
+                    transInfo.propertyName = "surroundLineWidth";
+                    transInfo.undoValue = selectfeatures[i].style.surroundLineWidth;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].setStyle({surroundLineWidth: parseInt(updated.value)});
+                    break;
+                case displaySurroundLineName[2]:
+                    transInfo.propertyName = "surroundLineColor";
+                    transInfo.undoValue = selectfeatures[i].style.surroundLineColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].setStyle({surroundLineColor: updated.value});
+                    break;
+                case displaySurroundLineName[3]:
+                {
+                    var opacity = parseFloat(updated.value) < 0 ? 0 : parseFloat(updated.value);
+                    opacity = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "surroundLineColorOpacity";
+                    transInfo.undoValue = selectfeatures[i].style.surroundLineColorOpacity;
+                    transInfo.redoValue = opacity;
+                    selectfeatures[i].setStyle({surroundLineColorOpacity: opacity});
+                }
+                    break;
+                case displayFillStyleName[0]:
+                    transInfo.propertyName = "fillSymbolID";
+                    transInfo.undoValue = selectfeatures[i].style.fillSymbolID;
+                    transInfo.redoValue = parseFloat(updated.value);
+                    selectfeatures[i].style.fillSymbolID = parseFloat(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayFillStyleName[1]:
+                    transInfo.propertyName = "fillColor";
+                    transInfo.undoValue = selectfeatures[i].style.fillColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].style.fillColor = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayFillStyleName[2]:
+                {
+                    var opacity = parseFloat(updated.value) < 0 ? 0 : parseFloat(updated.value);
+                    opacity = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "fillOpacity";
+                    transInfo.undoValue = selectfeatures[i].style.fillOpacity;
+                    transInfo.redoValue = opacity;
+                    selectfeatures[i].style.fillOpacity = opacity;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                }
+                    break;
+                case displayFillStyleName[3]:
+                    transInfo.propertyName = "fillGradientMode";
+                    transInfo.undoValue = selectfeatures[i].style.fillGradientMode;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].style.fillGradientMode = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayFillStyleName[4]:
+                    transInfo.propertyName = "fillBackColor";
+                    transInfo.undoValue = selectfeatures[i].style.fillBackColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].style.fillBackColor = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayFillStyleName[5]:
+                {
+                    var opacity = parseFloat(updated.value) < 0 ? 0 : parseFloat(updated.value);
+                    opacity = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "fillBackOpacity";
+                    transInfo.undoValue = selectfeatures[i].style.fillBackOpacity;
+                    transInfo.redoValue = opacity;
+                    selectfeatures[i].style.fillBackOpacity = opacity;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                }
+                    break;
+                case displayFillStyleName[6]:
+                {
+                    var angle = parseFloat(updated.value) < 0 ? 0 : parseFloat(updated.value);
+                    angle = parseFloat(updated.value) >= 360 ? 0 : parseFloat(updated.value);
+                    transInfo.propertyName = "fillAngle";
+                    transInfo.undoValue = selectfeatures[i].style.fillAngle;
+                    transInfo.redoValue = angle;
+                    selectfeatures[i].style.fillAngle = angle;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                }
+                    break;
+                case displayFillStyleName[7]:
+                {
+                    var X = parseFloat(updated.value) < -1 ? -1 : parseFloat(updated.value);
+                    X = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "fillCenterOffsetX";
+                    transInfo.undoValue = selectfeatures[i].style.fillCenterOffsetX;
+                    transInfo.redoValue = X;
+                    selectfeatures[i].style.fillCenterOffsetX = X;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                }
+                    break;
+
+                case displayFillStyleName[8]:
+                {
+                    var Y = parseFloat(updated.value) < -1 ? -1 : parseFloat(updated.value);
+                    Y = parseFloat(updated.value) > 1 ? 1 : parseFloat(updated.value);
+                    transInfo.propertyName = "fillCenterOffsetY";
+                    transInfo.undoValue = selectfeatures[i].style.fillCenterOffsetY;
+                    transInfo.redoValue = Y;
+                    selectfeatures[i].style.fillCenterOffsetY = Y;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                }
+                    break;
+                case displayNameDot[0]:
+                    transInfo.functionName = "setRotate";
+                    transInfo.undoParams = [selectfeatures[i].getRotate()];
+                    transInfo.redoParams = [parseFloat(updated.value)];
+                    selectfeatures[i].setRotate(parseFloat(updated.value));
+                    break;
+                case displayNameDot[1]:
+                    transInfo.functionName = "setScaleByMap";
+                    transInfo.undoParams = [selectfeatures[i].getScaleByMap()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setScaleByMap(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameDot[2]:
+                    transInfo.functionName = "setNegativeImage";
+                    transInfo.undoParams = [selectfeatures[i].getNegativeImage()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setNegativeImage(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameDot[3]:
+                    transInfo.functionName = "setSymbolRank";
+                    transInfo.undoParams = [selectfeatures[i].getSymbolRank()];
+                    transInfo.redoParams = [updated.value];
+                    selectfeatures[i].setSymbolRank(updated.value);
+                    break;
+                case displayNameDot[4]:
+                    transInfo.functionName = "setPositionOffset";
+                    transInfo.undoParams = [selectfeatures[i].getPositionOffset()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setPositionOffset(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameDot[5]:
+                    transInfo.functionName = "setPositionOffsetType";
+                    transInfo.undoParams = [selectfeatures[i].getPositionOffsetType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setPositionOffsetType(parseInt(updated.value));
+                    break;
+                case displayNameDot[6]:
+                    transInfo.functionName = "setWidthHeightLimit";
+                    transInfo.undoParams = [selectfeatures[i].getWidthHeightLimit()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setWidthHeightLimit(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameDot[7]:
+                    transInfo.functionName = "setSymbolSize";
+                    transInfo.undoParams = [selectfeatures[i].getSymbolSize().w];
+                    transInfo.redoParams = [parseFloat(updated.value), selectfeatures[i].getSymbolSize().h];
+                    selectfeatures[i].setSymbolSize(updated.value, selectfeatures[i].getSymbolSize().h);
+                    break;
+                case displayNameDot[8]:
+                    transInfo.functionName = "setSymbolSize";
+                    transInfo.undoParams = [selectfeatures[i].getSymbolSize().h];
+                    transInfo.redoParams = [selectfeatures[i].getSymbolSize().w, parseFloat(updated.value)];
+                    selectfeatures[i].setSymbolSize(selectfeatures[i].getSymbolSize().w, updated.value);
+                    break;
+                case displayTextContentName[0]:
+                    if (selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT) {
+                        transInfo.functionName = "updateSymbolText";
+                        transInfo.undoParams = [selectfeatures[i].symbolTexts[0].clone(), 0];
+                        selectfeatures[i].symbolTexts[0].textContent = updated.value;
+                        selectfeatures[i].updateSymbolText(selectfeatures[i].symbolTexts[0], 0);
+                        transInfo.redoParams = [selectfeatures[i].symbolTexts[0], 0];
+                    } else if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT1 ||
+                        selectfeatures[i].symbolType ===SuperMap.Plot.SymbolType.PATHTEXT) {
+                        transInfo.functionName = "setTextContent";
+                        transInfo.undoParams = [selectfeatures[i].getTextContent()];
+                        var updatedValueStr=updated.value;
+                        var textContent=updatedValueStr.split(",");
+                        transInfo.redoParams = [textContent];
+                        selectfeatures[i].setTextContent(textContent);
+                    }else{
+                        transInfo.functionName = "setTextContent";
+                        transInfo.undoParams = [selectfeatures[i].getTextContent()];
+                        transInfo.redoParams = [updated.value];
+                        selectfeatures[i].setTextContent(updated.value);
+                    }
+                    break;
+                case displayTextContentName[0] + "2":
+                    selectfeatures[i].symbolTexts[1].textContent = updated.value;
+                    selectfeatures[i].redraw();
+                    break;
+                case displayTextContentName[1]:
+                    if (selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.PATHTEXT) {
+                        transInfo.functionName = "setRelLineText";
+                        transInfo.undoParams = [selectfeatures[i].getRelLineText()];
+                        transInfo.redoParams = [parseInt(updated.value)];
+                        selectfeatures[i].setRelLineText(parseInt(updated.value));
+                    } else {
+                        transInfo.functionName = "setTextPosition";
+                        transInfo.undoParams = [selectfeatures[i].getTextPosition()];
+                        transInfo.redoParams = [parseInt(updated.value)];
+                        selectfeatures[i].setTextPosition(parseInt(updated.value));
+                    }
+                    break;
+                case displayTextContentName[2]:
+                    transInfo.propertyName = "fontSize";
+                    transInfo.undoValue = selectfeatures[i].style.fontSize;
+                    transInfo.redoValue = parseFloat(updated.value);
+                    selectfeatures[i].setStyle({fontSize: parseFloat(updated.value)});
+                    break;
+                case displayTextContentName[3]:
+                    transInfo.propertyName = "fontColor";
+                    transInfo.undoValue = selectfeatures[i].style.fontColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].setStyle({fontColor: updated.value});
+                    break;
+                case displayTextContentName[4]:
+                    transInfo.propertyName = "fontFamily";
+                    transInfo.undoValue = selectfeatures[i].style.fontFamily;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].setStyle({fontFamily: updated.value});
+                    break;
+                case displayTextContentName[5]:
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.SYMBOLTEXT1){
+                        selectfeatures[i].space = updated.value;
+                    }else{
+                        transInfo.functionName = "setSpace";
+                        transInfo.undoParams = [selectfeatures[i].getSpace()];
+                        transInfo.redoParams = [parseInt(updated.value)];
+                        selectfeatures[i].setSpace(parseInt(updated.value));
+                    }
+                    break;
+                case displayTextContentName[6]:
+                    transInfo.propertyName = "fontSpace";
+                    transInfo.undoValue = selectfeatures[i].style.fontSpace;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].style.fontSpace = parseInt(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[7]:
+                    transInfo.propertyName = "fontPercent";
+                    transInfo.undoValue = selectfeatures[i].style.fontPercent;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].style.fontPercent = parseInt(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[8]:
+                    transInfo.propertyName = "fontStroke";
+                    transInfo.undoValue = selectfeatures[i].style.fontStroke;
+                    transInfo.redoValue = fromCheckboxValue(updated.value);
+                    selectfeatures[i].style.fontStroke = fromCheckboxValue(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[9]:
+                    transInfo.propertyName = "fontStrokeColor";
+                    transInfo.undoValue = selectfeatures[i].style.fontStrokeColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].style.fontStrokeColor = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[10]:
+                    transInfo.propertyName = "fontStrokeWidth";
+                    transInfo.undoValue = selectfeatures[i].style.fontStrokeWidth;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].style.fontStrokeWidth = parseInt(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[11]:
+                    transInfo.propertyName = "fontBackground";
+                    transInfo.undoValue = selectfeatures[i].style.fontBackground;
+                    transInfo.redoValue = fromCheckboxValue(updated.value);
+                    selectfeatures[i].style.fontBackground = fromCheckboxValue(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[12]:
+                    transInfo.propertyName = "fontBackgroundColor";
+                    transInfo.undoValue = selectfeatures[i].style.fontBackgroundColor;
+                    transInfo.redoValue = updated.value;
+                    selectfeatures[i].style.fontBackgroundColor = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[13]:
+                    transInfo.propertyName = "fontShadow";
+                    transInfo.undoValue = selectfeatures[i].style.fontShadow;
+                    transInfo.redoValue = fromCheckboxValue(updated.value);
+                    selectfeatures[i].style.fontShadow = fromCheckboxValue(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[14]:
+                    transInfo.propertyName = "fontShadowColor";
+                    transInfo.undoValue = selectfeatures[i].style.fontShadowColor;
+                    transInfo.redoValue =  updated.value;
+                    selectfeatures[i].style.fontShadowColor = updated.value;
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[15]:
+                    transInfo.propertyName = "fontShadowOffsetX";
+                    transInfo.undoValue = selectfeatures[i].style.fontShadowOffsetX;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].style.fontShadowOffsetX = parseInt(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayTextContentName[16]:
+                    transInfo.propertyName = "fontShadowOffsetY";
+                    transInfo.undoValue = selectfeatures[i].style.fontShadowOffsetY;
+                    transInfo.redoValue = parseInt(updated.value);
+                    selectfeatures[i].style.fontShadowOffsetY = parseInt(updated.value);
+                    selectfeatures[i].setStyle(selectfeatures[i].style);
+                    break;
+                case displayNameNew[0]:
+                    transInfo.functionName = "setArrowHeadType";
+                    transInfo.undoParams = [selectfeatures[i].getArrowHeadType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setArrowHeadType(parseInt(updated.value));
+                    break;
+                case displayNameNew[1]:
+                    transInfo.functionName = "setArrowBodyType";
+                    transInfo.undoParams = [selectfeatures[i].getArrowBodyType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setArrowBodyType(parseInt(updated.value));
+                    break;
+                case displayNameNew[2]:
+                    transInfo.functionName = "setArrowTailType";
+                    transInfo.undoParams = [selectfeatures[i].getArrowTailType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setArrowTailType(parseInt(updated.value));
+                    break;
+                case displayNameNew[3]:
+                    transInfo.functionName = "setStartArrowType";
+                    transInfo.undoParams = [selectfeatures[i].getStartArrowType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setStartArrowType(parseInt(updated.value));
+                    break;
+                case displayNameNew[4]:
+                    transInfo.functionName = "setEndArrowType";
+                    transInfo.undoParams = [selectfeatures[i].getEndArrowType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setEndArrowType(parseInt(updated.value));
+                    break;
+                case displayNameNew[5]:
+                    transInfo.functionName = "setShowPathLine";
+                    transInfo.undoParams = [selectfeatures[i].getShowPathLine()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setShowPathLine(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[6]:
+                    transInfo.functionName = "setCurveLine";
+                    transInfo.undoParams = [selectfeatures[i].getIsCurveLine()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setCurveLine(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[7]:
+                    transInfo.functionName = "setShowPathLineArrow";
+                    transInfo.undoParams = [selectfeatures[i].getShowPathLineArrow()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setShowPathLineArrow(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[8]:
+                    transInfo.functionName = "setAvoidLine";
+                    transInfo.undoParams = [selectfeatures[i].getIsAvoidLine()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setAvoidLine(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[9]:
+                    transInfo.functionName = "setTextBoxType";
+                    transInfo.undoParams = [selectfeatures[i].getTextBoxType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setTextBoxType(parseInt(updated.value));
+                    break;
+                case displayNameNew[10]:
+                    transInfo.functionName = "setRoundBox";
+                    transInfo.undoParams = [selectfeatures[i].getRoundBox()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setRoundBox(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[11]:
+                    transInfo.functionName = "setFrame";
+                    transInfo.undoParams = [selectfeatures[i].getFrame()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setFrame(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[12]:
+                    transInfo.functionName = "setRadiusLineType";
+                    transInfo.undoParams = [selectfeatures[i].getRadiusLineType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setRadiusLineType(parseInt(updated.value));
+                    break;
+                case displayNameNew[13]:
+                    transInfo.functionName = "setRadiusTextPos";
+                    transInfo.undoParams = [selectfeatures[i].getRadiusTextPos()];
+                    transInfo.redoParams = [updated.value];
+                    selectfeatures[i].setRadiusTextPos(updated.value);
+                    break;
+                case displayNameNew[14]:
+                    transInfo.functionName = "setRadiusText";
+                    transInfo.undoParams = [selectfeatures[i].radiusText[0],0];
+                    transInfo.redoParams = [updated.value, 0];
+                    selectfeatures[i].setRadiusText(updated.value, 0);
+                    break;
+                case displayNameNew[15]:
+                    transInfo.functionName = "setRadiusText";
+                    transInfo.undoParams = [selectfeatures[i].radiusText[1],1];
+                    transInfo.redoParams = [updated.value, 1];
+                    selectfeatures[i].setRadiusText(updated.value, 1);
+                    break;
+                case displayNameNew[16]:
+                    transInfo.functionName = "setVisible";
+                    transInfo.undoParams = [selectfeatures[i].getVisible()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setVisible(fromCheckboxValue(updated.value));
+                    break;
+                case displayNameNew[17]:
+                    transInfo.functionName = "setType";
+                    transInfo.undoParams = [selectfeatures[i].routeNode.type];
+                    transInfo.redoParams = [updated.value];
+                    selectfeatures[i].setType(updated.value);
+                    break;
+                case displayNameNew[18]:
+                    transInfo.functionName = "setRotate";
+                    transInfo.undoParams = [selectfeatures[i].getRotate()];
+                    transInfo.redoParams = [parseFloat(updated.value)];
+                    selectfeatures[i].setRotate(parseFloat(updated.value));
+                    break;
+                case displayNameNew[19]:
+                    transInfo.functionName = "setLineRelationType";
+                    transInfo.undoParams = [selectfeatures[i].getLineRelationType()];
+                    transInfo.redoParams = [parseInt(updated.value)];
+                    selectfeatures[i].setLineRelationType(parseInt(updated.value));
+                    break;
+                case displayNameNew[20]:
+                    transInfo.functionName = "setPolylineConnectLocationPoint";
+                    transInfo.undoParams = [selectfeatures[i].getPolylineConnectLocationPoint()];
+                    transInfo.redoParams = [fromCheckboxValue(updated.value)];
+                    selectfeatures[i].setPolylineConnectLocationPoint(fromCheckboxValue(updated.value));
+                    break;
+                case  displayNameNew[21]:
+                    transInfo.functionName = "setFontAlign";
+                    transInfo.undoParams = [selectfeatures[i].style.labelAlign];
+                    transInfo.redoParams = [fontAlignTypeValue(updated.value)];
+                    selectfeatures[i].setFontAlign(fontAlignTypeValue(updated.value));
+                    break;
+            }
+            if (updated.group == group[8]) {
+                if (updated.name == displayName[2]) {
+                    if(updated.value !== null){
+                        transInfo.propertyName = "libID";
+                        transInfo.undoValue = selectfeatures[i].getSubSymbols()[updated.index].libID;
+                        transInfo.redoValue = parseInt(updated.value);
+                        selectfeatures[i].subSymbols[0].libID = parseInt(updated.value);
+                    }
+                }
+                if (updated.name == displayName[3]) {
+                    var code = parseInt(updated.value);
+                    if(selectfeatures[i].symbolType === SuperMap.Plot.SymbolType.NODECHAIN && code != null) {
+                        var symbolLibManager = L.supermap.plotting.symbolLibManager(serverUrl);
+                        var subCode = symbolLibManager.findSymbolByCode(code);
+                        if(subCode.length !== 0 && subCode[0].symbolType === "SYMBOL_DOT"){
+                            transInfo.functionName = "setSubSymbol";
+                            if(selectfeatures[i].getSubSymbols()[updated.index]) {
+                                transInfo.undoParams = [selectfeatures[i].getSubSymbols()[updated.index].code, updated.index,subCode[0].libID];
+                            } else {
+                                transInfo.undoParams = [-1, updated.index];
+                            }
+                            transInfo.redoParams = [code, updated.index, subCode[0].libID];
+                            selectfeatures[i].setSubSymbol(code, updated.index, subCode[0].libID);
+                        }
+                    }
+                    else if (code !== null) {
+                        transInfo.functionName = "setSubSymbol";
+                        if(selectfeatures[i].getSubSymbols()[updated.index]) {
+                            transInfo.undoParams = [selectfeatures[i].getSubSymbols()[updated.index].code, updated.index,selectfeatures[i].getSubSymbols()[updated.index].libID];
+                        } else {
+                            transInfo.undoParams = [-1, updated.index];
+                        }
+                        transInfo.redoParams = [code, updated.index];
+                        selectfeatures[i].setSubSymbol(code, updated.index);
+                    }
+                }
+            }
+            transaction.transInfos.push(transInfo);
+        }
+
+    }
+}
+
+
+
+
+
+

+ 48 - 0
js/plottingPanel/customEditor/ColorpickerEditor.js

@@ -0,0 +1,48 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+$.extend($.fn.datagrid.defaults.editors, {
+    colorpicker: {
+        init: function (container, options) {
+             var input = $('<input>').appendTo(container);
+            input.ColorPicker({
+                color: '#0000ff',
+                onShow: function (colpkr) {
+                    $(colpkr).css('z-index', 999);
+                    $(colpkr).mousedown(function(event){
+                        event.stopPropagation();
+                    });
+                    $(colpkr).fadeIn(500);
+                    return false;
+                },
+                onHide: function (colpkr) {
+                    $(colpkr).fadeOut(500);
+                    return false;
+                },
+                onChange: function (hsb, hex, rgb) {
+                    input.css('background', '#' + hex);
+                    input.val('0x' + hex);
+                }
+            });
+            return input;
+        },
+        getValue: function (target) {
+            return $(target).val().replace(/0x/, "#");
+        },
+        setValue: function (target, value) {
+            // 特殊处理, 因为在flash里使用的是0x16进制格式
+            value = value.replace(/0x/, "#");
+            $(target).val(value);
+            $(target).css('backgroundColor', value);
+            $(target).ColorPickerSetColor(value);
+        },
+        resize: function (target, width) {
+            var input = $(target);
+            if ($.boxModel == true) {
+                input.width(width - (input.outerWidth() - input.width()));
+            } else {
+                input.width(width);
+            }
+        }
+    }
+});
+
+

+ 449 - 0
js/plottingPanel/iPortalStylePanel.js

@@ -0,0 +1,449 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+var data;
+L.supermap.plotting.initIportalStylePanel = function(div, type, data, plotName){
+    data = data;
+    if(plotName === 'detail') {
+        var stylePanel = document.getElementById(div);
+        var pg = document.createElement("table");
+        pg.id = "pg";
+        pg.className = "easyui-propertygrid";
+        stylePanel.appendChild(pg);
+        $("#pg").propertygrid({
+            showGroup:true,
+            columns: [[
+                { field: 'name', title: 'Name', width: 100, resizable: true },
+                { field: 'value', title: 'Value', width: 100, resizable: true
+                }
+            ]]
+        });
+        showFeatureProperty(type,data);
+    }else {
+        var plotPanel = document.getElementById(div);
+        var attrStyle = document.createElement("table");
+        attrStyle.id = "attrStyle";
+        attrStyle.className = "easyui-propertygrid";
+        plotPanel.appendChild(attrStyle);
+        $("#attrStyle").propertygrid({
+            showGroup:true,
+            columns: [[
+                { field: 'name', title: 'Name', width: 100, resizable: true },
+                { field: 'value', title: 'Value', width: 100, resizable: true
+                }
+            ]],
+            onAfterEdit: afterModifySelectFeature
+        });
+        showEditFeatureProperty(type,data);
+    }
+    
+}
+
+function showFeatureProperty(type,item) {
+    let rows = collectionPropertyGridRows(type,item);
+    $('#pg').propertygrid('loadData', rows);
+}
+function showEditFeatureProperty(type,item) {
+    let rows = collectionEditPropertyGridRows(type,item);
+    $('#attrStyle').propertygrid('loadData', rows);
+}
+var groupDetail =["基本信息","地图图层列表","服务参照系","服务标识","服务范围","服务提供者"];
+var groupEdit =["基本信息","服务参照系","服务标识","地理范围","服务提供者"];
+function collectionPropertyGridRows(type,featuresParameter) {
+    let rows = [];
+    //基本信息
+    rows = [
+        { "name": "名称", "value":featuresParameter.title, "group": groupDetail[0]},
+        { "name": "所有者", "value":featuresParameter.userName, "group": groupDetail[0]},
+        { "name": "标签", "value": featuresParameter.tags.join(",").replace(","," "),"group": groupDetail[0]},
+        { "name": "描述", "value": featuresParameter.description, "group": groupDetail[0]}
+    ];
+    switch (type){
+        case 'MAP':
+            rows.push(
+                {
+                    "name":'类型',
+                    "value":featuresParameter.sourceType,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'坐标系信息',
+                    "value":featuresParameter.epsgCode,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'中心点',
+                    "value":featuresParameter.center?"("+featuresParameter.center.x+", "+featuresParameter.center.y+")":'',
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'地图范围',
+                    "value":featuresParameter.extent?"左下角("+featuresParameter.extent.left+","+featuresParameter.extent.bottom+") 右上角("+featuresParameter.extent.right+","+featuresParameter.extent.top+")":'',
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'创建时间',
+                    "value":new Date(parseInt(featuresParameter.createTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'修改时间',
+                    "value":new Date(parseInt(featuresParameter.updateTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'访问数',
+                    "value":featuresParameter.visitCount,
+                    "group":groupDetail[0]
+                }
+            )
+            if(featuresParameter.layers) {
+                featuresParameter.layers.forEach(item => {
+                    rows.push({
+                        "name":item.title,
+                        "value":item.hrefUrl,
+                        "group":groupDetail[1]
+                    })
+                })
+            }
+            
+        break;
+        case 'SERVICE':
+            rows[0].value = featuresParameter.resTitle;
+            rows.push(
+                {
+                    "name":'地址',
+                    "value":featuresParameter.linkPage,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'代理地址',
+                    "value":featuresParameter.proxiedUrl,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'令牌获取地址',
+                    "value":featuresParameter.tokenRefreshUrl,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'类型',
+                    "value":featuresParameter.type,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'注册于',
+                    "value":new Date(parseInt(featuresParameter.createTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'访问数',
+                    "value":featuresParameter.visitCount,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'坐标系',
+                    "value":featuresParameter.metadata.refSysInfo?featuresParameter.metadata.refSysInfo.refSysID:'',
+                    "group":groupDetail[2]
+                },
+                {
+                    "name":'投影类型',
+                    "value":featuresParameter.metadata.refSysInfo?featuresParameter.metadata.refSysInfo.mdCoRefSys.projection:'',
+                    "group":groupDetail[2]
+                },
+                {
+                    "name":'覆盖区域',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.exDesc:'',
+                    "group":groupDetail[3]
+                },
+                {
+                    "name":'西边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.westBL:'',
+                    "group":groupDetail[4]
+                },
+                {
+                    "name":'东边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.eastBL:'',
+                    "group":groupDetail[4]
+                },
+                {
+                    "name":'南边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.southBL:'',
+                    "group":groupDetail[4]
+                },
+                {
+                    "name":'北边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.northBL:'',
+                    "group":groupDetail[4]
+                },
+                {
+                    "name":'个人名称',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpIndName:'',
+                    "group":groupDetail[5]
+                },
+                {
+                    "name":'组织名称',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpOrgName:'',
+                    "group":groupDetail[5]
+                },
+                {
+                    "name":'地址',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.cntAddress.delPoint:'',
+                    "group":groupDetail[5]
+                },
+                {
+                    "name":'电子邮件',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.cntAddress.EMailAdd:'',
+                    "group":groupDetail[5]
+                },
+                {
+                    "name":'电话',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.voiceNum:'',
+                    "group":groupDetail[5]
+                },
+                {
+                    "name":'传真',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.faxNum:'',
+                    "group":groupDetail[5]
+                }
+            )
+        break;
+        case 'SCENE':
+            rows[0].value = featuresParameter.name;
+            rows.push(
+                {
+                    "name":'创建于',
+                    "value":new Date(parseInt(featuresParameter.createTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'访问数',
+                    "value":featuresParameter.visitCount,
+                    "group":groupDetail[0]
+                }
+            )
+        break;
+        case 'DATA':
+            rows[0].value = featuresParameter.fileName;
+            rows.push(
+                {
+                    "name":'类型',
+                    "value":featuresParameter.type,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'数据范围',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.bounds:'',
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'坐标系',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.epsgCode:'',
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'数据提供者',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.providers:'',
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'修改时间',
+                    "value":new Date(parseInt(featuresParameter.lastModfiedTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'下载次数',
+                    "value":featuresParameter.downloadCount,
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'文件大小',
+                    "value":(Number(featuresParameter.size)/1024).toFixed(2)+"KB",
+                    "group":groupDetail[0]
+                }
+            )
+        break;
+        case 'INSIGHTS_WORKSPACE':
+            rows[0].value = featuresParameter.name;
+            rows.push(
+                {
+                    "name":'创建于',
+                    "value":new Date(parseInt(featuresParameter.createTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'访问数',
+                    "value":featuresParameter.visitCount,
+                    "group":groupDetail[0]
+                }
+            )
+        break;
+        case 'MAP_DASHBOARD':
+            rows[0].value = featuresParameter.name;
+            rows.push(
+                {
+                    "name":'创建于',
+                    "value":new Date(parseInt(featuresParameter.createTime)).toLocaleString(),
+                    "group":groupDetail[0]
+                },
+                {
+                    "name":'访问数',
+                    "value":featuresParameter.visitCount,
+                    "group":groupDetail[0]
+                }
+            )
+        break;
+    }
+    return rows;
+}
+function collectionEditPropertyGridRows(type,featuresParameter){
+    let rows = [];
+    //基本信息
+    rows = [
+        { "name": "名称", "value":featuresParameter.title, "group": groupEdit[0],"editor":"text","key":"title"},
+        { "name": "标签", "value": featuresParameter.tags.join(",").replace(","," "), "group": groupEdit[0],"editor":"text","key":"tags"},
+        { "name": "描述", "value": featuresParameter.description, "group": groupEdit[0],"editor":"text","key":"description"}
+    ];
+    switch (type) {
+        case 'SERVICE':
+            rows[0].value = featuresParameter.resTitle;
+            rows.push(
+                {
+                    "name":"令牌获取地址",
+                    "value":featuresParameter.tokenRefreshUrl,
+                    "group":groupEdit[0],
+                    "editor":"text",
+                    "key":"tokenRefreshUrl"
+                },
+                {
+                    "name":"坐标系",
+                    "value":featuresParameter.metadata.refSysInfo?featuresParameter.metadata.refSysInfo.refSysID:'',
+                    "group":groupEdit[1],
+                    "editor":"text",
+                    "key":"refSysID"
+                },
+                {
+                    "name":'投影类型',
+                    "value":featuresParameter.metadata.refSysInfo?featuresParameter.metadata.refSysInfo.mdCoRefSys.projection:'',
+                    "group":groupEdit[1],
+                    "editor":"text",
+                    "key":"projection"
+                }, 
+                {
+                    "name":'覆盖区域',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.exDesc:'',
+                    "group":groupEdit[2],
+                    "editor":"text",
+                    "key":"region"
+                }, {
+                    "name":'西边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.westBL:'',
+                    "group":groupEdit[3],
+                    "editor":"text",
+                    "key":"west"
+                }, {
+                    "name":'东边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.eastBL:'',
+                    "group":groupEdit[3],
+                    "editor":"text",
+                    "key":"east"
+                }, {
+                    "name":'南边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.southBL:'',
+                    "group":groupEdit[3],
+                    "editor":"text",
+                    "key":"south"
+                }, {
+                    "name":'北边界',
+                    "value":featuresParameter.metadata.dataIdInfo?featuresParameter.metadata.dataIdInfo.dataIdent.dataExt.geoEle.geoBndBox.northBL:'',
+                    "group":groupEdit[3],
+                    "editor":"text",
+                    "key":"north"
+                },
+                {
+                    "name":'个人名称',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpIndName:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"personName"
+                },
+                {
+                    "name":'组织名称',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpOrgName:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"orgName"
+                },
+                {
+                    "name":'地址',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.cntAddress.delPoint:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"address"
+                },
+                {
+                    "name":'电子邮件',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.cntAddress.EMailAdd:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"email"
+                },
+                {
+                    "name":'电话',
+                    "value":featuresParameter.metadata.mdContact
+                    ?featuresParameter.metadata.mdContact.rpCntInfo.voiceNum:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"voiceNum"
+                },
+                {
+                    "name":'传真',
+                    "value":featuresParameter.metadata.mdContact?featuresParameter.metadata.mdContact.rpCntInfo.faxNum:'',
+                    "group":groupEdit[4],
+                    "editor":"text",
+                    "key":"faxNum"
+                }
+            )
+            break;
+        case 'DATA':
+            rows[0].value = featuresParameter.fileName.substring(0,featuresParameter.fileName.lastIndexOf("."));
+            rows.push(
+                {
+                    "name":'数据范围',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.bounds:'',
+                    "group":groupEdit[0],
+                    "editor":"text",
+                    "key":"bounds"
+                },{
+                    "name":'坐标系',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.epsgCode:'',
+                    "group":groupEdit[0],
+                    "editor":"text",
+                    "key":"epsgCode"
+
+                },{
+                    "name":'地图预览URL',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.previewURL:'',
+                    "group":groupEdit[0],
+                    "editor":"text",
+                    "key":"previewURL"
+
+                }, {
+                    "name":'数据提供者',
+                    "value":featuresParameter.dataMetaInfo?featuresParameter.dataMetaInfo.providers:'',
+                    "group":groupEdit[0],
+                    "editor":"text",
+                    "key":"providers"
+                }
+            )
+            break;
+        case 'SCENE':
+            rows[0].value = featuresParameter.name;
+            break;
+        case 'INSIGHTS_WORKSPACE':
+            rows[0].value = featuresParameter.name;
+            break;
+        case 'MAP_DASHBOARD':
+            rows[0].value = featuresParameter.name;
+            break;
+    }
+    return rows;
+}

+ 53 - 0
js/scroll_ul.js

@@ -0,0 +1,53 @@
+(function ($) {
+    $.fn.myScroll = function (options) {
+        //默认配置
+        var defaults = {
+            speed: 40, //滚动速度,值越大速度越慢
+            rowHeight: 24 //每行的高度
+        };
+
+        var opts = $.extend({}, defaults, options),
+            intId = [];
+
+        function marquee(obj, step) {
+
+            obj.find("ul").animate({
+                marginTop: '-=1'
+            }, 0, function () {
+                var s = Math.abs(parseInt($(this).css("margin-top")));
+                if (s >= step) {
+                    $(this).find("li").slice(0, 1).appendTo($(this));
+                    $(this).css("margin-top", 0);
+                }
+            });
+        }
+
+        this.each(function (i) {
+            var sh = opts["rowHeight"],
+                speed = opts["speed"],
+                _this = $(this);
+            intId[i] = setInterval(function () {
+                if (_this.find("ul").height() <= _this.height()) {
+                    clearInterval(intId[i]);
+                } else {
+                    marquee(_this, sh);
+                }
+            }, speed);
+
+            _this.hover(function () {
+                clearInterval(intId[i]);
+            }, function () {
+                intId[i] = setInterval(function () {
+                    if (_this.find("ul").height() <= _this.height()) {
+                        clearInterval(intId[i]);
+                    } else {
+                        marquee(_this, sh);
+                    }
+                }, speed);
+            });
+
+        });
+
+    }
+
+})(jQuery);

+ 285 - 0
js/sidebar.js

@@ -0,0 +1,285 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+//左侧层级是否包含示例
+var containExample = false;
+var sideBarIconConfig = sideBarIconConfig || {};
+
+function initSideBar() {
+    var sideBar = $("ul#sidebar-menu");
+    for (var key in conf) {
+        sideBar.append(createSideBarMenuItem(key, conf[key], false));
+    }
+}
+
+
+//侧边栏滚动支持
+function sidebarScrollFix() {
+    $('ul#sidebar-menu>li').hover(function (evt) {
+
+        if (!$('body').hasClass('sidebar-collapse')) {
+            return;
+        }
+
+        //调整一级菜单li下标题的布局位置至右侧
+        var $titleBar = $(this).children('a').children('.sidebar-title-bar');
+        $titleBar.css({
+            "top": ($(this).offset().top - $(window).scrollTop()) + "px",
+            //fix由于侧边栏滚动条宽度引起的减少的宽度
+            "width": "233px"
+        });
+
+        //如果底部空间不够,动态增加侧边栏高度
+        var visibleOffsetTop = $(this).offset().top - $(window).scrollTop();
+        var offsetBottom = $('.sidebar-menu').height() - visibleOffsetTop;
+        var requireVisibleHeight = $(this).height() + $(this).children('ul').height();
+        if (offsetBottom <= requireVisibleHeight) {
+            $('.sidebar-menu').css({
+                "height": (requireVisibleHeight + $(window).height()) + "px"
+            })
+        }
+
+        //调整一级菜单li下子列表的布局位置至右侧
+        var offsetTop = visibleOffsetTop + $(this).height();
+        $(this).children('ul').css({
+            "top": offsetTop + "px"
+        });
+
+        //fix小尺寸屏幕下二级菜单高度高于窗口高度时显示不全的情况
+        var $activeList = $(this).children('ul');
+        var activeListOffsetBottom = Math.abs($(window).height() - visibleOffsetTop - $(this).height());
+        var requireActiveListHeight = $activeList.height();
+        if (activeListOffsetBottom < requireActiveListHeight) {
+            $activeList.css({
+                "height": requireActiveListHeight
+            });
+            //滚动条样式
+            $activeList.addClass('scroll-list');
+        }
+
+    }, function (evt) {
+        if (!$('body').hasClass('sidebar-collapse')) {
+            return;
+        }
+        //滚动条
+        $(this).children('ul').removeClass('scroll-list');
+        //恢复原来的高度
+        $(this).children('ul').css({
+            "height": "auto"
+        });
+    });
+    $('.main-sidebar').on('scroll', function (evt) {
+        evt.stopPropagation();
+    });
+
+    $(window).on('resize', function () {
+        $('.sidebar-menu').css({
+            "height": "100%"
+        })
+    })
+}
+
+//创建菜单项
+function createSideBarMenuItem(id, config, containAll) {
+    containExample = containAll;
+
+    if (!config) {
+        return;
+    }
+    if (window.isLocal && config.localIgnore) {
+        return;
+    }
+    if (config.content) {
+        var hasNewExamples = false;
+        a: for (var key in config.content) {
+            var examples = config.content[key].content;
+            if (examples) {
+                for (var index = 0; index < examples.length; index++) {
+                    var element = examples[index];
+                    if (element.version === window.version) {
+                        config.content[key].hasNewExamples = true;
+                        hasNewExamples = true;
+                        continue a;
+                    }
+                }
+            }
+        }
+        config.hasNewExamples = hasNewExamples;
+    }
+
+
+
+
+    var title = utils.getLocalPairs(config, "name");
+    var li = $("<li id='iclient_" + id + "' class='treeview ' title='" + title + "'></li>");
+    if (config.content) {
+        createSideBarMenuTitle(id, title, true, config.hasNewExamples).appendTo(li);
+        createSideBarSecondMenu(config.content, id).appendTo(li);
+    } else {
+        createSideBarMenuTitle(id, title, false, config.hasNewExamples).appendTo(li);
+    }
+    return li;
+}
+
+//创建二级菜单
+function createSideBarSecondMenu(config, name) {
+    var ul = $("<ul class='treeview-menu second-menu '></ul>");
+    for (var key in config) {
+        var configItem = config[key];
+        if (window.isLocal && configItem.localIgnore) {
+            continue;
+        }
+        var title = utils.getLocalPairs(configItem, "name") || "【empty title】";
+        var li = $("<li class='menuTitle ' id='" + key + "' title='" + title + "'></li>");
+        li.appendTo(ul);
+        if (containExample && configItem.content) {
+            createSideBarMenuSecondTitle(name + '-' + key, title, true, configItem.hasNewExamples).appendTo(li);
+            createSideBarThirdMenu(configItem.content).appendTo(li);
+        } else {
+            createSideBarMenuSecondTitle(name + '-' + key, title, false, configItem.hasNewExamples).appendTo(li);
+        }
+    }
+    return ul;
+}
+
+//创建三级菜单
+function createSideBarThirdMenu(examples) {
+    var ul = $("<ul class='treeview-menu third-menu'></ul>");
+    var len = (examples && examples.length) ? examples.length : 0;
+    for (var i = 0; i < len; i++) {
+        var example = examples[i];
+        if (window.isLocal && example.localIgnore) {
+            continue;
+        }
+        var title = utils.getLocalPairs(example, "name") || "【empty title】";
+
+        var li = $("<li class='menuTitle' id='" + example.fileName + "' title='" + title + "'></li>");
+        li.appendTo(ul);
+
+        if (example.fileName && title) {
+            createSideBarMenuThirdTitle(example.fileName, title, false,example.version).appendTo(li);
+        }
+    }
+    return ul;
+}
+
+
+function createSideBarMenuTitle(id, title, collapse, hasNewExamples) {
+    id = id || "";
+    var icon = "",
+        iconName = sideBarIconConfig[id];
+    if (iconName) {
+        icon = "<i class='fa " + iconName + " iconName'></i>"
+    }
+
+    var div = $("<a href='#" + id + "'>" + icon + "</a>");
+    var titleBar = $("<span class='sidebar-title-bar'></span>");
+    var newIcon = "";
+    if (hasNewExamples) {
+        newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
+    }
+    var firstMenuTitle = $("<span class='firstMenuTitle'>" + title + newIcon + "</span>");
+    titleBar.append(firstMenuTitle);
+    if (collapse) {
+        titleBar.append(createCollapsedIcon());
+    }
+    div.append(titleBar);
+    return div;
+}
+
+
+function createSideBarMenuSecondTitle(id, title, collapse, hasNewExamples) {
+    id = id || "";
+    var icon = "",
+        iconName = sideBarIconConfig[id];
+    if (iconName) {
+        icon = "<i class='fa " + iconName + "'></i>"
+    }
+    var newIcon = "";
+    if (hasNewExamples) {
+        newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
+    }
+    var div = $(
+        "<a href='#" + id + "' id='" + id + '-' + id + "'>" + icon +
+        "<span class='secondMenuTitle'>" + title + "</span>" + newIcon +
+        "</a>");
+
+    if (collapse) {
+        div.append(createCollapsedIcon());
+    }
+    return div;
+}
+
+function createSideBarMenuThirdTitle(id, title, collapse,version) {
+    id = id || "";
+    var icon = "",
+        iconName = sideBarIconConfig[id];
+    if (iconName) {
+        icon = "<i class='fa " + iconName + "'></i>"
+    }
+    var newIcon="";
+    if(window.version===version){
+        newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
+    }
+
+    var div = $(
+        "<a href='#" + id + "' id='" + id + "'>" + icon +
+        "<span class='thirdMenuTitle'>" + title + "</span>" +newIcon+
+        "</a>");
+    if (collapse) {
+        div.append(createCollapsedIcon());
+    }
+    return div;
+}
+
+//创建右侧折叠菜单
+function createCollapsedIcon() {
+    return $("<span class='pull-right-container'> <i class='fa fa-angle-left pull-right'></i> </span>");
+}
+
+//只处理三层节点,后续可优化
+function selectMenu(id, length) {
+    var target = _getTarget(id, length);
+    if (length !== 1) {
+        //控制editor页面左侧导航栏一级菜单高亮
+        _selectTarget(target.parent().parent().parent().parent());
+        //控制示例页面左侧导航栏一级菜单高亮
+        _selectTarget(target.parent().parent());
+        //控制左侧导航栏最低级菜单高亮
+        _selectTarget(target.parent());
+        _selectTarget(target.find("ul"));
+    }
+}
+
+function _getTarget(id, length) {
+    var target;
+    if (length) {
+        if (length === 1) {
+            $("section#sidebar li.active").removeClass("active");
+            target = $("section#sidebar li#iclient_" + id);
+            target.children('ul').show();
+        }
+        if (length === 2) {
+            $("section#sidebar li.active ul.active li").removeClass("active");
+            target = $("section#sidebar li.treeview").children('ul').children('li#' + id);
+        }
+    } else {
+        $("section#sidebar #ul").addClass("active");
+        $("section#sidebar li.active").removeClass("active");
+        target = $("section#sidebar li#" + id);
+    }
+    target && target.addClass('active');
+    return target;
+}
+
+function _selectTarget(target) {
+    if (!target || target.length < 1) {
+        return;
+    }
+    var className = target.attr("class");
+    if (className && className.indexOf("treeview-menu") > -1 && className.indexOf("menu-open") === -1) {
+        target.addClass("menu-open");
+        target.css("display", "block");
+    }
+    if (className && className.indexOf("treeview") > -1) {
+        target.addClass('active');
+    }
+}

+ 27 - 0
js/times.js

@@ -0,0 +1,27 @@
+//顶部时间
+function getTime() {
+    var myDate = new Date();
+    var myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
+    var myMonth = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
+    var myToday = myDate.getDate(); //获取当前日(1-31)
+    var myDay = myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
+    var myHour = myDate.getHours(); //获取当前小时数(0-23)
+    var myMinute = myDate.getMinutes(); //获取当前分钟数(0-59)
+    var mySecond = myDate.getSeconds(); //获取当前秒数(0-59)
+    var week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+    var nowTime;
+
+    nowTime = myYear + '-' + fillZero(myMonth) + '-' + fillZero(myToday) + '&nbsp;&nbsp;' + week[myDay] + '&nbsp;&nbsp;' + fillZero(myHour) + ':' + fillZero(myMinute) + ':' + fillZero(mySecond);
+    $('#showTime').html(nowTime);
+};
+
+function fillZero(str) {
+    var realNum;
+    if (str < 10) {
+        realNum = '0' + str;
+    } else {
+        realNum = str;
+    }
+    return realNum;
+}
+setInterval(getTime, 1000);

+ 1 - 0
js/tokengenerator.js

@@ -0,0 +1 @@
+window.exampleToken = "RzFs5hBs4kfnLBQi-fi1Pr5gzxYwTmrAGrFqUxSiT3ZuX9n9vWIfN48fGbs9mBP6kSBM0e-egi2a1G5ta3Vsbme1SvATkk6PbIUsQ5-RvV6bdzocVaQ6xIzYWFIRCLit"

+ 115 - 0
js/utils.js

@@ -0,0 +1,115 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+var utils = {
+    //设置语言。参数:"zh_CN","en-US"
+    setLanguage: null,
+    //获取当前语言。默认从cookie读取,没有则读取浏览器默认语言
+    getLanguage: null,
+    //设置cookie
+    setCookie: null,
+    //获取cookie
+    getCookie: null,
+
+    //获取给定key在当前语言环境下对应的key所对应的值。如读取name字段的值在英语环境下应该变为读取name_en字段的值
+    getLocalPairs: null,
+    //加载模板文件,依赖art-template库
+    loadTemplate: null
+};
+(function (utils) {
+    var cKey = "language";
+
+    //设置语言。参数:"zh_CN","en-US"
+    function setLanguage(language) {
+        //默认设置过期时间为1个小时
+        setCookie(cKey, language, 60 * 60 * 1000);
+    }
+
+    //获取当前语言。默认从cookie读取,没有则读取浏览器默认语言
+    function getLanguage() {
+        var lang = getCookie(cKey);
+        if (!lang) {
+            if (navigator.appName === 'Netscape') {
+                lang = navigator.language;
+            } else {
+                lang = navigator.browserLanguage;
+            }
+        }
+        if (lang) {
+            if (lang.indexOf('zh') === 0) {
+                return 'zh-CN';
+            }
+            if (lang.indexOf('en') === 0) {
+                return 'en-US';
+            }
+        }
+        return 'zh-CN';
+    }
+
+    //设置cookie,参数分别为:key,value,过期时间(单位:ms),域
+    function setCookie(cKey, cValue, exp, domain) {
+        var cookie = cKey + "=" + cValue;
+        if (exp) {
+            var d = new Date();
+            d.setTime(d.getTime() + exp);
+            cookie += ";expires=" + d.toUTCString();
+        }
+        cookie += domain ? ";path=" + domain : ";path=/";
+        document.cookie = cookie;
+    }
+
+    function getCookie(cKey) {
+        var name = cKey + "=";
+        var ca = document.cookie.split(';');
+        for (var i = 0; i < ca.length; i++) {
+            var c = ca[i];
+            while (c.charAt(0) === ' ') c = c.substring(1);
+            if (c.indexOf(name) !== -1) return c.substring(name.length, c.length);
+        }
+        return "";
+    }
+
+    //清除cookie
+    function clearCookie(name) {
+        setCookie(name, "", -1);
+    }
+
+    function getLocalKey(key) {
+        var lang = getLanguage();
+        var localKey = key;
+        if (lang === "en-US") {
+            localKey = key + "_" + "en";
+        }
+        return localKey;
+    }
+
+    function getLocalPairs(obj, key) {
+        if (!obj) {
+            return;
+        }
+        var localKey = getLocalKey(key);
+        return obj[localKey] != null ? obj[localKey] : obj[key];
+    }
+
+    function loadTemplate(element, templateFilePath, data) {
+        if (!window.$ || !window.jQuery) {
+            throw new Error("jQuery is required")
+        }
+        if (!window.template) {
+            throw new Error("art-template.js is required")
+        }
+        if (!element) {
+            throw new Error("element is required")
+        }
+        $.get(templateFilePath, function (html) {
+            $(element).html(window.template.compile(html)(data));
+        });
+
+    }
+
+    utils.setLanguage = setLanguage;
+    utils.getLanguage = getLanguage;
+    utils.setCookie = setCookie;
+    utils.getCookie = getCookie;
+    utils.getLocalPairs = getLocalPairs;
+    utils.loadTemplate = loadTemplate;
+
+})(utils);

+ 631 - 0
js/visual.js

@@ -0,0 +1,631 @@
+$(window).load(function () {
+    $(".loading").fadeOut()
+})
+var map, layer, markerlayer, marker,
+    url = "http://111.42.156.47:806/iserver/services/map-dili/rest/maps/dili@dili";
+var sT = "";
+var eT = "";
+var fyT = "";
+var fyres = null;
+var res = null;
+var markerList = [];
+var mesList = [];
+var layer01 = null;
+var layer01 = null;
+$(function () {
+    var oTime = new Date();
+    console.log(changeDate(oTime));
+    $("#dateend").val(changeDate(oTime));
+    $("#datefy").val(changeDate(oTime));
+    $("#datestart").val(changeDate(addDate(oTime, -2)));
+    init();
+})
+function init() {
+    map = new SuperMap.Map("map", {
+        controls: [
+            new SuperMap.Control.Zoom(),
+            new SuperMap.Control.Navigation()
+        ]
+    });
+    
+    layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url, { transparent: true });
+	layer01 = new SuperMap.Layer.Vector("KML1", {
+		strategies: [new SuperMap.Strategy.Fixed()],
+		protocol: new SuperMap.Protocol.HTTP({
+			url: "kml/1.kml",   //"data/sichuang.kml",
+			format: new SuperMap.Format.KML({
+				extractStyles: true,
+				extractAttributes: true,
+				internalProjection: new SuperMap.Projection("EPSG:4326"),       //所在地图的坐标系
+				maxDepth: 2      //要解析外部链接文件时此值必须大于1
+			})
+		})
+	});
+	layer02 = new SuperMap.Layer.Vector("KML2", {
+		strategies: [new SuperMap.Strategy.Fixed()],
+		protocol: new SuperMap.Protocol.HTTP({
+			url: "kml/2.kml",   //"data/sichuang.kml",
+			format: new SuperMap.Format.KML({
+				extractStyles: true,
+				extractAttributes: true,
+				internalProjection: new SuperMap.Projection("EPSG:4326"),       //所在地图的坐标系
+				maxDepth: 2      //要解析外部链接文件时此值必须大于1
+			})
+		})
+	});
+    markerlayer = new SuperMap.Layer.Markers("markerLayer");
+    layer.events.on({ "layerInitialized": addLayer });
+
+    searchjindu();
+    searchfangyi();
+}
+
+function addLayer() {
+
+    map.addLayers([layer, markerlayer, layer01, layer02]);
+    //显示地图范围
+    map.setCenter(new SuperMap.LonLat(126.37, 46.05), 1);
+}
+
+function searchfangyi() {
+    if (fyT != $("#datefy").val()) {
+        fyT = $("#datefy").val();
+        var datajs = { datefy: $("#datefy").val() };
+        $.ajax({
+            url: "https://www.hmedi02.net:802/qiangxian/platform/qiangxianxinxi/qiangxianxinxi/dataFangyi",
+            type: "GET",
+            async: false,
+            contentType: "application/json;charset=utf-8",
+            data: datajs,
+            success: function (result) {
+                fyres = result;
+                if ($("#biaoduan").val() == "合计") {
+                    echarts_1(result.zhengchangAll, result.yichangAll);
+                } else if ($("#biaoduan").val() == "一标段") {
+                    echarts_1(result.zhengchang1, result.yichang1);
+                } else if ($("#biaoduan").val() == "二标段") {
+                    echarts_1(result.zhengchang2, result.yichang2);
+                }
+            },
+            error: function (e) {
+                console.log(e.status);
+                console.log(e.responseText);
+            }
+        });
+    } else {
+        if ($("#biaoduan").val() == "合计") {
+            echarts_1(fyres.zhengchangAll, fyres.yichangAll);
+        } else if ($("#biaoduan").val() == "一标段") {
+            echarts_1(fyres.zhengchang1, fyres.yichang1);
+        } else if ($("#biaoduan").val() == "二标段") {
+            echarts_1(fyres.zhengchang2, fyres.yichang2);
+        }
+    }
+}
+
+function searchjindu() {
+    if (sT != $("#datestart").val() || eT != $("#dateend").val()) {
+        if (markerList.length > 0) {
+            for (var i = 0; i < markerList.length; i++) {
+                markerlayer.removeMarker(markerList[i]);
+            }
+            markerList = [];
+        }
+        sT = $("#datestart").val();
+        eT = $("#dateend").val();
+        var datajs = { datestart: $("#datestart").val(), dateend: $("#dateend").val() };
+        $.ajax({
+            url: "https://www.hmedi02.net:802/qiangxian/platform/qiangxianxinxi/qiangxianxinxi/dataDaping",
+            type: "GET",
+            async: false,
+            contentType: "application/json;charset=utf-8",
+            data: datajs,
+            success: function (result) {
+                console.log(result);
+                res = result;
+                mesList = result.mapList;
+                echarts_2(result.mapList);
+                if ($("#biaoduan").val() == "合计") {
+                    echarts_3(result.xZhou, result.zuoyerenAll, result.zuoyecheAll, result.icecarAll, result.watercarAll, result.jinduAll);
+                    table1(result.table, result.table2);
+                    echarts_5(result.xZhou, result.fangyirenAll);
+                } else if ($("#biaoduan").val() == "一标段") {
+                    echarts_3(result.xZhou, result.zuoyeren1, result.zuoyeche1, result.icecar1, result.watercar1, result.jindu1);
+                    table1(result.table, result.table2);
+                    echarts_5(result.xZhou, result.fangyiren1);
+                } else if ($("#biaoduan").val() == "二标段") {
+                    echarts_3(result.xZhou, result.zuoyeren2, result.zuoyeche2, result.icecar2, result.watercar2, result.jindu2);
+                    table1(result.table, result.table2);
+                    echarts_5(result.xZhou, result.fangyiren2);
+                }
+            },
+            error: function (e) {
+                console.log(e.status);
+                console.log(e.responseText);
+            }
+        });
+    } else {
+        if ($("#biaoduan").val() == "合计") {
+            echarts_3(res.xZhou, res.zuoyerenAll, res.zuoyecheAll, res.icecarAll, res.watercarAll, res.jinduAll);
+            table1(res.table, res.table2);
+            echarts_5(res.xZhou, res.fangyirenAll);
+        } else if ($("#biaoduan").val() == "一标段") {
+            echarts_3(res.xZhou, res.zuoyeren1, res.zuoyeche1, res.icecar1, res.watercar1, res.jindu1);
+            table1(res.table, res.table2);
+            echarts_5(res.xZhou, res.fangyiren1);
+        } else if ($("#biaoduan").val() == "二标段") {
+            echarts_3(res.xZhou, res.zuoyeren2, res.zuoyeche2, res.icecar2, res.watercar2, res.jindu2);
+            table1(res.table, res.table2);
+            echarts_5(res.xZhou, res.fangyiren2);
+        }
+    }
+}
+
+function addDate(date, days) {
+    var d = new Date(date);
+    d.setDate(d.getDate() + days);
+    return d;
+}
+
+function changeDate(dateT) {
+    var year = dateT.getFullYear(); //获取完整的年份(4位,1970-????)
+    var month = dateT.getMonth() + 1; //获取当前月份(0-11,0代表1月)
+    var day = dateT.getDate(); //获取当前日(1-31)
+    if (month < 10) {
+        month = "0" + month;
+    }
+    if (day < 10) {
+        day = "0" + day;
+    }
+    var dateString = year + "-" + month + "-" + day;
+    return dateString
+}
+
+function echarts_1(zc, yc) {
+    var myChart = echarts.init(document.getElementById('echart1'));
+
+    var datajs = [
+        { value: zc, name: '体温正常' },
+        { value: yc, name: '体温异常' },
+
+    ]
+    var option = {
+        color: ['#2ef4ab', '#ffe074'],
+        tooltip: {
+            trigger: 'item',
+            formatter: "{b} : {c} 人 ({d}%)"
+        },
+        legend: {
+            bottom: '3%',
+            itemGap: 10,
+            icon: 'circle',
+            textStyle: {
+                color: 'rgba(255,255,255,.6)',
+                fontSize: 12
+            },
+            data: ['体温正常', '体温异常']
+        },
+        calculable: true,
+        series: [
+            {
+                name: ' ',
+                type: 'pie',
+                radius: [30, 50],
+                center: ['50%', '40%'],
+                //roseType: 'radius',
+                label: {
+                    normal: {
+                        show: true
+                    },
+                    emphasis: {
+                        show: true
+                    }
+                },
+                lableLine: {
+                    normal: {
+                        show: true
+                    },
+                    emphasis: {
+                        show: true
+                    }
+                },
+                data: datajs
+            },
+        ]
+    };
+
+    myChart.setOption(option);
+    window.addEventListener("resize", function () {
+        myChart.resize();
+    });
+}
+
+function echarts_2(mList) {
+    if (mList.length > 0) {
+        for (var i = 0; i < mList.length; i++) {
+            var size = new SuperMap.Size(44, 33);
+            var offset = new SuperMap.Pixel(-(size.w / 2), -size.h);
+            var icon = new SuperMap.Icon('images/marker.png', size, offset);
+            marker = new SuperMap.Marker(new SuperMap.LonLat(mList[i].longitude2, mList[i].latitude2), icon);
+            marker.events.on({
+                "id": mList[i].id,
+                "click": openInfoWin,
+                "scope": marker
+            });
+            markerList.push(marker);
+        }
+        for (var i = 0; i < markerList.length; i++) {
+            markerlayer.addMarker(markerList[i]);
+        }
+    }
+}
+function openInfoWin() {
+    var marker = this;
+    var lonlat = marker.getLonLat();
+    console.log(lonlat.lon);
+    console.log(lonlat.lat);
+    for (var i = 0; i < mesList.length; i++) {
+        console.log(mesList[i]);
+        if (ec(lonlat.lon, mesList[i].longitude2, lonlat.lat, mesList[i].latitude2)) {
+            $("#sbrq").html(mesList[i].addtime);
+            $("#fkrs").html(mesList[i].fangyiren);
+            $("#yctw").html(mesList[i].yichangren);
+            $("#zyrs").html(mesList[i].zuoyeren);
+            $("#zycs").html(mesList[i].zuoyeche);
+            $("#ybcc").html(mesList[i].icecar);
+            $("#xwcc").html(mesList[i].watercar);
+            $("#wcl").html(mesList[i].jindu);
+            $("#bcsm").html(mesList[i].remark2);
+            $("#sfyc").html(mesList[i].shifouyichang);
+            $("#ycqk").html(mesList[i].yichangxinxi);
+            if (mesList[i].fujianid == "") {
+                $("#xczp").html("暂无现场照片");
+            } else {
+                $("#xczp").html("<button style=\"height:24px;width:100px;color: #000000\" data-toggle=\"modal\" data-target=\"#myModal\">查看现场照片</button>");
+                var tList = mesList[i].fujianid.split(";");
+                var imgHtml = "";
+                for (var j = 0; j < tList.length; j++) {
+                    if (tList != "") {
+                        imgHtml += "<img src='" + tList[j] + "' /></br>";
+                    }
+                }
+                $("#myModalLabel").html(imgHtml);
+            }
+            if (mesList[i].yichangfujian == "") {
+                $("#yczp").html("暂无异常照片");
+            } else {
+                $("#yczp").html("<button style=\"height:24px;width:100px;color: #000000\" data-toggle=\"modal\" data-target=\"#myModal2\">查看异常照片</button>");
+                var tList = mesList[i].yichangfujian.split(";");
+                var imgHtml = "";
+                for (var j = 0; j < tList.length; j++) {
+                    if (tList != "") {
+                        imgHtml += "<img src='" + tList[j] + "' /></br>";
+                    }
+                }
+                $("#myModalLabel2").html(imgHtml);
+            }
+            return;
+        }
+    }
+}
+
+function ec(lon1, lon2, lat1, lat2) {
+    var l1 = left(lon1 + " ", 14);
+    var l2 = left(lon2 + " ", 14);
+    var l3 = left(lat1 + " ", 14);
+    var l4 = left(lat2 + " ", 14);
+    if (l1 == l2 && l3 == l4) {
+        return true;
+    }
+    return false;
+}
+function left(mainStr, lngLen) {
+    if (lngLen > 0) { return mainStr.substring(0, lngLen) }
+    else { return null }
+}
+function echarts_3(dtLisT, zyrList, zycList, ybcList, xwcList, jdList) {
+
+    var myChart = echarts.init(document.getElementById('echart3'));
+
+    var option = {
+        legend: {
+            left: 'center',
+            textStyle: {
+                color: "rgba(255, 255, 255, 1)"
+            }
+        },
+        color: ['#1921ff', '#01c3dd', '#008198', '#2ef4ab', '#ffe074'],
+        textStyle: {
+            color: 'rgba(255, 255, 255, 1)'
+        },
+        tooltip: {
+            textStyle: {
+                align: 'left'
+            },
+            trigger: 'axis',
+            formatter: "{b0} " + $("#biaoduan").val() + ":</br>{a0} : {c0} 人</br>{a1} : {c1} 辆</br>{a2} : {c2} 次</br>{a3} : {c3} 次</br>{a4} : {c4} 平方米"
+        },
+        dataZoom: {
+            start: 0,
+            end: 100,
+            bottom: 0,
+            fillerColor: 'rgba(33,114,176,0.2)',
+            textStyle: {
+                color: 'rgba(255,255,255,.7)'
+            },
+            borderColor: {
+                color: 'rgba(33,114,176,0.2)'
+            },
+            handleStyle: {
+                color: {
+                    type: 'linear',
+                    x: 0,
+                    y: 0,
+                    x2: 0,
+                    y2: 1,
+                    colorStops: [{
+                        offset: 0, color: '#fbf320'
+                    }, {
+                        offset: 1, color: '#00b4e3'
+                    }],
+                    global: false
+                }
+            }
+        },
+        grid: {
+            left: '3%',
+            right: '5%',
+            top: '8%',
+            bottom: '5%',
+            containLabel: true
+        },
+        xAxis: [
+            {
+                type: 'category',
+                axisTick: { show: false },
+                boundaryGap: false,
+                axisLabel: {
+                    textStyle: {
+                        color: 'rgba(33,114,176,0.7)',
+                        fontSize: '12'
+                    },
+                    lineStyle: {
+                        color: 'rgba(33,114,176,0.2)',
+                    }
+                },
+                data: dtLisT
+            }
+        ],
+        yAxis: {
+            type: 'value',
+            axisLabel: {
+                textStyle: {
+                    color: 'rgba(33,114,176,0.7)',
+                    fontSize: '10',
+                }
+            },
+            axisLine: {
+                lineStyle: {
+                    color: 'rgba(33,114,176,0.2)',
+                }
+            },
+            splitLine: {
+                lineStyle: {
+                    color: 'rgba(33,114,176,0.2)',
+                }
+            },
+
+        },
+        series: [
+            {
+                name: '作业人数',
+                lineStyle: {
+                    color: '#1921ff',
+                },
+                type: 'line',
+                areaStyle: {
+                    normal: {
+                        type: 'default',
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 0.8, [{
+                            offset: 0,
+                            color: 'rgba(129,197,255,.6)'
+                        }, {
+                            offset: 1,
+                            color: 'rgba(129,197,255,.0)'
+                        }], false)
+                    }
+                },
+                smooth: true,
+                itemStyle: {
+                    normal: { areaStyle: { type: 'default' } }
+                },
+                label: {
+                    show: true,
+                    position: 'top'
+                },
+                data: zyrList
+            },
+            {
+                name: '作业车数',
+                lineStyle: {
+                    color: '#01c3dd',
+                },
+                type: 'line',
+                areaStyle: {
+                    normal: {
+                        type: 'default',
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 0.8, [{
+                            offset: 0,
+                            color: 'rgba(129,197,255,.6)'
+                        }, {
+                            offset: 1,
+                            color: 'rgba(129,197,255,.0)'
+                        }], false)
+                    }
+                },
+                smooth: true,
+                itemStyle: {
+                    normal: { areaStyle: { type: 'default' } }
+                },
+                label: {
+                    show: true,
+                    position: 'top'
+                },
+                data: zycList
+            },
+            {
+                name: '运冰车次',
+                lineStyle: {
+                    color: '#008198',
+                },
+                type: 'line',
+                areaStyle: {
+                    normal: {
+                        type: 'default',
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 0.8, [{
+                            offset: 0,
+                            color: 'rgba(129,197,255,.6)'
+                        }, {
+                            offset: 1,
+                            color: 'rgba(129,197,255,.0)'
+                        }], false)
+                    }
+                },
+                smooth: true,
+                itemStyle: {
+                    normal: { areaStyle: { type: 'default' } }
+                },
+                label: {
+                    show: true,
+                    position: 'top'
+                },
+                data: ybcList
+            },
+            {
+                name: '吸污车次',
+                lineStyle: {
+                    color: '#2ef4ab',
+                },
+                type: 'line',
+                areaStyle: {
+                    normal: {
+                        type: 'default',
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 0.8, [{
+                            offset: 0,
+                            color: 'rgba(129,197,255,.6)'
+                        }, {
+                            offset: 1,
+                            color: 'rgba(129,197,255,.0)'
+                        }], false)
+                    }
+                },
+                smooth: true,
+                itemStyle: {
+                    normal: { areaStyle: { type: 'default' } }
+                },
+                label: {
+                    show: true,
+                    position: 'top'
+                },
+                data: xwcList
+            },
+            {
+                name: '完成量',
+                lineStyle: {
+                    color: '#ffe074',
+                },
+                type: 'line',
+                areaStyle: {
+                    normal: {
+                        type: 'default',
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 0.8, [{
+                            offset: 0,
+                            color: 'rgba(129,197,255,.6)'
+                        }, {
+                            offset: 1,
+                            color: 'rgba(129,197,255,.0)'
+                        }], false)
+                    }
+                },
+                smooth: true,
+                itemStyle: {
+                    normal: { areaStyle: { type: 'default' } }
+                },
+                label: {
+                    show: true,
+                    position: 'top'
+                },
+                data: jdList
+            }
+        ]
+    };
+
+    myChart.setOption(option);
+    window.addEventListener("resize", function () {
+        myChart.resize();
+    });
+}
+
+function echarts_5(dtLisT, fkrList) {
+    var myChart = echarts.init(document.getElementById('echart5'));
+
+    var option = {
+        color: ['#ffe074'],
+        textStyle: {
+            color: 'rgba(255, 255, 255, 1)'
+        },
+        tooltip: {
+            textStyle: {
+                align: 'left'
+            },
+            trigger: 'axis',
+            formatter: "{b} " + $("#biaoduan").val() + ":</br>{a} : {c} 人"
+        },
+        xAxis: {
+            type: 'category',
+            data: dtLisT
+        },
+        yAxis: {
+            type: 'value'
+        },
+        series: [{
+            name: "防疫人数",
+            data: fkrList,
+            type: 'bar'
+        }]
+    };
+
+    myChart.setOption(option);
+    window.addEventListener("resize", function () {
+        myChart.resize();
+    });
+}
+function table1(t1, t2) {
+    $("#td1").html(t1[0]);
+    $("#td2").html(t1[1]);
+    $("#td3").html(t1[2]);
+    $("#td4").html(t1[3]);
+    $("#td5").html(t1[4]);
+    $("#td6").html(t1[5]);
+    $("#td7").html(t1[6]);
+    $("#td8").html(t1[7]);
+    $("#td9").html(t1[8]);
+    $("#td10").html(t1[9]);
+    $("#td11").html(t1[10]);
+    $("#td12").html(t1[11]);
+    $("#td13").html(t1[12]);
+    $("#td14").html(t1[13]);
+    $("#td15").html(t1[14]);
+    $("#td16").html(t1[15]);
+    $("#td17").html(t1[16]);
+    $("#td18").html(t1[17]);
+    $("#td19").html(t1[18]);
+    $("#td20").html(t1[19]);
+    $("#td21").html(t1[20]);
+    $("#td22").html(t1[21]);
+    $("#td23").html(t1[22]);
+    $("#td24").html(t1[23]);
+    $("#td25").html(t2[0]);
+    $("#td26").html(t2[1]);
+    $("#td27").html(t2[2]);
+}

+ 31 - 0
js/wechat.js

@@ -0,0 +1,31 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+
+function createGalleryChart(example) {
+  var target = 'editor-wechat.html',
+    defaultThumb = '../img/thumb.png',
+    title = utils.getLocalPairs(example, 'name'),
+    href = example.fileName ? example.fileName : '',
+    thumbnail = example.thumbnail ? thumbLocation + '/img/' + example.thumbnail : '',
+    version = example.version;
+  href = href.replace(/editor/, 'editor-wechat');
+  var chartDiv = $("<div class='col-xlg-2 col-lg-3 col-md-4 col-sm-6 col-xs-6'></div>");
+  var chart = $("<div class='chart'></div>");
+  var link = $("<a class='chart-link' href='" + target + '#' + href + "'></a>");
+  var chartTitle = $("<h5 class='chart-title'>" + title + '</h5>');
+  var newTip = $(
+    '<svg xmlns="http://www.w3.org/2000/svg" class="new-example" style="width:8px !important;height:8px;right: 1px;top: 1px;position: absolute;"><circle cx="4" cy="4" r="4" fill="#e14d57"></circle></svg>'
+  );
+  var thumb = $(
+    "<img class='chart-thumb' src='" + defaultThumb + "' data-original='" + thumbnail + "' style='display: inline'>"
+  );
+
+  chartTitle.appendTo(link);
+  if (window.version === version) {
+    newTip.appendTo(link);
+  }
+  thumb.appendTo(link);
+  link.appendTo(chart);
+  chart.appendTo(chartDiv);
+
+  return chartDiv;
+}

+ 147 - 0
js/widgets.js

@@ -0,0 +1,147 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+var widgets = {
+    loader: {
+        //显示loading
+        showLoader: null,
+        //设置loading文本,默认文本为'loading'
+        setLoaderText: null,
+        //设置loader显示相关属性
+        setAttributes: null,
+        //移除掉loader
+        removeLoader: null
+    },
+
+    alert: {
+        //弹出自定义弹框
+        showAlert: null,
+        //clear alert
+        clearAlert: null
+    }
+};
+
+(function (widgets, $) {
+
+    var alertDiv;
+
+    //弹出自定义提示框
+    // msg:提示语;
+    // state:提示框颜色(true=success;false=danger);
+    // width:提示框宽度;opacity:提示框透明度[0,1];
+    // withBorder:提示框是否加边框;
+    function showAlert(msg, state, width, withBorder, opacity) {
+        //提示框颜色
+        var className = "alert-",
+            border, alpha;
+        className += state ? "success" : "danger";
+        //提示框宽度
+        if (width === null || typeof (width) === 'undefined') {
+            //默认值300
+            width = 300;
+        }
+        //是否开启边框
+        border = withBorder ? {
+            "border": "1px solid"
+        } : "none";
+        //设置透明度[0,1]之间
+        alpha = opacity;
+        if (alertDiv) {
+            $(alertDiv).remove();
+        }
+        if (!$('#msg_container')[0]) {
+            alertDiv = $("<div class='alert alert-dismissible' id='msg_container' role='alert' style='z-index:999999;position: absolute;top: 20px;left: 40%; display: none;text-align: center'><button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true' >&times;</span></button><strong><p id='msg' style='word-wrap: break-word'></p></strong></div>");
+            $('body').append(alertDiv)
+        }
+        $('#msg_container').css('width', width + 'px');
+        $('#msg_container').css(border);
+        $('#msg_container').css('opacity', alpha);
+        $('#msg_container').addClass(className);
+        $('#msg_container').slideDown(300);
+        $('#msg').html(msg);
+    }
+
+    //清除提示框
+    function clearAlert() {
+        $('#msg_container').hide();
+    }
+
+
+    /*显示loading*/
+    function showLoader(text, type, attributes) {
+
+        if (!type) {
+            type = "loader-default";
+            attributes = attributes || {
+                'data-half': true
+            }
+        }
+
+        var $body = document.getElementsByTagName('body');
+        $body = $body && $body[0];
+        if ($body) {
+            var $loader = document.getElementsByClassName('loader')[0];
+            if (!$loader) {
+                $loader = createLoader(type);
+            }
+            $loader.classList.add('is-active');
+            setLoaderText(text);
+            setAttributes(attributes);
+        }
+    }
+
+    /*设置loading文本,默认文本为"loading"*/
+    function setLoaderText(text, textAttributeField) {
+        text = text || 'loading...';
+        var txtAttrField = textAttributeField != null ? textAttributeField : "data-text";
+        var attributes = {};
+        attributes[txtAttrField] = text;
+        setAttributes(attributes);
+    }
+
+    /*设置loader显示相关属性*/
+    function setAttributes(attributes) {
+        var $loader = document.getElementsByClassName('loader')[0];
+        if ($loader && attributes) {
+            for (var attr in attributes) {
+                $loader.setAttribute(attr, attributes[attr]);
+            }
+        }
+    }
+
+    /*移除loader*/
+    function removeLoader() {
+        var $loader = document.getElementsByClassName('loader')[0];
+        if ($loader) {
+            $loader.parentNode.removeChild($loader);
+        }
+    }
+
+
+    function createLoader(className) {
+        var $loader, $body = document.getElementsByTagName('body');
+        $body = $body && $body[0];
+        if ($body) {
+            $loader = document.createElement('div');
+            $loader.className = "loader " + className;
+            $body.insertBefore($loader, $body.children[0]);
+            var style = document.createElement('style');
+            style.type = 'text/css';
+            style.innerHTML = ".loader.is-active{" +
+                "background-color: rgba(0, 0, 0, 0.4) !important;" +
+                "}";
+            if (document.getElementsByTagName('head')) {
+                document.getElementsByTagName('head')[0].appendChild(style);
+            }
+        }
+        return $loader;
+    }
+
+
+    widgets.alert.showAlert = showAlert;
+    widgets.alert.clearAlert = clearAlert;
+
+    widgets.loader.showLoader = showLoader;
+    widgets.loader.setLoaderText = setLoaderText;
+    widgets.loader.setAttributes = setAttributes;
+    widgets.loader.removeLoader = removeLoader;
+
+})(widgets, window.jQuery);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 25 - 0
js/world.js


+ 81 - 0
kml/1.kml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml>
+  <Document>
+    <name>OvitalMap_20210112_230740</name>
+    <visibility>1</visibility>
+    <Placemark>
+      <name>1</name>
+      <visibility>1</visibility>
+      <Style>
+        <LineStyle>
+          <color>7fff0000</color>
+          <width>1</width>
+        </LineStyle>
+        <PolyStyle>
+          <color>7fff0000</color>
+          <fill>1</fill>
+          <outline>1</outline>
+        </PolyStyle>
+      </Style>
+      <MultiGeometry>
+        <Polygon>
+          <altitudeMode>clampToGround</altitudeMode>
+          <outerBoundaryIs>
+            <LinearRing>
+              <coordinates>
+                126.3384819,46.04693567,0
+                126.33474827,46.04338355,0
+                126.33661509,46.04188668,0
+                126.33820295,46.04108237,0
+                126.33461952,46.03942903,0
+                126.33625031,46.03767138,0
+                126.34323478,46.04120897,0
+                126.34794474,46.04342078,0
+                126.34849191,46.04318248,0
+                126.34899616,46.04269842,0
+                126.34929657,46.0428697,0
+                126.34870648,46.04362185,0
+                126.35005832,46.0442474,0
+                126.35068059,46.04359951,0
+                126.35093808,46.04372611,0
+                126.35146379,46.04445591,0
+                126.3570106,46.04635483,0
+                126.36325479,46.04914725,0
+                126.36606574,46.05032375,0
+                126.36649489,46.04903556,0
+                126.3667202,46.04906534,0
+                126.36740685,46.04966848,0
+                126.36717081,46.05053968,0
+                126.36817932,46.0508822,0
+                126.37102246,46.05205866,0
+                126.37292683,46.05304523,0
+                126.3723743,46.0534808,0
+                126.37042165,46.0526022,0
+                126.37004614,46.05317553,0
+                126.36867285,46.05292982,0
+                126.36868358,46.05237138,0
+                126.36826515,46.0517087,0
+                126.36638761,46.05092688,0
+                126.36360884,46.04967593,0
+                126.36298656,46.04995889,0
+                126.36272907,46.04966848,0
+                126.36311531,46.0494451,0
+                126.35664582,46.04660802,0
+                126.35152817,46.04485059,0
+                126.35136724,46.04513357,0
+                126.35050893,46.04519315,0
+                126.3471508,46.04476123,0
+                126.345402,46.04452293,0
+                126.34411454,46.0463176,0
+                126.34200096,46.04584101,0
+                126.33943677,46.04678674,0
+                126.3384819,46.04693567,0
+              </coordinates>
+            </LinearRing>
+          </outerBoundaryIs>
+        </Polygon>
+      </MultiGeometry>
+    </Placemark>
+  </Document>
+</kml>
+

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 18 - 0
kml/2.kml


+ 1762 - 0
locales/en-US/resources.js

@@ -0,0 +1,1762 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+window.examplesResources = {
+    "app": "SuperMap iClient 9D",
+    "nav": {
+        "home": {
+            "_name": "Home"
+        },
+        "overview": {
+            "_name": "Overview",
+            "functions": "Functions",
+            "compatibility": "Compatibility",
+            "thirdpatry": "ThirdParty",
+            "license": "License",
+            "howToChoose": "How to choose"
+        },
+        "leaflet": {
+            "_name": "for Leaflet"
+        },
+        "openlayers": {
+            "_name": "for OpenLayers"
+        },
+        "mapboxgl": {
+            "_name": "for MapboxGL"
+        },
+        "classic": {
+            "_name": "Classic"
+        },
+        "3dwebgl": {
+            "_name": "3D-WebGL"
+        },
+        "component": {
+          "_name": "Component"
+      },
+        "product": {
+            "_name": "Products",
+            "introduce": "Introduction",
+            "update": "iClient 8C Upgrade",
+            "download": "Download",
+            "guide": "Guide",
+            "modules": "Modules",
+            "dependence": "Dependencies",
+            "license": "License",
+            "features": "Features"
+        },
+        "guide": {
+            "_name": "Guide",
+            "beginning": "Getting Started",
+            "npm": "npm",
+            "quickStart": "Quick Start",
+            "projection": "Projection",
+            "ie8": "Compatible with IE8",
+            "mapService": "Map Service",
+            "dataService": "Data Service",
+            "spatialAnalystService": "Spatial Analysis Service",
+            "networkAnalystService": "Network Analysis Service",
+            "trafficTransferAnalystService": "Traffic Transfer Analysis Service",
+            "processingService": "Distributed Analysis Services",
+            "dataFlow": "Data Flow Service",
+            "addressMatch": "Address Match Service",
+            "visualization": "Visualization"
+        },
+        "examples": {
+            "_name": "Examples",
+            "iServer": "iServer",
+            "iPortal": "iPortal",
+            "Online": "Online",
+            "iManager": "iManager",
+            "Elasticsearch": "Elasticsearch",
+            "viz": "Visualization",
+            "plot": "Plot",
+            "dynamicPlot": "Dynamic Plot",
+            "map": "Map",
+            "overlay": "Overlay",
+            "popup": "Popup",
+            "query": "Query",
+            "theme": "Thematic Map",
+            "analysis": "Analysis",
+            "clientSpatialAnalyst": "Client Spatial Analysis",
+            "control": "Control",
+            "components": "Components",
+            "OGC": "OGC",
+            "mapping": "Third Party Map",
+            "others": "Others",
+            "3D-WebGL": "3D-WebGL",
+            "multiCoordSys": "Multiple CRS",
+            "vuecomponents_mbgl": "Vue - MapboxGL",
+            "vuecomponents_leaflet": "Vue - Leaflet",
+            "reactcomponents_mbgl": 'React - MapboxGL',
+            "h5components": "H5",
+            "template": 'Templates'
+        },
+        "more": {
+            "_name": "More>>",
+            "version": {
+                "_name": "Versions"
+            },
+            "get": {
+                "_name": "Download",
+                "stable": "Stable",
+                "releases": "Releases",
+                "source": " Source Code",
+                "npm": " npm",
+                "oldVersions": "Older Versions"
+            },
+            "language": {
+                "_name": "Language"
+            },
+            "faq": {
+                "_name": "FAQ"
+            }
+        },
+        "api": {
+            "_name": "API",
+            "doc": "Document"
+        },
+        "gallery": {
+            "_name": "Gallery"
+        },
+        "soon": "Coming Soon"
+    },
+    "footer": {
+        "download": "Download",
+        "faq": "FAQ",
+        "supermap": "SuperMap",
+        "dituhui": "Dituhui",
+        "support": "Technical Resource Center",
+        "tel": "Tel: ",
+        "sns": " WebGIS Chinese Technical QQ Group: ",
+        "sns_tips": " (click to join)",
+        "sns_full": " (full)",
+        "contact": "Contact us: ",
+        "join": "Join us: SuperMap Web Client Team",
+        "join_tips1": "(Please send email to: ",
+        "join_tips2": " and attach your resume)",
+        "copyright": "Copyright © 2000-2020 SuperMap Software Co., Ltd. All rights reserved"
+    },
+    "editor": {
+        "expand": " Expand",
+        "source": " Source",
+        "title": "Source Code Editor",
+        "run": " Run",
+        "reset": " Reset",
+        "envTips": "Please run the program in server environment!"
+    },
+    "resources": {
+        "title_iPortalUploadData":"Upload Data",
+        "title_iPortalRegisterData":"Register Data",
+        "title_edit_attr":"Edit Attribute",
+        "title_view_detail":"View detail",
+        "title_share_setting":"Sharing settings",
+        "title_confirm_delete_resources":"Confirm resources?",
+        "title_delete_resources":"Delete resources",
+        "title_resource_address":"Resource address",
+        "title_googlelayer":"google layer",
+        "title_osmlayer":"OSM layer",
+        "title_binglayer":"Bing layer",
+        "title_tiledMapLayer4326": "4326 Base Map of SuperMap REST",
+        "title_tiledMapLayer3857": "3857 Base Map of SuperMap REST",
+        "title_imageMapLayer3857": "3857 Base Map of SuperMap REST (image)",
+        "title_imageMapLayer4326": "4326 Base Map of SuperMap REST (image)",
+        "title_tiledMapLayer_rasterfunction": "SuperMap REST Map Service(rasterfunction)",
+        "title_addressMatchService": "Address Match Service",
+        "title_bufferAnalyst1": "Buffer Analysis 1",
+        "title_bufferAnalyst2": "Buffer Analysis 2",
+        "title_closestFacilitiesService": "Closest Facilities Analysis Service",
+        "title_densityAnalystService": "Density Analysis Service",
+        "title_dynamicSegmentation": "Dynamic Segmentation",
+        "title_findLocation": "Find Location Analysis",
+        "title_findMTSPPathsService": "Multi-traveler Analysis",
+        "title_findMTSPPathsAndTSPPaths": "MTSP Paths and TSP Paths Analysis",
+        "title_findPath": "Best Path Analysis",
+        "title_findTSPPaths": "TSP Paths Analysis",
+        "title_interpolationAnalystByDen": "Interpolation Analysis of Point Density",
+        "title_interpolationAnalystByGeo": "Interpolation Analysis of Discrete Point",
+        "title_interpolationAnalystByIDW": "Interpolation Analysis of Inverse Distance Weighted",
+        "title_interpolationAnalystByKriging": "Interpolation Analysis of Kriging",
+        "title_interpolationAnalystByRBF": "Interpolation Analysis of Radial Basis Function",
+        "title_mathExpression": "Math Expression Analysis",
+        "title_overlayAnalyst": "Overlay Analysis",
+        "title_routeCalculateMeasure": "Route Calculate Measure Analysis",
+        "title_routeLocatorLine": "Route Locator Line Analysis",
+        "title_routeLocatorPoint": "Route Locator Point Analysis",
+        "title_serviceAreas": "Service Area Analysis",
+        "title_surfaceAnalyst": "Surface Analysis",
+        "title_terrainCurvatureCalculation": "Terrain Curvature Calculation Analysis",
+        "title_thiessenAnalyst": "Thiessen Polygon Analysis",
+        "title_trafficTransfer": "Traffic Transfer Analysis",
+        "title_buffersAnalystJobService": "Buffers Analysis Service",
+        "title_areaMeasure": "Area Measurement",
+        "title_attribution": "Copyright Control",
+        "title_changeControlsSkin": "Change Controls Skin",
+        "title_distanceMeasure": "Distance Measurement",
+        "title_dragFeature": "Mouse Drag Feature Control",
+        "title_dragpan": "Drag Map Control",
+        "title_drawGeometry": "Draw Geometry",
+        "title_featureSnap": "Edit Feature",
+        "title_layerSwitcher": "Layer Switcher",
+        "title_navigation": "Basic Operation Controls for Map",
+        "title_overviewmap": "Overview Map",
+        "title_panzoombar": "Translation Zoom Control",
+        "title_scaleline": "Scale Control",
+        "title_zoom": "Zoom Control",
+        "title_zoomBox": "Zoom Box Control",
+        "title_kernelDensityJobService": "Kernel Density Analysis",
+        "title_3baidu": "Baidu",
+        "title_3tianditu": "Tianditu",
+        "title_3857Map": "Mercator Projection Map",
+        "title_4326Map": "Latitude and Longitude Map",
+        "title_changchunMap": "Plane Coordinate System Layer",
+        "title_coordinateTransformation": "Coordinate Transformation",
+        "title_dynamiclayers": "Dynamic Layer Operation",
+        "title_image": "Image Layer",
+        "title_mapevent": "Map Event",
+        "title_overlayLayer": "Overlay Layer",
+        "title_toggleMaps": "Toggle Maps",
+        "title_translation": "Zoom and Translation",
+        "title_zoomRange": "Set Zoom Level",
+        "title_mapVLayerHoneycomb": "MapV Layer Honeycomb",
+        "title_mapVLayerPolylineSimple": "MapV Simple Line",
+        "title_GeoJSON": "GeoJSON Data Display",
+        "title_queryByWFS": "Query by WFS",
+        "title_wcs": "WCS Layer",
+        "title_wms": "WMS Layer",
+        "title_wmtsLayer": "WMTS Layer",
+        "title_a0mapPrint": "Map A0 Printing",
+        "title_contextMenu": "Custom Right Button Menu",
+        "title_coordTransfer": "Get Latitude and Longitude Coordinate",
+        "title_dynamicPieChart": "Dynamic Pie Chart",
+        "title_windmap": "D3 Wind Map",
+        "title_zoomablePacking": "D3 Picker",
+        "title_eChartGraphBar": "Bar Graph of ECharts",
+        "title_featureRightClick": "Feature Right Click",
+        "title_jqueryContextMenu": "JQuery Context Menu",
+        "title_layerGroup": "Layer Group Control",
+        "title_mapPrint": "Map printing",
+        "title_mousestyle": "Mouse Style",
+        "title_printscreen": "Map Screen Shot",
+        "title_projection": "Projection Transformation",
+        "title_rightClick": "Right Click Event of Marker Layer",
+        "title_setlayerstatus": "Sublayer Control",
+        "title_graphicSymbolData": "Symbol Drawing of Graphic Layer",
+        "title_islandMultiPolygonData": "Island Cave and Multi-polygon",
+        "title_labelVectorLayerData": "Label Vector Layer",
+        "title_markerLayer": "Marker Layer",
+        "title_markerLayerEvent": "Supported Events of Marker Layer",
+        "title_splinesData": "Spline Curve",
+        "title_telecomIconData": "Telecom Icon Data",
+        "title_vectorDataEvent": "Click Events of Vector Data",
+        "title_vectorLayerData": "Basic Vector Graphic",
+        "title_addfile": "Overlay of Situation Map",
+        "title_defaultStyle": "Default Style",
+        "title_drawGeoGraphicObject": "Drawing of Geo Graphic Object",
+        "title_drawGraphics": "Complex Object",
+        "title_drawRoute": "Air Route",
+        "title_dynamicPlot": "Dynamic Plotting",
+        "title_editPlottingLayer": "Edit Plotting Layer",
+        "title_filetransfer": "Uploading and Downloading of Situation Map",
+        "title_loadSymbolLib": "Loading of Symbol Lib",
+        "title_modifySymbolStyle": "Modify Attributions",
+        "title_operatePlottingLayer": "Operation of Plotting Layer",
+        "title_plotGOAnimation": "Posture Deduction",
+        "title_plotSymbol": "Mouse Plotting",
+        "title_plotSymbolPerformance": "High Efficiency Layer of Dynamic Plotting",
+        "title_querySymbolLib": "Symbol Query",
+        "title_saveload": "Save and Load",
+        "title_symbolAvoid": "Avoided Area",
+        "title_symbolExtendProperty": "Custom Properties",
+        "title_symbolGeometricQuery": "Geometry Query",
+        "title_plotMovingTarget": "Moving Target Layer",
+        "title_anchored": "Anchored Popup",
+        "title_customPopup": "Custom Popup",
+        "title_infoWindow": "Third Party Information Window",
+        "title_shadowPopup": "Shadow Popup",
+        "title_simplePopup": "Simple Popup",
+        "title_editFeature": "Edit Feature",
+        "title_fieldStatistic": "Statistic of Field Query",
+        "title_getFeatureByBounds": "Get Feature by Bounds Query",
+        "title_getFeatureByBuffer": "Get Feature by Buffer Query",
+        "title_getFeatureByGeometry": "Get Feature by Geometry Query",
+        "title_getFeatureByIDs": "Get Feature by ID Query",
+        "title_getFeatureBySQL": "Get Feature by SQL Query",
+        "title_gridInfosQuery": "Grid Cell Query",
+        "title_queryByBounds": "Map Query by Bounds",
+        "title_queryByDistance": "Map Query by Distance",
+        "title_queryByGeometry": "Map Query by Geometry",
+        "title_queryBySQL": "Map Query by SQL",
+        "title_vectorLayerRegionName": "Interaction Query",
+        "title_singleObjectQueryJobService": "Single Object Query Analysis",
+        "title_summaryAttributesJobService": "Summary Attributes Analysis",
+        "title_SummaryMeshJobService": "Summary Mesh Analysis",
+        "title_SummaryRegionJobService": "Summary Region Analysis",
+        "title_GraphBar": "Bar Chart",
+        "title_Scatter": "scatter chart",
+        "title_GraphBar3D": "3D Bar Chart",
+        "title_GraphLine": "Line Chart",
+        "title_GraphPie": "Pie Chart",
+        "title_GraphPoint": "Point Chart",
+        "title_GraphRing": "Ring Chart",
+        "title_jingjinPopGraph": "Switch of Statistical Charts",
+        "title_landuseUnique": "Land Use Unique Thematic Map",
+        "title_popDensityRange": "Population Density Range Thematic Map",
+        "title_RankSymbol": "Rank Symbol Thematic Map",
+        "title_worldCapitalsGraphBar": "World Capitals Population Graph Bar",
+        "title_themeDotDensity": "Dot Density Thematic Map",
+        "title_themeGraph": "Statistical Chart",
+        "title_themeGridRange": "Grid Range Thematic Map",
+        "title_themeGridUnique": "Grid Unique Thematic Map",
+        "title_themeLabel": "Label Thematic Map",
+        "title_themeLabelLayer": "Label Thematic Layer",
+        "title_themePM2_5": "AQI Thematic Map",
+        "title_themeRange": "Range Thematic Map",
+        "title_themeUnique": "Unique Thematic Map",
+        "title_topologyValidatorJobService": "Topology Validator Analysis",
+        "title_vectorClipService": "Vector Clip Analysis",
+        "title_animatorBase": "Basic Animation",
+        "title_animatorCar": "car Animation",
+        "title_animatorLine": "Line Animation",
+        "title_animatorMetro": "Metro Construction Animation (1)",
+        "title_animatorMetro2": "Metro Construction Animation (2)",
+        "title_animatorMigrate": "Migrate Animation",
+        "title_animatorPoint": "Point Animation",
+        "title_animatorPolygon": "Polygon Animation",
+        "title_animatorTrain": "Train Animation",
+        "title_animatorWeatherMonitor": "Weather Monitor Animation",
+        "title_boundryStyle": "Carto CSS Boundry Style",
+        "title_darkblueStyle": "Carto CSS Dark Blue Style",
+        "title_cartoCSS_edit": "Carto CSS Edit",
+        "title_utfGridLayerFlags": "UTF Grid Layer-Flags",
+        "title_utfGridLayer": "UTF Grid Layer",
+        "title_tiledVectorLayer": "Tiled Vector Layer",
+        "title_heatMapLayer": "Heat Map Layer",
+        "title_fastHeatMapLayer": "Fast Heat Map Layer",
+        "title_heatMapColorSection": "Heat Map Color Section",
+        "title_heatMapColorManual": "Heat Map Color Manual",
+        "title_heatGridMapLayer": "Heat Grid Map Layer",
+        "title_goisLayer": "Gois Layer",
+        "title_elementsLayerExtension": "Elements Layer Extension",
+        "title_clusterLayer": "Cluster Layer",
+        "title_cartoCSSText": "Carto CSS Text Symbols",
+        "title_cartoCSSPolygon": "Carto CSS Polygon Symbols",
+        "title_cartoCSSPoint": "Carto CSS Point Symbols",
+        "title_cartoCSSNightStyle": "Carto CSS Night Style",
+        "title_cartoCSSNaturalStyle": "Carto CSS Natural Style",
+        "title_cartoCSSLine": "Carto CSS Line Symbols",
+        "title_cartoCSSHelloKitty": "Carto CSS Hello kitty Style",
+        "title_cartoCSSHightlight": "Carto CSS Hightlight",
+        "title_mapQueryByBounds": "Map Query by Bounds",
+        "title_mapQueryByDistance": "Map Query by Distance",
+        "title_mapQueryByGeometry": "Map Query by Geometry",
+        "title_mapQueryBySQL": "Map Query by SQL",
+        "title_mapService": "Map Information of SuperMap",
+        "title_measureArea": "Area Measurement Service",
+        "title_measureDistance": "Distance Measurement Service",
+        "title_tiledMapLayer": "3857 Coordinate System",
+        "title_tiledMapLayer_4326": "4326Map",
+        "title_graticuleLayer_3857": "Graticule",
+        "title_graticuleLayer_4326": "Graticule_WGS84",
+        "title_tiledMapLayer_4326WGS84": "Map WGS84",
+        "title_tiledMapLayer_China2000": "Map China2000",
+        "title_tiledMapLayer_Beijing54": "Map Beijing54",
+        "title_tiledMapLayer_Xian80": "Map Xian80",
+        "title_fieldService": "SuperMap Field Service",
+        "title_fieldStatistics": "Dataset Field Statistics Service",
+        "title_getGridCellInfos": "Data Grid Cell Query",
+        "title_bufferAnalystService": "Dataset Buffer Analysis",
+        "title_bufferAnalystServiceGeometry": "Geometry Buffer Analysis (2)",
+        "title_surfaceAnalystService": "Surface Analysis (Getting Contour Line)",
+        "title_thiessenAnalystDataset": "Dataset  Thiessen Analysis",
+        "title_thiessenAnalystGeometry": "Geometry Thiessen Analysis",
+        "title_drawControl": "Drawing Control",
+        "title_drawControlWGS84": "Drawing Control WGS84",
+        "title_fullscreenControl": "Full Screen Control",
+        "title_geolocateControl": "Location Control",
+        "title_navigationControl": "Navigation Control",
+        "title_swipeBetweenMaps": "Curling control",
+        "title_dataFlowService": "Data Flow Service",
+        "title_cellMap": "Cell Map",
+        "title_ChangchunPublicTransportNetwork": "Changchun Public Transport Network",
+        "title_effectScatter": "Urban Air Quality Map",
+        "title_geoline": "Simulated Migration Chart",
+        "title_geolineWGS84": "Simulated Migration Chart WGS84",
+        "title_linesBus": "line",
+        "title_linesEffect": "line effect",
+        "title_linesAirline": "Airplane Route Map of the World",
+        "title_scatterWeibo": "Scatter of Weibo Users",
+        "title_scatterWeiboWGS84": "Scatter of Weibo Users WGS84",
+        "title_colorfulCity": "Colorful Buildings",
+        "title_flightPath": "Flight Path Map",
+        "title_GlobalWind": "Global Wind Visualization Map",
+        "title_ShanghaiBuildingPrice": "Visualization Map of Shanghai Building Price",
+        "title_taxiRoutesOfCapeTown": "Taxi Routes Of CapeTown",
+        "title_taxiTrajectoryMap": "Taxi Trajectory Map of Chengdu",
+        "title_graphThemeLayer": "Statistical Thematic Chart",
+        "title_changeStyle": "Change Style",
+        "title_beijingPositronStyle": "Beijing Positron Style",
+        "title_beijingOSMStyle": "Beijing OSM Style",
+        "title_beijingKlokantechStyle": "Beijing Klokantech Style",
+        "title_beijingFiordStyle": "Beijing Fiord Style",
+        "title_beijingDarkBlueStyle": "Beijing Dark Blue Style",
+        "title_beijingMVTVectorTile": "Beijing Vector Tile (MVT)",
+        "title_chinaMVTVectorTile": "China Vector Tile (MVT)",
+        "title_uniqueTheme3DLayer": "Unique Theme 3D Layer of Land Use Type",
+        "title_rangeTheme3DLayer": "Range Theme 3D Layer of Population Density",
+        "title_mapvQianxiTime": "MapV Migration Timing Map",
+        "title_mapvQianxi": "MapV Migration Map",
+        "title_mapvPolylineTime": "MapV Polyline Timing Map",
+        "title_mapvForceEdge": "MapV Force Edge Bundling",
+        "title_mapvPolylineIntensity": "MapV Polyline Intensity Map",
+        "title_mapvCsvcar": "MapV Csv Car",
+        "title_mapvCsvcarWGS84": "MapV Csv Car WGS84",
+        "title_mapvBeijingVillage": "MapV Beijing Village Map",
+        "title_layerService": "SuperMap Layer Service",
+        "title_tiledMapLayerNonEarth": "Planar coordinate base map of SuperMap REST",
+        "title_tiledMapLayerProj4": "Custom Scale Map",
+        "title_interpolationAnalystServiceKriging": "Spatial Analysis -  Kriging Interpolation Analysis",
+        "title_interpolationAnalystServiceKrigingUniversal": "Spatial Analysis - Universal Kriging Interpolation Analysis",
+        "title_findMTSPPathsServiceLogistics": "Multi-traveler Analysis - Logistics Distribution ",
+        "title_findTSPPathsService": "Multi-traveler Analysis - Quality Inspection",
+        "title_graphicLayer": "points of 180K NY taxis",
+        "title_mb_graphicLayer": "High efficiency point layer",
+        "title_mb_graphicLayerWGS84": "High efficiency point layer WGS84",
+        "title_graphicLayer_webgl": "High efficiency point layer-webgl",
+        "title_graphicLayerClovers": "clover",
+        "title_graphicLayerTaxi": "High efficiency point layer - picture drawing of 180K NY taxis",
+        "title_heatMap": "Heat map",
+        "title_heatMapNY": "Heat map of New York Taxis",
+        "title_markerCluster": "Marker Cluster",
+        "title_markerClusterWGS84": "Marker Cluster WGS84",
+        "title_pulse": "Flashing Points",
+        "title_geometryBatchAnalystService": "Spatial Batch Analyst of Geometry",
+        "title_geometryOverlayBatchAnalystService": "Batch Analyst of Overlay",
+        "title_tiledMapLayerNoProj": "Planar Projection Map of SuperMap REST",
+        "title_AnimationFeature": "Animation Feature Map",
+        "title_Cluster": "Cluster Map",
+        "title_graphiclayerCanvas": "Canvas Rendering",
+        "title_graphiclayerWebgl": "Webgl Rendering",
+        "title_baiduLayer": "Baidu Map",
+        "title_changeTileVersion": "Tile Version Switch Control",
+        "title_layerSwitch": "Roller Blinds",
+        "title_controlerLayerSwitcher": "Layer Switch Control",
+        "title_dragFeatures": "Features Dragging",
+        "title_drawFeatures": "Features Drawing",
+        "title_editorOL": "iClient for OpenLayers Sample Code",
+        "title_examplesOL": "iClient for OpenLayers Examples",
+        "title_editorLeaflet": "iClient for Leaflet  Sample Code",
+        "title_examplesLeaflet": "iClient for Leaflet Examples",
+        "title_editorMBGL": "iClient for MapboxGL  Sample Code",
+        "title_examplesMBGL": "iClient for MapboxGL Examples",
+        "title_examplesComponent": "Component Examples",
+        "title_editorComponent": "Component Sample Code",
+        "title_editorClassic": "iClient Classic  Sample Code",
+        "title_examplesClassic": "iClient Classic Examples",
+        "title_editor3DWebGL": "SuperMap 3D-WebGL  Sample Code",
+        "title_examples3DWebGL": "SuperMap 3D-WebGL Examples",
+        "title_freehandDrawFeatures": "Handwritten Graphic Drawing",
+        "title_iPortalQueryMaps": "Web Map List of iPortal",
+        "title_iPortalQueryResources": "Resources List of iPortal ",
+        "title_iPortalQueryMyResources": "My Resources List of iPortal ",
+        "title_iPortalQueryResourcesTitle": "Examples of iPortal QueryResources ",
+        "title_iPortalQueryResourcesType":"Resources Type",
+        "title_iPortalQueryResourcesAll":"All",
+        "title_iPortalQueryResourcesMap":"Map",
+        "title_iPortalQueryResourcesService":"Service",
+        "title_iPortalQueryResourcesScene":"Scene",
+        "title_iPortalQueryResourcesData":"Data",
+        "title_iPortalQueryResourcesInsights":"Data Insights",
+        "title_iPortalQueryResourcesDashboards":"Map Dashboards",
+        "title_iPortalQueryResourcesControl":"Resources Control",
+        "title_iPortalQueryResourcesPublic":"Public",
+        "title_iPortalQueryResourcesGroup":"Group",
+        "title_iPortalQueryResourcesDepartment":"Department",
+        "title_iPortalQueryResourcesUser":"User",
+        "title_iPortalQueryResourcesShareToMe":"Share to me",
+        "title_iPortalQueryResourcesMyDepartment":"My Department",
+        "title_iPortalQueryResourcesMyGroup":"My Group",
+        "title_iPortalQueryResourcesMy":"My",
+        "title_iPortalQueryResourcesSortFiled":"Sort Field",
+        "title_iPortalQueryResourcesUpdateTime":"Update Time",
+        "title_iPortalQueryResourcesHeatLevel":"Heat Level",
+        "title_iPortalQueryResourcesSort":"Sort",
+        "title_iPortalQueryResourcesSortUp":"DESC",
+        "title_iPortalQueryResourcesSortDown":"ASC",
+        "title_iPortalQueryResourcesSearch": "Search",
+        "title_iPortalQueryServices": "Web Service List of iPortal",
+        "title_iPortalQueryMapdashboards": "Web Mapdashboard List of iPortal",
+        "title_iPortalSecurity": "Examples of iPortal SecurityManager",
+        "title_iPortalQueryInsights": "Web Insight List of iPortal",
+        "title_iPortalQueryScenes": "Web Scene List of iPortal",
+        "title_labelThemeLayer": "Client Label Thematic Map",
+        "title_mapvNyvTaxi": "NY Taxi Car Points",
+        "title_modifyFeatures": "Modify Features",
+        "title_mvtVectorLayer_vectortilerest": "iServer REST VectorTile",
+        "title_mvtVectorLayer_restdata": "iServer REST Data TileFeature",
+        "title_mvtVectorLayer": "iServer MVT VectorTile",
+        "title_mvtVectorLayer4326": "iServer MVT VectorTile (WGS84)",
+        "title_mvtVectorLayer_mapboxStyle": "Style Switch",
+        "title_mvtVectorLayer_mapboxStyle_4326": "OSM Style(MVT WGS84)",
+        "title_mvtVectorLayer_mapboxStyle_lineStyle": "LineStyle Edit",
+        "title_mvtVectorLayer_mapboxStyle_landuse": "Land Use",
+        "title_mvtVectorLayer_overlay": "MVT Overlay",
+        "title_onlineSecurity": "Examples of Online SecurityManager",
+        "title_onlineWebMap": "Be a backpacker in 2014",
+        "title_osmBuildings": "Buildings Stereoscopic Effect of OpenLayers",
+        "title_osmBuildingsLeaflet": "Buildings Stereoscopic Effect of Leaflet",
+        "title_rankSymbolThemeLayer": "Rank Symbol Thematic Map",
+        "title_snapDrawFeatures": "Snap Features Drawing",
+        "title_superMapCloudLayer": "SuperMap Cloud Layer",
+        "title_tiandituLayer_ll": "Tianditu - Latitude and Longitude",
+        "title_tiandituLayer_mecartor": "Tianditu - Mercator",
+        "title_vectorTiledLayer": "Vector Tile Layer",
+        "title_turfClassificationAnalysis": "Classification Analysis",
+        "title_turfGridAnalysis": "Grid Analysis",
+        "title_turfInterpolationAnalysis": "Interpolation Analysis",
+        "title_turfMeasurement": "Measurement",
+        "title_WMSLayer": "WMS Layer",
+        "title_WMTSLayer": "WMTS Layer",
+        "title_cloudLayer": "SuperMap Cloud",
+        "title_markersWithCustomIcons": "Custom Icons",
+        "title_layerSwitchControl": "Layer Switch Control",
+        "title_d3HexbinLayer": "D3 Honeycomb Map",
+        "title_rangeThemeLayer": "D3 Range Thematic Layer",
+        "title_UniqueThemeLayer": "D3 Unique Thematic Layer",
+        "title_ESHeatMap": "Heat / Grid Map",
+        "title_ESGridAggregation": "Grid / Heat Map",
+        "title_nodeManagementUseExample": "Examples of iManager Nodes Management ",
+        "title_iPortalQueryMaps1": "Examples of iPortal QueryMaps ",
+        "title_iPortalQueryServices1": "Examples of iPortal QueryServices ",
+        "title_iPortalQueryServices2": "Examples of iPortal QueryService ",
+        "title_iPortalQueryMapdashboards1": "Examples of iPortal QueryMapdashboards ",
+        "title_iPortalQueryMapdashboards2": "Examples of iPortal QueryMapdashboard ",
+
+        "title_iPortalQueryInsights1": "Examples of iPortal QueryInsights",
+        "title_iPortalQueryInsight": "Examples of iPortal QueryInsight",
+        "title_iPortalUpdateInsightAttrs": "Examples of iPortal UpdateInsightAttrs",
+        "title_iPortalQueryScenes1": "Examples of iPortal QueryScenes",
+        "title_iPortalQueryScene": "Examples of iPortal QueryScene",
+        "title_iPortalUpdateSceneAttrs": "Examples of iPortal UpdateSceneAttrs",
+        "title_iPortalAddMapOrScene": "Examples of iPortal AddMap/AddScene",
+        "title_iPortalAddMap": "Add Map",
+        "title_iPortalAddScene": "Add Scene",
+
+        "detail_iPortal_baseInfo": "Basic Info",
+        "detail_iPortal_name": "Name",
+        "detail_iPortal_owner": "Owner",
+        "detail_iPortal_URL": "URL",
+        "detail_iPortal_tags": "Tags",
+        "detail_iPortal_description": "Description",
+        "detail_iPortal_createdTime":"Created Time",
+        "detail_iPortal_visits":"Visits",
+        "edit_iPortal_uploadNewThumbnail":"Upload New Thumbnail",
+        "edit_iPortal_exceedSize":"Format: PNG, or JPG. The image size can't exceed 150KB.",
+        "edit_iPortal_specifiedSize":"Recommended Image Size: 265 * 170 pixels.",
+        "title_iServerSecurity": "Examples of iServer Security Certification",
+        "title_mapVLayerPolygon": "Village of Beijing",
+        "title_mapVLayerPolygonWGS84": "Polygon WGS84",
+        "title_planesMonitor": "Flight Monitoring",
+        "title_vectorTileLayerBoundary": "Boundary Style of SuperMap REST Vector Layer",
+        "title_vectorTileLayerDarkBlue": "Dark Blue Style of SuperMap REST Vector Layer",
+        "title_vectorTileLayerHelloKitty": "HelloKitty Style of SuperMap REST Vector Layer",
+        "title_vectorTileLayerMVT": "MVT Style of SuperMap Vector Tile",
+        "title_vectorTileLayerMVT4326": "MVT Style of SuperMap 4326 Vector Tile",
+        "title_vectorTileLayerNatural": "Natural Style of SuperMap REST Vector Layer",
+        "title_vectorTileLayerNight": "Night Style of SuperMap REST Vector Layer",
+        "title_vectorTileLayerNormal": "Vector Layer of SuperMap REST",
+        "title_iportalWebMap_range": "SuperMap iPortal Range Map",
+        "title_iportalWebMap_heat": "SuperMap iPortal Heat Map",
+        "title_iportalWebMap_unicode": "SuperMap iPortal Point Style",
+        "title_iportalWebMap_unique": "SuperMap iPortal Unique Map",
+        "title_iportalWebMap_label": "SuperMap iPortal Label Map",
+        "title_earthquakeHeatMapLayer": "Earthquake occurrences(2005-2016)(Classic)",
+        "title_echartsEarthquake": "Earthquake occurrences(2005-2016)",
+        "title_l_echartsEarthquake": "Earthquake heat map (2001-2014)",
+        "title_lianjia": "Beijing house prices of Lianjia(2018.2)",
+        "title_l_echartsEarthquake1": "2008 to 2017 years of earthquake statistics",
+        "title_echartsLinesMillions_bjRoads": "Use lines to draw 1.3 millions Beijing's roads",
+        "title_echartsLinesMillions_railways": "Use lines to draw 4 millions Chinese railways",
+        "title_echartsLinesMillions_railwaysWGS84": "Use lines to draw 4 millions Chinese railways WGS84",
+        "title_echartsLinesMillions_waterSystem": "Use lines to draw 14 millions Chinese water system",
+        "title_echartsLinesMillions_roads": "Use lines to draw 25 millions Chinese roads",
+        "title_echartsLinesMillions_nyTaxi": "Use scatter to draw 1.4 millions New York Taxi Points",
+        "title_mb_deckglLayer_arcLayer": "arc-layer",
+        "title_mb_deckglLayer_pathLayer": "path-layer",
+        "title_mb_deckglLayer_pathLayerWGS84": "path-layer WGS84",
+        "title_mb_deckglLayer_polygonLayer": "polygon-layer",
+        "title_mb_deckglLayer_hexagonLayer": "hexagon-layer",
+        "title_mb_deckglLayer_nyBuilding": "New York Construction",
+        "title_mb_deckglLayer_nyc_census": "New york city population",
+        "title_mb_deckglLayer_scatterPlot": "California Earthquakes",
+        "title_mb_deckglLayer_sfcontour": "San Francisco Elevation Contour",
+        "title_mb_deckglLayer_sftrees": "San Francisco Street Tree Map",
+        "title_mb_deckglLayer_ukcommute": "Commute Patterns in the UK",
+        "title_openFile": "OpenFile",
+        "title_openFile_react": "OpenFile(React)",
+        "title_openFile_vue": "OpenFile(Vue)",
+        "title_dataFlow": "Data Flow",
+        "title_chart": 'Chart',
+        "title_chart_iServer": 'Chart_iServer',
+        "title_chart_iPortal": 'Chart_iPortal',
+        "title_spatialAnalysis": 'Client Computation',
+        "title_distributeAnalysis": 'Distribute Analysis',
+        "title_dataServiceQuery": 'Data service query',
+        "title_ChinaEarthquakeHeat": 'China Earthquake',
+        "title_ChinaEarthquakeHeatWGS84": 'China Earthquake WGS84',
+        "title_ChinaEarthquakeHeatClient": 'China Earthquake(Classic) WGS84',
+        "title_componentsChart_Vue": 'Chart component(Vue)',
+        "title_componentsChart_Vue(pie)":'Pie Chart component(Vue)',
+        "title_componentsChart_Vue(radar)":'Radar Chart component(Vue)',
+        "title_componentsChart_Vue(gauge)":'Gauge Chart component(Vue)',
+        "title_componentsLayerList_Vue": 'LayerList component(Vue)',
+        "title_componentsOpenFile_Vue":'OpenFile component(Vue)',
+        "title_componentsMap_Vue": 'iServer Map component(Vue)',
+        "title_componentsMiniMap_Vue": 'MiniMap component(Vue)',
+        "title_componentsPan_Vue": 'Pan component(Vue)',
+        "title_componentsScale_Vue": 'Scale component(Vue)',
+        "title_componentsWebmap_Vue": 'iPortal Map component(Vue)',
+        "title_componentsCompare_Vue": 'Map Compare(Vue)',
+        "title_componentsZoom_Vue": 'Zoom component(Vue)',
+        "title_componentsLegend_Vue": 'Legend component(Vue)',
+        "title_componentsBasic_Vue": 'Basic component(Vue)',
+        "title_componentsMeasure_Vue": 'Measure component(Vue)',
+        "title_componentsQuery_Vue": 'Query component(Vue)',
+        "title_componentsSearch_Vue": 'Search component(Vue)',
+        "title_componentsTheme_Vue": 'Theme component',
+        "title_componentsDemo_Vue": 'Landuse demo',
+        "title_componentsEstateMonitoringPlatform_Vue": 'Estate project visual monitoring platform demo',
+        "title_componentsCluster_Vue": 'Cluster Layer component(Vue)',
+        "title_componentsEcharts_Vue": 'Echarts Layer component(Vue)',
+        "title_componentsRaster_Vue": 'Raster Layer component(Vue)',
+        "title_componentsGeoJSON_Vue": 'GeoJSON Layer component(Vue)',
+        "title_componentsMapV_Vue": 'MapV Layer component(Vue)',
+        "title_componentsDeckGL_Vue": 'DeckGL Layer component(Vue)',
+        "title_componentsVectorTile_Vue": 'Vector Tile Layer component(Vue)',
+        "title_componentsHeatmap_Vue": 'Heatmap Layer component(Vue)',
+        "title_componentsGraphThemeLayer_Vue": 'Statistical Thematic Chart component(Vue)',
+        "title_componentsUniqueTheme_Vue": 'UniqueTheme Layer component(Vue)',
+        "title_componentsRangeTheme_Vue": 'RangeTheme Layer component(Vue)',
+        "title_componentsRankSymbolTheme_Vue": 'RankSymbolTheme Layer component(Vue)',
+        "title_componentsLabelTheme_Vue": 'LabelTheme Layer component(Vue)',
+        "title_componentsDataFlow_Vue": 'Data FLow Layer component(Vue)',
+        "title_componentsFireLayer_Vue": 'Animate Fire Layer component(Vue)',
+        "title_componentsAnimateMarkerLayer_Vue": 'Animate Marker Layer(Vue)',
+        "title_componentsAnimateTextLayer_Vue": 'Animate Text Layer(Vue)',
+        "title_componentsBorder_Vue": 'Border component',
+        "title_componentsIdentify_Vue": 'Identify component(Vue)',
+        "title_componentsPopup_Vue": 'Popup(Vue)',
+        "title_componentsLayerManager_vue": 'LayerManager component(Vue)',
+        "title_componentsWebmap_React": 'iPortal Map component(React)',
+        "title_componentsMap_React": 'iServer Map component(React)',
+        "title_componentsRasterTile_React": 'Raster Layer component(React)',
+        "title_componentsVectorTile_React": 'Vector Tile Layer component(React)',
+        "title_componentsUniqueTheme_React": 'UniqueTheme Layer component(React)',
+        "title_componentsRangeTheme_React": 'RangeTheme Layer component(React)',
+        "title_componentsGraphThemeLayer_React": 'Statistical Thematic Chart component(React)',
+        "title_componentsHeatmap_React": 'Heatmap Layer component(React)',
+        "title_componentsMapV_React": 'MapV Layer component(React)',
+        "title_componentsEcharts_React": 'Echarts Layer component(React)',
+        "title_componentsDataFlow_React": 'Data FLow Layer component(React)',
+        "title_componentsFireLayer_React": 'Animate Fire Layer component(React)',
+        "title_componentsGeoJSON_React": 'GeoJSON Layer component(React)',
+        "title_componentsCluster_React":'Cluster Layer component(React)',
+        "title_componentsDeckGL_React": 'DeckGL Layer component(React)',
+        "title_componentsLabelTheme_React": 'LabelTheme Layer component(React)',
+        "title_componentsRankSymbolTheme_React": 'RankSymbolTheme Layer component(React)',
+        "title_componentsAnimateMarkerLayer_React": 'Animate Marker Layer(React)',
+        "title_componentsAnimateTextLayer_React": 'Animate Text Layer(React)',
+        "title_webPrinting_landUse": 'Web Printing(LandUse)',
+        "title_natureResourcePlatform_Vue": 'Nature Resource Platform(Vue)',
+        "title_ecologicalBigDataPlatform_Vue": 'Ecological Big Data Platform(Vue)',
+        "title_mask":'Layer Mask',
+        "title_objectdetection":"Machinelearning Result Overlay(Objectdetection)",
+        "title_binaryclassification":"Machinelearning Result Overlay(Binaryclassification)",
+        "title_mvt_mapboxgl":"MVT WGS84 (via MapboxGL)",
+
+        "text_service_name":"Name",
+        "text_service_type":"Type",
+        "text_service_status":"Status",
+        "text_view_service":"View Services",
+        "text_unpublish_service":"Unpublish",
+        "text_publish_message":"Select the type of service to be published:",
+        "text_publish_data":"Publish Data",
+        "text_dataBase_name":"Database name",
+        "text_hdfs_directory":"HDFS directory",
+        "text_hbase_address":"Server url",
+        "text_x_field":"X Coord Field",
+        "text_y_field":"Y Coord Field",
+        "text_file_encoding":"File Encoding",
+        "text_data_type":"Data Type",
+        "text_data_file":"Data File",
+        "text_data_name":"Name",
+        "text_user_data":"Data from users",
+        "text_workspace":"SuperMap Workspace",
+        "text_UDB":"SuperMap UDB Data",
+        "text_shapefile":"Shapefile",
+        "text_geojson":"GeoJSON Data",
+        "text_smtiles":"SMTiles File",
+        "text_svtiles":"SVTiles File",
+        "text_mbtiles":"MBTiles File",
+        "text_tpk":"TPK File",
+        "text_ugcv5":"UGCV5 Cache",
+        "text_ugcv5_mvt":"UGCV5(MVT) Cache",
+        "text_excel":"Excel",
+        "text_csv":"CSV",
+        "text_json":"JSON",
+        "text_confirm":"Confirm",
+        "text_code": "Forward Match",
+        "text_decode": "Reverse Match",
+        "text_address": "Address ",
+        "text_input_tips_company": "Company",
+        "text_filterField": "Filter field",
+        "text_input_tips_Beijing": "Beijing",
+        "text_minIndex": "Min index",
+        "text_maxIndex": "Max index",
+        "text_maxCount": "Max count of results",
+        "text_coorSystem": "Coordinate system",
+        "text_coordinate": "Coordinate",
+        "text_abscissa": "Abscissa",
+        "text_ordinate": "Ordinate",
+        "text_queryRadius": "Radius of query",
+        "text_input_value_match": "To Match",
+        "text_matchDegree": "Matching degree",
+        "text_bufferAnalyst1": "Buffer Analysis 1",
+        "text_bufferAnalyst2": "Buffer Analysis 2",
+        "text_bufferAnalyst": "Buffer analysis",
+        "text_removeResult": "Remove result",
+        "text_addPath": "Add path",
+        "text_query": "To query",
+        "text_closestFacilitiesService": "Closest Facilities Analysis Service",
+        "text_weightField": "Weight field:",
+        "text_turnField": "End of the mileage point (Turning field):",
+        "text_input_value_eventPoint": "Event point",
+        "text_input_value_submit": "Submit",
+        "text_input_value_clear": "Clear",
+        "text_densityAnalystService": "Density Analysis Service",
+        "text_input_value_densityAnalyst": "Density analysis",
+        "text_input_value_removeTheme": "Remove the result layer",
+        "text_dynamicSegmentation": "Dynamic Segmentation",
+        "text_input_value_dynamicSegmentation": "Dynamic segmentation",
+        "text_findLocation": "Find Location Analysis",
+        "text_analyst": "Analyst",
+        "text_findMTSPPaths": "Find MTSP Paths Service",
+        "text_target": "Target",
+        "text_findMTSPPathsAndTSPPaths": "Find MTSP Paths and TSP Paths",
+        "text_dispatching": "Dispatching",
+        "text_check": "Check",
+        "text_findPath": "Best Path Analysis",
+        "text_sites": "Sites",
+        "text_findTSPPaths": "Find TSP Paths",
+        "text_interpolationAnalystByDen": "Interpolation Analysis of Density",
+        "text_input_value_density": "Density",
+        "text_interpolationAnalystByGeo": "Interpolation Analysis of Geometry",
+        "text_min": "Min value of Z:",
+        "text_max": "Max value of Z:",
+        "text_input_value_byGeo": "Start analysis",
+        "text_input_value_delete": "Delete",
+        "text_interpolationAnalystByIDW": "Interpolation Analysis of IDW",
+        "text_input_value_byIDW": "Start analysis",
+        "text_interpolationAnalystByKriging": "Interpolation Analysis of Kriging",
+        "text_simple": "Simple Kriging",
+        "text_ordinary": "Kriging",
+        "text_extensive": "Universal Kriging",
+        "text_interpolationAnalystByRBF": "Interpolation Analysis of RBF",
+        "text_input_value_RBF": "Start analysis",
+        "text_mathExpression": "Math expression",
+        "text_expression": "Math expression: ",
+        "text_overlayAnalyst": "Overlay Analysis",
+        "text_routeCalculateMeasure": "Route Calculate Measure",
+        "text_queryRoute": "Query route object",
+        "text_queryPoint": "Specify query point",
+        "text_routeLocatorLine": "Route Location Line",
+        "text_startRoute": "The start mileage point: ",
+        "text_endRoute": "The end mileage point: ",
+        "text_locationLine": "Location line",
+        "text_routeLocatorPoint": "Route Locator Point",
+        "text_routPoint": "Specify the mileage point:",
+        "text_locationPoint": "Location point",
+        "text_serviceAreas": "Service Area Analysis",
+        "text_serviceCenter": "Service center",
+        "text_surfaceAnalyst": "Surface Analysis",
+        "text_contourLine": "Get contour line",
+        "text_remove": "Remove",
+        "text_terrainCurvatureCalculation": "Terrain Curvature Calculation",
+        "text_thiessenAnalyst": "Thiessen Polygon Analysis",
+        "text_datasetThiessen": "Dataset thiessen polygon",
+        "text_geoThiessen": "Geometry thiessen polygon",
+        "text_trafficTransfer": "Traffic Transfer Service",
+        "text_startPoint": "Starting point",
+        "text_endPoint": "Ending point",
+        "text_transferScheme": "Transfer scheme",
+        "text_minTime": "Min time",
+        "text_minDistance": "Min distance",
+        "text_lessWalk": "Less walk",
+        "text_lessTransfer": "Less transfer",
+        "text_notFindSPoint": "Not finding the starting point for the match",
+        "text_notFindEPoint": "Not finding the ending point for the match",
+        "text_trafficTransferScheme": "The Traffic Transfer Scheme",
+        "text_close": "Close",
+        "text_open": "Open",
+        "text_closeWindow": "Close window",
+        "text_ridePreference": "Ride Preference:",
+        "text_noSubway": "Do not by subway",
+        "text_scheme": "Plan",
+        "text_walkTO": "Walk to:",
+        "text_ride": "Ride ",
+        "text_debus1": " get off the bus at ",
+        "text_debus2": "",
+        "text_stops": " stops",
+        "text_alsoRide": "You can also to ride: ",
+        "text_buffersAnalystJobService": "Buffers Analysis Job Service",
+        "text_inputData": "Input data",
+        "text_requiredField": "Required field",
+        "text_analysisRange": "Range of analysis",
+        "text_bufferDistance": "Buffer distance",
+        "text_bufferDistanceField": "Field of buffer distance",
+        "text_bufferDistanceUnit": "Unit of buffer distance",
+        "text_fusionField": "Fusion field",
+        "text_areaMeasure": "Area Measure",
+        "text_input_value_areaMeasure": "Area measure",
+        "text_changeControlsSkin": "Change Controls Skin",
+        "text_input_value_change": "Change",
+        "text_distanceMeasure": "Distance Measure",
+        "text_input_value_distanceMeasure": "Distance measure",
+        "text_dragFeature": "Mouse Drag Feature Control",
+        "text_input_value_dragFea": "Drag feature",
+        "text_input_value_notDrag": "Cancel drag",
+        "text_dragpan": "Drag Map Control",
+        "text_input_value_dragMap": "Drag map",
+        "text_drawGeometry": "Draw Geometry",
+        "text_input_value_drawPoint": "Draw point",
+        "text_input_value_drawLine": "Draw line",
+        "text_input_value_drawPolygon": "Draw polygon",
+        "text_input_value_select": "Select",
+        "text_input_value_modify": "Modify",
+        "text_featureSnap": "Edit Feature",
+        "text_input_value_closeSnap": "Close snap",
+        "text_input_value_openSnap": "Open snap",
+        "text_input_value_addData": "Add data",
+        "text_input_value_removeData": "Remove data",
+        "text_input_value_location": "Location",
+        "text_kernelDensityJobService": "Density Analysis",
+        "text_analysisMethod": "Analysis method",
+        "text_simpleDenAnalyst": "Simple density analysis",
+        "text_meshSurfaceType": "Mesh surface type",
+        "text_4grid": "Quadrilateral Mesh",
+        "text_6grid": "Hexagonal  Mesh",
+        "text_gridSize": "GridSize",
+        "text_gridSizeUnit": " GridSizeUnit",
+        "text_searchRadius": "SearchRadius",
+        "text_searchRadiusUnit": "SearchRadiusUnit",
+        "text_areaUnit": 'Area unit',
+        "text_baidu": "Baidu",
+        "text_coordinateTransformation": "Map Coordinate Transformation: Transformation of pixel coordinates and geographical position coordinates",
+        "text_mousePixelCoordinate": "Coordinate of Mouse Pixel: ",
+        "text_positionCoordinate": "Position Coordinate:",
+        "text_mouse": "Mouse",
+        "text_event": "Event",
+        "text_mapOverlay": "SuperMap REST Map Overlay",
+        "text_opacity": "Opacity",
+        "text_input_tips_opacity": "Set layer's opacity. Range [0-1].",
+        "text_input_user_name": "Please enter nickname/username",
+        "text_input_department_name": "Please enter department name",
+        "text_toggleMaps": "Toggle Maps",
+        "text_translation": "Zoom and Translation",
+        "text_iClient": "The sample data comes from the offset data of the Baidu MapV, iClient does not rectify deviation",
+        "text_queryByWFS": "WFS Query",
+        "text_wms": "WMS Layer",
+        "text_projection": "Projection system",
+        "text_wmsVersion": "Wms version: ",
+        "text_currentInfo": "The current layer's information: ",
+        "text_mapProjection": "Map projection: ",
+        "text_currentVersion": "Current version of wms",
+        "text_a0mapPrint": "Map A0 Printing",
+        "text_clickGetCoord": 'Click Map To Get Coordinate',
+        "text_longitude": "Longitude: ",
+        "text_latitude": "Latitude: ",
+        "text_otherProvince": "Other province ",
+        "text_windmap": "D3 Wind Map",
+        "text_picker": "The picker of Gold medal's distribution in Beijing Olympic Games",
+        "text_salesVolume1": "Sales Volume Statistics of ",
+        "text_salesVolume2": "",
+        "text_productA": "A",
+        "text_productB": "B",
+        "text_productC": "C",
+        "text_productD": "D",
+        "text_productE": "E",
+        "text_productF": "F",
+        "text_featureRightClick": "Feature Right Click",
+        "text_mediacy": "Mediacy",
+        "text_layerGroup": "Layer Group Control",
+        "text_JingjinMap": "Jingjin Map",
+        "text_lookUpLayer": "Drag to look up layer",
+        "text_mapPrint": "Map printing",
+        "text_handMouse": "Hand mouse style",
+        "text_crossMouse": "Cross mouse style",
+        "text_defaultMouse": "Default mouse style",
+        "text_printscreen": "Map Printscreen",
+        "text_detailedInfo": 'Detailed Information',
+        "text_companyName": "Company name: ",
+        "text_companyAddress": "Company address: ",
+        "text_clientProjection": "Coordinate projection transformation of client map: ",
+        "text_mousePosition": "Mouse position coordinate projection:  ",
+        "text_mouseCoord": "Mouse position coordinate:  ",
+        "text_rightClick": "Marker Layer Right Click Event",
+        "text_setlayerstatus": "Sublayer Control",
+        "text_mapSublayer": "Sublayer of World Map",
+        "text_visibility": "visibility",
+        "text_topHeight": "Building top height: ",
+        "text_bottomHeight": "Building bottom height: ",
+        "text_wallColor": "Building wall color: ",
+        "text_topColor": "Building top color: ",
+        "text_graphicSymbolData": "Drawing Graphic Layer Symbol",
+        "text_countsDraw": "Counts",
+        "text_featureID": 'Feature ID: ',
+        "text_indexLeaf": "Index: ",
+        "text_islandMultiPolygonData": "Island Cave and Multi Polygon",
+        "text_labelVectorLayerData": "Label vector layer data",
+        "text_mouseClickEvent": "Mouse click event",
+        "text_splinesData": "Spline curve",
+        "text_equipment": "Equipment ",
+        "text_mouseClickEventLayer": "Mouse click event on vector layer",
+        "text_basicVectorLayerData": "Basic vector layer data",
+        "text_sourceDataset": "Source dataset",
+        "text_overlayDataset": "Overlay dataset",
+        "text_analystMode": "Analysis mode",
+        "text_clip": "Clip",
+        "text_intersect": "Intersect",
+        "text_erase": "Erase",
+        "text_union": "Union",
+        "text_update": "Update",
+        "text_identity": "Identity",
+        "text_xor": "Symmetric difference",
+        "text_retainedFieldSource": "Retained field on the source dataset",
+        "text_retainedFieldOverlay": "Retained field on the overlay dataset",
+        "text_lineWidth": "Line width: ",
+        "text_lineType": "Line type: ",
+        "text_lineColor": "Line color: ",
+        "text_markerWidth": "Marker width: ",
+        "text_markerHeight": "Marker height: ",
+        "text_defaultStyle": "Use default style",
+        "text_attributePanel": "Attribute Panel",
+        "text_radius": "Radius",
+        "text_kilometre": " km",
+        "text_customAttr": 'Custom attributes',
+        "text_commandPost": "Command post",
+        "text_shanxiXian": "Xi'an, Shanxi",
+        "text_weather": "Weather: clear",
+        "text_direction": "Direction: 78°",
+        "text_speed": "Seep: 123 km/h",
+        "text_drainageAmount": "Drainage amount: 2000t",
+        "text_police": "Criminal police",
+        "text_firearms": "Firearms",
+        "text_navy": "Navy force deployment",
+        "text_airport": "Airport",
+        "text_trafficPolice": "Traffic police",
+        "text_orderPolice": "Order police",
+        "text_commandCar": "Command car",
+        "text_airportForceDeployment": "The deployment of the airport force",
+        "text_satelliteCustomAttr": "Satellite custom attributes",
+        "text_orientation": "Orientation",
+        "text_Chongqing": "Chongqing",
+        "text_Nanchang": "Nanchang",
+        "text_Beijing": "Beijing",
+        "text_Yinchuan": "Yinchuan",
+        "text_seep1": "Seep",
+        "text_height": "Height",
+        "text_time": "Time",
+        "text_drawPanel": "Drawing panel",
+        "text_cancelDraw": "Cancel drawing",
+        "text_editor": "Editor",
+        "text_addLayer": "Add layer",
+        "text_situationMapOperation": "Operate situation map",
+        "text_editMarker": "Edit marker",
+        "text_detailPanel": "Viewing panel",
+        "text_aboutMode": "Switch layer lock / edit / select mode",
+        "text_multiselect": "Switch multi select mode",
+        "text_multiselectAlign": "Multi select align",
+        "text_screenshot": "Screenshot",
+        "text_avoid": "Avoid",
+        "text_createGroup": "Create group",
+        "text_editLayer": "Edit plotting layer?",
+        "text_lockLayer": "Lock plotting layer?",
+        "text_selectLayer": "Select plotting layer?",
+        "text_fileUrl": "Fail url: ",
+        "text_fileName": "Fail name: ",
+        "text_fileList": "Fail list",
+        "text_symbolLibInfo": "Symbol lib information: ",
+        "text_symbolLibName": "Symbol lib's name",
+        "text_SymbolLibID": "Symbol lib's ID",
+        "text_symbolCounts": "Symbol counts",
+        "text_layer": "Layer",
+        "text_createSuccess": " Create success",
+        "text_deleteSuccess": " Delete success",
+        "text_performanceLayer": "High performance plotting layer: ",
+        "text_performancePlottingLayer": "Plotting layer: ",
+        "text_loadingData": "Loading data, please wait a minute......",
+        "text_keyword": "keyword: ",
+        "text_queryResult": "Query result: ",
+        "text_propertyName": "Property name: ",
+        "text_propertyValue": "Property value: ",
+        "text_color": "Color",
+        "text_featureInfo": "Feature information",
+        "text_district": "District : Fangshan District",
+        "text_organization": "Organization name : Beijing Fangshan District Fuhai Yili disabled vocational rehabilitation station",
+        "text_serviceType": "Service type : vocational rehabilitation",
+        "text_note": "Note: the scroll bar of this popup is the default style of the browser,",
+        "text_featureStyle": "Style of feature popup is jquery-nanoscroller,",
+        "text_needModify": "If you need to modify,  please refer to the feature popup ",
+        "text_BeckStreet": "No. 221, B, Beck street, London",
+        "text_field": "Field",
+        "text_statisticResult": "Statistic result: ",
+        "text_averageValue": "Average value",
+        "text_maxValue": "Max value",
+        "text_minValue": "Min value",
+        "text_standardDeviation": "Standard deviation",
+        "text_sum": "Sum",
+        "text_variance": "Variance",
+        "text_gridQueryResult": "Grid query result: ",
+        "text_queryObjectMode": "Query object mode",
+        "text_dataset": "Dataset",
+        "text_queryObjectDataset": "Query object dataset",
+        "text_boundsQueryMode": "Spatial query mode",
+        "text_contain": "Contain",
+        "text_cross": "Cross",
+        "text_disjoint": "Disjoint",
+        "text_Identity": "Identity",
+        "text_overlap": "Overlap",
+        "text_touch": "Touch",
+        "text_within": "within",
+        "text_groupField": "Group field",
+        "text_attributeField": "Attribute field",
+        "text_statisticModes": "Statistic mode",
+        "text_polymerizationType": "Polymerization type",
+        "text_polymerizationMesh": "Polymerization mesh",
+        "text_polymerizationRegion": "Polymerization region",
+        "text_resolution": "Resolution",
+        "text_regionDataset": "Summary region dataset",
+        "text_summaryType": "Summary type",
+        "text_summaryMesh": "Summary mesh",
+        "text_summaryRegion": "Summary region",
+        "text_summaryDataset": "Summary dataset",
+        "text_statisticStandardField": "Statistic(standard property fields)",
+        "text_statisticWeightField": "Statistic(weight fields)",
+        "text_statisticAttrFieldMode": "Sttribute field statistical mode",
+        "text_AttrFieldName": "Attribute field name",
+        "text_statisticWeightFieldMode": "Weight field statistical mode",
+        "text_weightFieldName": "Weight field name",
+        "text_lengthAndArea": "Count length/area?",
+        "text_Name": "The name of the provincial administrative region: ",
+        "text_consumptionLevel1": "The consumption level of residents in 20",
+        "text_consumptionLevel2": "",
+        "text_yuan": "¥",
+        "text_legend": "legend",
+        "text_landType": "land type",
+        "text_grassland": "grassland",
+        "text_city": "city",
+        "text_shrub": "shrub",
+        "text_dryLand": "dry land",
+        "text_lakeReservoir": "lake/reservoir",
+        "text_economicForest": "economic forest",
+        "text_desert": "desert",
+        "text_irrigatedLand": "irrigated land",
+        "text_paddyField": "paddy field",
+        "text_timberForest": "timber forest",
+        "text_swamp": "swamp",
+        "text_DefaultStyle": "Default style",
+        "text_attributeTable": "attribute table",
+        "text_area": "area: ",
+        "text_graduatedSymbol": "Graduated Symbol Thematic Map",
+        "text_populationDensity": "population density(1992)",
+        "text_districtName": "district name: ",
+        "text_population": "population: ",
+        "text_inCountry": "The country: ",
+        "text_countsPOP": "population counts: ",
+        "text_topologyValidatorRule": "Topology validator rule",
+        "text_topologyValidatorDataset": "Topology validator dataset",
+        "text_tolerance": "Tolerance",
+        "text_clipObjectMode": "Clip object mode",
+        "text_clipObjectDataset": "Clip object dataset",
+        "text_internalClip": "internal clip",
+        "text_externalClip": "external clip",
+        "text_metro": "metro ",
+        "text_currentTime": "Current Time: ",
+        "text_24": "The 24th of the twelfth lunar month ",
+        "text_25": "The 25th of the twelfth lunar month ",
+        "text_26": "The 26th of the twelfth lunar month ",
+        "text_27": "The 27th of the twelfth lunar month ",
+        "text_28": "The 28th of the twelfth lunar month ",
+        "text_29": "The 29th of the twelfth lunar month ",
+        "text_30": "The Chinese new year's Eve ",
+        "text_clock": "'clock",
+        "text_removeDrawedPoint": "remove drawed point",
+        "text_hide": "hide",
+        "text_cartoCSSStyleChart": "Style Chart of CartoCSS: ",
+        "text_heatMapLayer": "Heat Map Layer",
+        "text_fastHeatMapLayer": "Fast Heat Map Layer",
+        "text_fastHeatMapLayer_mgl": "Heat Map Layer",
+        "text_degree": "degree",
+        "text_heatMapColorSection": "Heat Map Color Section",
+        "text_colorSection": "Color Section",
+        "text_temperatureRange": "temperature range",
+        "text_colorGrad": "Color grad",
+        "text_heatMapColorManual": "Heat Map Color Manual",
+        "text_inputColor": "Please input color value",
+        "text_addedColor": "Added color",
+        "text_country": "Country",
+        "text_capital": "Capital",
+        "text_goisLayer": "Gois Layer",
+        "text_cartoCSSPoint": "Carto CSS Point Symbols",
+        "text_choosePointType": "Points type :",
+        "text_cartoCSSHightlight": "Carto CSS Hightlight",
+        "text_mapInfoPrint": "Map has too much information, only print a part of it",
+        "text_mapName": "Map name",
+        "text_center": "Center",
+        "text_editSingle": "edit single feature",
+        "text_clickGridCellToQuery": "Please click the grid area that needs to be querying",
+        "text_GDPStatistic": "GDP statistics of 2013 and 2014 in the provinces of China",
+        "text_popThemeLayer": "Population thematic map of the national province",
+        "text_fictitiouData": "The data is purely fictitious",
+        "text_rainfall": "rainfall",
+        "text_runoff": "runoff",
+        "text_monday": "MON",
+        "text_tuesday": "TUE",
+        "text_wednesday": "WED",
+        "text_thursday": "THU",
+        "text_friday": "FRI",
+        "text_saturday": "SAT",
+        "text_sunday": "SUN",
+        "text_effectScatter": "Air quality in the main city in China",
+        "text_maxTemperature": "max",
+        "text_minTemperature": "min",
+        "text_nextWeekTemperature": " future temperature",
+        "text_class": "class ",
+        "text_commodity": "commodity ",
+        "text_commoditySales": "commodity sales",
+        "text_commodityClass": "commodity class",
+        "text_beijingCommoditySales": "Commodity sales in Beijing",
+        "text_day1": "Day ",
+        "text_day2": "",
+        "text_AQIindex": "AQI",
+        "text_CO": "CO",
+        "text_NO2": "NO2",
+        "text_SO2": "SO2",
+        "text_data": "data",
+        "text_SO2text": "brightness: SO2",
+        "text_roundSize": "round size: PM2.5",
+        "text_weiboChina": "scatter of Weibo user",
+        "text_strong": "Strong",
+        "text_middle": "Middle",
+        "text_weak": "Weak",
+        "text_clipMode": "Clip analysis mode",
+        "text_consumptionIn2009": "Residents' consumption level in 09 years",
+        "text_vectorDefaultStyle": "Default style",
+        "text_darkBlueStyle": "Dark blue style",
+        "text_fiordStyle": "Fiord style",
+        "text_klokantechStyle": "Klokantech style",
+        "text_osmStyle": "OSM style",
+        "text_positronStyle": "Positron style",
+        "text_landUseType": "Type of land use",
+        "text_landArea": "Land area",
+        "text_squareKilometre": "square kilometre",
+        "text_densityOfPopulation": "Population density",
+        "text_great": "great",
+        "text_good": "good",
+        "text_mildPollution": "mild pollution",
+        "text_moderatePollution": "moderate pollution",
+        "text_heavyPollution": "heavy pollution",
+        "text_severePollution": "severe pollution",
+        "text_currentCity": "current city",
+        "text_distance": "distance",
+        "text_edit": "Edit",
+        "text_selectMarkerToDelete": "Select marker and delete it.",
+        "text_facilityPoint1": "Facility point 1",
+        "text_facilityPoint2": "Facility point 2",
+        "text_facilityPoint3": "Facility point 3",
+        "text_distributionCentre1": "Distribution centre 1",
+        "text_distributionCentre2": "Distribution centre 2",
+        "text_distributionCentre3": "Distribution centre 3",
+        "text_destination1": "Destination 1",
+        "text_destination2": "Destination 2",
+        "text_site1": "Site 1",
+        "text_site2": "Site 2",
+        "text_site3": "Site 3",
+        "text_retailStation1": "Retail station 1",
+        "text_retailStation2": "Retail station 2",
+        "text_retailStation3": "Retail station 3",
+        "text_latLng": "Latitude and longitude is",
+        "text_dataSources": "data sources",
+        "text_NYTaxiCarPoint": "The boarding point of New York taxis",
+        "text_bufferAnalystResult": "buffer analysis result",
+        "text_overlayAnalystResult": "overlay analysis result",
+        "text_overlayBatchAnalystResult": "overlay batch analysis result",
+        "text_switchLayer": "switch layer",
+        "text_beijingCity": "Beijing",
+        "text_chengdu": "Chengdu",
+        "text_guangzhouCity": "Guangzhou",
+        "text_shanghaiCity": "Shanghai",
+        "text_usageExample": "Usage example of iPortal QueryMaps",
+        "text_createdIn": "Created in",
+        "text_function": "Function",
+        "text_instance": "Instance",
+        "text_login": "Login",
+        "text_logout": "Logout",
+        "text_serviceAddress": "Service address",
+        "text_input_tips_serviceDomainName": "Service domain name/IP+port",
+        "text_userName": "User name",
+        "text_password": "Password",
+        "text_applyForToken": "Apply for token",
+        "text_clientID": "Client identity",
+        "text_clientIP": "IP of client",
+        "text_currentRequestIP": "IP of the current request",
+        "text_noClientLimit": "No client limit",
+        "text_refererIPEmpty": "Referer/IP/empty",
+        "text_termValid": "Term of validity",
+        "text_oneHour": "one hour",
+        "text_oneDay": "one day",
+        "text_oneWeek": "one week",
+        "text_oneMonth": "one month",
+        "text_oneYear": "one year",
+        "text_tokenAuthorized": "Token authorized access to private services",
+        "text_accessing": "Accessing",
+        "text_keyAuthorized": "Key authorization to access private map services",
+        "text_iPortalServicesAddress": "iPortal private map service address",
+        "text_keyAuthorizedGetMap": "Key authorized get map",
+        "text_tokenAuthorizedGetMap": "Token authorized get map",
+        "text_getMap": "Get map",
+        "text_iServerAddress": "iServer home page address, such as: http://localhost:8090/iserver",
+        "text_iManagerAddress": "iManager home page address,such as: http://localhost:8390/imanager",
+        "text_keyAuthorizedService": "key authorized access to private services",
+        "text_noData": "no data",
+        "text_classificationAnalysis": "classification analysis",
+        "text_classificationAnalysisType": "classification analysis type",
+        "text_createGrid": "create grid",
+        "text_gridAnalysisType": "grid analysis type",
+        "text_hexGrid": "hex grid",
+        "text_pointGrid": "point grid",
+        "text_squareGrid": "square grid",
+        "text_triangleGrid": "triangle grid",
+        "text_unitGridSize": "grid size",
+        "text_gridUnitSizeUnit": "Unit of grid size",
+        "text_degrees": "degrees",
+        "text_radians": "radians",
+        "text_miles": "miles",
+        "text_kilometers": "kilometers",
+        "text_adjustSize": "Whether to adjust size to fit the size of the bbox",
+        "text_adjustPoint": "Adjust point to grid center",
+        "text_creationRange": "The creation range is polygon",
+        "text_returnedByTriangle": "return in the form of trigon",
+        "text_interpolationAnalysis": "interpolation analysis",
+        "text_interpolationAnalysisType": "interpolation analysis type",
+        "text_Jingshen": "JingShen Road, Wollongang tunnel section",
+        "text_distanceUnit": "distance unit",
+        "text_distanceToStart": "Distance to starting point",
+        "text_position": "position",
+        "text_positionRange": "[-180, 180]",
+        "text_turfMeasure": "turf measure",
+        "text_totalLength": "total length: 1174.8 meters, about 0.729 miles",
+        "text_getPoint": "get the point",
+        "text_measureArea": "measure area",
+        "text_getArea": "get the area",
+        "text_JingshenBounds": "Bounds of Wollongang tunnel section, JingShen Road",
+        "text_getBounds": "get the bounds",
+        "text_pointToTarget": "The point from Beijing to the target position",
+        "text_getTargetPoint": "get the target point",
+        "text_scenicSpotsCenter": "Beijing surrounding scenic spots center",
+        "text_getScenicSpotCenter": "get scenic spot center",
+        "text_distanceBetween": "The distance between Beijing and Tianjin",
+        "text_getDistance": "get the distance",
+        "text_middlePointBetween": "Get the middle point between Beijing and Tianjin",
+        "text_getMiddlePoint": "get the middle point",
+        "text_bigRoundRoute": "The big round route from Beijing to Prague",
+        "text_getRoute": "get route",
+        "text_getBuffer": "get buffer",
+        "text_polygon": "polygon",
+        "text_getPolygon": "get polygon",
+        "text_bezier": "The Bessel curve of the Bach Ha",
+        "text_getBezier": "get the Bessel curve",
+        "text_externalTangentSquare": "Minimum external tangent square",
+        "text_getExternalTangentSquare": "get minimum external tangent square",
+        "text_buffer": "buffer",
+        "text_step": "step",
+        "text_geoline": " simulate  migrate",
+        "text_fictitiou": "fictitiou",
+        "text_maxHighDot": "max High Dot",
+        "text_minLowDot": "min Low Dot",
+        "text_PM25": "PM25",
+        "text_PM10": "PM10",
+        "text_noStart": "No Start",
+        "text_console": "the console",
+        "text_startTime": "start time",
+        "text_finishTime": "finish time",
+        "text_refreshStepSize": "step",
+        "text_refreshFrequency": "frequency",
+        "text_getIserverlist": "get iServer list",
+        "text_name": "name",
+        "text_gain": "gain",
+        "text_activateNode": "start node",
+        "text_nodeID": "nodeID",
+        "text_stopNode": "stop node",
+        "text_createiServer": "create iServer",
+        "text_nodeName": "node name",
+        "text_physicalMachine": "Name of physical machine",
+        "text_input_tips_physicalMachine": "Fill in the physical machine that VM belongs to",
+        "text_applyToken": "Apply for token",
+        "text_nodeIDNeedToActivate": "node id to be started",
+        "text_nodeIDNeedToStop": "node id to be stop",
+        "text_input_tips_nodeName": "Please fill in the node name",
+        "text_tips_ServiceUrl": "Please fill in the service address",
+        "text_tips_id": "Please fill in the id",
+        "text_tips_physicalMachineName": "Please fill in the name of the physical machine",
+        "text_flight": "flight",
+        "text_flightNumber": "flight number",
+        "text_allSelect": "select all",
+        "text_deSelectAll": "reverse selection",
+        "text_select": "Please select",
+        "text_querypoint": "query point",
+        "text_beyondDistance": "Beyond the range of distance, please fill in it again",
+        "text_measure": "measure",
+        "text_attrAnimation": "Attribute animation",
+        "text_flickerAnimation": "Flicker animation",
+        "text_growthAnimation": "Growth animation",
+        "text_revolveAnimation": "Revolving animation",
+        "text_proportionAnimation": "Proportional animation",
+        "text_SHAnimation": "Show/hidden animation",
+        "text_pathAnimation": "Path animation",
+        "text_echartsEarthquake_title": "Earthquake occurrences from 2005 to 2016",
+        "text_echartsEarthquake_sub_title": "units: times",
+        "text_quarter_1": "Quarter 1",
+        "text_quarter_2": "Quarter 2",
+        "text_quarter_3": "Quarter 3",
+        "text_quarter_4": "Quarter 4",
+        "text_mapvLianjia_tooltip": "Price(m²):",
+        "text_l_echartsEarthquake": "The heatmap of earthquake data from 2008 to 2017",
+        "text_l_echartsEarthquake_x_coordinate": "month",
+        "text_echartsLinesMillions_bjRoads": "Beijing Road Network",
+        "text_echartsLinesMillions_bjRoads_subtext": "drawn by 1.3 million points",
+        "text_echartsLinesMillions_railways": "National Railway Network",
+        "text_echartsLinesMillions_railways_subtext": "drawn by 4 million points",
+        "text_echartsLinesMillions_waterSystem": "National Water System",
+        "text_echartsLinesMillions_waterSystem_subtext": "drawn by 14 million points",
+        "text_echartsLinesMillions_roads": "National Roads Network",
+        "text_echartsLinesMillions_roads_subtext": "drawn by 25 million points",
+        "text_graphicLayer_title": "Boarding points of NYC taxis",
+        "text_graphicLayer_subTitle": "1.45 million points",
+        "text_echartsLinesMillions_nyTaxi": "New York taxi map",
+        "text_echartsLinesMillions_nyTaxi_subtext": "drawn by 1.4 million points",
+        "text_esmode_streaming": "real time display",
+        "text_esmode_history": "historical display",
+        "text_esmode": "display mode",
+        "text_LineStyleEditor": "Layer:",
+        "text_lineBorderLayer": "LineBorder",
+        "text_lineFillLayer": "LineFill",
+        "text_lineColor_1": "color:",
+        "text_lineOpacity": "opacity:",
+        "text_lineWidth_1": "width:",
+        "text_tipsPopup_subtext": "Click on the line to edit this linelayer style",
+        "text_alert_subtext": "Click on the LineLayer to Edit LineLayer Style",
+        "text_paly": "play",
+        "text_pause": "pause",
+        "text_mb_deckglLayer_nyc_census": "This dataset contains the 2010 Census tract population data of NYC",
+        "text_mb_deckglLayer_sfcontour": "Elevation contours of San Francisco mainland and Treasure Island/Yerba Island",
+        "text_mb_deckglLayer_scatterPlot": "Location, maginitude and magtype of 2.5+ magnitude earthquakes in california",
+        "text_mb_deckglLayer_sftrees": "A 3d hexbin density map showing every single streets in San Francisco",
+        "text_mb_deckglLayer_ukcommute": "A origin destination map using 3d arcs to show commute patterns of England and Wales residence",
+        'text_openFile': "Select file",
+        'text_analysisLayer':"[Analytical Layer]",
+        'text_spatialAnalysisLayerName':"China's historical earthquake data above level 5",
+        'text_symbolEqualSize':"Equal large",
+        'text_symbolDistribution':"Uniform distribution",
+        'text_myRasterLayer':"My Raster Layer",
+        'text_opt_border': "border",
+        'text_sel_border': "Border type",
+        'text_choose_user': "Selected Users",
+        'text_choose_department': "Selected Departments",
+        'text_user_search': "Everyone can search",
+        'text_user_download': "Everyone can download",
+        'text_user_view': "Everyone can view",
+        'text_user_editor': "Login users can edit",
+        'text_nickname': "Nickname(Username)",
+        'text_department': "Department Name",
+        'text_group': "Group Name",
+        'text_is_search': "Search",
+        'text_is_view': "View",
+        'text_is_edit': "Edit",
+        'text_is_download': "Download",
+        'text_userMap': "Map from users",
+        "title_componentsTianditu_Vue": 'Tianditu',
+        "title_componentsTianditu_route_Vue": 'Route Plan',
+        "title_componentsTianditu_search_Vue": 'POI Search',
+        "title_componentsTianditu_switch_Vue": 'Switcher',
+        "title_componentsTianditu_home_Vue": 'Home',
+        'text_ncp_riskLevel':"Risk Level",
+        'text_ncp_nowConfirmed':"Current Confirmed",
+        'text_ncp_incrementConfirmed':"New Confirmed",
+        'text_ncp_incidence':"Reported Incidence",
+        'text_ncp_nodata_tooltip':"{name}: No Data",
+        'text_ncp_riskLevel_tooltip':"{name}: No new confirmed for {daysNoConfirmedAdd} consecutive days",
+        'text_ncp_riskLevel_tooltip1':"{name}: The highest newly diagnosed in the past 3 days {daysMaxConfirmedAdd}<br>New confirmed {confirmedAdd} yesterday",
+        'text_ncp_riskLevel_title':"Epidemic Risk Level Map",
+        'text_ncp_incrementConfirmed_title':"New Confirmed in China",
+        'text_ncp_incrementConfirmed_tooltip':"{name}: New Confirmed {confirmedAdd}",
+        'text_ncp_nowConfirmed_title':"Current Confirmed in China",
+        'text_ncp_nowConfirmed_tooltip':"{name}: Current Confirmed {nowConfirmed}",
+        'text_ncp_incidence_title':"Reported incidence by China (per 100,000)",
+        'text_ncp_incidence_tooltip':"{name}: Reported Incidence {incidence}<br>Cumulative Confirmed {confirmed}, Population {population}0000",
+        'text_ncp_time':"Until {time}",
+        'text_ncpworld_incrementConfirmed_title':"Global (exclude China) New Confirmed",
+        'text_ncpworld_confirmed_title':"Global (exclude China) Cumulative Confirmed",
+        'text_ncp_confirmed_tooltip':"{name}: Cumulative Confirmed {confirmed}",
+        'text_ncp_confirmed':"Cumulative Confirmed",
+        'text_ncpworld_incidence_title':"Reported incidence by World (per 100,000)",
+        'text_ncp_world':"Global NCP",
+        'text_ncp_china':"China NCP",
+        "text_input_value_addMask": "Add mask",
+        "text_input_value_removeMask": "Remove mask",
+        "text_add_sicahun_plygon":"Loading Sichuan Province Regional Data...",
+
+
+        "btn_previous":"Previous",
+        "btn_next":"Next",
+        "btn_operate": "Action",
+        "btn_overlayAnalyst": "Start analysis",
+        "btn_terrainCurvatureCalculation": "Start calculation",
+        "btn_mathExpression": "Start calculation",
+        "btn_clearLayer": "Clear layer",
+        "btn_createOpacity": "Click to create layer",
+        "btn_toggleMaps": "Toggle maps",
+        "btn_enlarge": "Enlarge",
+        "btn_lessen": "Lessen",
+        "btn_translation": "Translation",
+        "btn_load": "To load",
+        "btn_polygon": "Polygon",
+        "btn_a0Print": "A0 print",
+        "btn_createWindRose": "Create wind rose",
+        "btn_pause": "Pause",
+        "btn_run": "Run",
+        "btn_layerGroup": "layer group control",
+        "btn_openSwitch": "Open",
+        "btn_closeSwitch": "Close",
+        "btn_marker": "Marker",
+        "btn_print": "Print",
+        "btn_printscreen": "printscreen",
+        "btn_setlayerstatus": "sublayer controller",
+        "btn_startDraw": "Start drawing",
+        "btn_switchIcon": "Switch and redraw",
+        "btn_noEventDraw": "Ordinary drawing",
+        "btn_openEventDraw": "Event drawing",
+        "btn_createPoint": "Create point set",
+        "btn_createBLine": "Create spline curve",
+        "btn_createIcon": "Create icon",
+        "btn_overlay": "Overlay",
+        "btn_open": "Open",
+        "btn_addToLater": "Add to layer",
+        "btn_drawMarker": "Draw marker",
+        "btn_cancelMarker": "Cancel",
+        "btn_drawText": "Draw text",
+        "btn_drawImage": "Draw image",
+        "btn_route1": "Route1",
+        "btn_route2": "Route2",
+        "btn_route3": "Route3",
+        "btn_sectorArea": "Sector area",
+        "btn_interfereBeam": "Interfering beam",
+        "btn_objectMarker": "Object marker",
+        "btn_objectMarker1": "Object marker1",
+        "btn_troopDeploy1": "Troop deployment1",
+        "btn_troopDeploy2": "Troop deployment2",
+        "btn_satellite": "Satellite",
+        "btn_satelliteWindow1": "Satellite with time window 1",
+        "btn_satelliteWindow2": "Satellite with time window 2",
+        "btn_editRectangle": "Edit outer rectangle",
+        "btn_editNode": "Edit node",
+        "btn_drawRoute": "Draw route",
+        "btn_edit": "Editing",
+        "btn_deleteNode": "Delete node",
+        "btn_routeHighlight": "Route highlight",
+        "btn_routeFlicker": "Route flicker",
+        "btn_cancelPlotting": "Cancel plotting",
+        "btn_deleteMarker": "Delete marker",
+        "btn_clearLayers": "Clear layer",
+        "btn_copy": "Copy",
+        "btn_cut": "Cut",
+        "btn_paste": "Paste",
+        "btn_saveSimulationMap": "save simulation map",
+        "btn_loadSimulationMap": "load simulation map",
+        "btn_addNode": "add node",
+        "btn_lockSwitch": "lock switch layer",
+        "btn_editSwitch": "edit switch layer",
+        "btn_selectSwitch": "select switch layer",
+        "btn_leftAlignment": "left alignment",
+        "btn_rightAlignment": "right alignment",
+        "btn_topAlignment": "top alignment",
+        "btn_bottomAlignment": "bottom alignment",
+        "btn_verticalCenter": "vertical center",
+        "btn_horizontalCenter": "horizontal center",
+        "btn_avoidEdit": "Avoid editor",
+        "btn_cancelAvoidEdit": "Cancel avoid editor",
+        "btn_deleteAvoid": "Delete avoid editor",
+        "btn_group": "Group",
+        "btn_flags": "Flags",
+        "btn_unbundling": "Unbundling",
+        "btn_upload": "Upload",
+        "btn_download": "Download",
+        "btn_plot": "Plot",
+        "btn_clear": "Clear",
+        "btn_createLayer": "Create layer",
+        "btn_deleteLayer": "Delete layer",
+        "btn_createAnimation": "Create animation",
+        "btn_play": "Play",
+        "btn_stop": "Stop",
+        "btn_reset": "Reset",
+        "btn_deleteAnimation": "Delete animation",
+        "btn_deleteAllAnimation": "Delete all",
+        "btn_clearPlot": "Clear plotting",
+        "btn_addDifferentPlot": "Add different plot",
+        "btn_addSamePlot": "Add same plot",
+        "btn_query": "Query",
+        "btn_save": "Save",
+        "btn_add": "Add",
+        "btn_saveAs": "Save as: ",
+        "btn_addProperty": "Add property",
+        "btn_circle": "Circle",
+        "btn_rectangle": "Rectangle",
+        "btn_cancel": "cancel",
+        "btn_setBackgroundColor": "Set background color",
+        "btn_changeOpacity": "Change opacity",
+        "btn_addFeature": "Add feature",
+        "btn_selectFeature": "Select feature",
+        "btn_editFeature": "Edit feature",
+        "btn_deleteFeature": "Delete feature",
+        "btn_statistic": "Statistic",
+        "btn_point": "Point",
+        "btn_line": "Line",
+        "btn_Polygon": "Polygon",
+        "btn_clearAll": "Clear all",
+        "btn_clearFew": "Clear few",
+        "btn_clearSelect": "Clear selection",
+        "btn_openEdit": "Open edit",
+        "btn_closeEdit": "Lose edit",
+        "btn_summary": "Summary",
+        "btn_polymerization": "Polymerization",
+        "btn_addThemeLayer": "Add theme layer",
+        "btn_highlightFill": "Highlight fill",
+        "btn_highlightStroke": "Highlight stroke",
+        "btn_initialStyle": "Initial style",
+        "btn_switchBar": "Bar chart",
+        "btn_switchLine": "Line chart",
+        "btn_switchPie": "Pie chart",
+        "btn_updateData": "Update",
+        "btn_addLabel": "Add label",
+        "btn_regionNoOverlap": "no overlap inside region dataset",
+        "btn_regionNoOverlapWith": "no overlap between two region dataset",
+        "btn_regionContainedByRegion": "region dataset contained by the other one",
+        "btn_regionCoveredByRegion": "region dataset covered by the other one",
+        "btn_lineNoOverlap": "no overlap inside line dataset",
+        "btn_lineNoOverlapWith": "no overlap between two line dataset",
+        "btn_pointNoIdentical": "no overlap inside point dataset",
+        "btn_start": "Start",
+        "btn_queryCar": "Query car",
+        "btn_startAnimator": "Start",
+        "btn_pauseAnimator": "Pause",
+        "btn_stopAnimator": "Stop",
+        "btn_showOrHide": "Show / Hide map",
+        "btn_removeOldPoint": "Remove old point",
+        "btn_acceleration": "Acceleration",
+        "btn_deceleration": "Deceleration",
+        "btn_switchDirection": "Switch direction",
+        "btn_switchTwinkle": "Switch twinkle",
+        "btn_switchTails": "Switch tails",
+        "btn_showOrHideTrain": "Show / Hide railway ",
+        "btn_cancelHighlight": "Cancel highlight",
+        "btn_addMarker": "Add marker",
+        "btn_undoAdd": "Undo add",
+        "btn_drag": "Drag",
+        "btn_drawCircle": "Draw circle",
+        "btn_notDraw": "Not draw",
+        "btn_modify": "Modify",
+        "btn_notModify": "Not modify",
+        "btn_createGrid": "create grid for the current drawing range",
+        "btn_createTin": "Create tin",
+        "btn_clearTin": "Clear result",
+        "btn_getResult": "Get result",
+        "btn_input_value_match": "Match",
+        "btn_grid": "Grid map",
+        "btn_startup": "Startup",
+        "btn_create": "Create",
+        "btn_undo": "Undo",
+        "btn_redo": "Redo",
+        "btn_symbolEqualWidth":"Equal width",
+        "btn_symbolEqualHeight":"Equal height",
+        "btn_symbolEqualWidthHeight":"Equal width and height",
+        "btn_symbolLevelDistribution":"Horizontal uniform distribution",
+        "btn_symbolVerticalDistribution":"Vertical uniform distribution",
+        "btn_breathingAperture":"Breathing Aperture",
+        "btn_haloRing":"Halo Ring",
+        "btn_rotatingAperture":"Rotating Aperture",
+        "btn_diffusedAperture":"Diffused Aperture",
+        "btn_rotatingTextBorder":"RotatingTextBorder",
+        "btn_fluorescence":"Fluorescent point",
+        "btn_lightTheme":"Light theme",
+        "btn_darkTheme":"Dark theme",
+        "btn_customTheme":"Custom theme",
+        "btn_switchTheme":"Switch theme",
+        "btn_OK":"OK",
+        "btn_objectdetection":"Add objectdetection result",
+        "btn_binaryclassification":"Add binaryclassification result",
+
+        "msg_published":"This service has already been published",
+        "msg_unpublish_success":"unPublish successfully",
+        "msg_unpublish_failed":"unPublish failed",
+        "msg_publish_success":"Publish successfully",
+        "msg_publish_failed":"Publish failed",
+        "msg_register_success":"Register successfully",
+        "msg_upload_success":"Upload successfully",
+        "msg_upload_failed":"Upload failed",
+        "msg_upload_file":"Please select a file to upload",
+        "msg_file_type":"Files types that not supported",
+        "msg_user_not_exist":"This user doesn't exist",
+        "msg_department_not_exist":"This department doesn't exist",
+        "msg_user_added":"The user has been added",
+        "msg_department_added":"The department has been added",
+        "msg_not_share_admin":"No need to share with the administrator",
+        "msg_input_department_name":"Please enter department name",
+        "msg_shareSuccess":"Share successful",
+        "msg_shareFailed":"Share failed",
+        "msg_updateSuccess": "Update successful",
+        "msg_choise_resources_delete":"Please select a resource to delete!",
+        "msg_choise_resources_share":"Please select a resource to share!",
+        "msg_query_failed":"Not logged in and cannot access my resources!",
+        "msg_login_failed":"wrong user name or password",
+        "msg_addPath": "Please add the path for buffer analysis.",
+        "msg_bufferAnalyst": "Please do the buffer analysis at first to get the scope of the query.",
+        "msg_eventPoint": "Please choose a event point!",
+        "msg_check": "The number of sites should be greater than 2",
+        "msg_findPath": "The number of sites is wrong",
+        "msg_querySuccess": "Query successful",
+        "msg_queryFailure": "Query failed",
+        "msg_updateFailure": "Update failed",
+        "msg_deleteFailure": "Delete failed",
+        "msg_getRoute": "Please get the routing object by query!",
+        "msg_MByQuery": "The measured value is:",
+        "msg_queryRouteSuccess": "Query route object successful",
+        "msg_queryRouteFailure": "Query routing object failed",
+        "msg_locLineSuccess": "Route location line successful",
+        "msg_locLineFailed": "Route location line failed",
+        "msg_locPointSuccess": "Route location point successful",
+        "msg_locPointFailed": "Route location point failed",
+        "msg_createFailed": "Create it failed!",
+        "msg_measureResult": "Measure Result: ",
+        "msg_sqm": "sq.m.",
+        "msg_m": "m",
+        "msg_loadedData": "Data has been loaded.",
+        "msg_geoLocate": "The browser you are currently using does't support the map location services.",
+        "msg_navigation": "Hold the Alt key and drag the left mouse button to zoom",
+        "msg_zoomBox": 'Hold the shift key and drag the left mouse button to zoom',
+        "msg_query": "Prompt:",
+        "msg_selectSPoint": "Please select the starting point of the query",
+        "msg_selectEPoint": "Please select the ending point of the query",
+        "msg_noSInfo": "No matching starting point information",
+        "msg_noEInfo": "No matching ending point information",
+        "msg_supportCanvas": "Your browser does't support the canvas, please upgrade it",
+        "msg_drawPolygon": "Click on the right key to draw a polygon",
+        "msg_supportPrint": "Less than IE9 versions do't support partial printing",
+        "msg_supportEquipment": "Your equipment is not supported, please use PC or other equipment",
+        "msg_clickZoom": 'Click the right key to select the zoom option',
+        "msg_supportSVG": "Your browser doesn't support SVG, please upgrade!",
+        "msg_supportInstance": "Your browser doesn't support this instance, please upgrade!",
+        "msg_querySQLFailed": "Query data by SQL is failed, please check the service configuration",
+        "msg_rightClick": "Right-click the mark point",
+        "msg_drawShape": "Click the left mouse button to start drawing",
+        "msg_totalTime1": "The total time about the ",
+        "msg_totalTime2": " symbols is: ",
+        "msg_drawTwoPoint": "Please draw two points at least!",
+        "msg_overlayFailed": "Open/overlay the situation map failed, please check whether the situation map is correct",
+        "msg_NoPlottingLayer": "Current map without plotting layer!",
+        "msg_inputName": "Please input name of the situation map",
+        "msg_selectSymbol": "Please select symbol before the avoid editor",
+        "msg_enterAvoidEdit": "Please enter the avoid editor before the delete avoid editor",
+        "msg_selectFeature": "Please select the mark that you want to edit",
+        "msg_createPopup": "Please click the event point firstly to create popup.",
+        "msg_addFeatureSuccess": "Add feature success",
+        "msg_addFeatureFailed": "Add feature failed",
+        "msg_queryFeatureEmpty": "The query feature is empty",
+        "msg_selectFeatureFirstly": "Please select feature at first",
+        "msg_updateFeatureSuccess": 'Update feature success',
+        "msg_updateFeatureFailed": 'Update feature failed',
+        "msg_deleteFeatureSuccess": 'Delete feature success',
+        "msg_deleteFeatureFailed": 'Delete feature failed',
+        "msg_geographicPosition": "geographical position error! ",
+        "msg_gridQueryNote": "Note: Click the map at any position, the instance will start to grid query at this location, and the bottom left corner of the map will show the query results after the query is completed.",
+        "msg_drawQueryBounds": "Please draw the query range!",
+        "msg_drawClipBounds": "Please draw the clip range!",
+        "msg_chooseColor": "Please choose color value",
+        "msg_repeatedAdditions": "Repeated Additions!",
+        "msg_noDataRedraw": "No data has been obtained, please redraw",
+        "msg_noRevocableMarker": "There is no revocable marker.",
+        "msg_noMarkerToSubmit": "There is no new marker to be submitted, please add new marker firstly.",
+        "msg_submitSuccess": "Successful submission",
+        "msg_selectDeletePoint": "Please select the point that you need to delete.",
+        "msg_deleteFailed": "Delete failed",
+        "msg_queryMileagePoint1": "The mileage point is ",
+        "msg_queryMileagePoint2": "",
+        "msg_addMarker": "Please add the marker firstly",
+        "msg_errorMsg": "Error messages",
+        "msg_loginSuccess": "Login successful",
+        "msg_logoutSuccess": "Logout uccessful",
+        "msg_fillInURL": "Please fill in the URL",
+        "msg_loginFailed": "Login failed",
+        "msg_logoutFailed": "Logout failed",
+        "msg_findAirport": "Click the map to find the nearest airport from the click location",
+        "msg_beyondScope": "Beyond the scope of analysis.",
+        "msg_nearestAirport": "The nearest airport to this point is ",
+        "msg_drawMeshRegion": "Press on the ctrl + mouse left key to create a grid area",
+        "msg_noDataToDelete": "No data can be deleted",
+        "msg_drawAnalysisRegion": "Press on the ctrl + mouse left key to draw the range of the analysis on the map.",
+        "msg_layerCreated": "The layer has been created, do not repeat the creation.",
+        "msg_drawPolygonAndClick": "Please draw polygon firstly, then click the button to calculate the area",
+        "msg_markPoint": "Please mark a point firstly",
+        "msg_noMethod": "Method do not exist",
+        "msg_illegal": "Choose illegal, please choose again",
+        "msg_illegalFillIn": "Fill illegal, please input again",
+        "msg_incorrectInfo": "Incomplete or incorrect information",
+        "msg_inputValue": "Please input the value in the [-180, 180]",
+        "msg_stepSize": "The step size must be more than 0",
+        "msg_selectUnit": "Please select the unit",
+        "msg_singleSideQuery": "Single object queries only support single side queries!",
+        "msg_drawAnalystRange": "Please use the upper left corner drawing tool to draw the analysis range",
+        "msg_dontRedraw": "Already there is analysis range, do not repeat the drawing.",
+        "msg_clickDrawAnalystRange": "Click and drag the mouse to draw the rectangle analysis range.",
+        "msg_drawTurfPolygon": "Use the left drawing control to draw the polygon, and click the right button to calculate",
+        "msg_externalTangentSquare": "Draw the rectangle with the left drawing control and click the right button to calculate the minimum tangent square",
+        "msg_drawLayer": "Please draw layer",
+        "msg_vectorClip": "Vector clipping analysis only supports single side clipping!",
+        "msg_clickToPopup": 'Please click the map to open popup',
+        "msg_clickLayerToPopup": 'Please click the layer\'s feature to check properties',
+        "msg_addSuccess": "Added successfully!",
+        "msg_addFailed": "Added failed!",
+
+        "set_style": "",
+        "style_width420px": 'width: 500px',
+        "style_width350px": 'width: 400px',
+        "style_heatMapWidth": "width: 340px",
+        "style_plotAnimation": "width: 170px; height: 35px; margin-bottom: 0; border-bottom-right-radius: 4px; border-top-right-radius: 4px;",
+
+        "text_baseInfo": "Base Info",
+        "text_layoutTemplates": "Layout Templates",
+        "text_title": "Title",
+        "text_subTitle": "Sub Title",
+        "text_copyRightInfo": "CopyRight Information",
+        "text_author": "Author",
+        "text_littleMap": "Little Map",
+        "text_scale": "Scale",
+        "text_scaleText": "Scale Text",
+        "text_style": "Style",
+        "text_intervals": "Intervals",
+        "text_unit": "Unit",
+        "text_exportOptions": "Export Options",
+        "text_format": "Format",
+        "text_centerTip": "Separated by commas",
+        "option_meterUnit": "Meter",
+        "option_mileUnit": "Foot",
+        "option_degreeUnit": "Degree",
+        "text_print": "Print"
+    }
+};

+ 1709 - 0
locales/zh-CN/resources.js

@@ -0,0 +1,1709 @@
+/* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
+window.examplesResources = {
+    "app": "SuperMap iClient 9D",
+    "nav": {
+        "home": {
+            "_name": "首页"
+        },
+        "overview": {
+            "_name": "概览",
+            "functions": "主要功能服务",
+            "compatibility": "浏览器兼容性",
+            "thirdpatry": "第三方插件",
+            "license": "许可协议",
+            "howToChoose": "如何选择"
+        },
+        "leaflet": {
+            "_name": "for Leaflet"
+        },
+        "openlayers": {
+            "_name": "for OpenLayers"
+        },
+        "mapboxgl": {
+            "_name": "for MapboxGL"
+        },
+        "classic": {
+            "_name": "Classic"
+        },
+        "3dwebgl": {
+            "_name": "3D-WebGL"
+        },
+        "examples": {
+            "_name": "示例",
+            "iServer": "iServer",
+            "iPortal": "iPortal",
+            "Online": "Online",
+            "iManager": "iManager",
+            "Elasticsearch": "Elasticsearch",
+            "viz": "可视化",
+            "plot": "标绘",
+            "dynamicPlot": "动态标绘",
+            "map": "地图",
+            "overlay": "覆盖物",
+            "popup": "信息框",
+            "query": "查询",
+            "theme": "专题图",
+            "analysis": "分析",
+            "clientSpatialAnalyst": "客户端分析",
+            "control": "控件",
+            "components": "组件",
+            "OGC": "OGC",
+            "mapping": "互联网地图",
+            "others": "其他",
+            "3D-WebGL": "3D-WebGL",
+            "multiCoordSys": "多坐标系",
+            "vuecomponents_mbgl": "Vue - MapboxGL",
+            "vuecomponents_leaflet": "Vue - Leaflet",
+            "reactcomponents_mbgl": 'React - MapboxGL',
+            "h5components": "H5",
+            "template": '模板'
+        }
+    },
+    "footer": {
+        "download": "下载",
+        "faq": "常见问题",
+        "supermap": "超图官网",
+        "dituhui": "地图慧",
+        "support": "超图技术资源中心",
+        "tel": "电话 ",
+        "sns": "WebGIS中文技术圈QQ群 ",
+        "sns_tips": "(点击链接加入群)",
+        "sns_full": "(已满)",
+        "contact": "联系我们:",
+        "join": "加入我们: 超图Web客户端团队 ",
+        "join_tips1": "(请发邮件至: ",
+        "join_tips2": ",附上您的简历哦)",
+        "copyright": "版权所有 © 2000-2020 北京超图软件股份有限公司 京ICP备11032883号-8 京公网安备11010502008721 甲测资字11002074"
+    },
+    "editor": {
+        "expand": " 展开",
+        "source": " 源码",
+        "title": "源代码编辑器",
+        "run": " 运行",
+        "reset": " 重置",
+        "envTips": "请在服务器环境下运行示范程序!"
+    },
+    "resources": {
+        "title_iPortalUploadData":"上传数据",
+        "title_iPortalRegisterData":"注册数据",
+        "title_edit_attr":"编辑属性",
+        "title_view_detail":"查看详情",
+        "title_share_setting":"共享设置",
+        "title_confirm_delete_resources":"确认删除?",
+        "title_delete_resources":"删除资源",
+        "title_resource_address":"资源地址",
+        "title_googlelayer":"谷歌地图",
+        "title_osmlayer":"OSM地图",
+        "title_binglayer":"Bing地图",
+        "title_tiledMapLayer4326": "SuperMap REST 地图服务底图",
+        "title_tiledMapLayer3857": "SuperMap REST 地图服务底图",
+        "title_imageMapLayer3857": "SuperMap REST 地图服务底图(image)",
+        "title_imageMapLayer4326": "SuperMap REST 地图服务底图(image)",
+        "title_tiledMapLayer_rasterfunction": "SuperMap REST 地图服务(栅格分析)",
+        "title_addressMatchService": "地址匹配服务",
+        "title_bufferAnalyst1": "缓冲区分析一",
+        "title_bufferAnalyst2": "缓冲区分析二",
+        "title_closestFacilitiesService": "最近设施分析",
+        "title_densityAnalystService": "核密度分析",
+        "title_dynamicSegmentation": "动态分析",
+        "title_findLocation": "选址分区分析",
+        "title_findMTSPPathsService": "多旅行商分析",
+        "title_findMTSPPathsAndTSPPaths": "多旅行商分析(综合应用)",
+        "title_findPath": "最佳路径分析",
+        "title_findTSPPaths": "旅行商分析",
+        "title_interpolationAnalystByDen": "点密度插值分析",
+        "title_interpolationAnalystByGeo": "离散点插值分析",
+        "title_interpolationAnalystByIDW": "反距离加权插值分析",
+        "title_interpolationAnalystByKriging": "克吕金插值分析",
+        "title_interpolationAnalystByRBF": "径向基函数插值分析",
+        "title_mathExpression": "栅格代数运算",
+        "title_overlayAnalyst": "叠加分析",
+        "title_routeCalculateMeasure": "点定里程",
+        "title_routeLocatorLine": "里程定线",
+        "title_routeLocatorPoint": "里程定点",
+        "title_serviceAreas": "服务区分析",
+        "title_surfaceAnalyst": "表面分析",
+        "title_terrainCurvatureCalculation": "地形曲率计算",
+        "title_thiessenAnalyst": "泰森多边形",
+        "title_trafficTransfer": "交通换乘服务",
+        "title_buffersAnalystJobService": "缓冲区分析",
+        "title_areaMeasure": "面积量算",
+        "title_attribution": "版权控件",
+        "title_changeControlsSkin": "控件皮肤切换",
+        "title_distanceMeasure": "距离量算",
+        "title_dragFeature": "鼠标拖拽要素控件",
+        "title_dragpan": "地图拖拽控件",
+        "title_drawGeometry": "点线面绘制",
+        "title_featureSnap": "要素编辑",
+        "title_layerSwitcher": "图层管理器",
+        "title_navigation": "地图基础操作控件",
+        "title_overviewmap": "鹰眼控件",
+        "title_panzoombar": "平移缩放控件",
+        "title_scaleline": "比例尺控件",
+        "title_zoom": "缩放控件",
+        "title_zoomBox": "拉框缩放控件",
+        "title_kernelDensityJobService": "密度分析",
+        "title_3baidu": "百度",
+        "title_3tianditu": "天地图",
+        "title_3857Map": "墨卡托投影系地图",
+        "title_4326Map": "经纬度地图",
+        "title_changchunMap": "平面坐标系图层",
+        "title_coordinateTransformation": "坐标转换",
+        "title_dynamiclayers": "动态图层操作",
+        "title_image": "Image图层",
+        "title_mapevent": "地图事件",
+        "title_overlayLayer": "图层叠加",
+        "title_toggleMaps": "底图切换",
+        "title_translation": "缩放与平移",
+        "title_zoomRange": "设置缩放级别",
+        "title_mapVLayerHoneycomb": "MapV 蜂巢图",
+        "title_mapVLayerPolylineSimple": "MapV 简单线",
+        "title_GeoJSON": "GeoJSON数据展示",
+        "title_queryByWFS": "WFS查询",
+        "title_wcs": "WCS图层",
+        "title_wms": "WMS图层",
+        "title_wmtsLayer": "WMTS图层",
+        "title_a0mapPrint": "地图A0大幅打印",
+        "title_contextMenu": "自定义右键菜单",
+        "title_coordTransfer": "获取经纬度坐标",
+        "title_dynamicPieChart": "动态饼图",
+        "title_windmap": "D3风向图",
+        "title_zoomablePacking": "D3拾取器",
+        "title_eChartGraphBar": "eChart柱状图",
+        "title_featureRightClick": "要素右键菜单",
+        "title_jqueryContextMenu": "jquery右键菜单",
+        "title_layerGroup": "图层组控制",
+        "title_mapPrint": "地图打印",
+        "title_mousestyle": "鼠标样式",
+        "title_printscreen": "地图截图",
+        "title_projection": "投影转换",
+        "title_rightClick": "标记图层右键事件",
+        "title_setlayerstatus": "子图层控制",
+        "title_graphicSymbolData": "Graphic图层符号绘制",
+        "title_islandMultiPolygonData": "岛洞与多面",
+        "title_labelVectorLayerData": "标签矢量图层",
+        "title_markerLayer": "标记图层",
+        "title_markerLayerEvent": "标记图层支持的事件",
+        "title_splinesData": "B样条曲线",
+        "title_telecomIconData": "电信符号数据",
+        "title_vectorDataEvent": "矢量数据点击事件",
+        "title_vectorLayerData": "基础矢量图形",
+        "title_addfile": "态势图叠加",
+        "title_defaultStyle": "缺省属性",
+        "title_drawGeoGraphicObject": "点线面绘制",
+        "title_drawGraphics": "复杂对象",
+        "title_drawRoute": "航线",
+        "title_dynamicPlot": "动态标绘",
+        "title_editPlottingLayer": "图层编辑",
+        "title_filetransfer": "态势图上传下载",
+        "title_loadSymbolLib": "标号库加载",
+        "title_modifySymbolStyle": "属性修改",
+        "title_operatePlottingLayer": "图层操作",
+        "title_plotGOAnimation": "态势推演",
+        "title_plotSymbol": "鼠标标绘",
+        "title_plotSymbolPerformance": "动态标绘高性能图层",
+        "title_querySymbolLib": "查询标号",
+        "title_saveload": "保存和加载",
+        "title_symbolAvoid": "避让区域",
+        "title_plotMovingTarget": "动态目标图层",
+        "title_symbolExtendProperty": "自定义属性",
+        "title_symbolGeometricQuery": "几何查询",
+        "title_anchored": "自适应信息框",
+        "title_customPopup": "自定义信息框",
+        "title_infoWindow": "第三方信息框",
+        "title_shadowPopup": "带阴影弹窗",
+        "title_simplePopup": "简易信息框",
+        "title_editFeature": "地物编辑",
+        "title_fieldStatistic": "字段查询统计",
+        "title_getFeatureByBounds": "范围查询",
+        "title_getFeatureByBuffer": "缓冲区查询",
+        "title_getFeatureByGeometry": "几何查询",
+        "title_getFeatureByIDs": "ID 查询",
+        "title_getFeatureBySQL": "SQL 查询",
+        "title_gridInfosQuery": "栅格查询",
+        "title_queryByBounds": "范围查询",
+        "title_queryByDistance": "距离查询",
+        "title_queryByGeometry": "几何查询",
+        "title_queryBySQL": "SQL 查询",
+        "title_vectorLayerRegionName": "查询交互",
+        "title_singleObjectQueryJobService": "单对象查询分析",
+        "title_summaryAttributesJobService": "属性汇总分析",
+        "title_SummaryMeshJobService": "点聚合分析",
+        "title_SummaryRegionJobService": "区域汇总分析",
+        "title_GraphBar": "柱状图",
+        "title_Scatter": "散点图",
+        "title_GraphBar3D": "三维柱状图",
+        "title_GraphLine": "折线图",
+        "title_GraphPie": "饼图",
+        "title_GraphPoint": "点状图",
+        "title_GraphRing": "环状图",
+        "title_jingjinPopGraph": "统计图表切换",
+        "title_landuseUnique": "单值专题图",
+        "title_popDensityRange": "分段专题图",
+        "title_RankSymbol": "符号专题图",
+        "title_worldCapitalsGraphBar": "世界首都人口统计",
+        "title_themeDotDensity": "点密度专题图",
+        "title_themeGraph": "统计专题图",
+        "title_themeGridRange": "栅格分段专题图",
+        "title_themeGridUnique": "栅格单值专题图",
+        "title_themeLabel": "标签专题图",
+        "title_themeLabelLayer": "标签专题图层",
+        "title_themePM2_5": "空气质量指数专题图",
+        "title_themeRange": "分段专题图",
+        "title_themeUnique": "单值专题图",
+        "title_topologyValidatorJobService": "拓扑检查分析",
+        "title_vectorClipService": "矢量裁剪分析",
+        "title_animatorBase": "基础渲染",
+        "title_animatorCar": "车辆监控模拟",
+        "title_animatorLine": "线渐变",
+        "title_animatorMetro": "地铁修建模拟",
+        "title_animatorMetro2": "地铁修建模拟2",
+        "title_animatorMigrate": "春运模拟",
+        "title_animatorPoint": "点渐变",
+        "title_animatorPolygon": "面渐变模拟",
+        "title_animatorTrain": "火车监控模拟",
+        "title_animatorWeatherMonitor": "气象监测",
+        "title_boundryStyle": "强边界风格",
+        "title_darkblueStyle": "深夜蓝黑风格",
+        "title_cartoCSS_edit": "CartoCSS编辑",
+        "title_utfGridLayerFlags": "UTFGrid国旗版",
+        "title_utfGridLayer": "UTFGrid图层",
+        "title_tiledVectorLayer": "矢量分块图",
+        "title_heatMapLayer": "热点图",
+        "title_fastHeatMapLayer": "新版热点图",
+        "title_heatMapColorSection": "热点图颜色分段配置",
+        "title_heatMapColorManual": "热点图颜色分段配置",
+        "title_heatGridMapLayer": "热点网格图",
+        "title_goisLayer": "麻点图",
+        "title_elementsLayerExtension": "要素图层扩展",
+        "title_clusterLayer": "聚类图层",
+        "title_cartoCSSText": "文本符号",
+        "title_cartoCSSPolygon": "面符号",
+        "title_cartoCSSPoint": "点符号",
+        "title_cartoCSSNightStyle": "月夜风格",
+        "title_cartoCSSNaturalStyle": "淡雅绿风格",
+        "title_cartoCSSLine": "线符号",
+        "title_cartoCSSHelloKitty": "Hellokitty风格",
+        "title_cartoCSSHightlight": "高亮显示",
+        "title_mapQueryByBounds": "范围查询",
+        "title_mapQueryByDistance": "距离查询",
+        "title_mapQueryByGeometry": "几何查询",
+        "title_mapQueryBySQL": "SQL查询",
+        "title_mapService": "SuperMap 地图信息",
+        "title_measureArea": "面积测量",
+        "title_measureDistance": "距离测量",
+        "title_tiledMapLayer": "3857底图",
+        "title_tiledMapLayer_4326": "4326底图",
+        "title_graticuleLayer_3857": "经纬网",
+        "title_graticuleLayer_4326": "经纬网_WGS84",
+        "title_tiledMapLayer_4326WGS84": "地图_WGS84",
+        "title_tiledMapLayer_China2000": "地图_China2000",
+        "title_tiledMapLayer_Beijing54": "地图_Beijing54",
+        "title_tiledMapLayer_Xian80": "地图_Xian80",
+        "title_fieldService": "SuperMap 字段信息",
+        "title_fieldStatistics": "字段查询统计",
+        "title_getGridCellInfos": "栅格查询",
+        "title_bufferAnalystService": "数据集缓冲区分析",
+        "title_bufferAnalystServiceGeometry": "几何对象缓冲区分析",
+        "title_surfaceAnalystService": "表面分析(提取等值线)",
+        "title_thiessenAnalystDataset": "数据集泰森多边形",
+        "title_thiessenAnalystGeometry": "几何泰森多边形",
+        "title_drawControl": "绘制控件",
+        "title_drawControlWGS84": "绘制控件_WGS84",
+        "title_fullscreenControl": "全屏控件",
+        "title_geolocateControl": "定位控件",
+        "title_navigationControl": "导航控件",
+        "title_swipeBetweenMaps": "卷帘控件",
+        "title_dataFlowService": "数据流服务",
+        "title_cellMap": "方形图",
+        "title_ChangchunPublicTransportNetwork": "长春公交路径图",
+        "title_effectScatter": "全国主要城市空气质量图",
+        "title_geoline": "迁徙图",
+        "title_geolineWGS84": "迁徙图_WGS84",
+        "title_linesBus": "线路图",
+        "title_linesEffect": "线特效",
+        "title_linesAirline": "世界飞机航线图",
+        "title_scatterWeibo": "微博签到图",
+        "title_scatterWeiboWGS84": "微博签到图_WGS84",
+        "title_colorfulCity": "五彩城市建筑",
+        "title_flightPath": "飞行路径图",
+        "title_GlobalWind": "全球风能可视化",
+        "title_ShanghaiBuildingPrice": "上海房价可视化图",
+        "title_taxiRoutesOfCapeTown": "开普敦的士路线图",
+        "title_taxiTrajectoryMap": "成都市出租车运行轨迹图",
+        "title_graphThemeLayer": "图表专题图",
+        "title_changeStyle": "风格切换",
+        "title_beijingPositronStyle": "北京淡灰风格",
+        "title_beijingOSMStyle": "北京OSM风格",
+        "title_beijingKlokantechStyle": "北京淡绿风格",
+        "title_beijingFiordStyle": "北京深海风格",
+        "title_beijingDarkBlueStyle": "北京暗夜风格",
+        "title_beijingMVTVectorTile": "北京矢量瓦片(MVT)",
+        "title_chinaMVTVectorTile": "China矢量瓦片",
+        "title_uniqueTheme3DLayer": "土地利用类型单值专题图(3D)",
+        "title_rangeTheme3DLayer": "人口密度分段专题图(3D)",
+        "title_mapvQianxiTime": "迁徙时序图",
+        "title_mapvQianxi": "迁徙图",
+        "title_mapvPolylineTime": "动态轨迹",
+        "title_mapvForceEdge": "强边界图",
+        "title_mapvPolylineIntensity": "强度线",
+        "title_mapvCsvcar": "通勤图",
+        "title_mapvCsvcarWGS84": "通勤图_WGS84",
+        "title_mapvBeijingVillage": "北京村庄分布图",
+        "title_layerService": "SuperMap 图层信息",
+        "title_tiledMapLayerNonEarth": "SuperMap REST 平面坐标系底图",
+        "title_tiledMapLayerProj4": "自定义比例尺地图",
+        "title_interpolationAnalystServiceKriging": "普通克吕金插值分析",
+        "title_interpolationAnalystServiceKrigingUniversal": "泛克吕金插值分析",
+        "title_findMTSPPathsServiceLogistics": "网络分析服务-多旅行商分析(物流配送)",
+        "title_findTSPPathsService": "网络分析服务-旅行商分析(质检巡查)",
+        "title_graphicLayer": "纽约18万出租车点",
+        "title_mb_graphicLayer": "纽约出租车145万上车点",
+        "title_mb_graphicLayerWGS84": "纽约出租车145万上车点_WGS84",
+        "title_graphicLayer_webgl": "纽约145万出租车-webgl",
+        "title_graphicLayerClovers": "随机点-三叶草",
+        "title_graphicLayerTaxi": "纽约18万出租车-符号绘制",
+        "title_heatMap": "热力图",
+        "title_heatMapNY": "纽约出租车上车点热力图",
+        "title_markerCluster": "点聚合",
+        "title_markerClusterWGS84": "点聚合_WGS84",
+        "title_pulse": "闪烁点",
+        "title_geometryBatchAnalystService": "几何对象批量空间分析",
+        "title_geometryOverlayBatchAnalystService": "几何对象批量叠加分析",
+        "title_tiledMapLayerNoProj": "SuperMap REST 平面投影地图",
+        "title_AnimationFeature": "动画要素图",
+        "title_Cluster": "聚点图",
+        "title_graphiclayerCanvas": "纽约出租车18万点-canvas渲染",
+        "title_graphiclayerWebgl": "纽约出租车18万点-webgl渲染",
+        "title_baiduLayer": "百度地图",
+        "title_changeTileVersion": "多版本缓存切换",
+        "title_layerSwitch": "卷帘",
+        "title_controlerLayerSwitcher": "图层切换",
+        "title_dragFeatures": "拖拽图形",
+        "title_drawFeatures": "图形绘制",
+        "title_editorOL": "iClient for OpenLayers 示例代码",
+        "title_examplesOL": "iClient for OpenLayers 示范程序",
+        "title_editorLeaflet": "iClient for Leaflet 示例代码",
+        "title_examplesLeaflet": "iClient for Leaflet 示范程序",
+        "title_editorMBGL": "iClient for MapboxGL 示例代码",
+        "title_examplesMBGL": "iClient for MapboxGL 示范程序",
+        "title_examplesComponent": "组件示范程序",
+        "title_editorComponent": "组件示例代码",
+        "title_editorClassic": "iClient Classic 示例代码",
+        "title_examplesClassic": "iClient Classic 示范程序",
+        "title_editor3DWebGL": "SuperMap 3D-WebGL 示例代码",
+        "title_examples3DWebGL": "SuperMap 3D-WebGL 示范程序",
+        "title_freehandDrawFeatures": "手写图形绘制",
+        "title_iPortalQueryMaps": "iPortal 地图列表",
+        "title_iPortalQueryResources": "iPortal 资源列表",
+        "title_iPortalQueryMyResources": "iPortal 我的资源列表 ",
+        "title_iPortalQueryResourcesTitle": "iPortal QueryResources使用示例",
+        "title_iPortalQueryResourcesType":"资源类型",
+        "title_iPortalQueryResourcesAll":"全部",
+        "title_iPortalQueryResourcesMap":"地图",
+        "title_iPortalQueryResourcesService":"服务",
+        "title_iPortalQueryResourcesScene":"场景",
+        "title_iPortalQueryResourcesData":"数据",
+        "title_iPortalQueryResourcesInsights":"洞察",
+        "title_iPortalQueryResourcesDashboards":"大屏",
+        "title_iPortalQueryResourcesControl":"资源权限",
+        "title_iPortalQueryResourcesPublic":"公开",
+        "title_iPortalQueryResourcesGroup":"群组",
+        "title_iPortalQueryResourcesDepartment":"部门",
+        "title_iPortalQueryResourcesUser":"用户",
+        "title_iPortalQueryResourcesShareToMe":"分享给我的",
+        "title_iPortalQueryResourcesMyDepartment":"我的组织",
+        "title_iPortalQueryResourcesMyGroup":"我的群组",
+        "title_iPortalQueryResourcesMy":"我的",
+        "title_iPortalQueryResourcesSortFiled":"排序字段",
+        "title_iPortalQueryResourcesUpdateTime":"修改时间",
+        "title_iPortalQueryResourcesHeatLevel":"热度",
+        "title_iPortalQueryResourcesSort":"排序",
+        "title_iPortalQueryResourcesSortUp":"升序",
+        "title_iPortalQueryResourcesSortDown":"降序",
+        "title_iPortalQueryResourcesSearch": "搜索",
+        "title_iPortalServices": "iPortal 服务列表",
+        "title_iPortalQueryMapdashboards": "iPortal 大屏列表",
+        "title_iPortalQueryInsights": "iPortal 洞察列表",
+        "title_iPortalQueryScenes": "iPortal 场景列表",
+        "title_iPortalSecurity": "iPortal SecurityManager使用示例",
+        "title_labelThemeLayer": "客户端标签专题图",
+        "title_mapvNyvTaxi": "纽约出租车上车点",
+        "title_modifyFeatures": "修改图形",
+        "title_mvtVectorLayer": "iServer MVT矢量瓦片",
+        "title_mvtVectorLayer_vectortilerest": "iServer 矢量瓦片服务",
+        "title_mvtVectorLayer_restdata": "iServer 数据服务矢量瓦片",
+        "title_mvtVectorLayer4326": "iServer MVT矢量瓦片(WGS84)",
+        "title_mvtVectorLayer_mapboxStyle": "OSM风格(MVT WGS84)",
+        "title_mvtVectorLayer_mapboxStyle_4326": "风格动态切换",
+        "title_mvtVectorLayer_mapboxStyle_lineStyle": "线样式编辑",
+        "title_mvtVectorLayer_mapboxStyle_landuse": "土地利用",
+        "title_mvtVectorLayer_overlay": "矢量瓦片叠加",
+        "title_onlineSecurity": "Online SecurityManager使用示例",
+        "title_onlineWebMap": "2014当了一回背包客",
+        "title_osmBuildings": "openlayers 建筑立体效果",
+        "title_osmBuildingsLeaflet": "leaflet 建筑立体效果",
+        "title_rankSymbolThemeLayer": "符号等级专题图",
+        "title_snapDrawFeatures": "捕捉图形绘制",
+        "title_superMapCloudLayer": "超图云地图",
+        "title_tiandituLayer_ll": "天地图-经纬度",
+        "title_tiandituLayer_mecartor": "天地图-墨卡托",
+        "title_vectorTiledLayer": "矢量瓦片",
+        "title_turfClassificationAnalysis": "分类分析",
+        "title_turfGridAnalysis": "格网分析",
+        "title_turfInterpolationAnalysis": "插值分析",
+        "title_turfMeasurement": "测量计算",
+        "title_WMSLayer": "WMS 图层",
+        "title_WMTSLayer": "WMTS 图层",
+        "title_cloudLayer": "超图云",
+        "title_markersWithCustomIcons": "自定义图标",
+        "title_layerSwitchControl": "图层切换",
+        "title_d3HexbinLayer": "D3蜂巢图",
+        "title_rangeThemeLayer": "D3分段专题图",
+        "title_UniqueThemeLayer": "D3单值专题图",
+        "title_ESHeatMap": "热力/格网图",
+        "title_ESGridAggregation": "格网/热力图",
+        "title_nodeManagementUseExample": "iManager 节点管理使用示例",
+        "title_iPortalQueryMaps1": "iPortal QueryMaps使用示例",
+        "title_iPortalQueryServices1": "iPortal QueryServices使用示例",
+        "title_iPortalQueryServices2": "iPortal QueryService使用示例",
+        "title_iPortalQueryMapdashboards1": "iPortal QueryMapdashboards使用示例",
+        "title_iPortalQueryMapdashboards2": "iPortal QueryMapdashboard使用示例",
+
+        "title_iPortalQueryInsights1": "iPortal QueryInsights使用示例",
+        "title_iPortalQueryInsight": "iPortal QueryInsight使用示例",
+        "title_iPortalUpdateInsightAttrs": "iPortal UpdateInsight使用示例",
+        "title_iPortalQueryScenes1": "iPortal QueryScenes使用示例",
+        "title_iPortalQueryScene": "iPortal QueryScene使用示例",
+        "title_iPortalUpdateSceneAttrs": "iPortal UpdateSceneAttrs使用示例",
+        "title_iPortalAddMapOrScene": "iPortal 添加地图/场景使用示例",
+        "title_iPortalAddMap": "添加地图",
+        "title_iPortalAddScene": "添加场景",
+
+        "detail_iPortal_baseInfo": "基本信息",
+        "detail_iPortal_name": "名称",
+        "detail_iPortal_owner": "所有者",
+        "detail_iPortal_URL": "浏览地址",
+        "detail_iPortal_tags": "标签",
+        "detail_iPortal_description": "描述",
+        "detail_iPortal_createdTime":"创建于",
+        "detail_iPortal_visits":"访问数",
+        "edit_iPortal_uploadNewThumbnail":"上传新缩略图",
+        "edit_iPortal_exceedSize":"格式:PNG、JPG。图片大小不超过150KB。",
+        "edit_iPortal_specifiedSize":"建议:图片尺寸标准为265 * 170像素。",
+        "title_iServerSecurity": "iServer 安全认证示例",
+        "title_mapVLayerPolygon": "面",
+        "title_mapVLayerPolygonWGS84": "面_WGS84",
+        "title_planesMonitor": "航班监控",
+        "title_vectorTileLayerBoundary": "SuperMap REST 强边界风格矢量底图",
+        "title_vectorTileLayerDarkBlue": "SuperMap REST 深夜蓝黑风格矢量底图",
+        "title_vectorTileLayerHelloKitty": "SuperMap REST HelloKitty风格矢量底图",
+        "title_vectorTileLayerMVT": "SuperMap MVT格式矢量瓦片",
+        "title_vectorTileLayerMVT4326": "SuperMap MVT格式矢量瓦片",
+        "title_vectorTileLayerNatural": "SuperMap REST 淡雅绿风格矢量底图",
+        "title_vectorTileLayerNight": "SuperMap REST 月夜风格矢量底图",
+        "title_vectorTileLayerNormal": "SuperMap REST 矢量瓦片",
+        "title_iportalWebMap_range": "SuperMap iPortal 分段专题图",
+        "title_iportalWebMap_heat": "SuperMap iPortal 热力图",
+        "title_iportalWebMap_unicode": "SuperMap iPortal 点样式",
+        "title_iportalWebMap_unique": "SuperMap iPortal 单值专题图",
+        "title_iportalWebMap_label": "SuperMap iPortal 标签专题图",
+        "title_earthquakeHeatMapLayer": "2005-2016地震次数(Classic)",
+        "title_echartsEarthquake": "2005到2016年地震发生情况",
+        "title_l_echartsEarthquake": "2001年到2014年地震热力图",
+        "title_lianjia": "2018年2月北京房价信息",
+        "title_mapvLianjia_Beijing_price": "2018年2月北京房价",
+        "title_l_echartsEarthquake1": "2008到2017年地震情况统计",
+        "title_echartsLinesMillions_bjRoads": "北京道路网络图(130万点数据绘制)",
+        "title_echartsLinesMillions_railways": "全国铁路网络图(400万点数据绘制)",
+        "title_echartsLinesMillions_railwaysWGS84": "全国铁路网络图(400万点数据绘制)_WGS84",
+        "title_echartsLinesMillions_waterSystem": "全国水系图(1400万点数据绘制)",
+        "title_echartsLinesMillions_roads": "全国道路网络图(2500万点数据绘制)",
+        "title_echartsLinesMillions_nyTaxi": "纽约出租车上车点分布图(140万点数据绘制)",
+        "title_mb_deckglLayer_arcLayer": "曲线图层",
+        "title_mb_deckglLayer_pathLayer": "路径图",
+        "title_mb_deckglLayer_pathLayerWGS84": "路径图_WGS84",
+        "title_mb_deckglLayer_polygonLayer": "多边形图层",
+        "title_mb_deckglLayer_hexagonLayer": "蜂巢图层",
+        "title_mb_deckglLayer_nyBuilding": "纽约城市建筑",
+        "title_mb_deckglLayer_nyc_census": "纽约城市人口",
+        "title_mb_deckglLayer_scatterPlot": "加州地震分布图",
+        "title_mb_deckglLayer_sfcontour": "旧金山等高线",
+        "title_mb_deckglLayer_sftrees": "旧金山街道树分布密度图",
+        "title_mb_deckglLayer_ukcommute": "英国通勤图",
+        "title_openFile": "打开文件",
+        "title_openFile_react": "打开文件(React)",
+        "title_openFile_vue": "打开文件(Vue)",
+        "title_dataFlow": "数据流服务",
+        "title_chart": '图表',
+        "title_chart_iServer": '图表_iServer',
+        "title_chart_iPortal": '图表_iPortal',
+        "title_spatialAnalysis": '客户端计算',
+        "title_distributeAnalysis": '分布式分析',
+        "title_dataServiceQuery": '数据服务查询',
+        "title_planeModel":"飞机模型(gltf格式)",
+        "title_flyBird":"飞鸟模型",
+        "title_buildings":"建筑模型",
+        "title_facility":"设施点(mtl+obj格式)",
+        "title_ChinaEarthquakeHeat": '中国地震数据',
+        "title_ChinaEarthquakeHeatWGS84": '中国地震数据_WGS84',
+        "title_ChinaEarthquakeHeatClient": '中国地震数据(Classic)_WGS84',
+        "title_componentsChart_Vue": '图表组件',
+        "title_componentsChart_Vue(pie)":'饼图-组件',
+        "title_componentsChart_Vue(radar)":'雷达图-组件',
+        "title_componentsChart_Vue(gauge)":'仪表盘-组件',
+        "title_componentsLayerList_Vue": '图层列表组件',
+        "title_componentsOpenFile_Vue":'打开文件组件',
+        "title_componentsMap_Vue": 'iServer地图',
+        "title_componentsMiniMap_Vue": '鹰眼组件',
+        "title_componentsPan_Vue": '平移组件',
+        "title_componentsScale_Vue": '比例尺组件',
+        "title_componentsWebmap_Vue": 'iPortal地图',
+        "title_componentsCompare_Vue": '地图卷帘',
+        "title_componentsZoom_Vue": '缩放组件',
+        "title_componentsLegend_Vue": '图例组件',
+        "title_componentsBasic_Vue": '基础组件',
+        "title_componentsMeasure_Vue": '量算组件',
+        "title_componentsQuery_Vue": '查询组件',
+        "title_componentsSearch_Vue": '搜索组件',
+        "title_componentsTheme_Vue": '主题切换',
+        "title_componentsDemo_Vue": '土地利用示例',
+        "title_componentsEstateMonitoringPlatform_Vue": '房产项目可视化监控平台示例',
+        "title_componentsCluster_Vue": '点聚合图层组件',
+        "title_componentsEcharts_Vue": 'Echarts 图层组件',
+        "title_componentsRaster_Vue": '栅格图层组件',
+        "title_componentsGeoJSON_Vue": 'GeoJSON 图层组件',
+        "title_componentsMapV_Vue": 'MapV 图层组件',
+        "title_componentsDeckGL_Vue": 'DeckGL 图层组件',
+        "title_componentsVectorTile_Vue": '矢量瓦片图层组件',
+        "title_componentsHeatmap_Vue": '热力图图层组件',
+        "title_componentsGraphThemeLayer_Vue": '图表专题图组件',
+        "title_componentsUniqueTheme_Vue": '单值专题图图层组件',
+        "title_componentsRangeTheme_Vue": '分段专题图图层组件',
+        "title_componentsRankSymbolTheme_Vue": '等级符号专题图图层组件',
+        "title_componentsLabelTheme_Vue": '标签专题图图层组件',
+        "title_componentsDataFlow_Vue": '数据流图层组件',
+        "title_componentsFireLayer_Vue": '动态火焰图层',
+        "title_componentsAnimateMarkerLayer_Vue": '动效标记图层',
+        "title_componentsAnimateTextLayer_Vue": '动效文本标记图层',
+        "title_componentsBorder_Vue": '边框组件',
+        "title_componentsIdentify_Vue": '点选查询组件(Vue)',
+        "title_componentsTianditu_Vue": '天地图',
+        "title_componentsTianditu_route_Vue": '路线规划',
+        "title_componentsTianditu_search_Vue": 'POI搜索',
+        "title_componentsTianditu_switch_Vue": '天地图切换',
+        "title_componentsTianditu_home_Vue": '天地图首页',
+        "title_componentsPopup_Vue": '弹窗(Vue)',
+        "title_componentsLayerManager_vue": '图层管理组件',
+        "title_componentsWebmap_React": 'iPortal地图',
+        "title_componentsMap_React": 'iServer地图',
+        "title_componentsRasterTile_React": '栅格图层组件',
+        "title_componentsVectorTile_React": '矢量瓦片图层组件',
+        "title_componentsUniqueTheme_React": '单值专题图图层组件',
+        "title_componentsRangeTheme_React": '分段专题图图层组件',
+        "title_componentsGraphThemeLayer_React": '图表专题图组件',
+        "title_componentsHeatmap_React": '热力图图层组件',
+        "title_componentsMapV_React": 'MapV 图层组件',
+        "title_componentsEcharts_React": 'Echarts 图层组件',
+        "title_componentsDataFlow_React": '数据流图层组件',
+        "title_componentsFireLayer_React": '动态火焰图层',
+        "title_componentsGeoJSON_React": 'GeoJSON 图层组件',
+        "title_componentsCluster_React":'点聚合图层组件',
+        "title_componentsDeckGL_React": 'DeckGL 图层组件',
+        "title_componentsLabelTheme_React": '标签专题图图层组件',
+        "title_componentsRankSymbolTheme_React": '等级符号专题图图层组件',
+        "title_componentsAnimateMarkerLayer_React": '动效标记图层',
+        "title_componentsAnimateTextLayer_React": '动效文本标记图层',
+        "title_webPrinting_landUse": '土地利用 Web 打印',
+        "title_natureResourcePlatform_Vue": '自然资源平台大屏',
+        "title_ecologicalBigDataPlatform_Vue": '生态大数据平台大屏',
+        "title_mask":'图层掩膜',
+        "title_objectdetection":"机器学习结果叠加(目标检测)",
+        "title_binaryclassification":"机器学习结果叠加(二元分类)",
+        "title_mvt_mapboxgl":"MVT WGS84 (叠加 MapboxGL)",
+
+        "text_service_name":"名称",
+        "text_service_type":"类型",
+        "text_service_status":"状态",
+        "text_view_service":"查看服务",
+        "text_unpublish_service":"取消发布",
+        "text_publish_message":"选择要发布的服务类型:",
+        "text_publish_data":"发布数据",
+        "text_dataBase_name":"数据库名称",
+        "text_hdfs_directory":"HDFS目录地址",
+        "text_hbase_address":"服务地址",
+        "text_x_field":"X坐标",
+        "text_y_field":"Y坐标",
+        "text_file_encoding":"文件编码",
+        "text_data_type":"数据类型",
+        "text_data_file":"数据文件",
+        "text_data_name":"数据名称",
+        "text_user_data":"用户数据",
+        "text_workspace":"SuperMap工作空间",
+        "text_UDB":"SuperMap UDB数据",
+        "text_shapefile":"shp空间数据",
+        "text_geojson":"geojson数据",
+        "text_smtiles":"smtiles",
+        "text_svtiles":"svtiles",
+        "text_mbtiles":"mbtiles",
+        "text_tpk":"tpk",
+        "text_ugcv5":"ugc v5",
+        "text_ugcv5_mvt":"UGCV5_MVT",
+        "text_excel":"excel数据",
+        "text_csv":"csv数据",
+        "text_json":"json数据",
+        "text_confirm":"确认",
+        "text_code": "正向匹配",
+        "text_decode": "反向匹配",
+        "text_address": "地址   ",
+        "text_input_ptips_company": "公司",
+        "text_filterField": "过滤字段 ",
+        "text_input_tips_Beijing": "北京",
+        "text_minIndex": "最小索引 ",
+        "text_maxIndex": "最大索引 ",
+        "text_maxCount": "最大结果数",
+        "text_coorSystem": "坐标系  ",
+        "text_coordinate": "坐标",
+        "text_abscissa": "横坐标  ",
+        "text_ordinate": "纵坐标  ",
+        "text_queryRadius": "查询半径 ",
+        "text_input_value_match": "匹配",
+        "text_matchDegree": "匹配度",
+        "text_bufferAnalyst1": "缓冲区分析一",
+        "text_bufferAnalyst2": "缓冲区分析二",
+        "text_bufferAnalyst": "缓冲区分析",
+        "text_removeResult": "移除结果",
+        "text_addPath": "生成路径",
+        "text_query": "查询",
+        "text_closestFacilitiesService": "最近设施分析",
+        "text_weightField": "权重字段:",
+        "text_turnField": "终止里程点:(转向字段)",
+        "text_input_value_eventPoint": "事件点",
+        "text_input_value_submit": "提交",
+        "text_input_value_clear": "清除",
+        "text_densityAnalystService": "核密度分析",
+        "text_input_value_densityAnalyst": "核密度分析",
+        "text_input_value_removeTheme": "移除结果图层",
+        "text_dynamicSegmentation": "动态分段",
+        "text_input_value_dynamicSegmentation": "动态分段",
+        "text_findLocation": "选址分区分析",
+        "text_analyst": "分析",
+        "text_findMTSPPaths": "多旅行商分析",
+        "text_target": "配送目标",
+        "text_findMTSPPathsAndTSPPaths": "多旅行商分析(综合应用)",
+        "text_dispatching": "物流配送",
+        "text_check": "质检巡查",
+        "text_findPath": "最佳路径分析",
+        "text_sites": "选择站点",
+        "text_findTSPPaths": "旅行商分析",
+        "text_interpolationAnalystByDen": "点密度插值分析",
+        "text_input_value_density": "点密度",
+        "text_interpolationAnalystByGeo": "离散点插值分析",
+        "text_min": "Z值范围 最小值:",
+        "text_max": "最大值:",
+        "text_input_value_byGeo": "离散点插值分析",
+        "text_input_value_delete": "删除",
+        "text_interpolationAnalystByIDW": "反距离加权插值分析",
+        "text_input_value_byIDW": "反距离加权",
+        "text_interpolationAnalystByKriging": "克吕金插值分析",
+        "text_simple": "简单Kriging",
+        "text_ordinary": "普通Kriging",
+        "text_extensive": "泛Kriging",
+        "text_interpolationAnalystByRBF": "径向基函数插值分析",
+        "text_input_value_RBF": "径向基函数",
+        "text_mathExpression": "栅格代数运算",
+        "text_expression": "代数表达式:",
+        "text_overlayAnalyst": "叠加分析",
+        "text_routeCalculateMeasure": "点定里程",
+        "text_queryRoute": "查询路由对象",
+        "text_queryPoint": "指定查询点",
+        "text_routeLocatorLine": "里程定线",
+        "text_startRoute": "起始里程点:",
+        "text_endRoute": "终止里程点:",
+        "text_locationLine": "定位线",
+        "text_routeLocatorPoint": "里程定点",
+        "text_routPoint": "指定里程点:",
+        "text_locationPoint": "定位点",
+        "text_serviceAreas": "服务区分析",
+        "text_serviceCenter": "服务中心点",
+        "text_surfaceAnalyst": "表面分析",
+        "text_contourLine": "提取等值线",
+        "text_remove": "移除",
+        "text_terrainCurvatureCalculation": "地形曲率计算",
+        "text_theissenAnalyst": "泰森多边形",
+        "text_datasetThiessen": "数据集泰森多边形",
+        "text_geoThiessen": "几何泰森多边形",
+        "text_trafficTransfer": "交通换乘服务",
+        "text_startPoint": "起点",
+        "text_endPoint": "终点",
+        "text_transferScheme": "换乘策略",
+        "text_minTime": "最少时间",
+        "text_minDistance": "最短距离",
+        "text_lessWalk": "少步行",
+        "text_lessTransfer": "少换乘",
+        "text_notFindSPoint": "未找到匹配的起点",
+        "text_notFindEPoint": "未找到匹配的终点",
+        "text_trafficTransferScheme": "交通换乘方案",
+        "text_close": "关闭",
+        "text_open": "打开",
+        "text_closeWindow": "关闭窗口",
+        "text_ridePreference": "乘车偏好:",
+        "text_noSubway": "不乘地铁",
+        "text_scheme": "方案",
+        "text_walkTO": "步行至:",
+        "text_ride": "乘坐",
+        "text_debus1": ",在",
+        "text_debus2": "下车",
+        "text_stops": "站",
+        "text_alsoRide": "还可乘坐:",
+        "text_buffersAnalystJobService": "缓冲区分析",
+        "text_inputData": "输入数据",
+        "text_requiredField": "必填字段",
+        "text_analysisRange": "分析范围  ",
+        "text_bufferDistance": "缓冲距离",
+        "text_bufferDistanceField": "缓冲距离字段",
+        "text_bufferDistanceUnit": "缓冲距离单位",
+        "text_fusionField": "融合字段",
+        "text_areaMeasure": "面积量算",
+        "text_input_value_areaMeasure": "面积量算",
+        "text_changeControlsSkin": "控件皮肤切换",
+        "text_input_value_change": "切换",
+        "text_distanceMeasure": "距离量算",
+        "text_input_value_distanceMeasure": "距离量算",
+        "text_dragFeature": "鼠标拖拽要素控件",
+        "text_input_value_dragFea": "拖拽要素",
+        "text_input_value_notDrag": "取消拖拽",
+        "text_dragpan": "地图拖拽控件",
+        "text_input_value_dragMap": "拖拽地图",
+        "text_drawGeometry": "点线面绘制",
+        "text_input_value_drawPoint": "绘点",
+        "text_input_value_drawLine": "绘线",
+        "text_input_value_drawPolygon": "绘面",
+        "text_input_value_select": "选择",
+        "text_input_value_modify": "编辑",
+        "text_featureSnap": "要素编辑",
+        "text_input_value_closeSnap": "关闭捕捉",
+        "text_input_value_openSnap": "开启捕捉",
+        "text_input_value_addData": "加载数据",
+        "text_input_value_removeData": "移除数据",
+        "text_input_value_location": "定位",
+        "text_kernelDensityJobService": "密度分析",
+        "text_analysisMethod": "分析方法",
+        "text_simpleDenAnalyst": "简单点密度分析",
+        "text_meshSurfaceType": "网格面类型",
+        "text_4grid": "四边形网格",
+        "text_6grid": "六边形网格",
+        "text_gridSize": "网格大小",
+        "text_gridSizeUnit": "网格大小单位",
+        "text_searchRadius": "搜索半径",
+        "text_searchRadiusUnit": "搜索半径单位",
+        "text_areaUnit": '面积单位  ',
+        "text_baidu": "百度",
+        "text_coordinateTransformation": "地图坐标转换:像素坐标与地理位置坐标转换",
+        "text_mousePixelCoordinate": "鼠标像素坐标:",
+        "text_positionCoordinate": "位置坐标:",
+        "text_mouse": "鼠标",
+        "text_event": "事件",
+        "text_mapOverlay": "SuperMap REST 地图叠加",
+        "text_opacity": "透明度",
+        "text_input_tips_opacity": "设置图层的不透明度,取值[0-1]之间",
+        "text_input_user_name": "输入昵称/用户名",
+        "text_input_department_name": "输入部门",
+        "text_toggleMaps": "底图切换",
+        "text_translation": "缩放与平移",
+        "text_iClient": "示例数据来源为百度MapV的加偏数据,iClient未做纠偏处理",
+        "text_queryByWFS": "WFS查询",
+        "text_wms": "WMS图层",
+        "text_projection": "地图投影系",
+        "text_wmsVersion": "wms版本:",
+        "text_currentInfo": "当前图层信息:",
+        "text_mapProjection": "地图投影:",
+        "text_currentVersion": "wms当前版本:",
+        "text_a0mapPrint": "地图A0大幅打印",
+        "text_clickGetCoord": "点击地图可获取经纬度坐标",
+        "text_longitude": "经度:",
+        "text_latitude": "纬度:",
+        "text_otherProvince": "其他省份",
+        "text_windmap": "D3风向图",
+        "text_picker": "北京奥运会金牌分布拾取器",
+        "text_salesVolume1": "",
+        "text_salesVolume2": "地区产品销量统计",
+        "text_productA": "产品A",
+        "text_productB": "产品B",
+        "text_productC": "产品C",
+        "text_productD": "产品D",
+        "text_productE": "产品E",
+        "text_productF": "产品F",
+        "text_featureRightClick": "要素右键菜单",
+        "text_mediacy": "居中",
+        "text_layerGroup": "图层组控制",
+        "text_JingjinMap": "京津地区地图",
+        "text_lookUpLayer": "通过拖动查看图层",
+        "text_mapPrint": "地图打印",
+        "text_handMouse": "手势鼠标样式 ",
+        "text_crossMouse": "十字型鼠标样式 ",
+        "text_defaultMouse": "默认的鼠标样式 ",
+        "text_printscreen": "地图截图",
+        "text_detailedInfo": "详细信息",
+        "text_companyName": "公司名称:",
+        "text_companyAddress": "公司地址:",
+        "text_clientProjection": "客户端地图坐标投影转换: ",
+        "text_mousePosition": "鼠标位置坐标投影:",
+        "text_mouseCoord": "鼠标位置坐标:  ",
+        "text_rightClick": "标记图层右键事件",
+        "text_setlayerstatus": "子图层控制",
+        "text_mapSublayer": "World地图子图层",
+        "text_visibility": "是否可见",
+        "text_topHeight": "Building 顶端高度:",
+        "text_bottomHeight": "Building 底端高度:",
+        "text_wallColor": "Building 墙壁颜色:",
+        "text_topColor": "Building 顶部颜色:",
+        "text_graphicSymbolData": "Graphic图层符号绘制",
+        "text_countsDraw": "绘制个数",
+        "text_featureID": '要素ID: ',
+        "text_indexLeaf": "叶数索引:",
+        "text_islandMultiPolygonData": "岛洞与多面",
+        "text_labelVectorLayerData": "标签矢量图层",
+        "text_mouseClickEvent": "鼠标点击事件",
+        "text_splinesData": "B样条曲线",
+        "text_equipment": "设备",
+        "text_mouseClickEventLayer": "矢量图层鼠标点击事件",
+        "text_basicVectorLayerData": "基础矢量图层数据",
+        "text_sourceDataset": "源数据集",
+        "text_overlayDataset": "叠加对象数据集",
+        "text_analystMode": "叠加分析模式",
+        "text_clip": "裁剪",
+        "text_intersect": "相交",
+        "text_erase": "擦除",
+        "text_union": "合并",
+        "text_update": "更新",
+        "text_identity": "同一",
+        "text_xor": "对称差分析",
+        "text_retainedFieldSource": "源数据集保留字段",
+        "text_retainedFieldOverlay": "叠加数据集保留字段",
+        "text_lineWidth": "线宽:",
+        "text_lineType": "线型:",
+        "text_lineColor": "线色:",
+        "text_markerWidth": "标号宽度:",
+        "text_markerHeight": "标号高度:",
+        "text_defaultStyle": "使用缺省属性:",
+        "text_attributePanel": "属性面板",
+        "text_radius": "半径",
+        "text_kilometre": "公里",
+        "text_customAttr": '用户自定义属性',
+        "text_commandPost": "指挥所",
+        "text_shanxiXian": "陕西省西安市",
+        "text_weather": "天气:晴",
+        "text_direction": "方向:78°",
+        "text_speed": "速度:123海里/小时",
+        "text_drainageAmount": "排水量:2000吨",
+        "text_police": "刑警",
+        "text_firearms": "枪支",
+        "text_navy": "海军兵力部署",
+        "text_airport": "机场",
+        "text_trafficPolice": "交警",
+        "text_orderPolice": "治安警",
+        "text_commandCar": "指挥车",
+        "text_airportForceDeployment": "机场兵力部署",
+        "text_satelliteCustomAttr": "卫星自定义属性",
+        "text_orientation": "方向",
+        "text_Chongqing": "重庆",
+        "text_Nanchang": "南昌",
+        "text_Beijing": "北京",
+        "text_Yinchuan": "银川",
+        "text_seep1": "速度",
+        "text_height": "高度",
+        "text_time": "时间",
+        "text_drawPanel": "标绘面板",
+        "text_cancelDraw": "取消绘制",
+        "text_editor": "编辑器",
+        "text_addLayer": "添加图层",
+        "text_situationMapOperation": "态势图操作",
+        "text_editMarker": "编辑标号",
+        "text_detailPanel": "详情面板",
+        "text_aboutMode": "切换图层锁定/编辑/选择模式",
+        "text_multiselect": "切换多选模式",
+        "text_multiselectAlign": "多选对齐",
+        "text_screenshot": "截屏",
+        "text_avoid": "避让",
+        "text_createGroup": "创建组合",
+        "text_editLayer": "标绘图层的可编辑:",
+        "text_lockLayer": "标绘图层的可锁定:",
+        "text_selectLayer": "标绘图层的可选择:",
+        "text_fileUrl": "文件URL:",
+        "text_fileName": "文件名称:",
+        "text_fileList": "态势图文件列表",
+        "text_symbolLibInfo": "标号库信息:",
+        "text_symbolLibName": "标号库名称",
+        "text_SymbolLibID": "标号库ID",
+        "text_symbolCounts": "标号个数",
+        "text_layer": "图层",
+        "text_createSuccess": "创建成功",
+        "text_deleteSuccess": "删除成功",
+        "text_performanceLayer": "高效率标绘图层:",
+        "text_performancePlottingLayer": "标绘图层:",
+        "text_loadingData": "正在加载数据,请稍等......",
+        "text_keyword": "关键字:",
+        "text_queryResult": "查询结果: ",
+        "text_propertyName": "属性名",
+        "text_propertyValue": "属性值",
+        "text_color": "颜色",
+        "text_featureInfo": "要素信息",
+        "text_district": "区县  :  房山区",
+        "text_organization": "机构名称  :  北京市房山区福海亿利残疾人职康站",
+        "text_serviceType": "服务分类  :  职康类",
+        "text_note": "注:此弹窗的滚动条为浏览器默认样式,",
+        "text_featureStyle": "feature弹窗为jquery-nanoscroller 样式,",
+        "text_needModify": "如需修改请看feature弹窗示例",
+        "text_BeckStreet": "伦敦贝克街221号B",
+        "text_field": "字段",
+        "text_statisticResult": "统计结果:",
+        "text_averageValue": "平均值",
+        "text_maxValue": "最大值",
+        "text_minValue": "最小值",
+        "text_standardDeviation": "标准差",
+        "text_sum": "和",
+        "text_variance": "方差",
+        "text_gridQueryResult": "栅格查询结果:",
+        "text_queryObjectMode": "查询对象模式",
+        "text_dataset": "数据集",
+        "text_queryObjectDataset": "查询对象数据集",
+        "text_boundsQueryMode": "空间查询模式",
+        "text_contain": "包含",
+        "text_cross": "交叉",
+        "text_disjoint": "分离",
+        "text_Identity": "重合",
+        "text_overlap": "叠加",
+        "text_touch": "邻接",
+        "text_within": "被包含",
+        "text_groupField": "分组字段  ",
+        "text_attributeField": "属性字段",
+        "text_statisticModes": "统计模式",
+        "text_polymerizationType": "聚合类型",
+        "text_polymerizationMesh": "网格面聚合",
+        "text_polymerizationRegion": "多边形聚合",
+        "text_resolution": "分辨率",
+        "text_regionDataset": "聚合面数据集",
+        "text_summaryType": "汇总类型",
+        "text_summaryMesh": "网格面汇总",
+        "text_summaryRegion": "多边形汇总",
+        "text_summaryDataset": "汇总数据集",
+        "text_statisticStandardField": "以标准属性字段统计",
+        "text_statisticWeightField": "以权重字段统计 ",
+        "text_statisticAttrFieldMode": "属性字段统计模式",
+        "text_AttrFieldName": "属性字段名",
+        "text_statisticWeightFieldMode": "权重字段统计模式",
+        "text_weightFieldName": "权重字段名",
+        "text_lengthAndArea": "是否统计长度或面积",
+        "text_Name": "省级行政区名称: ",
+        "text_consumptionLevel1": "",
+        "text_consumptionLevel2": "年居民消费水平",
+        "text_yuan": "元",
+        "text_legend": "图例",
+        "text_landType": "土地类型",
+        "text_grassland": "草地",
+        "text_city": "城市",
+        "text_shrub": "灌丛",
+        "text_dryLand": "旱地",
+        "text_lakeReservoir": "湖泊水库",
+        "text_economicForest": "经济林",
+        "text_desert": "沙漠",
+        "text_irrigatedLand": "水浇地",
+        "text_paddyField": "水田",
+        "text_timberForest": "用材林",
+        "text_swamp": "沼泽",
+        "text_DefaultStyle": "缺省风格",
+        "text_attributeTable": "属性表",
+        "text_area": "面积: ",
+        "text_graduatedSymbol": "等级符号专题图",
+        "text_populationDensity": "人口密度(1999年)",
+        "text_districtName": "行政区名: ",
+        "text_population": "人口: ",
+        "text_inCountry": "所在国家: ",
+        "text_countsPOP": "人口数量: ",
+        "text_topologyValidatorRule": "拓扑检查规则",
+        "text_topologyValidatorDataset": "拓扑检查数据集",
+        "text_tolerance": "容限",
+        "text_clipObjectMode": "裁剪对象模式",
+        "text_clipObjectDataset": "裁剪对象数据集",
+        "text_internalClip": "内部裁剪",
+        "text_externalClip": "外部裁剪",
+        "text_metro": "地铁",
+        "text_currentTime": "当前时间:",
+        "text_24": "腊月二十四",
+        "text_25": "腊月二十五",
+        "text_26": "腊月二十六",
+        "text_27": "腊月二十七",
+        "text_28": "腊月二十八",
+        "text_29": "腊月二十九",
+        "text_30": "大年三十",
+        "text_clock": "点",
+        "text_removeDrawedPoint": "移除掉运动过的点",
+        "text_hide": "隐藏",
+        "text_cartoCSSStyleChart": "CartoCSS样式表:",
+        "text_heatMapLayer": "热点图",
+        "text_fastHeatMapLayer": "新版热点图",
+        "text_fastHeatMapLayer_mgl": "热点图",
+        "text_degree": "地理单位",
+        "text_heatMapColorSection": "热点图颜色分段配置",
+        "text_colorSection": "颜色分段配置",
+        "text_temperatureRange": "温度范围",
+        "text_colorGrad": "颜色渐变",
+        "text_heatMapColorManual": "热点图颜色手动配置",
+        "text_inputColor": "请输入颜色值",
+        "text_addedColor": "已添加颜色值",
+        "text_country": "国家",
+        "text_capital": "首都",
+        "text_goisLayer": "麻点图",
+        "text_cartoCSSPoint": "点符号",
+        "text_choosePointType": "选择点类型:",
+        "text_cartoCSSHightlight": "高亮显示",
+        "text_mapInfoPrint": "map信息太多,只打印一部分",
+        "text_mapName": "地图名",
+        "text_center": "中心点",
+        "text_editSingle": "编辑单个要素",
+        "text_clickGridCellToQuery": "请点击需要查询的格网区域。",
+        "text_GDPStatistic": "全国省份2013和2014年GDP统计",
+        "text_popThemeLayer": "全国省份人口专题",
+        "text_fictitiouData": "数据纯属虚构",
+        "text_rainfall": "降雨量",
+        "text_runoff": "径流量",
+        "text_monday": "周一",
+        "text_tuesday": "周二",
+        "text_wednesday": "周三",
+        "text_thursday": "周四",
+        "text_friday": "周五",
+        "text_saturday": "周六",
+        "text_sunday": "周日",
+        "text_effectScatter": "全国主要城市空气质量图",
+        "text_maxTemperature": "最高气温",
+        "text_minTemperature": "最低气温",
+        "text_nextWeekTemperature": "未来一周气温变化",
+        "text_class": "类目",
+        "text_commodity": "商品",
+        "text_commoditySales": "商品销量",
+        "text_commodityClass": "商品类目",
+        "text_beijingCommoditySales": "北京市商品销量",
+        "text_day1": "",
+        "text_day2": "日:",
+        "text_AQIindex": "AQI指数",
+        "text_CO": "一氧化碳(CO)",
+        "text_NO2": "二氧化氮(NO2)",
+        "text_SO2": "二氧化硫(SO2)",
+        "text_data": "日期",
+        "text_SO2text": "明暗:二氧化硫",
+        "text_roundSize": "圆形大小:PM2.5",
+        "text_weiboChina": "微博签到数据点亮中国",
+        "text_strong": "强",
+        "text_middle": "中",
+        "text_weak": "弱",
+        "text_clipMode": "裁剪分析模式",
+        "text_consumptionIn09": "09年居民消费水平",
+        "text_vectorDefaultStyle": "默认风格",
+        "text_darkBlueStyle": "暗夜风格",
+        "text_fiordStyle": "深海风格",
+        "text_klokantechStyle": "淡绿风格",
+        "text_osmStyle": "OSM风格",
+        "text_positronStyle": "淡灰风格",
+        "text_landUseType": "土地利用类型",
+        "text_landArea": "土地面积",
+        "text_squareKilometre": "平方公里",
+        "text_densityOfPopulation": "人口密度",
+        "text_great": "优",
+        "text_good": "良",
+        "text_mildPollution": "轻度污染",
+        "text_moderatePollution": "中度污染",
+        "text_heavyPollution": "重度污染",
+        "text_severePollution": "严重污染",
+        "text_currentCity": "当前城市",
+        "text_distance": "距离",
+        "text_edit": "编辑",
+        "text_selectMarkerToDelete": "选择并删除要素。",
+        "text_facilityPoint1": "设施点一",
+        "text_facilityPoint2": "设施点二",
+        "text_facilityPoint3": "设施点三",
+        "text_distributionCentre1": "配送中心点一",
+        "text_distributionCentre2": "配送中心点二",
+        "text_distributionCentre3": "配送中心点三",
+        "text_destination1": "配送目的地一",
+        "text_destination2": "配送目的地二",
+        "text_site1": "站点一",
+        "text_site2": "站点二",
+        "text_site3": "站点三",
+        "text_retailStation1": "零售站一",
+        "text_retailStation2": "零售站二",
+        "text_retailStation3": "零售站三",
+        "text_latLng": "经纬度是",
+        "text_dataSources": "数据来源",
+        "text_NYTaxiCarPoint": "纽约出租车上车点",
+        "text_bufferAnalystResult": "缓冲区分析结果",
+        "text_overlayAnalystResult": "叠加分析结果",
+        "text_overlayBatchAnalystResult": "批量叠加分析结果",
+        "text_switchLayer": "切换图层",
+        "text_beijingCity": "北京市",
+        "text_chengdu": "成都市",
+        "text_guangzhouCity": "广州市",
+        "text_shanghaiCity": "上海市",
+        "text_usageExample": "iPortal QueryMaps使用示例",
+        "text_createdIn": "创建于",
+        "text_function": "功能",
+        "text_instance": "示例",
+        "text_login": "登录",
+        "text_logout": "登出",
+        "text_serviceAddress": "服务地址",
+        "text_input_tips_serviceDomainName": "服务域名/IP+端口",
+        "text_userName": "用户名",
+        "text_password": "密码",
+        "text_applyForToken": "token申请",
+        "text_clientID": "客户端标识",
+        "text_clientIP": "客户端IP",
+        "text_currentRequestIP": "当前请求的IP",
+        "text_noClientLimit": "无客户端限制",
+        "text_refererIPEmpty": "Referer/IP/空",
+        "text_termValid": "有效期",
+        "text_oneHour": "1小时",
+        "text_oneDay": "1天",
+        "text_oneWeek": "1星期",
+        "text_oneMonth": "1月",
+        "text_oneYear": "1年",
+        "text_tokenAuthorized": "token授权访问私有服务",
+        "text_accessing": "访问",
+        "text_keyAuthorized": "key授权访问私有map服务",
+        "text_iPortalServicesAddress": "iPortal私有地图服务地址",
+        "text_keyAuthorizedGetMap": "key授权出图",
+        "text_tokenAuthorizedGetMap": "token授权出图",
+        "text_getMap": "出图",
+        "text_iServerAddress": "iServer首页地址,如:http://localhost:8090/iserver",
+        "text_iManagerAddress": "iManager首页地址,如http://localhost:8390/imanager",
+        "text_keyAuthorizedService": "key授权访问私有服务",
+        "text_noData": "无数据",
+        "text_classificationAnalysis": "分类分析",
+        "text_classificationAnalysisType": "分类分析类型",
+        "text_createGrid": "创建格网",
+        "text_gridAnalysisType": "格网分析类型",
+        "text_hexGrid": "蜂巢格网",
+        "text_pointGrid": "点格网",
+        "text_squareGrid": "方形格网",
+        "text_triangleGrid": "三角格网",
+        "text_unitGridSize": "单元格网大小",
+        "text_gridUnitSizeUnit": "格网单元大小单位",
+        "text_degrees": "度",
+        "text_radians": "弧度",
+        "text_miles": "英里",
+        "text_kilometers": "千米",
+        "text_adjustSize": "是否调整宽度和高度以适应bbox的尺寸",
+        "text_adjustPoint": "调整点到格网中心位置",
+        "text_creationRange": "创建范围为多边形",
+        "text_returnedByTriangle": "是否以三角形的形式返回",
+        "text_interpolationAnalysis": "插值分析",
+        "text_interpolationAnalysisType": "插值分析类型",
+        "text_Jingshen": "京深路卧龙岗隧道路段",
+        "text_distanceUnit": "距离的单位",
+        "text_distanceToStart": "距起点距离",
+        "text_position": "方位",
+        "text_positionRange": "-180度到180度之间",
+        "text_turfMeasure": "turf测量",
+        "text_totalLength": "全长1174.8米约合0.729英里",
+        "text_getPoint": "点击生成对应的点",
+        "text_measureArea": "面积测量",
+        "text_getArea": "点击计算当前图层面积",
+        "text_JingshenBounds": "京深路卧龙岗隧道路段的bounds",
+        "text_getBounds": "点击生成bounds",
+        "text_pointToTarget": "计算出从北京到目标位置的点",
+        "text_getTargetPoint": "点击显示目标点",
+        "text_scenicSpotsCenter": "北京周边景区中心",
+        "text_getScenicSpotCenter": "获取景区中心",
+        "text_distanceBetween": "京津两点之间的距离",
+        "text_getDistance": "计算两点间的距离",
+        "text_middlePointBetween": "获取京津之间的中点",
+        "text_getMiddlePoint": "获取京津之间的中点",
+        "text_bigRoundRoute": "北京到布拉格的大圆航线",
+        "text_getRoute": "计算大圆航线",
+        "text_getBuffer": "生成标记点缓冲区",
+        "text_polygon": "圆多边形",
+        "text_getPolygon": "生成圆多边形",
+        "text_bezier": "白河的贝塞尔曲线",
+        "text_getBezier": "生成bezier曲线",
+        "text_externalTangentSquare": "最小外切正方形",
+        "text_getExternalTangentSquare": "生成最小外切正方形",
+        "text_buffer": "buffer缓冲区",
+        "text_step": "步长",
+        "text_geoline": "模拟迁徙",
+        "text_fictitiou": "纯属虚构",
+        "text_maxHighDot": "最高点",
+        "text_minLowDot": "最低点",
+        "text_PM25": "PM25",
+        "text_PM10": "PM10",
+        "text_noStart": "未开始",
+        "text_console": "控制台",
+        "text_startTime": "起始时间",
+        "text_finishTime": "终止时间",
+        "text_refreshStepSize": "刷新步长",
+        "text_refreshFrequency": "刷新频率",
+        "text_getIserverlist": "获取iServer列表",
+        "text_name": "名称",
+        "text_gain": "获取",
+        "text_activateNode": "启动节点",
+        "text_nodeID": "节点id",
+        "text_stopNode": "停止节点",
+        "text_createiServer": "创建iServer",
+        "text_nodeName": "节点名称",
+        "text_physicalMachine": "物理机名称",
+        "text_input_tips_physicalMachine": "填写vm所属的物理机",
+        "text_applyToken": "申请token",
+        "text_nodeIDNeedToActivate": "要启动节点的id",
+        "text_nodeIDNeedToStop": "要停止节点的id",
+        "text_input_tips_nodeName": "请填写节点名称",
+        "text_tips_ServiceUrl": "请填写服务地址",
+        "text_tips_id": "请填写id",
+        "text_tips_physicalMachineName": "请填写物理机名称",
+        "text_flight": "航班",
+        "text_flightNumber": "航班号",
+        "text_allSelect": "全选",
+        "text_deSelectAll": "反选",
+        "text_select": "请选择",
+        "text_querypoint": "查询点",
+        "text_beyondDistance": "超出全程距离范围,请重新填写",
+        "text_measure": "测量",
+        "text_attrAnimation": "属性动画",
+        "text_flickerAnimation": "闪烁动画",
+        "text_growthAnimation": "生长动画",
+        "text_revolveAnimation": "旋转动画",
+        "text_proportionAnimation": "比例动画",
+        "text_SHAnimation": "显隐动画",
+        "text_pathAnimation": "路径动画",
+        "text_echartsEarthquake_title": "2005到2016年地震发生情况",
+        "text_echartsEarthquake_sub_title": "单位:次数",
+        "text_quarter_1": "一季度",
+        "text_quarter_2": "二季度",
+        "text_quarter_3": "三季度",
+        "text_quarter_4": "四季度",
+        "text_mapvLianjia_tooltip": "价格(每平米):",
+        "text_l_echartsEarthquake": "2008年到2017年地震数据热力图",
+        "text_l_echartsEarthquake_x_coordinate": "月份",
+        "text_echartsLinesMillions_bjRoads": "北京道路网络图",
+        "text_echartsLinesMillions_bjRoads_subtext": "130万点数据绘制",
+        "text_echartsLinesMillions_railways": "全国铁路网络图",
+        "text_echartsLinesMillions_railways_subtext": "400万点数据绘制",
+        "text_echartsLinesMillions_waterSystem": "全国水系图",
+        "text_echartsLinesMillions_waterSystem_subtext": "1400万点数据绘制",
+        "text_echartsLinesMillions_roads": "全国道路网络图",
+        "text_echartsLinesMillions_roads_subtext": "2500万点数据绘制",
+        "text_graphicLayer_title": "纽约出租车上车点",
+        "text_graphicLayer_subTitle": "145万点数据绘制",
+        "text_echartsLinesMillions_nyTaxi": "纽约出租车分布图",
+        "text_echartsLinesMillions_nyTaxi_subtext": "140万点数据绘制",
+        "text_esmode_streaming": "实时展示",
+        "text_esmode_history": "历史展示",
+        "text_esmode": "展示模式",
+        "text_LineStyleEditor": "图层:",
+        "text_lineBorderLayer": "线边框 ",
+        "text_lineFillLayer": "线填充 ",
+        "text_lineColor_1": "颜色:",
+        "text_lineOpacity": "透明度:",
+        "text_lineWidth_1": "宽度:",
+        "text_tipsPopup_subtext": "点击线编辑该线图层样式",
+        "text_alert_subtext": "点击线图层编辑线图层样式",
+        "text_paly": "开始",
+        "text_pause": "暂停",
+        "text_mb_deckglLayer_nyc_census": "该数据集包含纽约市2010年人口普查地区人口数据",
+        "text_mb_deckglLayer_sfcontour": "旧金山大陆和金银岛/ Yerba岛的立面轮廓",
+        "text_mb_deckglLayer_scatterPlot": "加利福尼亚州2.5级地震的地点,规模和磁性类型",
+        "text_mb_deckglLayer_sftrees": "三维六进制密度地图显示旧金山的每条街道",
+        "text_mb_deckglLayer_ukcommute": "使用3d弧线的原始目的地地图显示英格兰和威尔士居民的通勤模式",
+        'text_openFile':"选择文件",
+        'text_analysisLayer':"[分析图层]",
+        'text_spatialAnalysisLayerName':"中国历史5级以上地震数据",
+        'text_symbolEqualSize':"等大",
+        'text_symbolDistribution':"均匀分布",
+        'text_myRasterLayer':"我的栅格图层",
+        'text_opt_border': "边框",
+        'text_sel_border': "边框类型",
+        'text_choose_user': "已选择用户",
+        'text_choose_department': "已选择部门",
+        'text_user_search': "所有用户可检索",
+        'text_user_download': "所有用户可下载",
+        'text_user_view': "所有用户可查看",
+        'text_user_editor': "所有用户可编辑(仅限登录用户)",
+        'text_nickname': "昵称(用户名)",
+        'text_department': "部门名称",
+        'text_group': "群组名称",
+        'text_is_search': "可检索",
+        'text_is_view': "可查看",
+        'text_is_edit': "可编辑",
+        'text_is_download': "可下载",
+        'text_userMap': "用户地图",
+        'text_ncp_riskLevel':"风险等级",
+        'text_ncp_nowConfirmed':"现有确诊",
+        'text_ncp_incrementConfirmed':"新增确诊",
+        'text_ncp_incidence':"报告发病率",
+        'text_ncp_nodata_tooltip':"{name}:数据暂缺",
+        'text_ncp_riskLevel_tooltip':"{name}:连续 {daysNoConfirmedAdd} 天无新增确诊",
+        'text_ncp_riskLevel_tooltip1':"{name}:近3天最高新增确诊 {daysMaxConfirmedAdd}<br>昨新增确诊 {confirmedAdd}",
+        'text_ncp_riskLevel_title':"疫情风险等级图",
+        'text_ncp_incrementConfirmed_title':"全国新增确诊数",
+        'text_ncp_incrementConfirmed_tooltip':"{name}:新增确诊 {confirmedAdd}",
+        'text_ncp_nowConfirmed_title':"全国现有确诊数",
+        'text_ncp_nowConfirmed_tooltip':"{name}:现有确诊 {nowConfirmed}",
+        'text_ncp_incidence_title':"全国报告发病率(每10万人)",
+        'text_ncp_incidence_tooltip':"{name}:报告发病率 {incidence}<br>累计确诊 {confirmed},人口 {population} 万",
+        'text_ncp_time':"截至 {time}",
+        'text_ncpworld_incrementConfirmed_title':"海外新增确诊数",
+        'text_ncpworld_confirmed_title':"海外累计确诊数",
+        'text_ncp_confirmed_tooltip':"{name}:累计确诊 {confirmed}",
+        'text_ncp_confirmed':"累计确诊",
+        'text_ncpworld_incidence_title':"全球报告发病率(每10万人)",
+        'text_ncp_world':"世界疫情",
+        'text_ncp_china':"中国疫情",
+        "text_input_value_addMask": "添加掩膜",
+        "text_input_value_removeMask": "移除掩膜",
+        "text_add_sicahun_plygon":"正在加载四川省区划数据...",
+
+
+        "btn_previous":"上一步",
+        "btn_next":"下一步",
+        "btn_operate": "操作",
+        "btn_overlayAnalyst": "叠加分析",
+        "btn_terrainCurvatureCalculation": "地形曲率计算",
+        "btn_mathExpression": "栅格代数运算",
+        "btn_clearLayer": "移除结果图层",
+        "btn_createOpacity": "点击生成对应透明度图层",
+        "btn_toggleMaps": "底图切换",
+        "btn_enlarge": "放大",
+        "btn_lessen": "缩小",
+        "btn_translation": "平移",
+        "btn_load": "加载",
+        "btn_polygon": "多边形",
+        "btn_a0Print": "A0大幅打印",
+        "btn_createWindRose": "创建风向图",
+        "btn_pause": "暂停",
+        "btn_run": "运行",
+        "btn_layerGroup": "图层组控制",
+        "btn_openSwitch": "打开卷帘",
+        "btn_closeSwitch": "关闭卷帘",
+        "btn_marker": "标注",
+        "btn_print": "打印",
+        "btn_printscreen": "截图",
+        "btn_setlayerstatus": "子图层控制",
+        "btn_startDraw": "开始绘制",
+        "btn_switchIcon": "切换图标并重绘",
+        "btn_noEventDraw": "无事件绘制",
+        "btn_openEventDraw": "开启事件绘制",
+        "btn_createPoint": "绘制点集",
+        "btn_createBLine": "根据点集生成B样条曲线",
+        "btn_createIcon": "标注专业符号",
+        "btn_overlay": "叠加",
+        "btn_open": "打开",
+        "btn_addToLater": "添加到指定图层",
+        "btn_drawMarker": "绘制标号",
+        "btn_cancelMarker": "取消标绘",
+        "btn_drawText": "绘文字",
+        "btn_drawImage": "绘图片",
+        "btn_route1": "航线1",
+        "btn_route2": "航线2",
+        "btn_route3": "航线3",
+        "btn_sectorArea": "扇形区域",
+        "btn_interfereBeam": "干扰波束",
+        "btn_objectMarker": "对象标注",
+        "btn_objectMarker1": "对象标注1",
+        "btn_troopDeploy1": "兵力部署1",
+        "btn_troopDeploy2": "兵力部署2",
+        "btn_satellite": "卫星",
+        "btn_satelliteWindow1": "卫星可见时间窗口1",
+        "btn_satelliteWindow2": "卫星可见时间窗口2",
+        "btn_editRectangle": "外接矩形编辑",
+        "btn_editNode": "节点编辑",
+        "btn_drawRoute": "绘制航线",
+        "btn_edit": "编辑状态",
+        "btn_deleteNode": "删除节点",
+        "btn_routeHighlight": "航线高亮",
+        "btn_routeFlicker": "航线闪烁",
+        "btn_cancelPlotting": "取消标绘",
+        "btn_deleteMarker": "删除标号",
+        "btn_clearLayers": "清空图层",
+        "btn_copy": "复制",
+        "btn_cut": "剪切",
+        "btn_paste": "粘贴",
+        "btn_saveSimulationMap": "保存态势图",
+        "btn_loadSimulationMap": "加载态势图",
+        "btn_addNode": "增加节点",
+        "btn_lockSwitch": "图层锁定切换",
+        "btn_editSwitch": "图层编辑切换",
+        "btn_selectSwitch": "图层选择切换",
+        "btn_leftAlignment": "左对齐",
+        "btn_rightAlignment": "右对齐",
+        "btn_topAlignment": "上对齐",
+        "btn_bottomAlignment": "下对齐",
+        "btn_verticalCenter": "竖直居中",
+        "btn_horizontalCenter": "水平居中",
+        "btn_avoidEdit": "避让编辑",
+        "btn_cancelAvoidEdit": "退出避让编辑",
+        "btn_deleteAvoid": "删除避让",
+        "btn_group": "组合",
+        "btn_flags": "多旗",
+        "btn_unbundling": "解绑",
+        "btn_upload": "上传",
+        "btn_download": "下载",
+        "btn_plot": "标绘",
+        "btn_clear": "清空",
+        "btn_createLayer": "创建图层",
+        "btn_deleteLayer": "删除图层",
+        "btn_createAnimation": "创建动画",
+        "btn_play": "播放",
+        "btn_stop": "停止",
+        "btn_reset": "复位",
+        "btn_deleteAnimation": "删除动画",
+        "btn_deleteAllAnimation": "删除全部动画",
+        "btn_clearPlot": "清空标绘",
+        "btn_addDifferentPlot": "添加不同点标号",
+        "btn_addSamePlot": "添加相同点标号",
+        "btn_query": "查询",
+        "btn_save": "保存",
+        "btn_add": "添加",
+        "btn_saveAs": "另存为:",
+        "btn_addProperty": "添加属性",
+        "btn_circle": "圆",
+        "btn_rectangle": "矩形",
+        "btn_cancel": "取消",
+        "btn_setBackgroundColor": "设置背景色",
+        "btn_changeOpacity": "修改透明度",
+        "btn_addFeature": "新增地物",
+        "btn_selectFeature": "选择地物",
+        "btn_editFeature": "编辑地物",
+        "btn_deleteFeature": "删除地物",
+        "btn_statistic": "统计",
+        "btn_point": "点",
+        "btn_line": "线",
+        "btn_Polygon": "面",
+        "btn_clearAll": "清除全部",
+        "btn_clearFew": "清除1000个",
+        "btn_clearSelect": "清除选择",
+        "btn_openEdit": "启动编辑",
+        "btn_closeEdit": "停止编辑",
+        "btn_summary": "汇总",
+        "btn_polymerization": "聚合",
+        "btn_addThemeLayer": "添加专题图",
+        "btn_highlightFill": "高亮填充",
+        "btn_highlightStroke": "高亮描边",
+        "btn_initialStyle": "初始样式",
+        "btn_switchBar": "切换为柱状图",
+        "btn_switchLine": "切换为折线图",
+        "btn_switchPie": "切换为饼图",
+        "btn_updateData": "更新数据",
+        "btn_addLabel": "添加标签",
+        "btn_regionNoOverlap": "面数据集内部无交叠",
+        "btn_regionNoOverlapWith": "面数据集与面数据集无交叠",
+        "btn_regionContainedByRegion": "面数据集被面数据集包含",
+        "btn_regionCoveredByRegion": "面数据集被面数据集覆盖",
+        "btn_lineNoOverlap": "线数据集内部无交叠",
+        "btn_lineNoOverlapWith": "线数据集与线数据集无交叠",
+        "btn_pointNoIdentical": "点数据集内部无重复点",
+        "btn_start": "开始",
+        "btn_queryCar": "查询车辆",
+        "btn_startAnimator": "开始监控",
+        "btn_pauseAnimator": "暂停监控",
+        "btn_stopAnimator": "停止监控",
+        "btn_showOrHide": "显示/隐藏底图",
+        "btn_removeOldPoint": "移除历史点",
+        "btn_acceleration": "加速",
+        "btn_deceleration": "减速",
+        "btn_switchDirection": "正/反播放",
+        "btn_switchTwinkle": "开/关闪烁",
+        "btn_switchTails": "开/关尾巴",
+        "btn_showOrHideTrain": "显示/隐藏铁路线",
+        "btn_cancelHighlight": "取消高亮",
+        "btn_addMarker": "添加地物",
+        "btn_undoAdd": "撤销添加",
+        "btn_drag": "拖拽",
+        "btn_drawCircle": "绘圆",
+        "btn_notDraw": "无绘制",
+        "btn_modify": "修改",
+        "btn_notModify": "无修改",
+        "btn_createGrid": "对当前绘制范围创建格网",
+        "btn_createTin": "创建Tin",
+        "btn_clearTin": "清除结果",
+        "btn_getResult": "点击生成对应结果",
+        "btn_input_value_match": "匹配",
+        "btn_input_value_grid": "格网图",
+        "btn_grid": "格网图",
+        "btn_startup": "启动",
+        "btn_create": "创建",
+        "btn_undo": "撤销",
+        "btn_redo": "重做",
+        "btn_symbolEqualWidth":"等宽",
+        "btn_symbolEqualHeight":"等高",
+        "btn_symbolEqualWidthHeight":"等宽高",
+        "btn_symbolLevelDistribution":"横向均匀分布",
+        "btn_symbolVerticalDistribution":"纵向均匀分布",
+        "btn_breathingAperture":"呼吸的光圈",
+        "btn_haloRing":"发光的光环",
+        "btn_rotatingAperture":"旋转的光环",
+        "btn_diffusedAperture":"扩散的点",
+        "btn_rotatingTextBorder":"旋转的文本框",
+        "btn_fluorescence":"荧光点",
+        "btn_lightTheme":"浅色主题",
+        "btn_darkTheme":"深色主题",
+        "btn_customTheme":"自定义主题",
+        "btn_switchTheme":"切换主题",
+        "btn_OK":"确定",
+        "btn_objectdetection":"叠加目标检测结果",
+        "btn_binaryclassification":"叠加二元分类结果",
+
+        "msg_published":"已发布了该服务",
+        "msg_unpublish_success":"取消发布成功",
+        "msg_unpublish_failed":"取消发布失败",
+        "msg_publish_success":"发布成功",
+        "msg_publish_failed":"发布失败",
+        "msg_register_success":"注册成功",
+        "msg_upload_success":"上传成功",
+        "msg_upload_failed":"上传失败",
+        "msg_upload_file":"请选择要上传的文件",
+        "msg_file_type":"文件类型不支持",
+        "msg_user_not_exist":"该用户不存在",
+        "msg_department_not_exist":"该部门不存在",
+        "msg_user_added":"该用户已添加",
+        "msg_department_added":"该部门已添加",
+        "msg_not_share_admin":"无需分享给管理员",
+        "msg_input_department_name":"请输入部门名称",
+        "msg_shareSuccess":"共享成功",
+        "msg_shareFailed":"共享失败",
+        "msg_updateSuccess": "更新成功",
+        "msg_choise_resources_delete":"请选择要删除的资源。",
+        "msg_choise_resources_share":"请选择要共享的资源。",
+        "msg_query_failed":"未登录,无法获取我的资源!",
+        "msg_login_failed":"用户名或密码错误。",
+        "msg_addPath": "请生成路径,用于缓冲区分析",
+        "msg_bufferAnalyst": "请先做缓冲区分析,以得到查询的范围",
+        "msg_eventPoint": "请选择事件点!",
+        "msg_check": "站点数目应大于2个",
+        "msg_findPath": "站点数目有误",
+        "msg_querySuccess": "查询成功",
+        "msg_queryFailure": "查询失败",
+        "msg_updateFailure": "更新失败",
+        "msg_deleteFailure": "删除失败",
+        "msg_getRoute": "请通过查询获取路由对象!",
+        "msg_MByQuery": "查询获取的M值为:",
+        "msg_queryRouteSuccess": "查询路由对象成功",
+        "msg_queryRouteFailure": "查询路由对象失败",
+        "msg_locLineSuccess": "里程定位线成功",
+        "msg_locLineFailed": "里程定位线失败",
+        "msg_locPointSuccess": "里程定位点成功",
+        "msg_locPointFailed": "里程定位点失败",
+        "msg_createFailed": "创建失败! ",
+        "msg_measureResult": "量算结果:",
+        "msg_sqm": "平方米",
+        "msg_m": "米",
+        "msg_loadedData": "数据已加载。",
+        "msg_geoLocate": "您当前使用的浏览器不支持地图定位服务",
+        "msg_navigation": "按住alt键同时拖动鼠标左键进行缩放",
+        "msg_zoomBox": "按住shift键同时拖动鼠标左键进行缩放",
+        "msg_query": "查询提示:",
+        "msg_selectSPoint": "请选择查询的起点",
+        "msg_selectEPoint": "请选择查询的终点",
+        "msg_noSInfo": "无匹配的起点信息",
+        "msg_noEInfo": "无匹配的终点信息",
+        "msg_supportCanvas": "您的浏览器不支持 canvas,请升级",
+        "msg_drawPolygon": "点击右侧按钮,绘制多边形",
+        "msg_supportPrint": "ie9版本以下部分打印功能不支持",
+        "msg_supportEquipment": "您的设备不支持,请使用pc或其他设备",
+        "msg_clickZoom": '点击右键选择缩放选项',
+        "msg_supportSVG": "您的浏览器不支持 SVG,请升级!",
+        "msg_supportInstance": "您的浏览器不支持本范例,请升级!",
+        "msg_querySQLFailed": "SQL查询数据失败,请检查服务配置",
+        "msg_rightClick": "可右键点击标记点",
+        "msg_drawShape": "点击鼠标左键开始绘制图形",
+        "msg_totalTime1": "",
+        "msg_totalTime2": "个总时间为:",
+        "msg_drawTwoPoint": "请绘制至少两个点!",
+        "msg_overlayFailed": "打开/叠加态势图失败,请检查态势图内容是否正确",
+        "msg_NoPlottingLayer": "当前地图无标绘图层",
+        "msg_inputName": "请输入另存为态势图的名字",
+        "msg_selectSymbol": "避让编辑之前请先选择标号",
+        "msg_enterAvoidEdit": "删除避让编辑之前请先进入避让编辑",
+        "msg_selectFeature": "请选择您要编辑的标号",
+        "msg_createPopup": "请先点击事件点,创建popup。",
+        "msg_addFeatureSuccess": "新增地物成功",
+        "msg_addFeatureFailed": "新增地物失败",
+        "msg_queryFeatureEmpty": "查询地物为空",
+        "msg_selectFeatureFirstly": "请先选择地物",
+        "msg_updateFeatureSuccess": '更新地物成功',
+        "msg_updateFeatureFailed": '更新地物失败',
+        "msg_deleteFeatureSuccess": '删除地物成功',
+        "msg_deleteFeatureFailed": '删除地物失败',
+        "msg_geographicPosition": "地理位置错误!",
+        "msg_gridQueryNote": "注:点击地图任意位置,案例以该位置进行栅格查询,查询完成后地图左下角会显示查询结果。",
+        "msg_drawQueryBounds": "请绘制查询范围!",
+        "msg_drawClipBounds": "请绘制裁剪范围!",
+        "msg_chooseColor": "请选颜色值",
+        "msg_repeatedAdditions": "重复添加!",
+        "msg_noDataRedraw": "没有获取到数据,请重新绘制",
+        "msg_noRevocableMarker": "没有可撤回的要素。",
+        "msg_noMarkerToSubmit": "没有可提交的新要素,请先添加新要素。",
+        "msg_submitSuccess": "提交成功",
+        "msg_selectDeletePoint": "请选择需要删除的点",
+        "msg_deleteFailed": "删除失败",
+        "msg_queryMileagePoint1": "查询到的里程为 ",
+        "msg_queryMileagePoint2": " 的点",
+        "msg_addMarker": "请先添加地物",
+        "msg_errorMsg": "错误提示",
+        "msg_loginSuccess": "登录成功",
+        "msg_logoutSuccess": "登出成功",
+        "msg_fillInURL": "请填写URL",
+        "msg_loginFailed": "登录失败",
+        "msg_logoutFailed": "登出失败",
+        "msg_findAirport": "点击地图,查找离点击位置最近的飞机场",
+        "msg_beyondScope": "超出分析范围。",
+        "msg_nearestAirport": "离该点最近的机场为",
+        "msg_drawMeshRegion": "按住ctrl + 点击鼠标左键,绘制创建格网区域",
+        "msg_noDataToDelete": "没有数据可删除",
+        "msg_drawAnalysisRegion": "按住ctrl + 鼠标左键,在地图上绘出需要分析范围。",
+        "msg_layerCreated": "图层已创建,请勿重复创建。",
+        "msg_drawPolygonAndClick": "请先绘制面,再点击按钮进行面积计算",
+        "msg_markPoint": "请先标记一个点",
+        "msg_noMethod": "方法不存在",
+        "msg_illegal": "选择非法,请重新选择",
+        "msg_illegalFillIn": "非法输入,请重新输入",
+        "msg_incorrectInfo": "信息填写不完整或者错误",
+        "msg_inputValue": "请输入[-180,180]范围内的值",
+        "msg_stepSize": "步长必须大于0",
+        "msg_selectUnit": "请选择单位",
+        "msg_singleSideQuery": "单对象查询仅支持单面查询!",
+        "msg_drawAnalystRange": "请先使用左上角绘图工具在地图上绘出分析范围。",
+        "msg_dontRedraw": "已有分析范围,请勿重复绘制。",
+        "msg_clickDrawAnalystRange": "点击并拖动鼠标绘制矩形分析范围。",
+        "msg_drawTurfPolygon": "使用左侧绘图控件绘制面,点击右侧按钮进行计算",
+        "msg_externalTangentSquare": "使用左侧绘制控件绘制矩形,点击右侧按钮计算最小外切正方形",
+        "msg_drawLayer": "请画出图层",
+        "msg_vectorClip": "矢量裁剪分析仅支持单面裁剪!",
+        "msg_clickToPopup": '点击地图,弹出弹窗',
+        "msg_clickLayerToPopup": '点击图层上的要素,查看属性',
+        "msg_addSuccess": "添加成功!",
+        "msg_addFailed": "添加失败!",
+
+        "set_style": "top: -23px;left: 86px;",
+        "style_width420px": 'width: 420px',
+        "style_width350px": 'width: 350px',
+        "style_heatMapWidth": "width: 280px",
+        "style_plotAnimation": "width: 120px; height: 35px; margin-bottom: 0; border-bottom-right-radius: 4px; border-top-right-radius: 4px;",
+
+        "text_baseInfo": "基本信息",
+        "text_layoutTemplates": "布局模板",
+        "text_title": "标题",
+        "text_subTitle": "副标题",
+        "text_copyRightInfo": "版权信息",
+        "text_author": "作者",
+        "text_littleMap": "附图",
+        "text_scale": "比例尺",
+        "text_scaleText": "比例尺文本",
+        "text_style": "样式",
+        "text_intervals": "段数",
+        "text_unit": "单位",
+        "text_exportOptions": "导出选项",
+        "text_format": "格式",
+        "text_centerTip": "用英文逗号分隔",
+        "option_meterUnit": "米",
+        "option_mileUnit": "英里",
+        "option_degreeUnit": "度",
+        "text_print": "打印"
+    }
+};

+ 187 - 0
nginx.conf

@@ -0,0 +1,187 @@
+
+#user  nobody;
+worker_processes  1;
+
+#error_log  logs/error.log;
+#error_log  logs/error.log  notice;
+#error_log  logs/error.log  info;
+
+#pid        logs/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    include       mime.types;
+    default_type  application/octet-stream;
+
+    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+    #                  '$status $body_bytes_sent "$http_referer" '
+    #                  '"$http_user_agent" "$http_x_forwarded_for"';
+
+    #access_log  logs/access.log  main;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    #keepalive_timeout  0;
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+    server {
+        listen       8080 ssl;
+        server_name  hmedi02.net;
+        ssl_certificate      C://env//nginx-1.16.1//keys//3629753_hmedi02.net.pem;  # 这个是证书的crt文件所在目录
+        ssl_certificate_key  C://env//nginx-1.16.1//keys//3629753_hmedi02.net.key;  # 这个是证书key文件所在目录
+
+        ssl_session_cache    shared:SSL:1m;
+        ssl_session_timeout  5m;
+
+        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
+        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+        ssl_prefer_server_ciphers  on;
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+        location / {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass         http://localhost:8081;
+			client_max_body_size   20m;
+        }
+
+        location /ui/ {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass http://localhost:8989;
+        }
+
+        location /nutzwk/ {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass         http://localhost:18081;
+			client_max_body_size   20m;
+        }
+
+        location /qiangxian/ {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass         http://localhost:18181;
+			client_max_body_size   20m;
+        }
+
+
+        location /qxdaping/ {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass         http://localhost:10890;
+			client_max_body_size   20m;
+        }
+
+        location /iserver/ {
+			proxy_set_header   X-Real-IP            $remote_addr;
+			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
+			proxy_set_header   Host                   $http_host;
+			proxy_set_header   X-NginX-Proxy    true;
+			proxy_set_header   Connection "";
+			proxy_http_version 1.1;
+			proxy_pass        http://192.168.3.228:8090/iserver/;
+			client_max_body_size   20m;
+        }
+
+        #error_page  404              /404.html;
+
+        # redirect server error pages to the static page /50x.html
+        #
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   html;
+        }
+
+        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+        #
+        #location ~ \.php$ {
+        #    proxy_pass   http://127.0.0.1;
+        #}
+
+        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+        #
+        #location ~ \.php$ {
+        #    root           html;
+        #    fastcgi_pass   127.0.0.1:9000;
+        #    fastcgi_index  index.php;
+        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
+        #    include        fastcgi_params;
+        #}
+
+        # deny access to .htaccess files, if Apache's document root
+        # concurs with nginx's one
+        #
+        #location ~ /\.ht {
+        #    deny  all;
+        #}
+    }
+
+
+    # another virtual host using mix of IP-, name-, and port-based configuration
+    #
+    #server {
+    #    listen       8000;
+    #    listen       somename:8080;
+    #    server_name  somename  alias  another.alias;
+
+    #    location /ui-master/ {
+    #        root   html/ui-master;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+
+    # HTTPS server
+    #
+    #server {
+    #    listen       443 ssl;
+    #    server_name  localhost;
+
+    #    ssl_certificate      cert.pem;
+    #    ssl_certificate_key  cert.key;
+
+    #    ssl_session_cache    shared:SSL:1m;
+    #    ssl_session_timeout  5m;
+
+    #    ssl_ciphers  HIGH:!aNULL:!MD5;
+    #    ssl_prefer_server_ciphers  on;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+}

+ 230 - 0
root.html

@@ -0,0 +1,230 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="UTF-8" name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
+    <title>松北区1.3事件应急抢险工程现场信息采集系统</title>
+    <script type="text/javascript" src="js/jquery.min.js"></script>
+    <script type="text/javascript" src="js/echarts.min.js"></script>
+    <script type="text/javascript" src="js/visual.js"></script>
+    <script type="text/javascript" src="js/times.js"></script>
+    <script type="text/javascript" src="js/scroll_ul.js"></script>
+    <script type="text/javascript" include="bootstrap" src="js/include-web.js"></script>
+    <script type="text/javascript" exclude="iclient-classic" src="dist/classic/include-classic.js"></script>
+    <link rel="stylesheet" href="css/common.css">
+
+<body>
+    <!--主体指标-->
+    <div class="mainbox">
+        <ul class="clearfix">
+            <li>
+                <div class="boxall" style="height:260px;">
+                    <div class="alltitle">防控人数</div>
+                    <div class="navboxall" id="echart5"></div>
+                </div>
+                <div class="boxall" style="height:230px;">
+                    <div class="alltitle">异常体温人数</div>
+                    <div class="navboxall" id="echart1"></div>
+                </div>
+                <div class="boxall" style="height:380px;">
+                    <div class="alltitle">施工进度统计</div>
+                    <div class="navboxall">
+                        <div class="wraptit">
+                            <span>&nbsp;</span><span>一标段</span><span>二标段</span><span>合计</span>
+                        </div>
+                        <div class="wrap">
+                            <ul>
+                                <li>
+                                    <p><span>作业人数</span><span id="td1"></span><span id="td2"></span><span
+                                            id="td3"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>作业车数</span><span id="td4"></span><span id="td5"></span><span
+                                            id="td6"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>运冰车次</span><span id="td7"></span><span id="td8"></span><span
+                                            id="td9"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>吸污车次</span><span id="td10"></span><span id="td11"></span><span
+                                            id="td12"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>完成量</span><span id="td25"></span><span id="td26"></span><span
+                                            id="td27"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>异常天数</span><span id="td13"></span><span id="td14"></span><span
+                                            id="td15"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>天气原因天数</span><span id="td16"></span><span id="td17"></span><span
+                                            id="td18"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>人为阻挠施工天数</span><span id="td19"></span><span id="td20"></span><span
+                                            id="td21"></span></p>
+                                </li>
+                                <li>
+                                    <p><span>疫情原因天数</span><span id="td22"></span><span id="td23"></span><span
+                                            id="td24"></span></p>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
+                </div>
+            </li>
+            <li>
+                <div class="boxall" style="height:100px">
+                    <div class="norm" style="height: 100%">
+                        <h1>松北区1.3事件应急抢险工程现场信息采集系统</h1>
+                        <div class="numtxt"><span id="showTime"></span></div>
+                    </div>
+                </div>
+                <div class="boxmap" style="height:500px;width:1150px;margin:0px auto;">
+                    <div class="navboxall" id="echart4">
+                        <div id="map"  style="height:500px;width:1150px;margin:0px auto;"></div>
+                    </div>
+                    <div class="boxall" style="height:10px"></div>
+                    <div class="boxsub" style="height:260px;">
+                        <div class="navboxall" id="echart3"></div>
+                    </div>
+                </div>
+            </li>
+            <li>
+                <div class="boxall" style="height:180px">
+                    <div class="alltitle">施工进度日期选择</div>
+                    <div class="navboxall">
+                        开始日期:<input type="date" id="datestart" style="width:240px" class="inputx"
+                            onchange="javascript:searchjindu();" /></br>
+                        结束日期:<input type="date" id="dateend" style="width:240px" class="inputx"
+                            onchange="javascript:searchjindu();" /></br>
+                        查询标段:<select id="biaoduan" style="width:240px" class="inputx"
+                            onchange="javascript:searchjindu();">
+                            <option value="合计" select>合计</option>
+                            <option value="一标段">一标段</option>
+                            <option value="二标段">二标段</option>
+                        </select></br>
+                    </div>
+                </div>
+                <div class="boxall" style="height:160px;">
+                    <div class="alltitle">防疫日期选择</div>
+                    <div class="navboxall">
+                        防疫日期:<input type="date" id="datefy" style="width:240px" class="inputx"
+                            onchange="javascript:searchfangyi();" /></br>
+                        查询标段:<select id="biaoduanfy" style="width:240px" class="inputx"
+                            onchange="javascript:searchfangyi();">
+                            <option value="合计" select>合计</option>
+                            <option value="一标段">一标段</option>
+                            <option value="二标段">二标段</option>
+                        </select></br>
+                    </div>
+                </div>
+                <div class="boxall" style="height:620px;margin-bottom:0px;padding-bottom:0px">
+                    <div class="alltitle">信息展示</div>
+                    <div class="wraptit">
+                        <span style="width:100px">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="width:235px">&nbsp;&nbsp;说明</span>
+                    </div>
+                    <div class="navboxall">
+                        <table class="wrap" width="100%" border="0" cellspacing="0" cellpadding="0" style="font-size: 14px;color: rgba(255, 255, 255, .6);text-align: center;">
+                            <tbody>
+                            <tr>
+                                <td scope="col" style="width:100px">上报日期</td>
+                                <td scope="col" id="sbrq" style="width:220px"></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">防控人数</td>
+                                <td scope="col" id="fkrs" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">异常体温</td>
+                                <td scope="col" id="yctw" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">作业人数</td>
+                                <td scope="col" id="zyrs" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">作业车数</td>
+                                <td scope="col" id="zycs" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">运冰车次</td>
+                                <td scope="col" id="ybcc" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">吸污车次</td>
+                                <td scope="col" id="xwcc" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">完成量</td>
+                                <td scope="col" id="wcl" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">补充说明</td>
+                                <td scope="col" id="bcsm" style="width:220px);text-align: left"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">现场照片</td>
+                                <td scope="col" id="xczp" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">是否异常</td>
+                                <td scope="col" id="sfyc" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">异常情况</td>
+                                <td scope="col" id="ycqk" style="width:220px"></></td>
+                            </tr>
+                            <tr>
+                                <td scope="col" style="width:100px">异常现场照片</td>
+                                <td scope="col" id="yczp" style="width:220px"></></td>
+                            </tr>
+                            
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </li>
+        </ul>
+    </div>
+
+    <div class="modal fade" id="myModal" tabindex="-1" style="z-index:9999" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
+                        &times;
+                    </button>
+                    <h4 class="modal-title" id="myModalLabel">
+                        现场照片
+                    </h4>
+                </div>
+                <div class="modal-body" id="imagediv">
+                </div>
+            </div><!-- /.modal-content -->
+        </div><!-- /.modal -->
+    </div>
+    <div class="modal fade" id="myModal2" tabindex="-1" style="z-index:9999" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
+                        &times;
+                    </button>
+                    <h4 class="modal-title" id="myModalLabel2">
+                        异常情况现场照片
+                    </h4>
+                </div>
+                <div class="modal-body" id="imagediv">
+                </div>
+            </div><!-- /.modal-content -->
+        </div><!-- /.modal -->
+    </div>
+    <script>
+
+    </script>
+</body>
+
+</html>

+ 8 - 0
web.config

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <system.webServer>
+        <staticContent>
+            <mimeMap fileExtension=".kml" mimeType="text/plain" />
+        </staticContent>
+    </system.webServer>
+</configuration>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است