ArcGIS Runtime SDK for iOSの使い方


ArcGISとは

ArcGISは米国カリフォルニア州Esri社の地理情報システムソフトウェアで、ArcGIS for Desktop、ArcGIS for Server、ArcGIS Onlineなどから成る。

本稿で扱うArcGIS Runtime SDK for iOSでは、ArcGIS Online上に作成したマップをiOS機上に表示することができる。ただし、ArcGIS Online上に作成したマップを閲覧するのみであれば、AppStoreで配布されているArcGISアプリで行えるため、SDKでアプリを開発するのはそれ以上の機能性を持たせたい場合に限られることになる。

AppleMapKitやGoogleMapsに対するメリットは、ArcGIS Online上で公開されている豊富なベースマップとレイヤーを使ってマップを作成しておけば、それをそのままアプリ上に表示できることである。マーカーやポリゴンの描画処理を実装する必要はない。
データの更新が必要な場合もArcGIS Onlineで編集すればアプリ表示に反映されるため、更新データのデバイス配布が不要であるのもメリットである。

必要なライセンス

Runtime SDKを使用してアプリを開発する際に必要なライセンスは以下のとおり。

  • ArcGIS Online 開発者向けプラン
  • ArcGIS Runtime SDK for iOS

ArcGIS Online 開発者向けプラン

  • 無償プラン(無償):50クレジット/月
  • 有償プラン($20より):200クレジット/月

開発者向けプランの製品詳細に説明のある通り、無償プランのクレジット数は少ないため評価目的のみに使用するのが適当。
また、開発者向けプランとは別に個人向けプランと組織向けプランがあるが、Runtime SDKを使用したアプリをリリースする場合は開発者向けプランが必要であるため本稿では触れない。

ArcGIS Runtime SDK for iOS

  • Basic(無償):オンラインでの表示/編集, サービスベースでの解析, オフライン地図表示
  • Standard(80万円/月):Basicに加え、オフラインでの編集/同期および解析ツール使用

WebMapの作成

アプリ作成に先立ち、ArcGIS Online上にアプリから参照するWebMapを作成する。

アカウント作成

Sign UP | ArcGIS for Developersより新規アカウントを作成する。作成したアカウントでArcGIS Onlineも利用可能。

WebMap作成

ギャラリーよりベースマップやレイヤーを選択して地図を作成する。
本稿で使用しているサンプル地図は、ベースマップに地形図 (World Topographic Map)を選択し、レイヤーに住民によるトイレの調査レイヤを重ねただけの簡単な地図である。

実装においては参照したい地図のIDをコードに記述する必要があるが、そのIDは地図の詳細画面URLのidパラメータ部分より取得する。
このサンプル地図のIDは”c59da60680024f2f87f444c7ddc82fb2”になる。

iOSでの実装

本稿では下記ドキュメントに基づき、ArcGISオンライン上に作成した地図をアプリ上に表示するまでの実装を解説する。

ArcGIS Runtime SDK for iOS

インストール

Podfile
target 'ArcGIS_Swift' do
  use_frameworks!
  pod 'ArcGIS-Runtime-SDK-iOS'
end

プロジェクト設定

Build SettingsでEnabel BitcodeをNoに変更。

コード

ViewController.swift

import UIKit
import ArcGIS

class ViewController: UIViewController, AGSMapViewLayerDelegate {
    @IBOutlet weak var mapView: AGSMapView!
    var webMap: AGSWebMap!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Webマップの取得
        self.webMap = AGSWebMap(itemId: "c59da60680024f2f87f444c7ddc82fb2", credential: nil)

        // AGSMapViewでWebマップを開く
        self.webMap.openIntoMapView(self.mapView)

        // AGSMapViewのデリゲート設定
        self.mapView.layerDelegate = self
    }

    // AGSMapViewのデリゲートメソッド(地図ロード完了時に実行される)
    func mapViewDidLoad(mapView: AGSMapView!) {

        // 位置情報の表示モードを設定
        self.mapView.locationDisplay.autoPanMode = .Default

        // 地図が現在位置にズームされる際の表示縮尺の設定
        self.mapView.locationDisplay.zoomScale = 100000

        // 現在位置の表示を開始
        self.mapView.locationDisplay.startDataSource()
    }
}

ライセンス認証

開発アプリに対するライセンス認証のためのコードを実装する必要がある。ランタイムライセンスがBasicかStandardかで実装方法が異なるが、ここではBasicライセンスについて説明する。

Standardライセンスの場合は下記ドキュメントを参照のこと。

License your app - ArcGIS Runtime SDK for iOS

Client IDの取得

  • ArcGIS for Developersサイトにログイン
  • “Applications”セクションで”Register New Application”をクリック
  • Title(必須), Tag(必須), Desctiption(省略可)を入力し”Register New Application”をクリック
  • “Overview”タブまたは”Licensing”タブで”Client ID”を確認

ライセンス認証コードを追加

Runtime SDK使用前にAGSRuntimeEnvironmentクラスのsetClientIDメソッドでライセンス認証を行う。

let clientID = "<my_client_ID>"
do {
    try AGSRuntimeEnvironment.setClientID(clientID)
}
catch {
    print("setClientID failed: \(error)")
}

配布アプリケーションへの帰属表記

  • ArcGIS Runtime SDK for iOSのクレジット “Mapping API provided by Esri ArcGIS Runtime SDK for iOS”を表記する。
  • マップデータのクレジット アプリケーション内で使用するマップデータのクレジットを表示する必要がある。 アカウント内の”マイコンテンツ”よりアプリで使用するマップの地形図セクションをクリックし、表示される詳細上画面の”Copyright Text”欄のテキストをアプリのAbout画面などに記載する。
  • Esriロゴの表示
    アプリがArcGIS Onlineで提供されるサービスを使用する場合、地図上にEsriロゴを常時表示する必要がある。ロゴ表示ガイドラインは以下のとおり。

    • ロゴ最小サイズ:43point x 25point
    • マップ上に直接配置し背景を付けてはならない
    • 配置場所はマップの左下
    • ロゴを透過させてはならない
    • ロゴに他のロゴを重ねてはならない(地図要素を除く)
    • ロゴのダウンロード:https://links.esri.com/ios/logos

Esriへの通知

リリースしたアプリ情報をEsriに連絡すればアプリ一覧に掲載してもらえる。

サンプルプロジェクトのリポジトリ

GitHub - wiggling/ArcGIS_Sample