<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <script>
      window.isDev = `false` === "true";
      var pathParts = window.location.pathname
        .split("/")
        .filter(function (part) {
          return part;
        });
      var context = pathParts && pathParts.length ? pathParts[0] : "/";
      if (context !== "/" && context !== "webapps") {
        context = "/" + context;
      }
      let base = document.createElement("base");
      base.href = window.isDev ? "/" : context + "/webapps/";
      document.head.insertBefore(base, document.head.firstChild);
    </script>
    <meta charset="UTF-8" />
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
    />
    <meta name="keywords"
             content="易智瑞，GeoScene Online，云GIS，公有云，云端GIS，GIS云，在线GIS，GIS在线，GeoScene平台，地图服务，GIS软件，GIS系统，地理信息系统">    
    <meta name="description" content="GeoScene Online - 便>捷、易用的云GIS平台" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
    />
    <title>GeoScene Online</title>
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
    <script>
      window.appsConfig = {
        allowedApps: [
          "Dashboards",
          "Deep Learning Studio",
          "Experience Builder",
          "Excalibur",
          "Insights",
          "Instant Apps",
          "Knowledge Studio",
          "Map Viewer",
          "Map Viewer Classic",
          "Ortho Maker",
          "Sites",
          "StoryMaps",
          "Scene Viewer",
          // 'Urban',
          "Vector Tile Style Editor",
          "Web Appbuilder",
          "Web Editor",
        ],
      };
      window.onlineConfig = {
        enabled: true,
        home: {
          url: `https://www.geosceneonline.cn/portal/`,
        },
        login: {
          registerUrl:
            "https://www.geosceneonline.cn/geoscene/webapps/?href=https%3A%2F%2Fwww.geosceneonline.cn%2Fportal%252F%2523%252Fregister",
        },
        help: {
          url: "https://www.geosceneonline.cn/help/#/",
        },
        navMenuItems: [
          {
            text: "账户中心",
            icon: "iconnotebook",
            url:
              "https://www.geosceneonline.cn/geoscene/webapps/?href=https%3A%2F%2Fwww.geosceneonline.cn%2Fportal%252F%2523%252Faccountcenter",
            sort: 30,
          },
        ],
      };
    </script>
    <link rel="stylesheet" href="./css/vendors.css" />
    <link rel="stylesheet" href="./css/antdesigns.css" />
    <link rel="stylesheet" href="./css/umi.css" />
    <script>
      window.routerBase = "/";
    </script>
    <script>
      window.publicPath = window.resourceBaseUrl || "./";
    </script>
    <script>
      //! umi version: 3.2.28
    </script>
  </head>
  <body>
    <noscript>GeoScene</noscript>
    <script>
      var pathParts = window.location.pathname
        .split("/")
        .filter(function (part) {
          return part;
        });
      var context = pathParts && pathParts.length ? pathParts[0] : "/";
      if (context !== "/" && context !== "webapps") {
        context = "/" + context;
      }
      window.routerBase = window.publicPath = window.isDev
        ? "/"
        : context + "/webapps/";
      let icon = document.querySelector(`[rel='icon']`);
      icon && (icon.href = window.routerBase + "favicon.ico");
    </script>
    <script>
      (function () {
        function getBroswerAndVersion() {
          var os = navigator.platform;
          var userAgent = navigator.userAgent;
          var info = "";
          var tempArray = "";
          var isOpera = userAgent.indexOf("Opera") > -1;
          var isIE =
            userAgent.indexOf("compatible") > -1 &&
            userAgent.indexOf("MSIE") > -1 &&
            !isOpera;
          var isEdge = userAgent.toLowerCase().indexOf("edge") > -1 && !isIE;
          var isIE11 =
            userAgent.toLowerCase().indexOf("trident") > -1 &&
            userAgent.indexOf("rv") > -1;

          if (/[Ff]irefox(\/\d+\.\d+)/.test(userAgent)) {
            tempArray = /([Ff]irefox)\/(\d+\.\d+)/.exec(userAgent);
            info += tempArray[1] + "_" + tempArray[2];
          } else if (isIE) {
            var version = "";
            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
            reIE.test(userAgent);
            var fIEVersion = parseFloat(RegExp["$1"]);
            if (fIEVersion == 7) {
              version = "IE_7";
            } else if (fIEVersion == 8) {
              version = "IE_8";
            } else if (fIEVersion == 9) {
              version = "IE_9";
            } else if (fIEVersion == 10) {
              version = "IE_10";
            } else {
              version = "0";
            }

            info += version;
          } else if (isEdge) {
            info += "Edge";
          } else if (isIE11) {
            info += "IE_11";
          } else if (/[Cc]hrome\/\d+/.test(userAgent)) {
            tempArray = /([Cc]hrome)\/(\d+)/.exec(userAgent);
            info += tempArray[1] + "_" + tempArray[2];
          } else if (
            /[Vv]ersion\/\d+\.\d+\.\d+(\.\d)* *[Ss]afari/.test(userAgent)
          ) {
            tempArray = /[Vv]ersion\/(\d+\.\d+\.\d+)(\.\d)* *([Ss]afari)/.exec(
              userAgent
            );
            info += tempArray[3] + "_" + tempArray[1];
          } else if (/[Oo]pera.+[Vv]ersion\/\d+\.\d+/.test(userAgent)) {
            tempArray = /([Oo]pera).+[Vv]ersion\/(\d+)\.\d+/.exec(userAgent);
            info += tempArray[1] + "_" + tempArray[2];
          } else {
            info += "unknown";
          }
          return info;
        }

        function showTip(browser) {
          if (!localStorage.getItem("ignoreVersionTip"))
            if (
              window.confirm(
                "当前【" +
                  browser +
                  "】浏览器版本过低，为了更友好的体验，请升级为现代浏览器。忽略提示请点击确定"
              )
            ) {
              localStorage.setItem("ignoreVersionTip", true);
            }
        }

        var versionInfo = getBroswerAndVersion().split("_");
        if (versionInfo) {
          var browser = versionInfo[0];
          var version = versionInfo[1];
          window.browserCheck = browser;
          switch (browser.toLowerCase()) {
            case "ie":
              if (version < 11) {
                showTip(browser);
              }
              break;
            case "firefox":
              if (version < 78) {
                showTip(browser);
              }
              break;
            case "chrome":
              if (version < 80) {
                showTip(browser);
              }
              break;
            case "opera":
              if (version < 67) {
                showTip(browser);
              }
              break;
            case "safari":
              if (version < 13.1) {
                showTip(browser);
              }
              break;
            default:
              break;
          }
        }
      })();
    </script>
    <div id="root">
      <style>
        html,
        body,
        #root {
          height: 100%;
          margin: 0;
          padding: 0;
        }
        #root {
          background-repeat: no-repeat;
          background-size: 100% auto;
        }
        .page-loading-warp {
          display: flex;
          align-items: center;
          justify-content: center;
          padding: 98px;
        }
        .ant-spin {
          position: absolute;
          display: none;
          -webkit-box-sizing: border-box;
          box-sizing: border-box;
          margin: 0;
          padding: 0;
          color: rgba(0, 0, 0, 0.65);
          color: #1890ff;
          font-size: 14px;
          font-variant: tabular-nums;
          line-height: 1.5;
          text-align: center;
          vertical-align: middle;
          list-style: none;
          opacity: 0;
          -webkit-transition: -webkit-transform 0.3s
            cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: -webkit-transform 0.3s
            cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),
            -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
          -webkit-font-feature-settings: "tnum";
          font-feature-settings: "tnum";
        }

        .ant-spin-spinning {
          position: static;
          display: inline-block;
          opacity: 1;
        }

        .ant-spin-dot {
          position: relative;
          display: inline-block;
          width: 20px;
          height: 20px;
          font-size: 20px;
        }

        .ant-spin-dot-item {
          position: absolute;
          display: block;
          width: 9px;
          height: 9px;
          background-color: #1890ff;
          border-radius: 100%;
          -webkit-transform: scale(0.75);
          -ms-transform: scale(0.75);
          transform: scale(0.75);
          -webkit-transform-origin: 50% 50%;
          -ms-transform-origin: 50% 50%;
          transform-origin: 50% 50%;
          opacity: 0.3;
          -webkit-animation: antspinmove 1s infinite linear alternate;
          animation: antSpinMove 1s infinite linear alternate;
        }

        .ant-spin-dot-item:nth-child(1) {
          top: 0;
          left: 0;
        }

        .ant-spin-dot-item:nth-child(2) {
          top: 0;
          right: 0;
          -webkit-animation-delay: 0.4s;
          animation-delay: 0.4s;
        }

        .ant-spin-dot-item:nth-child(3) {
          right: 0;
          bottom: 0;
          -webkit-animation-delay: 0.8s;
          animation-delay: 0.8s;
        }

        .ant-spin-dot-item:nth-child(4) {
          bottom: 0;
          left: 0;
          -webkit-animation-delay: 1.2s;
          animation-delay: 1.2s;
        }

        .ant-spin-dot-spin {
          -webkit-transform: rotate(45deg);
          -ms-transform: rotate(45deg);
          transform: rotate(45deg);
          -webkit-animation: antrotate 1.2s infinite linear;
          animation: antRotate 1.2s infinite linear;
        }

        .ant-spin-lg .ant-spin-dot {
          width: 32px;
          height: 32px;
          font-size: 32px;
        }

        .ant-spin-lg .ant-spin-dot i {
          width: 14px;
          height: 14px;
        }

        @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
          .ant-spin-blur {
            background: #fff;
            opacity: 0.5;
          }
        }

        @-webkit-keyframes antSpinMove {
          to {
            opacity: 1;
          }
        }

        @keyframes antSpinMove {
          to {
            opacity: 1;
          }
        }

        @-webkit-keyframes antRotate {
          to {
            -webkit-transform: rotate(405deg);
            transform: rotate(405deg);
          }
        }

        @keyframes antRotate {
          to {
            -webkit-transform: rotate(405deg);
            transform: rotate(405deg);
          }
        }
      </style>
      <div
        style="
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: center;
          height: 100%;
          min-height: 420px;
        "
      >
        <div class="page-loading-warp">
          <div class="ant-spin ant-spin-lg ant-spin-spinning">
            <span class="ant-spin-dot ant-spin-dot-spin">
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
            </span>
          </div>
        </div>
      </div>
    </div>
    <iframe
      style="display: none"
      name="geoscene_core_jsonp_iframe"
      sandbox="allow-scripts"
      srcdoc="<script>
      function windowMessageHandler(event) {
        if (event.data !== 'callback_init') {
          return;
        }
        window.removeEventListener('message', windowMessageHandler);
        var port = event.ports[0];
        port.postMessage('ready');

        port.addEventListener('message', function (event) {
          var data = event.data;

          var callbackName = data.callbackName;
          window.dojo_request_script_callbacks = {};
          window.dojo_request_script_callbacks[callbackName]= (value) => {
              if (value) {
                port.postMessage({
                  callbackName,
                  value,
                });
                var node = document.getElementById(callbackName);
                if (node) {
                  node.onerror = null;
                  node.parentNode.removeChild(node);
                }
              }
            }
          var scrpit = document.createElement('script');
          scrpit.src = data.url;
          scrpit.id = callbackName;
          scrpit.type = 'text/javascript';
          scrpit.async = !0;
          scrpit.charset = 'utf-8';
          scrpit.onerror = function (evt) {
            port.postMessage({
              callbackName,
              value: 'err',
            });
            scrpit.onerror = null;
            scrpit.parentNode.removeChild(scrpit);
          };
          document.getElementsByTagName('head')[0].appendChild(scrpit);
        });
        port.start();
      }
      window.addEventListener('message', windowMessageHandler);
    </script>"
    ></iframe>

    <script>
      window.addEventListener("message", (e) => {
        if (e.data === "registerSuccess") {
          window.location.href = window.routerBase + "login";
        }
      });
    </script>

    <script src="./js/vendors.js"></script>
    <script src="./js/antdesigns.js"></script>
    <script src="./js/echarts.js"></script>
    <script src="./js/umi.js"></script>
  </body>
</html>
