💈

ARDK Wayspotの場所名と画像写真を取得する方法

2023/06/11に公開

ARDKでWasySpotの場所名と画像を取得する方法

Wayspotなどの概要は前回の記事に記載しました。
https://zenn.dev/katopan/articles/3a3f5fd7eac9fb

前回の記事と同様にICoverageClientを使用します。
ICoverageClientを使用してRequestCoverageAreasメソッドを使用すると、コールバックとしてWayspotの情報を取得できます。

private ICoverageClient _coverageClient;
private RuntimeEnvironment _runtimeEnvironment = RuntimeEnvironment.Default;
private ILocationService _locationService; // 現在地を取得するために必要
private int _queryRadius = 2000; // WaySpotを探索する半径(m)

 private void Start()
  ¥{
     _locationService = LocationServiceFactory.Create();
   _coverageClient = CoverageClientFactory.Create(_runtimeEnvironment);
   _coverageClient.RequestCoverageAreas(_locationService.LastData, _queryRadius, GetAreasResult);
   }

ここで得られた結果から、Wayspotにそれぞれ割り振られた識別子リストを取得します。

private void GetAreaResult(CoverageAreasResult areasResult)
   {
       foreach (var area in areasResult.Areas)
       {
   // wayspotに割り振られた識別子リスト
           var targetIds = area.LocalizationTargetIdentifiers;
       }

この識別子リストを引数にICoverageClientのReqestLocalizationTargetAsyncを呼び出します。

var targetIds = area.LocalizationTargetIdentifiers;
_coverageClient.RequestLocalizationTargetsAsync(targetIds).ContinueWith(result => {...});

これによりLocalizationTargetsResultを取得できました。識別子に対応したARDKのサーバーに保存されたWaySpotのローカライズされたデータが辞書型として格納されています。

https://lightship.dev/ja/docs/ardk/api-documentation/class_Niantic_ARDK_VPSCoverage_LocalizationTargetsResult.html#details-class-niantic-1-1-a-r-d-k-1-1-v-p-s-coverage-1-1-localization-targets-result

あとは先ほど取得した識別子からひとつひとつLocalizationTargetを取得するだけです。

foreach (string targetId in targetIds)
        {
            LocalizationTarget target = targetsResult.ActivationTargets[targetId];
            string title = target.Name; // Wayspotの場所名 ex)〇〇公園
        }

また、Wayspotの写真もLocalizationTargetから取得することができます。

 private string GetAreaTitle(
        LocalizationTargetsResult targetsResult,
        string[] targetIds)
    {
        foreach (string targetId in targetIds)
        {
            LocalizationTarget target = targetsResult.ActivationTargets[targetId];
            target.DownloadImage((int)500, (int)500, wayspotImage =>
            {
                 // wayspotImageをsetする等
            });
        }
    }

おそらくARDKでWayspotを使用する場合、ユーザーに対してどこにWayspotがあるのかをわかりやすく伝える必要があります。場所名や画像を一緒に伝えてあげたほうがユーザーも嬉しいかと思います。

最後まで読んでいただきありがとうございました。

Discussion