SDK

SDKESModule 的方式提供功能接口,方便开发者基于其创建不同的 BIM+GIS 应用。

1. 基础文件引入

基础文件包含基础 css 样式和组件库 js 文件, 可直接放入到入口文件的 head 标签内。

<head>
  <link rel="stylesheet" href="https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.css" />
  <link rel="stylesheet" href="https://bim.gzmcg.com/cdn/ui-next@latest/theme.css" />
  <script src="https://bim.gzmcg.com/cdn/ui-next@latest/index.js"></script>
</head>

为兼容旧浏览器对 esmodule 的支持,推荐在引入 SDK 链接前再增加引入 pollyfill

<script async src="https://bim.gzmcg.com/cdn/sdk/s2@latest/es-module-shims@1.7.1.js"></script>

2. SDK引入

根据项目的实际情况和技术栈,我们可以选择以下任意一种方式进行引入SDK。

2.1 Vite 引入 SDK (推荐)

如果项目是基于 vite, 对于 js 文件, 可以这么配置 vite.config.ts 来引入 sdkjs 部分:

export default defineConfig({
  ...
  resolve: {
    alias: {
      ...
      'ubm': 'https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.es.js',
      ...
    },
  },
})

2.2 自定义Loader

如果项目不是基于vite,也可以直接基于 ES Module 的动态导入机制 来使用,示例如下:

先定义一个 Loader 函数:

const useUbmLoader = async () => {
  return new Promise((resolve, reject) => {
    import('https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.es.js').then(module => {
      resolve(module)
    }).catch(error => {
      // Handle failure
      console.log(error)
      reject(error)
    });
  })
}

然后在前端页面里面获取到 SDK 导出类, 并使用。

const ubm = await useUbmLoader()
const { Scene } = ubm
如果使用的 webpack, 提示不支持动态引入, 可加入一个忽略语句 * webpackIgnore: true */ 来解决:
export const useUbmLoader = async () => {
  return new Promise((resolve, reject) => {
    import(/* webpackIgnore: true */ 'https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.es.js').then(module => {
      resolve(module)
    }).catch(error => {
      // Handle failure
      console.log(error)
      reject(error)
    });
  })
}

2.3 CDN 方式引入

如果只是一个简单的单页应用,也不打算使用现代框架, 可采用 CDN 方式引入 SDK 文件:

<script type="module">
import * as ubm from 'https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.es.js'
</script>

最终的代码结构如下:

<!DOCTYPE html>
  <html>
    <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <link rel="stylesheet" href="https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.css" />
      <link rel="stylesheet" href="https://bim.gzmcg.com/cdn/ui-next@latest/theme.css" />
      <script type="module" src="https://bim.gzmcg.com/cdn/ui-next@latest/index.js"></script>
      <script async src="https://bim.gzmcg.com/cdn/sdk/s2@latest/es-module-shims@1.7.1.js"></script>
    </head>
    
    <body>
      <div id="app"></div>
      <script type="module">
        import * as ubm from 'https://bim.gzmcg.com/cdn/sdk/s2@latest/sdk.es.js'
      </script>
    </body>
    
  </html>