

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Location Service の使用を開始する
<a name="getting-started"></a>

このトピックでは、Amazon Location Service の使用を開始するための基本を説明します。一般的なユースケースに基づいて、適切な Amazon Location API をどのように選択すべきかを理解しつつ、最初のアプリケーションを作成するための手順を説明します。

1. **AWS アカウントとアクセスのセットアップ。**

   アカウントをまだお持ちでない場合は、画面の指示に従って作成してください。AWS 無料利用枠では、Amazon Location Service を 3 か月間の無料で利用できます。

   既にアカウントをお持ちの場合は、Amazon Location Service へのアクセス許可を付与する必要があります。

   [アカウントの設定](set-up.md) トピックに進みます。

1. **認証を理解してセットアップします。**

   Amazon Location を使用するには、Amazon Location を構成するリソースと API へのアクセス権をユーザーに付与する必要があります。リソースやアクション (API) へのアクセスを許可するための 3 つの選択肢は、API キー、Amazon Cognito、AWS Identity and Access Management (IAM) です。

   [Amazon Location Service を使用して認証する](access.md) トピックに進みます。

1. **最初のロケーションアプリケーションを作成します。**

   最初の「Hello World」アプリケーションを構築するには、「[最初の Amazon Location Maps and Places アプリケーションを作成する](first-app.md)」を参照してください。

1. **適切な API を選択します。**

   Amazon Location は、さまざまなビジネスユースケースに対応するために、Places、Routes、Maps、Geofences、Trackers にわたって豊富な API セットを提供しています。

   Amazon Location API の選択方法の詳細については、「[適切な API を選択する](choose-an-api.md)」を参照してください。

# アカウントの設定
<a name="set-up"></a>

このセクションでは、Amazon Location Service を使用するために必要な操作を説明します。利用するには、 AWS アカウント を持ち、Amazon Location へのアクセスが設定されている必要があります。

## を初めて使用する AWS
<a name="new-user"></a>

### にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

### 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 *AWS IAM アイデンティティセンター ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。

## AWS アカウントをすでに持っている
<a name="existing-user"></a>

**Amazon Location Service へのアクセスを許可する**

デフォルトでは、管理者権限のないユーザーには一切のアクセス許可がありません。Amazon Location にアクセスするには、特定のアクセス権限を含む IAM ポリシーをアタッチしてアクセス権限を付与する必要があります。リソースへのアクセスを許可する時は、最小特権の原則に従うようにしてください。

**注記**  
認証されていないユーザーに Amazon Location Service 機能 (ウェブベースのアプリケーションなど) へのアクセスを許可する方法については、「[Amazon Location Service を使用して認証する](access.md)」を参照してください。

以下のポリシー例は、すべての Amazon Location オペレーションにアクセスする権限をユーザーに付与します。その他の例については、「[Amazon Location Service のアイデンティティベースのポリシーの例](security-iam.md#security_iam_id-based-policy-examples)」を参照してください。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "geo:*",
        "geo-maps:*",
        "geo-places:*",
        "geo-routes:*"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

アクセスを提供するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
+ 以下のユーザーとグループ AWS IAM アイデンティティセンター:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

Amazon Location Service を使用するアプリケーションを作成する場合、認証されていないアクセスを一部のユーザーに許可する必要がある場合があります。これらのユースケースについては、「[Amazon Cognito を使用した非認証アクセスの有効化](authenticating-using-cognito.md)」を参照してください。

# Amazon Location Service コンソールを使用して認証する
<a name="set-up-auth"></a>

**注記**  
認証の詳細については、「[Amazon Location Service を使用して認証する](access.md)」を参照してください 。

Amazon Location Service を使用するには、Amazon Location を構成するリソースと API へのアクセス権をユーザーに付与する必要があります。デフォルトでは、Amazon Location API を利用するには認証が必要です。Amazon Cognito や API キーを使用して、匿名ユーザーの認証と認可を行うことができます。

[最初の Amazon Location Maps and Places アプリケーションを作成する](first-app.md) チュートリアルでは、アプリケーションは匿名利用できます。つまり、ユーザーはサインインする必要はありません。チュートリアルでは、サンプルアプリケーションで使用する API キーを作成します。

以下の手順に従って、最初の API キーを作成します。

1. [https://console.aws.amazon.com/location](https://console.aws.amazon.com/location)で、左側のメニューから **API キー**を選択します。

1. **[API キー]** ページで、**[API キーの作成]** を選択します。

1. **API キー**の作成ページで、次の情報を入力します。
   + **名前**— API キーの名前、例えば `MyHelloWorldApp`。
   + **説明** — API キーのオプションの説明。
   + **アクション** — この API キーを利用して、承認したアクションを指定します。少なくとも **geo-maps:Get\$1** と **geo-places:Search\$1** を選択する必要があります。
   + **有効期限** — API キーの有効期限を任意で追加することができます。詳細については、「[API キーのベストプラクティス](using-apikeys.md#api-keys-best-practices)」を参照してください。
   + **[クライアントの制限]** – オプションで、API キーを使用できる 1 つ以上のウェブドメインまたは 1 つ以上の Android または Apple アプリを追加します。例えば、API キーがウェブサイト `example.com` で実行されるアプリケーションを許可するものであれば、許可されるリファラーとして `*.example.com/` を置くことができます。
   + **タグ** — オプションで API キーにタグを追加します。
**重要**  
有効期限またはリファラーのいずれか、または両方を設定して、API キーの使用を保護することをお勧めします。

1. **API キーを作成**を選択して API キーを作成します。

1. API キーの詳細ページには、作成した API キーに関する情報が表示されます。

   **[API キーを表示]** を選択し、後から [最初の Amazon Location Maps and Places アプリケーションを作成する](first-app.md) チュートリアルで使用するため、キーの値をコピーします。キー値は次のフォーマットになります`v1.public.a1b2c3d4...`。

# 適切な API を選択する
<a name="choose-an-api"></a>

このトピックは、ロケーションベースのデータとサービスで解決可能な一般的なユースケースに基づいて Amazon Location Service API を選択するのに役立ちます。

マップ  
Maps では、さまざまなアプリケーションの動的マップおよび静的マップの両方のマップタイプを利用できます。詳細については、「[Amazon Location Service Maps](maps.md)」を参照してください。  
+ **動的マップ**: リアルタイムでカスタマイズできるインタラクティブなマップ。ユーザーはデータをパン、ズーム、オーバーレイできます。詳細については、「[動的マップ](dynamic-maps.md)」を参照してください。
+ **静的マップ**: インタラクティブ要素なしで特定の位置またはルートを表示するマップの静的画像。インタラクティブ性が限られているアプリケーションに適しています。詳細については、「[静的マップ](static-maps.md)」を参照してください。

ルート  
ルートは、ロケーション間の最適化されたパスを計算する機能を提供します。これらの機能は、物流計画、距離計算、ルート最適化を必要とするアプリケーションをサポートします。ユーザーは位置ポイントを道路にスナップして精度を向上させることもできます。詳細については、「[Amazon Location Service Routes](routes.md)」を参照してください。  
+ **CalculateIsolines**: 移動時間または距離に基づいて等値線を生成します。サービスエリアまたは到達可能性ゾーンの定義に役立ちます。詳細については、「[Calculate Isolines](calculate-isolines.md)」を参照してください。
+ **CalculateRouteMatrix**: 複数の出発地と目的地の間の距離と移動時間のマトリックスを提供し、物流と旅行計画をサポートします。詳細については、「[ルートマトリックスを計算する](calculate-route-matrix.md)」を参照してください。
+ **CalculateRoutes**: カスタマイズ可能なルーティング設定など、ポイントツーポイントまたはマルチストップナビゲーション用に最適化されたルートを計算します。詳細については、「[ルートを計算する](calculate-routes.md)」を参照してください。
+ **OptimizeWaypoints**: 最も効率的な移動ルートのウェイポイントの順序を最適化し、距離や時間を最小限に抑えます。詳細については、「[Optimize waypoints](actions-optimize-waypoints.md)」を参照してください。
+ **SnapToRoads**: 座標を最も近い経路に合わせ、既知の道路にポイントをスナップして GPS の精度を向上させます。詳細については、「[Snap to Road](snap-to-roads.md)」を参照してください。

場所  
Places により、アプリケーションで対象ポイント、住所、特定の場所に関する詳細を検索して見つけ、取得できます。これらの機能により、コンテキストが得られ、検索機能のユーザーエクスペリエンスが向上するため、ロケーションベースのサービスが強化されます。詳細については、「[Amazon Location Service Places](places.md)」を参照してください。  
+ **Geocode**: マッピングと空間分析のために住所から緯度経度への変換を必要とするアプリケーションに対応しながら、住所または場所の名前を地理座標 (経度、緯度) に変換します。詳細については、「[ジオコード](geocode.md)」を参照してください。
+ **Reverse Geocode**: 地理座標を最も近い住所または場所名に変換して、場所のコンテキストを提供します。詳細については、「[リバースジオコード](reverse-geocode.md)」を参照してください。
+ **Autocomplete**: ユーザー入力テキストの補完を提案し、検索入力の効率を向上させます。詳細については、「[Autocomplete](autocomplete.md)」を参照してください。
+ **GetPlace**: 住所、連絡先の詳細、営業時間などの属性を含む、指定された場所に関する詳細情報を取得します。詳細については、「[GetPlace](get-place.md)」を参照してください。
+ **SearchNearby**: 特定の地理的ポイントで指定した半径内の場所を検索します。「現在地付近」の検索に適しています。詳細については、「[周辺検索](search-nearby.md)」を参照してください。
+ **SearchText**: キーワードまたはフレーズに基づいて目的の場所または地点のテキストベースの検索を許可します。名前または説明で場所を検索するのに最適です。詳細については、「[テキスト検索](search-text.md)」を参照してください。
+ **Suggest**: ユーザーの入力として検索用語を提案し、検索の関連性とユーザーエクスペリエンスを向上させます。詳細については、「[Suggest](suggest.md)」を参照してください。

ジオフェンス  
ジオフェンシングを使用すると、アプリケーションは地理的境界を定義して、これらのリージョン内への出入りイベントをモニタリングできます。機能には、ジオフェンスの作成、更新、削除、および追跡対象デバイスがジオフェンスの境界を越えた場合のロケーションベースのアクションの通知またはトリガーの設定が含まれます。事前定義したエリア内の近接ベースの通知、セキュリティモニタリング、アセットトラッキングに最適です。詳細については、「[Amazon Location Service Geofences](geofences.md)」を参照してください。

トラッカー  
トラッキングにより、デバイスまたはアセットの場所を経時的にリアルタイムでモニタリングできます。追跡対象デバイスの追加、位置データの更新、位置データの履歴の取得などの機能があります。Trackers は、最新の位置データと移動パターンを提供して、フリートを管理し、人員をモニタリングして、貴重なアセットのセキュリティを確保するのに役立ちます。詳細については、「[Amazon Location Service トラッカー](trackers.md)」を参照してください。

# 最初の Amazon Location Maps and Places アプリケーションを作成する
<a name="first-app"></a>

このセクションでは、Maps and Places を使用して最初のアプリケーションを作成します。

**前提条件:**

[Amazon Location Service コンソールを使用して認証する](set-up-auth.md) のステップで API キーを既に作成済みの場合は、開始できます。

API キーをまだ作成していない場合は、アプリケーションの構築を続行する前に [Amazon Location Service コンソールを使用して認証する](set-up-auth.md) に従ってください。ご質問がある場合は、「[API キーを使用して認証する](using-apikeys.md)」および「[Amazon Location がサポートされているリージョン](location-regions.md)」を参照してください。

## Web
<a name="qs-web"></a>

MapLibre GL JS で Amazon Location Service マップアプリケーションを作成するためのステップバイステップのチュートリアルを次に示します。このガイドでは、マップの設定、スタイルオプションの追加、場所検索機能の有効化について説明します。

### 最初のページを設定する
<a name="qs-initial-page"></a>

このセクションでは、最初のページとフォルダ構造を設定します。

#### 必要なライブラリとスタイルシートを追加する
<a name="qs-initial-add-library"></a>

`index.html` ファイルを作成します。マップをレンダリングするには、MapLibre GL JS と MapLibre GL Geocoder が必要です。MapLibre と Geocoder のスタイルシートと JavaScript スクリプトを追加します。

以下のコードをコピーして `index.html` ファイルに貼り付けます。

```
<!DOCTYPE html>
<html lang="en">
<head>

    <title>Amazon Location Service - Getting Started with First Map App</title>
    <meta charset='utf-8'>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Interactive map application using Amazon Location Service">

    <!--Link to MapLibre CSS and JavaScript library for map rendering and visualization -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.css" />
    <script src="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.js"></script>
    
    <!--Link to MapLibre Geocoder CSS and JavaScript library for place search and geocoding -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.css" />
    <script src="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.js"></script>
    
    <!--Link to amazon-location JavaScript librarie -->
    <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-utilities-auth-helper@1"></script>
    <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-client@1.2"></script>
    
    <!-- Link to the first Amazon Location Map App's CSS and JavaScript -->
    <script src="utils.js"></script>
    <link rel="stylesheet" href="style.css"/>
   

</head>
<body>
    <main> 
        
    </main>
    <script> 
        // Step 1: Setup API Key and AWS Region 
        // Step 2.1 Add maps to application
        // Step 2.2 initialize the map
        // Step 3: Add places features to application
        // Step 3.1: Get GeoPlaces instance. It will be used for addion search box and map click functionality
        // Step 3.2: Add search box to the map
        // Step 3.3.: Setup map click functionality
        // Add functions
    </script>
</body>
</html>
```

#### マップコンテナを作成する
<a name="qs-create-map-container"></a>

 HTML ファイルの `<body>` 要素の下で、マップを保持する `<div>` 要素を HTML で作成します。この `<div>` を CSS でスタイル設定して、アプリケーションに必要なディメンションを設定できます。GitHub リポジトリから、CSS ファイル `style.css` をダウンロードする必要があります。これにより、ビジネスロジックに集中できます。

 `style.css` および `index.html` ファイルを同じフォルダに保存します。

 `style.css` ファイルを [GitHub](https://github.com/aws-geospatial/amazon-location-samples-js/blob/quick_start_sample_js/quick-start/style.css) からダウンロードします。

```
<main role="main" aria-label="Map Container">
    <div id="map"></div>
</main>
```

#### API キーと AWS リージョンの詳細を追加する
<a name="qs-create-add-key"></a>

で作成した API キー[API キーを使用して認証する](using-apikeys.md)を、キーが作成された AWS リージョンとともにこのファイルに追加します。

```
<!DOCTYPE html>
<html lang="en">
.....
.....
<body>
    <main role="main" aria-label="Map Container">
        <div id="map"></div>
    </main>
    <script>
        // Step 1: Setup API Key and AWS Region 
        const API_KEY = "Your_API_Key";
        const AWS_REGION = "Region_where_you_created_API_Key";
        // Step 2: Add maps to application
            // Step 2.1 initialize the map
            // Step 2.2 Add navigation controls to the map
        // Step 3: Add places feature to application        
            // Step 3.1: Get GeoPlaces instance. It will be used for addion search box and map click functionality
            // Step 3.2: Add search box to the map
            // Step 3.3.: Setup map click functionality
    </script>
</body>
</html>
```

### アプリケーションにマップを追加する
<a name="qs-add-map"></a>

このセクションでは、アプリケーションにマップ機能を追加します。開始するためには、ファイルがこのフォルダ構造内にある必要があります。

 まだダウンロードしていない場合は、[GitHub](https://github.com/aws-geospatial/amazon-location-samples-js/blob/quick_start_sample_js/quick-start/style.css) から `style.css` ファイルをダウンロードしてください。

```
|---FirstApp [Folder]
|-------------- index.html [File]
|-------------- style.css [File]
```

#### マップを初期化する関数を作成します。
<a name="qs-initialize-map-function"></a>

マップを設定するには、`initializeMap(...)` 行の後に次の関数 `//Add functions` を作成します。

最初の中心位置とズームレベルを選択します。この例では、マップの中心をカナダのバンクーバーに設定し、ズームレベルを 10 に設定します。簡単にズームできるようにするためナビゲーションコントロールを追加します。

```
/**
 * Initializes the map with the specified style and color scheme.
 */
function initializeMap(mapStyle = "Standard", colorScheme = "Dark") {
     const styleUrl = `https://maps.geo.${AWS_REGION}.amazonaws.com/v2/styles/${mapStyle}/descriptor?key=${API_KEY}&color-scheme=${colorScheme}`;
     const map = new maplibregl.Map({
         container: 'map',                 // The ID of the map container
         style: styleUrl,                  // The style URL for the map
         center: [-123.116226, 49.246292], // Starting center coordinates
         zoom: 10,                         // Initial zoom level
         validateStyle: false              // Disable style validation
     });
     return map;                           // Return the initialized map
}
```

#### マップを初期化する
<a name="qs-initialize-map"></a>

`initializeMap(...)` を呼び出してマップを初期化します。オプションで、`initializeMap` 関数の後に任意のスタイルとカラースキームを使用して初期化できます。他のスタイルオプションについては、「[AWS マップスタイルと機能](map-styles.md)」を参照してください。

```
// Step 1: Setup API Key and AWS Region 
const API_KEY = "Your_API_Key";
const AWS_REGION = "Region_where_you_created_API_Key";

// Step 2.1 Add maps to application
// Step 2.2 initialize the map
const map = initializeMap("Standard","Light");

// Step 3: Add places features to application
```

ブラウザで `index.html` を開いて実行中のマップを表示します。

#### ナビゲーションコントロールを追加する
<a name="qs-add-navigation"></a>

オプションで、ナビゲーションコントロール (ズームとローテーション) をマップに追加できます。これは、`initializeMap(...)` を呼び出した後に実行する必要があります。

```
// Step 2.1 initialize the map
const map = initializeMap("Standard","Light");

// Step 2.2 Add navigation controls to the map
map.addControl(new maplibregl.NavigationControl());

// Step 3: Add places features to application
```

#### マップコードを確認する
<a name="qs-add-final"></a>

お疲れ様でした。最初のアプリでマップを使用できるようになりました。ブラウザで `index.html` を開きます。`style.css` が `index.html` と同じフォルダにあることを確認してください。

最終的な HTML は以下のようになります。

```
<!DOCTYPE html>
<html lang="en">
<head>

   <title>Amazon Location Service - Getting Started with First Map App</title>
   <meta charset='utf-8'>
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <meta name="description" content="Interactive map application using Amazon Location Service">

   <!-- Link to MapLibre CSS and JavaScript library for map rendering and visualization -->
   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.css" />
   <script src="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.js"></script>
   
   <!-- Link to MapLibre Geocoder CSS and JavaScript library for place search and geocoding -->
   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.css" />
   <script src="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.js"></script>
   
   <!-- Link to amazon-location JavaScript library -->
   <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-utilities-auth-helper@1"></script>
   <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-client@1.2"></script>
   
   <!-- Link to the first Amazon Location Map App's CSS and JavaScript -->
   <script src="utils.js"></script>
   <link rel="stylesheet" href="style.css"/>
</head>

<body>
    <main role="main" aria-label="Map Container">
        <div id="map"></div>
    </main>
    <script>
        const API_KEY = "Your_API_Key";
        const AWS_REGION = "Region_where_you_created_API_Key";
        
        function initializeMap(mapStyle, colorScheme) {
            const styleUrl = `https://maps.geo.${AWS_REGION}.amazonaws.com/v2/styles/${mapStyle}/descriptor?key=${API_KEY}&color-scheme=${colorScheme}`;
        
            const map = new maplibregl.Map({
                container: 'map',                 // ID of the HTML element for the map
                style: styleUrl,                  // URL for the map style
                center: [-123.116226, 49.246292], // Initial map center [longitude, latitude]
                zoom: 10                          // Initial zoom level
            });
            map.addControl(new maplibregl.NavigationControl());    
            return map;
        }
        
        const map = initializeMap("Standard", "Light");
        
    </script>
</body>
</html>
```

### アプリケーションに場所を追加する
<a name="qs-add-places"></a>

このセクションでは、アプリケーションに場所機能を設定します。GitHub、[https://github.com/aws-geospatial/amazon-location-samples-js/blob/quick_start_sample_js/quick-start/utils.js](https://github.com/aws-geospatial/amazon-location-samples-js/blob/quick_start_sample_js/quick-start/utils.js) から JavaScript ファイルをダウンロードします。

開始するためには、ファイルがこのフォルダ構造内にある必要があります。

```
|---FirstApp [Folder]
|-------------- index.html [File]
|-------------- style.css [File]
|-------------- utils.js [File]
```

#### GeoPlaces を作成する関数を作成する
<a name="qs-create-geoplaces"></a>

検索機能を追加するには、`AuthHelper` と `AmazonLocationClient` を使用して `GeoPlaces` クラスを初期化します。`index.html` の `</script>` タグの前に次の `getGeoPlaces(map)` 関数を追加します。

```
/**
 * Gets a GeoPlaces instance for Places operations.
 */
function getGeoPlaces(map) {
    const authHelper = amazonLocationClient.withAPIKey(API_KEY, AWS_REGION);                      // Authenticate using the API key and AWS region
    const locationClient = new amazonLocationClient.GeoPlacesClient(authHelper.getClientConfig()); // Create a GeoPlaces client
    const geoPlaces = new GeoPlaces(locationClient, map);                                          // Create GeoPlaces instance
    return geoPlaces;                                                                              // Return the GeoPlaces instance
}
```

#### 検索ボックスをアプリケーションに追加する関数を作成する
<a name="qs-add-searchbox"></a>

`index.html` の `</script>` タグの前に次の `addSearchBox(map, geoPlaces)`、`renderPopup(feature)`、`createPopup(feature)` 関数を追加して、検索機能の設定を完了します。

```
/**
 * Adds search box to the map.
 */
function addSearchBox(map, geoPlaces) {
    const searchBox = new MaplibreGeocoder(geoPlaces, {
        maplibregl,
        showResultsWhileTyping: true,                    // Show results while typing
        debounceSearch: 300,                             // Debounce search requests
        limit: 30,                                       // Limit number of results
        popuprender: renderPopup,                        // Function to render popup
        reverseGeocode: true,                            // Enable reverse geocoding
        zoom: 14,                                        // Zoom level on result selection
        placeholder: "Search text or nearby (lat,long)"  // Placeholder text for search box.
    });
    
    // Add the search box to the map
    map.addControl(searchBox, 'top-left'); 

    // Event listener for when a search result is selected
    searchBox.on('result', async (event) => {
        const { id, result_type } = event.result;                     // Get result ID and type
        if (result_type === "Place") {                                // Check if the result is a place
            const placeResults = await geoPlaces.searchByPlaceId(id); // Fetch details for the selected place
            if (placeResults.features.length) {
                createPopup(placeResults.features[0]).addTo(map);     // Create and add popup for the place
            }
        }
    });
}

/**
 * Renders the popup content for a given feature.
 */
function renderPopup(feature) {
    return `
        <div class="popup-content">
            <span class="${feature.place_type.toLowerCase()} badge">${feature.place_type}</span><br>
            ${feature.place_name}
        </div>`;
}

/**
 * Creates a popup for a given feature and sets its position.
 */
function createPopup(feature) {
    return new maplibregl.Popup({ offset: 30 })      // Create a new popup
        .setLngLat(feature.geometry.coordinates)     // Set the popup position
        .setHTML(renderPopup(feature));              // Set the popup content
}
```

#### アプリケーションに検索ボックスを追加する
<a name="qs-add-searchbox-to-application"></a>

セクション 3.1 で定義されているように `getGeoPlaces(map)` を呼び出して `GeoPlaces` オブジェクトを作成してから、`addSearchBox(map, geoPlaces)` を呼び出して検索ボックスをアプリケーションに追加します。

```
// Step 2: Add maps to application
// Step 2.1 initialize the map
const map = initializeMap("Standard","Light");
// Step 2.2 Add navigation controls to the map
map.addControl(new maplibregl.NavigationControl()); 

// Step 3: Add places feature to application        
// Step 3.1: Get GeoPlaces instance. It will be used for adding search box and map click functionality
const geoPlaces = getGeoPlaces(map);
// Step 3.2: Add search box to the map
addSearchBox(map, geoPlaces);
```

場所の検索を使用できるようになりました。ブラウザで `index.html` を開いて動作を確認します。

#### マップをクリック時にポップアップを表示するための関数を追加する
<a name="qs-add-map-click-feature"></a>

マップをクリックしたときにポップアップを表示する関数 `addMapClick(map, geoPlaces)` を作成します。この関数を `</script>` タグの直前に追加します。

```
/**
 * Sets up reverse geocoding on map click events.
 */
function addMapClick(map, geoPlaces) {
    map.on('click', async ({ lngLat }) => {                     // Listen for click events on the map
        const response = await geoPlaces.reverseGeocode({ query: [lngLat.lng, lngLat.lat], limit: 1, click: true }); // Perform reverse geocoding

        if (response.features.length) {                         // If there are results
            const clickMarker = new maplibregl.Marker({ color: "orange" }); // Create a marker
            const feature = response.features[0];               // Get the clicked feature
            const clickedPopup = createPopup(feature);          // Create popup for the clicked feature
            clickMarker.setLngLat(feature.geometry.coordinates) // Set marker position
                .setPopup(clickedPopup)                         // Attach popup to marker
                .addTo(map);                                    // Add marker to the map

            clickedPopup.on('close', () => clickMarker.remove()).addTo(map); // Remove marker when popup is closed
        }
    });
}
```

#### マップクリック機能を追加する関数を呼び出す
<a name="qs-call-map-click-feature"></a>

マップクリックアクションを有効にするには、`addSearchBox(map, geoPlaces)` を含む行の後に `addMapClick(map, geoPlaces)` を呼び出します。

```
// Step 3: Add places feature to application        
// Step 3.1: Get GeoPlaces instance. It will be used for adding search box and map click functionality
const geoPlaces = getGeoPlaces(map);
// Step 3.2: Add search box to the map
addSearchBox(map, geoPlaces);
// Step 3.3: Setup map click functionality
addMapClick(map, geoPlaces);
```

#### Maps and Places アプリケーションを確認する
<a name="qs-review-places"></a>

お疲れ様でした。最初のアプリケーションが Maps and Places を使用することができるようになりました。ブラウザで `index.html` を開きます。`style.css` と `utils.js` が `index.html` と同じフォルダにあることを確認します。

最終的な HTML は以下のようになります。

```
<!DOCTYPE html>
<html lang="en">
<head>

   <title>Amazon Location Service - Getting Started with First Map App</title>
    <meta charset='utf-8'>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Interactive map application using Amazon Location Service">

    <!--Link to MapLibre CSS and JavaScript library for map rendering and visualization -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.css" />
    <script src="https://cdn.jsdelivr.net/npm/maplibre-gl@5.x/dist/maplibre-gl.js"></script>
    
    <!--Link to MapLibre Geocoder CSS and JavaScript library for place search and geocoding -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.css" />
    <script src="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1.7.0/dist/maplibre-gl-geocoder.js"></script>
    
    <!--Link to amazon-location JavaScript librarie -->
    <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-utilities-auth-helper@1"></script>
    <script src="https://cdn.jsdelivr.net/npm/@aws/amazon-location-client@1.2"></script>
    
    <!-- Link to the first Amazon Location Map App's CSS and JavaScript -->
    <script src="utils.js"></script>
    <link rel="stylesheet" href="style.css"/>
   

</head>
<body>
    <main role="main" aria-label="Map Container">
        <div id="map"></div>
    </main>
    <script>
        // Step 1: Setup API Key and AWS Region
        const API_KEY = "Your_API_Key";
        const AWS_REGION = "Region_where_you_created_API_Key";
        
        
        // Step 2: Add maps to application
        // Step 2.1 initialize the map
        const map = initializeMap("Standard","Light");
        // Step 2.2 Add navigation controls to the map
        map.addControl(new maplibregl.NavigationControl()); 

        // Step 3: Add places feature to application        
        // Step 3.1: Get GeoPlaces instance. It will be used for addion search box and map click functionality
        const geoPlaces =  getGeoPlaces(map);
        // Step 3.2: Add search box to the map
        addSearchBox(map, geoPlaces);
        // Step 3.3.: Setup map click functionality
        addMapClick(map, geoPlaces); 
                
 

        /**
         * Functions to add maps and places feature.
         */
         
         /**
         * Initializes the map with the specified style and color scheme.
         */ 
        function initializeMap(mapStyle = "Standard", colorScheme = "Dark") {
            const styleUrl = `https://maps.geo.${AWS_REGION}.amazonaws.com/v2/styles/${mapStyle}/descriptor?key=${API_KEY}&color-scheme=${colorScheme}`;
            const map = new maplibregl.Map({
                container: 'map',                   // The ID of the map container
                style: styleUrl,                    // The style URL for the map
                center: [-123.116226, 49.246292],   // Starting center coordinates
                zoom: 10,                           // Initial zoom level
                validateStyle: false                // Disable style validation
            });
            return map;                             // Return the initialized map
        }
        
        /**
         * Gets a GeoPlaces instance for Places operations.
         */
        function getGeoPlaces(map) {
            const authHelper =  amazonLocationClient.withAPIKey(API_KEY, AWS_REGION);                      // Authenticate using the API key and AWS region
            const locationClient = new amazonLocationClient.GeoPlacesClient(authHelper.getClientConfig()); // Create a GeoPlaces client
            const geoPlaces = new GeoPlaces(locationClient, map);                                          // Create GeoPlaces instance
                return geoPlaces;                                                                          // Return the GeoPlaces instance
        }
        
         /**
         * Adds search box to the map.
         */
        
        function addSearchBox(map, geoPlaces) {
            const searchBox = new MaplibreGeocoder(geoPlaces, {
                maplibregl,
                showResultsWhileTyping: true,                    // Show results while typing
                debounceSearch: 300,                             // Debounce search requests
                limit: 30,                                       // Limit number of results
                popuprender: renderPopup,                        // Function to render popup
                reverseGeocode: true,                            // Enable reverse geocoding
                zoom: 14,                                        // Zoom level on result selection
                placeholder: "Search text or nearby (lat,long)"  // Place holder text for search box.  
            });
            
            // Add the search box to the map
            map.addControl(searchBox, 'top-left'); 

            // Event listener for when a search result is selected
            searchBox.on('result', async (event) => {
                const { id, result_type } = event.result;                     // Get result ID and type
                if (result_type === "Place") {                                // Check if the result is a place
                    const placeResults = await geoPlaces.searchByPlaceId(id); // Fetch details for the selected place
                    if (placeResults.features.length) {
                        createPopup(placeResults.features[0]).addTo(map);     // Create and add popup for the place
                    }
                }
            });
        }

        /**
         * Renders the popup content for a given feature.
         */
        function renderPopup(feature) {
            return `
                <div class="popup-content">
                    <span class="${feature.place_type.toLowerCase()} badge">${feature.place_type}</span><br>
                    ${feature.place_name}
                </div>`;
        }

        /**
         * Creates a popup for a given feature and sets its position.
         */
        function createPopup(feature) {
            return new maplibregl.Popup({ offset: 30 })      // Create a new popup
                .setLngLat(feature.geometry.coordinates)     // Set the popup position
                .setHTML(renderPopup(feature));              // Set the popup content
        }
        
        /**
         * Sets up reverse geocoding on map click events.
         */
        function addMapClick(map, geoPlaces) {
            map.on('click', async ({ lngLat }) => {                     // Listen for click events on the map
                const response = await geoPlaces.reverseGeocode({ query: [lngLat.lng, lngLat.lat], limit: 1, click:true }); // Perform reverse geocoding

                if (response.features.length) {                         // If there are results
                    const clickMarker = new maplibregl.Marker({ color: "orange" }); // Create a marker
                    const feature = response.features[0];               // Get the clicked feature
                    const clickedPopup = createPopup(feature);          // Create popup for the clicked feature
                    clickMarker.setLngLat(feature.geometry.coordinates) // Set marker position
                        .setPopup(clickedPopup)                         // Attach popup to marker
                        .addTo(map);                                    // Add marker to the map

                    clickedPopup.on('close', () => clickMarker.remove()).addTo(map); // Remove marker when popup is closed
                }
            });
        }
        
    </script>
</body>
</html>
```

### 詳細を見る
<a name="qs-whats-next"></a>

クイックスタートチュートリアルを完了したので、Amazon Location Service を使用してアプリケーションを構築する方法を理解できるでしょう。Amazon Location をさらに活用するには、以下のリソースをご覧ください。
+ **クエリ提案の詳細** - `Suggestion` API が返す結果の詳細を取得するには、`ReverseGeocode` クラスを拡張するか、`GeoPlaces` と同様の手法を使用することを検討してください。
+ **ビジネスニーズに適した API を選択する** - 要件に最適な Amazon Location API を決定するには、「[適切な API を選択する](choose-an-api.md)」のリソースを確認してください。
+ **Amazon Location の「ハウツー」ガイドを確認する** - チュートリアルやその他のリソースについては、「[Amazon Location Service デベロッパーガイド](https://docs.aws.amazon.com/location/)」を参照してください。
+ **ドキュメントと製品情報** - 詳細なドキュメントについては、「[Amazon Location Service デベロッパーガイド](https://docs.aws.amazon.com/location/)」を参照してください。製品の詳細については、「[Amazon Location Service の製品](https://aws.amazon.com/location)」ページを参照してください。

# 最初の Geofences and Trackers アプリケーションを作成する
<a name="first-geofence-app"></a>

このセクションでは、Amazon Location Geofences and Trackers を使用する主な機能を示すアプリケーションを作成します。アプリケーションは、Lambda、 AWS IoT、Amazon Location 機能の組み合わせを使用してトラッカーとジオフェンスがどのように相互作用するかを示します。iOS または Android プラットフォームを選択して開始します。

アプリケーションの構築を開始する前に、「[Amazon Location Service コンソールを使用して認証する](set-up-auth.md)」の手順に従って適切なアクセス権を付与します。

**Topics**
+ [iOS アプリケーションを作成する](ios-geofence-app.md)
+ [Android アプリケーションの作成](android-geofence-app.md)

# iOS アプリケーションを作成する
<a name="ios-geofence-app"></a>

Amazon Location Service を使用して iOS アプリケーションを構築するには、次の手順に従います。

[GitHub](https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications) からプロジェクトファイルをクローンします。

## アプリケーション用の Amazon Location リソースを作成する
<a name="qs-ios-tracking-resources"></a>

 AWS アカウントの準備ができたら、Amazon Location Service リソースを生成できます。これらのリソースは、提供されたコードスニペットの実行に不可欠です。

**注記**  
 AWS アカウントをまだ作成していない場合は、[AWS アカウントを作成](https://portal.aws.amazon.com/billing/signup#/start/email)してください。

まず、Amazon Cognito アイデンティティプール ID を作成する必要があります。以下の手順に従ってください。

1.  AWS コンソールで、Amazon Cognito サービスに移動し、左側のメニューから **ID プール**を選択し、**ID プールの作成**を選択します。

1. **[ゲストアクセス]** がオンになっていることを確認し、**[次へ]** を押して続行します。

1. 次に、新しい IAM ロールを作成するか、既存の IAM ロールを使用します。

1. アイデンティティプール名を入力し、次の手順で作成するマップとトラッカーの Amazon Location `(geo)` リソースにアイデンティティプールがアクセスできることを確認します。

1. 

次に、 AWS Amazon Location コンソールでマップを作成してスタイル設定する必要があります。次の手順を使用します。

1. Amazon Location コンソールの [[マップ]](https://console.aws.amazon.com/location/maps/home) セクションに移動し、**[マップを作成]** を選択して使用可能なマップスタイルをプレビューします。

1. 新しいマップリソースに**名前**と**説明**を付けます。後からチュートリアルで使用するため、マップリソースに割り当てた名前を記録しておいてください。

1. マップスタイルを選択する際は、マップデータプロバイダーを考慮してください。詳細については、[AWS サービス利用規約](https://aws.amazon.com/service-terms)の第 82 項を参照してください。

1.  [Amazon Location の利用規約](https://aws.amazon.com/service-terms/#:~:text=82.%20Amazon%20Location%20Service)に同意し、**[マップを作成]** を選択します。マップを作成したら、任意の方向にズームイン、ズームアウト、またはパンしてマップを操作できます。

Amazon Location コンソールを使用してトラッカーを作成するには

1.  [Amazon Location Service コンソール](https://console.aws.amazon.com/location/)を開きます。

1.  左のナビゲーションペインから、[**トラッカー**] を選択します。

1.  **トラッカーを作成**を選択します。

1.  すべての必須フィールドに入力します。

1.  [**位置フィルター**] で、トラッカーリソースの使用目的に最も適したオプションを選択します。位置のフィルタリングを設定しない場合、デフォルト設定は TimeBased となります。詳細については、このガイドの「トラッカー」と「Amazon Location Service トラッカー API リファレンス」の「PositionFiltering」を参照してください。

1.  **[トラッカーを作成]** を選択して終了します。

## ジオフェンスコレクションを作成する
<a name="qs-ios-tracking-geofence"></a>

ジオフェンスコレクションを作成する際は、コンソール、API、または CLI のいずれかを使用できます。以下の手順で、各オプションについて説明します。

Amazon Location コンソールを使用してジオフェンスコレクションを作成する:

1.  Amazon Location Service コンソール (https://console.aws.amazon.com/location/) を開きます。

1.  左のナビゲーションペインから、[ジオフェンスコレクション] を選択します。

1.  [ジオフェンスコレクションの作成] を選択します。

1.  コレクションの名前と説明を入力します。

1.  [CloudWatch をターゲットとするEventBridge ルール] で、オプションのEventBridge ルールを作成して、ジオフェンスイベントへの対応を開始できます。これにより、Amazon Location は Amazon CloudWatch Logs にイベントをパブリッシュできるようになります。

1.  [ジオフェンスコレクションの作成] を選択します。

Amazon Location API を使用してジオフェンスコレクションを作成する:

Amazon Location Geofences API の CreateGeofenceCollection オペレーションを使用してください。以下の例では、API リクエストを使用して `GOECOLLECTION_NAME` というジオフェンスコレクションを作成します。

```
POST /geofencing/v0/collections
Content-type: application/json
    {
        "CollectionName": "GOECOLLECTION_NAME",
        "Description": "Geofence collection 1 for shopping center",
        "Tags": { 
            "Tag1" : "Value1"
                }
    }
```

 AWS CLI コマンドを使用してジオフェンスコレクションを作成します。

create-geofence-collection コマンドを使用します。以下の例では、 AWS CLI を使用して `GOECOLLECTION_NAME` というジオフェンスコレクションを作成します。

```
aws location \ create-geofence-collection \
    --collection-name "GOECOLLECTION_NAME" \
    --description "Shopping center geofence collection" \
    --tags Tag1=Value1                 
```

## トラッカーをジオフェンスコレクションにリンクする
<a name="qs-ios-tracking-link-geofence"></a>

トラッカーをジオフェンスコレクションにリンクするには、コンソール、API、または CLI のいずれかを使用できます。以下の手順で、各オプションについて説明します。

Amazon Location Service コンソールを使用してトラッカーリソースをジオフェンスコレクションにリンクする:

1. Amazon Location コンソールを開きます。

1. 左のナビゲーションペインから、**[トラッカー]** を選択します。

1. **[デバイストラッカー]** で、対象トラッカーの名前リンクを選択します。

1. [**リンクされたジオフェンスコレクション**] で [**ジオフェンスコレクションをリンク**] を選択します。

1. [**リンクされたジオフェンスコレクション**] ウィンドウのドロップダウンメニューからジオフェンスコレクションを選択します。

1. [**Link (リンク)**] を選択します。

1. トラッカーリソースをリンクすると、そのリソースには[アクティブ] ステータスが割り当てられます。

Amazon Location API を使用してトラッカーリソースをジオフェンスコレクションにリンクする:

Amazon Location Trackers API の ``AsssociateTrackerConsumer オペレーションを使用してください。以下は、Amazon リソースネーム (ARN) を使用して ExampleTracker をジオフェンスコレクションにリンクする API リクエストの例です。

```
POST /tracking/v0/trackers/ExampleTracker/consumers
Content-type: application/json
        {
           "ConsumerArn": "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME"
        }
```

 AWS CLI コマンドを使用してトラッカーリソースをジオフェンスコレクションにリンクする:

`associate-tracker-consumer ` コマンドを使用します。次の例では、 を使用して AWS CLI というジオフェンスコレクションを作成します`GOECOLLECTION_NAME`。

```
aws location \
associate-tracker-consumer \
    --consumer-arn "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" \
    --tracker-name "ExampleTracker"
```

## MQTT で AWS Lambda を使用する
<a name="qs-ios-tracking-lambda"></a>

Lambda 関数を作成します。

 AWS IoT Core と Amazon Location Service 間の接続を作成するには、EventBridge CloudWatch イベントによって転送されたメッセージを処理するための AWS Lambda 関数が必要です。 CloudWatch この関数は、位置データを抽出し、Amazon Location Service 用にフォーマットし、Amazon Location Tracker API を通じて送信します。この関数は、 AWS Lambda コンソールから作成することも、 AWS Command Line Interface (AWS CLI) または AWS Lambda APIsを使用することもできます。コンソールを使用して Amazon Location に位置更新を公開する Lambda 関数を作成するには:

1.  https://console.aws.amazon.com/lambda/ で AWS Lambda コンソールを開きます。

1. ナビゲーションペインで、[関数] を選択します。

1. 関数を作成を選択し、最初から作成するが選択されていることを確認します。

1. 次のボックスに入力します。
   + 関数名
   + **[ランタイム]** オプションで [Node.js 16.x] を選択します。

1. [関数の作成] を選択してください。

1. [コード] タブを選択してエディタを開きます。

1. index.js のプレースホルダーコードを次のように上書きします。

   ```
   const AWS = require('aws-sdk')
   const iot = new AWS.Iot();
   exports.handler =  function(event) {
                 console.log("event===>>>", JSON.stringify(event));
                 var param = {
                   endpointType: "iot:Data-ATS"
                 };
                 iot.describeEndpoint(param, function(err, data) {
                   if (err) {
                     console.log("error===>>>", err, err.stack); // an error occurred
                   } else {
                     var endp = data['endpointAddress'];
                     const iotdata = new AWS.IotData({endpoint: endp});    
                     const trackerEvent = event["detail"]["EventType"];
                     const src = event["source"];
                     const time = event["time"];
                     const gfId = event["detail"]["GeofenceId"];
                     const resources = event["resources"][0];  
                     const splitResources = resources.split(".");  
                     const geofenceCollection = splitResources[splitResources.length - 1];
                     const coordinates = event["detail"]["Position"];                               
                     const deviceId = event["detail"]["DeviceId"]; 
                     console.log("deviceId===>>>", deviceId);
                     const msg =  {
                         "trackerEventType" : trackerEvent,
                         "source" : src,
                         "eventTime" : time,
                         "geofenceId" : gfId,
                         "coordinates": coordinates, 
                         "geofenceCollection": geofenceCollection
                       };
                     const params = {
                       topic: `${deviceId}/tracker`,
                       payload: JSON.stringify(msg),
                       qos: 0
                     };
                     iotdata.publish(params, function(err, data) {
                         if (err) {
                           console.log("error===>>>", err, err.stack); // an error occurred
                         } else {
                           console.log("Ladmbda triggered===>>>", trackerEvent);  // successful response 
                         }
                     }); 
                   }
                 });
               }
   ```

1. [デプロイ] を選択して、関数を更新します。

1. 設定タブを選択します。

1. [トリガー] セクションで、[トリガーを追加] を選択します。

1. [ソース] フィールドで [EventBridge (CloudWatch Events)] を選択します。

1. [既存のルール] ラジオオプションを選択します。

1. 「AmazonLocationMonitor-GEOFENCECOLLECTION\$1NAME」のようなルール名を入力します。

1. [追加] ボタンをクリックします。

1. これにより、アクセス許可タブに「リソースベースのポリシーステートメント」もアタッチされます。

MQTT テストクライアント

1. [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/) を開きます。

1. 左側のナビゲーションペインで、[MQTT テストクライアント] を選択します。

1. **[MQTT テストクライアント]** というセクションが表示され、そこで MQTT 接続を設定できます。

1. 必要な設定を行った後、**[接続]** ボタンをクリックして、指定したパラメータを使用して MQTT ブローカーへの接続を確立します。

1. エンドポイントの値をメモしておきます。

接続すると、MQTT テストクライアントインターフェイスに用意されている各入力フィールドを使用して、MQTT トピックにサブスクライブしたり、トピックにメッセージをパブリッシュしたりできます。次に、MQTT ポリシーをアタッチします。

1.  左側のメニューの **[管理]** で、**[セキュリティ]** オプションを展開し、**[ポリシー]** をクリックします。

1. **[ポリシーを作成]** ボタンをクリックします。

1. ポリシー名を入力します。

1. **[ポリシードキュメント]** で **[JSON]** タブを選択します。

1. 以下に示すポリシーをコピーして貼り付けます。ただし、すべての要素を実際の `REGION` と `ACCOUNT_ID` で更新してください。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
                   {
                     "Action": [
                       "iot:Connect",
                       "iot:Publish",
                       "iot:Subscribe",
                       "iot:Receive"
                     ],
                     "Resource": [
                       "arn:aws:iot:REGION:ACCOUNT_ID:client/${cognito-identity.amazonaws.com:sub}",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/${cognito-identity.amazonaws.com:sub}/",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}/tracker"
                      ],
                      "Effect": "Allow"
                    }
                  ]
   }
   ```

1. **[作成]** ボタンを選択して終了します。

## サンプルアプリケーションコードを設定する
<a name="qs-ios-tracking-setup-sample"></a>

サンプルコードを設定するには、以下のツールがインストールされている必要があります。
+ Git
+ XCode 15.3 以後
+ iOS Simulator 16 以降

以下の手順を使用して、サンプルアプリケーションコードを設定します。

1. この URL ([https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications](https://github.com/aws-geospatial/amazon-location-samples-ios/tree/main/tracking-with-geofence-notifications)) から git リポジトリを複製します。

1. `AWSLocationSampleApp.xcodeproj` プロジェクトファイルを開きます。

1. パッケージの解決プロセスを待ちます。

1. **オプション**: プロジェクトナビゲーションメニューで、`ConfigTemplate.xcconfig` を `Config.xcconfig` に変更し、以下の値を入力します。

   ```
   IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID`
   MAP_NAME = `YOUR_MAP_NAME`
   TRACKER_NAME = `YOUR_TRACKER_NAME`
   WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT`
   GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`
   ```

## サンプルアプリケーションを使用する
<a name="qs-ios-tracking-usage"></a>

サンプルコードの設定が完了したら、iOS シミュレーターまたは実機でアプリケーションを実行できるようになります。

1. アプリケーションをビルドして実行します。

1. アプリケーションから位置情報と通知に対するアクセス許可を求められます。それらのアクセス許可を付与する必要があります。

1. [Cognito Configuration] ボタンをタップします。

1. [Config.xcconfig] ファイルに値を入力していない場合は、設定画面で以前に作成したリソース値をフィールドに入力する必要があります。

   ```
   IDENTITY_POOL_ID = `YOUR_IDENTITY_POOL_ID`
   MAP_NAME = `YOUR_MAP_NAME`
   TRACKER_NAME = `YOUR_TRACKER_NAME`
   WEBSOCKET_URL = `YOUR_MQTT_TEST_CLIENT_ENDPOINT`
   GEOFENCE_ARN = `YOUR_GEOFENCE_COLLECTION_NAME`
   ```

1. 設定を保存します。

1. [フィルタ] のオプションとして時間、距離、精度が表示されるようになりました。必要に応じてそれらのオプションを使用してください。

1. アプリケーションの [追跡] タブに移動すると、マップと [追跡を開始する] ボタンが表示されます。

1. このアプリケーションをシミュレーターにインストールしている場合は、位置の変更をシミュレートできます。これは [機能] の [ロケーション] メニューオプションで実行できます。例えば、[機能] を選択し、続いて [ロケーション]、[高速道路走行] の順に選択します。

1. [追跡を開始する] ボタンをタップします。マップに追跡ポイントが表示されます。

1. アプリケーションはバックグラウンドでも位置を追跡します。そのため、アプリケーションをバックグラウンドに移行すると、バックグラウンドモードで追跡を続けるためのアクセス許可を求められます。

1. [追跡を停止する] ボタンをタップすると、追跡を停止できます。

# Android アプリケーションの作成
<a name="android-geofence-app"></a>

Amazon Location Service を使用して iOS アプリケーションを構築するには、次の手順に従います。

[GitHub](https://github.com/aws-geospatial/amazon-location-samples-android/tree/main/tracking-with-geofence-notifications) からプロジェクトファイルをクローンします。

## アプリケーション用の Amazon Location リソースを作成する
<a name="qs-android-tracking-resources"></a>

 AWS アカウントの準備ができたら、Amazon Location Service リソースを生成できます。これらのリソースは、提供されたコードスニペットの実行に不可欠です。

**注記**  
 AWS アカウントをまだ作成していない場合は、[AWS アカウントを作成](https://portal.aws.amazon.com/billing/signup#/start/email)してください。

まず、Amazon Cognito アイデンティティプール ID を作成する必要があります。以下の手順に従ってください。

1.  AWS コンソールで、Amazon Cognito サービスに移動し、左側のメニューから **ID プール**を選択し、**ID プールの作成**を選択します。

1. **[ゲストアクセス]** がオンになっていることを確認し、**[次へ]** を押して続行します。

1. 次に、新しい IAM ロールを作成するか、既存の IAM ロールを使用します。

1. アイデンティティプール名を入力し、次の手順で作成するマップとトラッカーの Amazon Location `(geo)` リソースにアイデンティティプールがアクセスできることを確認します。

1. 

次に、 AWS Amazon Location コンソールでマップを作成してスタイル設定する必要があります。次の手順を使用します。

1. Amazon Location コンソールの [[マップ]](https://console.aws.amazon.com/location/maps/home) セクションに移動し、**[マップを作成]** を選択して使用可能なマップスタイルをプレビューします。

1. 新しいマップリソースに**名前**と**説明**を付けます。後からチュートリアルで使用するため、マップリソースに割り当てた名前を記録しておいてください。

1. マップスタイルを選択する際は、マップデータプロバイダーを考慮してください。詳細については、[AWS サービス利用規約](https://aws.amazon.com/service-terms)の第 82 項を参照してください。

1. [Amazon Location の利用規約](https://aws.amazon.com/service-terms/#:~:text=82.%20Amazon%20Location%20Service)に同意し、**[マップを作成]** を選択します。マップを作成したら、任意の方向にズームイン、ズームアウト、またはパンしてマップを操作できます。

Amazon Location コンソールを使用してトラッカーを作成するには

1.  [Amazon Location Service コンソール](https://console.aws.amazon.com/location/)を開きます。

1. 左のナビゲーションペインから、[**トラッカー**] を選択します。

1. **トラッカーを作成**を選択します。

1. すべての必須フィールドに入力します。

1. [**位置フィルター**] で、トラッカーリソースの使用目的に最も適したオプションを選択します。位置のフィルタリングを設定しない場合、デフォルト設定は TimeBased となります。詳細については、このガイドの「トラッカー」と「Amazon Location Service トラッカー API リファレンス」の「PositionFiltering」を参照してください。

1. **[トラッカーを作成]** を選択して終了します。

## ジオフェンスコレクションを作成する
<a name="qs-android-tracking-geofence"></a>

ジオフェンスコレクションを作成する際は、コンソール、API、または CLI のいずれかを使用できます。以下の手順で、各オプションについて説明します。

Amazon Location コンソールを使用してジオフェンスコレクションを作成する:

1. Amazon Location Service コンソール (https://console.aws.amazon.com/location/) を開きます。

1. 左のナビゲーションペインから、[ジオフェンスコレクション] を選択します。

1. [ジオフェンスコレクションの作成] を選択します。

1. コレクションの名前と説明を入力します。

1. [CloudWatch をターゲットとするEventBridge ルール] で、オプションのEventBridge ルールを作成して、ジオフェンスイベントへの対応を開始できます。これにより、Amazon Location は Amazon CloudWatch Logs にイベントをパブリッシュできるようになります。

1. [ジオフェンスコレクションの作成] を選択します。

Amazon Location API を使用してジオフェンスコレクションを作成する:

Amazon Location Geofences API の CreateGeofenceCollection オペレーションを使用してください。以下の例では、API リクエストを使用して `GOECOLLECTION_NAME` というジオフェンスコレクションを作成します。

```
POST /geofencing/v0/collections
Content-type: application/json
    {
    "CollectionName": "GOECOLLECTION_NAME",
    "Description": "Geofence collection 1 for shopping center",
    "Tags": { 
        "Tag1" : "Value1"
            }
    }
```

 AWS CLI コマンドを使用してジオフェンスコレクションを作成します。

create-geofence-collection コマンドを使用します。以下の例では、 AWS CLI を使用して `GOECOLLECTION_NAME` というジオフェンスコレクションを作成します。

```
aws location \ create-geofence-collection \
    --collection-name "GOECOLLECTION_NAME" \
    --description "Shopping center geofence collection" \
    --tags Tag1=Value1               
```

## トラッカーをジオフェンスコレクションにリンクする
<a name="qs-android-tracking-link-geofence"></a>

トラッカーをジオフェンスコレクションにリンクするには、コンソール、API、または CLI のいずれかを使用できます。以下の手順で、各オプションについて説明します。

Amazon Location Service コンソールを使用してトラッカーリソースをジオフェンスコレクションにリンクする:

1. Amazon Location コンソールを開きます。

1. 左のナビゲーションペインから、**[トラッカー]** を選択します。

1. **[デバイストラッカー]** で、対象トラッカーの名前リンクを選択します。

1. [**リンクされたジオフェンスコレクション**] で [**ジオフェンスコレクションをリンク**] を選択します。

1. [**リンクされたジオフェンスコレクション**] ウィンドウのドロップダウンメニューからジオフェンスコレクションを選択します。

1. [**Link (リンク)**] を選択します。

1. トラッカーリソースをリンクすると、そのリソースには[アクティブ] ステータスが割り当てられます。

Amazon Location API を使用してトラッカーリソースをジオフェンスコレクションにリンクする:

Amazon Location Trackers API の ``AsssociateTrackerConsumer オペレーションを使用してください。以下は、Amazon リソースネーム (ARN) を使用して ExampleTracker をジオフェンスコレクションにリンクする API リクエストの例です。

```
POST /tracking/v0/trackers/ExampleTracker/consumers
Content-type: application/json
    {
    "ConsumerArn": "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME"
    }
```

 AWS CLI コマンドを使用してトラッカーリソースをジオフェンスコレクションにリンクする:

`associate-tracker-consumer ` コマンドを使用します。次の例では、 を使用して AWS CLI というジオフェンスコレクションを作成します`GOECOLLECTION_NAME`。

```
aws location \
associate-tracker-consumer \
    --consumer-arn "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" \
    --tracker-name "ExampleTracker"
```

## MQTT で AWS Lambda を使用する
<a name="qs-android-tracking-lambda"></a>

Lambda 関数を作成します。

 AWS IoT Core と Amazon Location Service 間の接続を作成するには、EventBridge CloudWatch イベントによって転送されたメッセージを処理するための AWS Lambda 関数が必要です。 CloudWatch この関数は、位置データを抽出し、Amazon Location Service 用にフォーマットし、Amazon Location Tracker API を通じて送信します。この関数は、 AWS Lambda コンソールから作成することも、 AWS Command Line Interface (AWS CLI) または AWS Lambda APIsを使用することもできます。コンソールを使用して Amazon Location に位置更新を公開する Lambda 関数を作成するには:

1.  https://console.aws.amazon.com/lambda/ で AWS Lambda コンソールを開きます。

1. ナビゲーションペインで、[関数] を選択します。

1. 関数を作成を選択し、最初から作成するが選択されていることを確認します。

1. 次のボックスに入力します。
   + 関数名
   + **[ランタイム]** オプションで [Node.js 16.x] を選択します。

1. [関数の作成] を選択してください。

1. [コード] タブを選択してエディタを開きます。

1. index.js のプレースホルダーコードを次のように上書きします。

   ```
   const AWS = require('aws-sdk')
   const iot = new AWS.Iot();
   exports.handler =  function(event) {
       console.log("event===>>>", JSON.stringify(event));
       var param = {
           endpointType: "iot:Data-ATS"
           };
       iot.describeEndpoint(param, function(err, data) {
           if (err) {
               console.log("error===>>>", err, err.stack); // an error occurred
            } else {
                     var endp = data['endpointAddress'];
                     const iotdata = new AWS.IotData({endpoint: endp});    
                     const trackerEvent = event["detail"]["EventType"];
                     const src = event["source"];
                     const time = event["time"];
                     const gfId = event["detail"]["GeofenceId"];
                     const resources = event["resources"][0];  
                     const splitResources = resources.split(".");  
                     const geofenceCollection = splitResources[splitResources.length - 1];
                     const coordinates = event["detail"]["Position"];                               
                     const deviceId = event["detail"]["DeviceId"]; 
                     console.log("deviceId===>>>", deviceId);
                     const msg =  {
                         "trackerEventType" : trackerEvent,
                         "source" : src,
                         "eventTime" : time,
                         "geofenceId" : gfId,
                         "coordinates": coordinates, 
                         "geofenceCollection": geofenceCollection
                     };
       const params = {
           topic: `${deviceId}/tracker`,
           payload: JSON.stringify(msg),
           qos: 0
                };
       iotdata.publish(params, function(err, data) {
           if (err) {
               console.log("error===>>>", err, err.stack); // an error occurred
           } else {
               console.log("Ladmbda triggered===>>>", trackerEvent);  // successful response 
                  }
           }); 
          }
         });
        }
   ```

1. [デプロイ] を選択して、関数を更新します。

1. 設定タブを選択します。

1. [トリガー] セクションで、[トリガーを追加] を選択します。

1. [ソース] フィールドで [EventBridge (CloudWatch Events)] を選択します。

1. [既存のルール] ラジオオプションを選択します。

1. 「AmazonLocationMonitor-GEOFENCECOLLECTION\$1NAME」のようなルール名を入力します。

1. [追加] ボタンをクリックします。

1. これにより、アクセス許可タブに「リソースベースのポリシーステートメント」もアタッチされます。

MQTT テストクライアント

1. [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/) を開きます。

1. 左側のナビゲーションペインで、[MQTT テストクライアント] を選択します。

1. **[MQTT テストクライアント]** というセクションが表示され、そこで MQTT 接続を設定できます。

1. 必要な設定を行った後、**[接続]** ボタンをクリックして、指定したパラメータを使用して MQTT ブローカーへの接続を確立します。

1. エンドポイント値を書き留めます。

接続すると、MQTT テストクライアントインターフェイスに用意されている各入力フィールドを使用して、MQTT トピックにサブスクライブしたり、トピックにメッセージをパブリッシュしたりできます。次に、MQTT ポリシーをアタッチします。

1.  左側のメニューの **[管理]** で、**[セキュリティ]** オプションを展開し、**[ポリシー]** をクリックします。

1. **[ポリシーを作成]** ボタンをクリックします。

1. ポリシー名を入力します。

1. **[ポリシードキュメント]** で **[JSON]** タブを選択します。

1. 以下に示すポリシーをコピーして貼り付けます。ただし、すべての要素を実際の `REGION` と `ACCOUNT_ID` で更新してください。

   ```
   {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
                   {
                     "Action": [
                       "iot:Connect",
                       "iot:Publish",
                       "iot:Subscribe",
                       "iot:Receive"
                        ],
                     "Resource": [
                       "arn:aws:iot:REGION:ACCOUNT_ID:client/${cognito-identity.amazonaws.com:sub}",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/${cognito-identity.amazonaws.com:sub}/",
                       "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}/tracker"
                       ],
                     "Effect": "Allow"
                   }
                 ]
   }
   ```
**注記**  
次の手順で使用するポリシー名とトピック名を記録します。

1. **[作成]** ボタンを選択して終了します。

前の手順が完了したら、以下のようにゲストロールのアクセス許可を更新します。

1. Amazon Cognito に移動し、アイデンティティプールを開きます。次に、[ユーザーアクセス] に進み、[ゲストロール] を選択します。

1. [アクセス許可ポリシー] をクリックして、[編集] を有効にします。

   ```
   {
       'Version': '2012-10-17		 	 	 ',
       'Statement': [
           {
               'Action': [
                   'geo:GetMap*',
                   'geo:BatchUpdateDevicePosition',
                   'geo:BatchEvaluateGeofences',
                   'iot:Subscribe',
                   'iot:Publish',
                   'iot:Connect',
                   'iot:Receive',
                   'iot:AttachPrincipalPolicy',
                   'iot:AttachPolicy',
                   'iot:DetachPrincipalPolicy',
                   'iot:DetachPolicy'
               ],
               'Resource': [
                   'arn:aws:geo:us-east-1:{USER_ID}:map/{MAP_NAME}',
                   'arn:aws:geo:us-east-1:{USER_ID}:tracker/{TRACKER_NAME}',
                   'arn:aws:geo:us-east-1:{USER_ID}:geofence-collection/{GEOFENCE_COLLECTION_NAME}',
                   'arn:aws:iot:us-east-1:{USER_ID}:client/${cognito-identity.amazonaws.com:sub}',
                   'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}',
                   'arn:aws:iot:us-east-1:{USER_ID}:topicfilter/${cognito-identity.amazonaws.com:sub}/*',
                   'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}/tracker'
               ],
               'Effect': 'Allow'
           },
           {
               'Condition': {
                   'StringEquals': {
                       'cognito-identity.amazonaws.com:sub': '${cognito-identity.amazonaws.com:sub}'
                   }
               },
               'Action': [
                   'iot:AttachPolicy',
                   'iot:DetachPolicy',
                   'iot:AttachPrincipalPolicy',
                   'iot:DetachPrincipalPolicy'
               ],
               'Resource': [
                   '*'
               ],
               'Effect': 'Allow'
           }
       ]
   }
   ```

1. 上記のポリシーの変更により、必要なすべての AWS リソースがアプリケーションに対して適切に設定されるようになりました。

## サンプルアプリケーションコードを設定する
<a name="qs-android-tracking-sample-app-code"></a>



1. Android Studio を開き、**[New]**、**[Project from Version Control]** の順に選択します。

1. Android Studio の左上隅にある **[File]** メニューに移動します。

1. ドロップダウンメニューで [New] を選択します。

1. [Project from Version Control] を選択します。

1. リポジトリ URL を入力します。表示されるダイアログボックスで、「URL」とマークされたフィールドを見つけます。

1. サンプルアプリケーションの次の URL をコピーして、次のフィールドに貼り付けます。[https://github.com/aws-geospatial/amazon-location-samples-android.git](https://github.com/aws-geospatial/amazon-location-samples-android.git)

1. リポジトリをクローンするディレクトリを決定します。デフォルトのディレクトリを使用するか、カスタムの場所を選択します。

1. リポジトリ URL とディレクトリの設定が完了したら、[Clone] ボタンをクリックします。Android Studio により、指定された場所にリポジトリのクローンが作成されます。

1. アプリケーションがマシンにクローンされ、使用を開始できます。

## サンプルアプリケーションを使用する
<a name="qs-android-tracking-use"></a>

サンプルを使用するには、以下の手順に従います。
+ **`custom.properties` を作成する**:

  `custom.properties` ファイルを設定するには、以下の手順に従います。

  1. 任意のテキストエディタまたは IDE を開きます。

  1. 新しいファイルを作成します。

  1. 次に、`custom.properties` という名前でファイルを保存します。

  1. `custom.properties` を以下のコードサンプルで更新し、`MQTT_END_POINT`、`POLICY_NAME`、`GEOFENCE_COLLECTION_NAME`、`TOPIC_TRACKER` を実際の値に置き換えます。

     ```
     MQTT_END_POINT=xxxxxxxxxxxxx-xxx.xxx.us-east-1.amazonaws.com
     POLICY_NAME=xxxxxxxxx
     GEOFENCE_COLLECTION_NAME=xxxxxxxxxxxxxxxxx
     TOPIC_TRACKER=xxxxxxxxxx
     ```

  1. プロジェクトをクリーンアップして再構築します。その後、プロジェクトを実行できます。
+ **サインイン**:

  アプリケーションにサインインするには、以下の手順に従います。

  1. **[サインイン]** ボタンを押します。

  1. **アイデンティティプール ID**、**トラッカー名**、**マップ名**を指定します。

  1. **[サインイン]** をもう一度押して終了します。
+ **フィルタを管理する**:

  設定画面を開き、次の操作を実行します。

  1. スイッチ UI を使用してフィルターのオン/オフを切り替えます。

  1. 必要に応じて、時間と距離のフィルタを更新します。
+ **追跡オペレーション:**

  追跡画面を開き、以下の操作を実行します。
  + フォアグラウンド、バックグラウンド、バッテリーセーバーの各モードでの追跡は、それぞれ対応するボタンを押すと、開始および停止できます。