Table of Contents

使用 Mega Landmark 服务

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

开始之前

启用 Mega Landmark

首先使用 Landmark 作为 apiType 创建 MegaTrackerConfigs

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

最终用 xr-frame 场景中挂载的 EasyARMegaComponentcreateSession(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 匹配定位库

使用 LandmarkfilterBySpotId(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 数据匹配定位库

使用 LandmarkfilterByLocation() 方法通过使用当前的 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}`)
    }
}