Amplify Geo のセットアップ
Amplify は、Web アプリケーション向けのマップおよび場所検索用の API とマップ UI コンポーネントを提供します。わずか数行のコードで、アプリにマップと場所検索機能を追加できます。以下は、AWS Cloud Development Kit (AWS CDK) を使用して Amazon Location Services で実装された Geo リソースを作成する例です。ただし、このサービスにはまだ公式なハンドライティング (L2) コンストラクトがないことに注意してください。
import { defineBackend } from "@aws-amplify/backend";import { Policy, PolicyStatement } from "aws-cdk-lib/aws-iam";import { CfnMap } from "aws-cdk-lib/aws-location";import { Stack } from "aws-cdk-lib/core";import { auth } from "./auth/resource";import { data } from "./data/resource";
const backend = defineBackend({ auth, data, // additional resources});
const geoStack = backend.createStack("geo-stack");
// create a location services mapconst map = new CfnMap(geoStack, "Map", { mapName: "myMap", description: "Map", configuration: { style: "VectorEsriNavigation", }, pricingPlan: "RequestBasedUsage", tags: [ { key: "name", value: "myMap", }, ],});
// create an IAM policy to allow interacting with geo resourceconst myGeoPolicy = new Policy(geoStack, "GeoPolicy", { policyName: "myGeoPolicy", statements: [ new PolicyStatement({ actions: [ "geo:GetMapTile", "geo:GetMapSprites", "geo:GetMapGlyphs", "geo:GetMapStyleDescriptor", ], resources: [map.attrArn], }), ],});
// apply the policy to the authenticated and unauthenticated rolesbackend.auth.resources.authenticatedUserIamRole.attachInlinePolicy(myGeoPolicy);backend.auth.resources.unauthenticatedUserIamRole.attachInlinePolicy(myGeoPolicy);
// patch the map resource to the expected output configurationbackend.addOutput({ geo: { aws_region: geoStack.region, maps: { items: { [map.mapName]: { style: "VectorEsriNavigation", }, }, default: map.mapName, }, },});Amplify Geo は、モバイルアプリケーション開発用の API とマップ UI コンポーネントを提供しており、わずか数行のコードでアプリにマップを追加できます。Amplify Geo API は Amazon Location Service を使用して実装されており、MapLibre のマップ UI コンポーネントは既に Geo API と統合されています。
前提条件
- Amplify ライブラリが統合された、少なくとも Android SDK API レベル 24 をターゲットとする Android アプリケーション
- Android プロジェクト作成の完全な例については、プロジェクトセットアップのウォークスルーに従ってください。
Amplify ライブラリをインストールする
以下の依存関係を build.gradle.kts (Module :app) ファイルに追加し、プロンプトが表示されたら「Sync Now」をクリックします。
android { compileOptions { // Support for modern Java features isCoreLibraryDesugaringEnabled = true }}
dependencies { // Amplify API dependencies implementation("com.amplifyframework:aws-auth-cognito:ANDROID_VERSION") implementation("com.amplifyframework:aws-geo-location:ANDROID_VERSION") // ... other dependencies coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:ANDROID_DESUGAR_VERSION")}Amplify Geo を初期化する
Amplify Geo を初期化するには、Amplify.addPlugin() メソッドを使用して AWS Location Geo プラグインを追加します。次に、Amplify.configure() を呼び出して Amplify の設定を完了します。
アプリケーションクラスの onCreate() メソッドに次のコードを追加します。
Amplify.addPlugin(new AWSCognitoAuthPlugin());Amplify.addPlugin(new AWSLocationGeoPlugin());Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { Amplify.addPlugin(new AWSCognitoAuthPlugin()); Amplify.addPlugin(new AWSLocationGeoPlugin()); Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext()); Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.addPlugin(AWSLocationGeoPlugin())Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), applicationContext)クラスは次のようになります:
class MyAmplifyApp : Application() { override fun onCreate() { super.onCreate()
try { Amplify.addPlugin(AWSCognitoAuthPlugin()) Amplify.addPlugin(AWSLocationGeoPlugin()) Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), applicationContext) Log.i("MyAmplifyApp", "Initialized Amplify") } catch (error: AmplifyException) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error) } }}RxAmplify.addPlugin(new AWSCognitoAuthPlugin());RxAmplify.addPlugin(new AWSLocationGeoPlugin());RxAmplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { RxAmplify.addPlugin(new AWSCognitoAuthPlugin()); RxAmplify.addPlugin(new AWSLocationGeoPlugin()); RxAmplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext()); Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}このアプリケーションをビルドして実行すると、コンソールウィンドウに以下が表示されます:
Initialized Amplify注:
- 既存の Amazon Location Service リソースを使用したい場合は、このガイドに従ってください。
- Geo で直接サポートされていない Amazon Location Service API を使用したい場合は、エスケープハッチを使用して Amazon Location Service SDK にアクセスしてください。
参考資料
マップの料金プラン
マップの例の料金プランは RequestBasedUsage に設定されています。
料金プランの詳細については、ロケーションサービスの料金とロケーションサービスの利用規約(セクション 82.5)を参照することをお勧めします。