Table of Contents

使用 Mega Landmark 服务

这篇文章介绍了在微信小程序 Mega 插件接入后,如何使用 Mega Landmark 的定位服务。

开始之前

启用 Mega Landmark

首先使用 Landmark 作为 apiType 创建 MegaTrackerConfigs。

然后使用 MegaTrackerConfigs 和配置中的 licenseKey 创建 SessionConfigs。

最终用 xr-frame 场景中挂载的 EasyARMegaComponent 的 createSession(sessionConfigs) 方法创建 session。

const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
    access: apiKeyAccess,
    apiType: mega.MegaApiType.Landmark
};
const sessionConfigs: easyar.SessionConfigs = {
    megaTrackerConfigs: megaTrackerConfigs,
    licenseKey: settings.EasyARLicenseKey
};
session = megaComponent.createSession(sessionConfigs);

如何使用 LandmarkFilter

当使用 Landmark 创建时,MegaTracker 会自动内部实例化 MegaLandmarkFilter。

它的功能是 MegaTracker 在使用 Landmark 服务时通过 SpotId 或 GNSS 数据筛选当前最合适的 Mega 定位库。

筛选接口只能在 start(options) 成功后调用。

当 MegaTracker 使用 Landmark 服务而没有筛选成功时,定位状态始终为 MissingSpotVersionId

  • 使用提供的 SpotID 匹配定位库:

使用 Landmark 的 filterBySpotId(spotId) 方法通过 SpotID 匹配定位库:

async landmarkFilter() {
    const res = await session.megaTracker.landmarkFilter.filterBySpotId(settings.LandmarkSpotId);
    if (res.status != mega.MegaLandmarkFilterStatus.Found) {
        console.error(`LandmarkFilter Failed, status: ${mega.MegaLandmarkFilterStatus[res.status]}, exceptionInfo : ${res.exceptionInfo}`)
    }
}
  • 使用当前的 GNSS 数据匹配定位库:

使用 Landmark 的 filterByLocation() 方法通过使用当前的 GNSS 数据 匹配定位库:

async landmarkFilter() {
    const res = await session.megaTracker.landmarkFilter.filterByLocation();
    if (res.status != mega.MegaLandmarkFilterStatus.Found) {
        console.error(`LandmarkFilter Failed, status: ${mega.MegaLandmarkFilterStatus[res.status]}, exceptionInfo : ${res.exceptionInfo}`)
    }
}