メインコンテンツに移動
コミュニティ通信

Amazon Location Service の新機能を QGIS で利用する

2025-03-03 | Author : 桐本 靖規 (AWS DevTools Hero)

はじめに

こんにちは、AWS DevTools Hero の桐本です。

本日は、2024 年 11 月に新バージョンがリリースされた Amazon Location Service と、オープンソース GIS ソフトウェアである QGIS の組み合わせについてご紹介します。


X ポスト » | Facebook シェア » | はてブ »

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 
今すぐ特典を受け取る »

1. Amazon Location Service とは ?

Amazon Location Service は、AWS が提供する位置情報サービスで、2024 年 11 月に新バージョンがリリースされました。今回のアップデートでは、新機能の追加により利便性が大幅に向上しています。
とくに注目すべきポイントは、リソース作成が不要になり、統一されたエンドポイントで API を利用できるようになったことです。これにより、ユーザーは個別にリソースを作成することなく、すぐに API を利用できるようになりました。
さらに、Maps API、Places API、Routes API にも大幅な機能拡張や新機能が追加 され、利用範囲が広がっています。


2024 年 5 月、本国のサービスチームからオファーをいただき、このアップデートの検証に携わりました。

The logo for AWS Location Service featuring a white pushpin and map layers on a red background.

2. QGISとは ?

QGIS は、地理空間情報を扱うクロスプラットフォームのオープンソース GIS ソフトウェアです。地図データの作成・編集・分析・可視化などの基本機能に加え、豊富なプラグインを活用した高度なカスタマイズや空間解析が可能です。自治体、教育機関、企業など、幅広い分野で利用されています。


QGIS についてさらに詳しく知りたい方は、QGIS LAB というメディアサイトもぜひご覧ください。

Screenshot of the README page for the Amazon Location Service Plugin for QGIS, showing the plugin title, a red vector layers icon, the QGIS logo, and related repository and plugin links.

3. QGIS 版 Amazon Location Service Plugin とは ?

QGIS 版 Amazon Location Service Plugin をオープンソースで公開しました。このプラグインは、Amazon Location Service の地図表示、ジオコーディング、ルーティングなどの機能を QGIS 上で手軽に利用できるようにする世界初の試みです。現時点ではすべての機能を実装していませんが、今後さらに機能を追加していく予定です。

今回は、このプラグインを利用し Amazon Location Service と QGIS を組み合わせる方法を紹介します。

4. 事前準備

Amazon Location Service の API キー作成

Amazon Location Service の API キーを作成します。

AWSマネジメントコンソール → Amazon Location Service → 「API キー」をクリックします。

Screenshot of the Amazon Location Service dashboard displayed in Japanese. The UI shows API key management, maps, location search, routes, geofencing, and tracker features, along with links to demo apps, solution guides, and documentation.

「API キーの作成」をクリック

API キーの作成」をクリックします。

Screenshot of the Amazon Location Service interface in Japanese, showing the API key management screen with the option to create a new API key highlighted in QGIS.

API キー名・リソースとアクションを設定

API キー名・リソースとアクションを設定 → 「API キーの作成」をクリックします。

Maps・Places・Routesそれぞれの機能の利用有無を設定します。今回は図のような設定で作成します。

Screenshot of the Amazon Location Service API key creation screen integrated with QGIS, displaying available resource actions and permissions in Japanese.

表示された API キーをメモ

API キー作成後、「API キー値を表示」をクリック → 表示された API キーをメモします。

Screenshot of the Amazon Location Service API Key management screen showing an API key displayed for QGIS integration. The screen lists key details, associated resource ARNs for maps, places, and routes, available actions, and relevant options and tags in the AWS Management Console interface.

QGIS のインストール

QGIS をインストールします。

QGIS オフィシャルサイト にアクセス → 「Download」をクリックします。

Screenshot of the QGIS website homepage highlighting the Download button and showcasing the slogan 'Spatial without Compromise' for spatial visualization and decision-making tools.

対象の OS の LTS バージョンをダウンロードし、インストール

対象の OS の LTS バージョンをダウンロードします。今回は Mac 版をダウンロードします。

ダウンロード後、ローカルにインストールします。インストール方法の詳細は 「QGISを始めよう!QGISのインストール手順について紹介 〜Windows版、Mac版〜」 をご覧ください。

Screenshot of the QGIS download page, highlighting the long term version for Mac OS (3.34 LTR) with platform installation tips and navigation elements visible.

QGIS 版 Amazon Location Service Plugin のインストール

QGIS のインストール後、プラグインをインストールします。プラグインは公式リポジトリに登録されており、QGIS 上から直接インストール可能です。

プラグイン」→「プラグインを管理およびインストール」を選択 → 「Amazon Location Service」や「AWS」で検索します。

Screenshot of the QGIS application showing the plugin panel with the Amazon Location Service plugin details, including description, version, author, tags, and download rating. The panel provides information about using Amazon Location Service within QGIS.

表示メニューを確認

プラグインがインストールされたらメニューが表示されます。メニューは、Config、Maps、Places、Routes、Terms の 5 種類があります。

  • Config : API キーとリージョン名を設定

  • Maps : 地図表示機能

  • Places : ジオコーディング機能

  • Routes : ルーティング機能

  • Terms : 利用規約ページを表示

Screenshot showing the Amazon Location Service Plugin menu options within the QGIS software interface. The image demonstrates how to access and configure Amazon Location Service features in QGIS, with plugin menu options such as Config, Map, Place, Routes, and Terms displayed.

Amazon Location Service Plugin で API キーとリージョン名の設定

プラグインの設定画面から、API キーとリージョン名を設定します。

  1. Config」メニューをクリック

  2. 各リソース名と API キーを設定

    • Region : ap-xxxxx

    • API Key : v1.public.xxxxx

  3. Save」をクリック


ここまでで、事前準備は完了です。次に機能の紹介をします。

Screenshot of QGIS with a configuration dialog open, showing how to set up the AWS Location Service using the ap-northeast-1 region and entering an API key. The QGIS interface displays browser panel options for connecting to various GIS data sources.

5. マップ機能

地図表示機能では、ラッパー API にスタイル名・リージョン名・API キーを指定してリクエストすることで、QGIS 上にラスタタイルレイヤーを作成します。Amazon Location Service の 2024 年 11 月にリリースされた新バージョンでは、従来のマップスタイルが廃止され、AWS オリジナルの「Standard・Monochrome・Hybrid・Satellite」の 4 種類のマップスタイルが利用可能になりました。

  1. Maps」メニューをクリック

  2. Style Name」を選択

  3. Add」をクリック

  4. 背景地図がレイヤーで表示

maps.py

bash
def add_xyz_tile_layer(self, selected_style: str) -> str:
    """
    Adds an XYZ tile layer (raster tile) into the current QGIS project using
    configuration settings.
    """
    try:
        region_value, apikey_value = self.get_configuration_settings()
        tile_url = (
            f"https://als.dayjournal.dev/{region_value}/{selected_style}/"
            f"{{z}}/{{x}}/{{y}}?APIkey={apikey_value}"
        )
        layer_url = f"type=xyz&url={tile_url}&zmin=0&zmax=18"
        xyz_tile_layer = QgsRasterLayer(layer_url, selected_style, "wms")
        QgsProject.instance().addMapLayer(xyz_tile_layer)
    except KeyError as e:
        raise KeyError(f"Missing configuration for {e!r}") from e
    except Exception as e:
        raise Exception(f"Failed to load XYZ tile layer: {e!r}") from e

ラッパーAPIとして、独自に構築したエンドポイント「https://als.dayjournal.dev/{region_value}/{selected_style}/{{z}}/{{x}}/{{y}}?APIkey={apikey_value}」に指定パラメータをGETリクエストで送信することで、ラスタタイルのレスポンスを受け取ることができます。

Amazon Location Service では、GetStyleDescriptor API を利用することで、ベクトルタイルのデータとスタイルを取得できます。しかし、QGIS や一部の Web マップライブラリでは、ベクトルタイルのスタイルに完全には対応していない場合が多いため、正確なスタイル表現が難しくなることがあります。そこで今回は、ラスタタイルへの変換配信に chiitiler を採用し、ラッパー API を構築することで、オリジナルのスタイルをラスタタイルとして正しく表示できるようにしました。ラッパー API には、AWS WAF・Amazon CloudFront・AWS Lambda を利用し、サーバーレス構成で実装しました。この API の詳細については、また別の機会に紹介したいと思います。

こちらはコードの一部です。

(/location_service/functions/places.py)

6. ジオコーディング機能

ジオコーディング機能では、SearchText API にリクエストすることで、QGIS 上に取得した POI データのポイントレイヤーを作成します。SearchText 機能を利用すると、指定した範囲内の POI データを検索し、その結果を取得できます。以前は、"SearchPlacesForText" と呼ばれていたものが名称変更され、機能が強化されました。

※ 2025.01 現在、SearchText のみ利用可能

  1. Places」メニューをクリック

  2. Select Function」を選択

  3. QueryText」にテキスト入力

  4. Get Location」をクリック

  5. 検索したい位置をクリック

  6. Search」をクリック

  7. 検索結果がレイヤーで表示

places.py

「https://places.geo.{region}.amazonaws.com/v2/search-text?key={apikey}」に指定パラメータを POST リクエストで送信することで、候補のポイントデータを含むレスポンスを受け取ることができます。SearchText API を利用することで、さまざまな条件でデータを取得することが可能です。今回は、Language・MaxResults・QueryText・BiasPosition をパラメータとして指定しています。コードの一部を紹介します。

SearchText API
python
def search_text(self, text: str, lon: float, lat: float) -> Dict[str, Any]:
    """
    Searches for a places index based on the provided longitude and
    latitude coordinates.

    Args:
        lon (float): Longitude of the position to search.
        lat (float): Latitude of the position to search.

    Returns:
        A dictionary containing the API request results with place information.
    """
    region, apikey = self.get_configuration_settings()
    place_url = (
        f"https://places.geo.{region}.amazonaws.com/v2/search-text?key={apikey}"
    )
    data = {
        "Language": self.PLACES_LANGUAGE,
        "MaxResults": self.PLACES_MAX_RESULTS,
        "QueryText": text,
        "BiasPosition": [lon, lat],
    }
    result = self.api_handler.send_json_post_request(place_url, data)
    if result is None:
        raise Exception("Failed to receive a valid response from the API.")
    return result

(/location_service/functions/places.py)

7. ルーティング機能

ルーティング機能では、CalculateRoutes API にリクエストすることで、QGIS 上に取得したルートデータのラインレイヤーを作成します。CalculateRoutes 機能を利用すると、指定した出発地と目的地を基にルートを計算し、その結果を取得できます。

※ 2025 年 1 月現在、CalculateRoutes のみが利用可能です。

  1. Routes」メニューをクリック

  2. Select Function」を選択

  3. Get Location (Starting Point)」をクリック

  4. 始点をクリック

  5. Get Location (End Point)」をクリック

  6. 終点をクリック

  7. Search」をクリック

  8. 検索結果がレイヤーで表示

routes.py

「https://routes.geo.{region}.amazonaws.com/v2/routes?key={apikey}」に指定パラメータを POST リクエストで送信することで、候補のラインデータを含むレスポンスを受け取ることができます。CalculateRoutes API を利用することで、さまざまな条件でデータを取得することが可能です。今回は、Origin・Destination・LegGeometryFormat をパラメータとして指定しています。コードの一部を紹介します。

CalculateRoutes API
python
def calculate_routes(
    self, st_lon: float, st_lat: float, ed_lon: float, ed_lat: float
) -> Dict[str, Any]:
    """
    Calculates a route from start to end coordinates using an external API.

    Args:
        st_lon (float): Longitude of the start position.
        st_lat (float): Latitude of the start position.
        ed_lon (float): Longitude of the end position.
        ed_lat (float): Latitude of the end position.

    Returns:
        A dictionary containing the calculated route data.
    """
    region, apikey = self.get_configuration_settings()
    routes_url = f"https://routes.geo.{region}.amazonaws.com/v2/routes?key={apikey}"
    data = {
        "Origin": [st_lon, st_lat],
        "Destination": [ed_lon, ed_lat],
        "LegGeometryFormat": "Simple",
    }
    result = self.api_handler.send_json_post_request(routes_url, data)
    if result is None:
        raise ValueError("Failed to receive a valid response from the API.")
    return result

(/location_service/functions/routes.py)

8. API キー削除

最後に、API キーを削除します。

対象の API キー名をクリックします。

無効化」処理をします。

削除」処理をします。




8. まとめ

新バージョンの Amazon Location Service と QGIS を組み合わせ、QGIS 版 Amazon Location Service Plugin をオープンソースで公開しました。これにより、オープンソース GIS ソフトウェア環境での AWS 利活用の可能性が広がりました。今後も機能を追加し、さらに使いやすいツールへと進化させていく予定です。

また、Amazon Location Service にはデータ利用について 利用規約 があります。「82. Amazon Location Serviceプレビュー」の項目をご確認の上ご利用ください。

今回の内容が、AWS で位置情報アプリケーションの構築を検討している方々の参考になれば幸いです!

筆者プロフィール

桐本 靖規
Co-Founder and CEO of MIERUNE
AWS DevTools Hero | Amplify Japan User Group | MapLibre User Group Japan |
MapLibre Voting Member | OSGeo Charter Member | Owner of dayjournal

2004 年から位置情報分野に携わり、2016 年に MIERUNE を共同創業。独自のカルチャーを持つプロフェッショナルなチーム作りや、プロダクト成功のための組織マネジメントに注力し日々模索中。個人活動では、オープンソースへの貢献や、コミュニティの運営メンバーとしてカンファレンスやワークショップを開催。専門は GIS (Geographic Information System) と FOSS4G (Free and OpenSource Software for Geospatial)。AWS と位置情報技術の組み合わせを日々模索中。

好きな AWS サービス: Amazon Location Service / AWS Amplify

Twitter: @dayjournal_nori
GitHub: @dayjournal
LinkedIn: @YasunoriKirimoto

Portrait of a man wearing glasses and a blue sweater over a white shirt, standing in front of a white background.