
# 视觉定位
#### 接口列表
表1**视觉定位接口列表** 
| 接口              | 描述                                                              | 参数名      | 参数类型                                                                                                                                                                                                                                                                                                                                                                                                                      | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 返回值         |
|:---|:---|:---|:---|:---|:---|
| init            | 初始化视觉定位模块。                                                      | config   | { access: string, secret: string, beforeLocateDelta: number, afterLocateDelta: number, autoRequest: boolean, workerPath: string, url: string } | 初始化配置参数。 - access：认证用的AK。  - secret：认证用的SK。  - beforeLocateDelta：首次定位成功前每隔几秒触发一次自动请求。  - afterLocateDelta：定位成功后每隔几秒触发一次自动请求。  - autoRequest：是否开启Vps自动请求。  - workerPath：Vps模块用到的worker文件路径。  - url：触发定位请求时使用的域名。   | void        |
| requestVps      | 触发定位请求。                                                         | -        | -                                                                                                                                                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | void        |
| updatePerFrame  | 更新相机位姿。                                                         | -        | -                                                                                                                                                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | void        |
| getCameraOffset | 获取相机偏移量。                                                        | -        | -                                                                                                                                                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | number\[3\] |
| getUTMPosition  | 获取UTM（UNIVERSAL TRANSVERSE MERCARTOR GRID SYSTEM，通用横墨卡托格网系统）坐标。 | -        | -                                                                                                                                                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | number\[3\] |
| destroyVps      | 销毁视觉定位实例。                                                       | -        | -                                                                                                                                                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | void        |
| mockVps         | 模拟定位。                                                           | position | Vector3                                                                                                                                                                                                                                                                                                                                                                                                                   | 位置，使用UTM坐标系。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | void        |
| mockVps         | 模拟定位。                                                           | rotation | Vector3                                                                                                                                                                                                                                                                                                                                                                                                                   | 朝向，以弧度制表示的欧拉角。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | void        |
   
#### 接口调用示例
- **初始化视觉定位模块**
  设置初始化参数：
  ```
  handleReady({ detail }) {
       this.scene = detail.value; //获取场景实例
  },
  handleARReady: function ({ }) {   
        // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
        // 本示例以ak和sk保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
        let config = {
          access: process.env.HUAWEICLOUD_SDK_AK,
          secret: process.env.HUAWEICLOUD_SDK_SK,
          beforeLocateDelta: 15,
          afterLocateDelta: 60,
          autoRequest: false,
          workerPath: 'SDK/workers/ImageProcessWorker.js',
          url:''
       }
       XRClient.init(config);//初始化视觉定位模块
       XRClient.dispatchEvent(GlobalBus.SCENE_INSTANCE, { info: this.scene });//派发scene实例事件
       XRClient.addEvent(GlobalBus.VPS_RESULT, this.onVpsResult,this);
  },
  ```
  设置相机的节点：需在xr-start组件的.wxml文件中，设置ar-system，并配置ready、ar-ready和tick回调函数。
  ```
  <xr-scene ar-system="modes:Plane;" bind:ready="handleReady" bind:ar-ready="handleARReady" bind:tick="handleTick">
    <xr-node node-id="cameraParent" position="0 0 0" rotation="0 0 0">
      <xr-camera id="camera" node-id="camera" clear-color="0.925 0.925 0.925 1" background="ar" far="2000" is-ar-camera></xr-camera>
    </xr-node>  
  </xr-scene>
  ```
  

- **触发定位请求**
  手动触发定位请求，获取当前位置。**在手动触发请求时，如果自动请求正在处理中，则此次手动请求将视为无效。**
  ```
  XRClient.requestVps();//返回定位结果。
  ```
  

- **更新相机位姿**
  在xr-start组件的handleTick里调用该函数，更新相机位姿。
  ```
  handleTick() {   
       XRClient.updatePerFrame(); //结合定位结果、AR算法更新相机的位置和姿态以及计时处理。
  },
  ```
  

- **获取相机偏移量**
  将相机和数字内容等量偏移至较小值，避免过大的坐标值引起一些渲染上的异常（例如模型闪烁，抖动等）。
  ```
  let arr = XRClient.getCameraOffset(); //返回记录的偏移量，使用该偏移量对数字内容进行偏移，得到正确的渲染结果。
  this.mod.setPosition(arr[0], arr[1], arr[2]);
  ```
  
- **获取UTM坐标**
  ```
  XRClient.getUTMPosition();//函数返回当前时刻的UTM坐标，数组长度为3。
  ```
  
- **销毁视觉定位实例**
  ```
  lifetimes:{  
       detached(){
         if(this.arInited){
           XRClient.destroyVps();//销毁Vps实例，在xr-start组件的detached方法中调用。
           XRClient.removeEvent(GlobalBus.VPS_RESULT, this.onVpsResult);
         }      
       }
  },
  ```
  
- **模拟定位**
  如果开发者在办公区进行调试，但办公区没有进行地图采集，无法定位成功时，可使用模拟定位接口。
  ```
  let posi = { x: 366676, y: 3457911, z: 43 }; 
  let rot = { x: 0, y: 1.57, z: 0 }; 
  XRClient.mockVps(posi, rot);
  ```
  ![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
  - 模拟定位情况下，使用输入的位置和旋转作为定位结果。
  
  - XRLightSDK会关闭自动定位，避免频繁跳变而影响调试。
    
 
