すぐに使える! オープンソースのスターターアプリ: Nearby Places developed by ArcGIS Runtime SDK for Android 編

1856
0
04-26-2021 11:38 PM
Labels(1)

すぐに使える! オープンソースのスターターアプリ: Nearby Places developed by ArcGIS Runtime SDK for Android 編


はじめに


米国Esri社より、これからArcGISを用いたアプリの開発に携わる人の学習用にオープンソースのスターターアプリが提供されています。

スターターアプリは、以下の5種類があります。

  1. Data Collection
  2. Dynamic Situational Awareness
  3. Maps App
  4. Nearby Places
  5. Offline Mapbook

Data Collection については、20198月に開催した「ArcGIS 開発者のための最新アプリ開発塾 2019」で紹介しています。

また、Maps AppArcGIS API for JavaScript版については、「すぐに使える! オープンソースのスターターアプリ: Maps App developed by ArcGIS API for JavaScript 編」で紹介しています。

今回は、この中からNearby Places (Android)の機能の拡張を行ったので、その方法を紹介します。※Nearby PlacesにはAndroid版の他にも、JavaScript版も公開されています。

Nearby Places の機能や使い方の詳細に関しては、こちらのリポジトリをご覧ください。
このリポジトリは、米国Esri社のNearby PlacesReadme.mdESRIジャパンにて翻訳したものです。

アプリの概要


Nearby Places は、利用者が表示している地図の表示範囲にある興味のある場所を検索して表示します。また、表示された場所を選択することで、現在地からのルートを表示することができます。
基本機能2.png

拡張機能の説明


Nearby Places はArcGIS開発ツールであるArcGIS Runtime SDK for Androidを使用して開発されています。そのため、地図の機能拡張をするにはArcGIS Runtime SDK for Androidを用いります。ArcGIS Runtime SDK for Androidには、様々な機能を実現するためのクラスおよびメソッドが用意されています。アプリには予め用意されたカテゴリ(FoodHotel等)から場所を検索する機能があったため、今回はキーワードを自由に入力して検索できる機能を拡張しましたので、自由検索機能を実装するにあたっての要点を紹介します。

自由検索を実装する主な流れとしては、
① 検索するキーワードを入力し、実行処理を行う画面の作成
② 入力されたキーワードを元に検索を行い、対象のデータを取得
③ 取得されたデータを編集し、画面上に表示する
というものになります。

今回は機能の中心となる②について紹介していきます。
検索機能を実装するために、LocatorTaskクラス内にあるgeocodeAsyncメソッドを使用します。

geocodeAsync メソッドはオーバーロードされて条件によって使い分け可能な同一名のメソッドが複数存在します。今回は
Nearby Placesの設計思想である、「表示している地図の表示範囲から興味のある場所を表示する」という仕様と合わせるため、引数に検索文字列とGeocodeParametersクラス(検索範囲を指定可能)のインスタンスを設定するメソッドを使用します。

① はじめに引数1で設定するキーワードを取得します。

// LayoutInflater にてキーワード入力画面を取得 View view = LayoutInflater .inflate(検索画面のファイル名, container,false); // キーワード入力欄情報の取得 SearchView searchView = view.findViewById(画面の検索欄に設定されたid); // キーワード入力欄の入力値を取得 CharSequence charSequence = searchView.getQuery(); // キーワードを String 型で取得 String keyword = CharSequence.toString();


② 画面の表示範囲情報を取得します。

// MapFragment のインスタンス作成までの過程は割愛 MapFragment mapFragment; // MapFragment から MapView クラスのプロパティを取得 MapView mapView = mapFragment.getMapView(); // 画面で表示されている中心の位置情報を取得 Point g = mapView.getMapView().getVisibleArea().getExtent().getCenter();


③ 引数2で設定するGeocodeParametersクラスのインスタンスを作成します。

// GeocodeParameters クラスのインスタンスを作成 final GeocodeParameters parameters = new GeocodeParameters(); // ②で取得した表示範囲情報を設定 parameters.setPreferredSearchLocation(g); // 検索結果の最大取得件数を設定 parameters.setMaxResults(10); // 全てのカテゴリを検索対象とするためパラメータ:カテゴリコレクションに “POI” を設定 parameters.getCategories().add(“POI”);


④ ①、③で設定した値を引数に検索します。

/ /実際に検索をしに行くWebサービスのURL字符串locatorUrl =“https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"; // LocationTask クラスのインスタンスを作成 LocatorTask sLocatorTask = new LocatorTask(locatorUrl); // ロードが可能なリスナーの追加(※引数は複雑なため省略) sLocatorTask.addDoneLoadingListener(~); // ロード対象のリソースのメタデータを読み込み sLocatorTask.loadAsync(); // キーワードを元に検索を実行 //(引数1=①のキーワード、引数2=③のGeocodeParameters クラスのインスタンス) ListenableFuture> results = sLocatorTask.geocodeAsync(searchText, parameters);


追加機能2.png


このような手順を追うことによって自由検索を実装できます。
今回の機能を追加するにあたっては、Find Placeというサンプルを一部参考にして構築しました。
自由検索の他にも多くのサンプルコードが提供されていますので、ArcGIS Runtime SDK for Androidを用いて構築される方はご参考にしてください。

最後に


今回は 米国Esri社が提供しているオープンソースのスターターアプリの中から、ArcGIS Runtime SDK for Androidで構築されたNearby Placesというアプリのご紹介をしました。 これからArcGISを使ったAndroidアプリの開発を始める方や、新しくアプリを作る際の参考などにしていただけたらと思います。初めに紹介しましたが、他にもスターターアプリが公開されていますので、ご興味がある方は「Open source starter apps」をご参照ください。

参考


ArcGIS 関連ページ
ArcGIS for Developers(ESRIジャパン製品ページ)
ArcGIS for Developers 開発リソース集
ArcGIS Runtime SDK for Android(ESRIジャパン製品ページ)
ArcGIS Runtime SDK for Android(米国Esriページ(英語))

Labels(1)
Version history
Last update:
‎04-26-202111:50 PM
Updated by:
Contributors