プロジェクト

全般

プロフィール

ArcGIS Runtime SDK for Android

はじめに

地理情報システム(GIS)の主要会社Esri社がAndroidアプリケーション開発用に販売しているGISライブラリです。
2014年半ば頃に、開発者向けのライセンスが無償となり、開発したアプリケーションを運用する際にライセンスを購入するという形態になりました。

リリース情報

  • Ver.10.2.6-2リリース(2015-06-20)
    バグ修正
  • Ver.10.2.6-1リリース(2015-06-11)
    AARモジュールのx86ライブラリがx86エミュレータで動作しないバグの修正
  • Ver.10.2.6リリース(2015-05-26)
  • Ver.10.2.5リリース(2015-01)

公式サイト

https://developers.arcgis.com/android/

セットアップ

ArcGIS Runtime SDK for Androidは、mavenリポジトリで提供されているので、インターネット経由で取り込むことができます。また、ダウンロードパッケージも提供されているので、インターネット経由では取り込めない環境や、BETA段階のGIS解析機能を使いたいときはこちらを利用します。

mavenリポジトリを利用するセットアップ

Android Studioでプロジェクトを作成した後に、プロジェクト直下のbuild.gradleにmavenリポジトリURLを記述します。

HelloArcGis
  +-- build.gradle  
  +-- app\
        +-- build.gradle
  • <トップディレクトリ>\build.gradle
     allprojects {
         repositories {
             jcenter()
    +        maven {
    +            url 'http://dl.bintray.com/esri/arcgis'
    +        }
         }
     }
    
  • app\build.gradle
     android {
         :
         defaultConfig {
           :
         }
    +    packagingOptions {
    +        exclude 'META-INF/LGPL2.1'
    +        exclude 'META-INF/LICENSE'
    +        exclude 'META-INF/NOTICE'
    +    }
         buildTypes {
           :
         }
     }
     dependencies {
    +    compile 'com.esri.arcgis.android:arcgis-android:10.2.5'
         compile fileTree(dir: 'libs', include: ['*.jar'])
         compile 'com.android.support:appcompat-v7:22.1.1'
     }
    

ローカルに置いてセットアップ

ダウンロード版ArcGIS Runtime SDK for Androidを入手し、解凍・展開します。ダウンロードには無償のESRIデベロッパーアカウントの作成が必要となります。
ダウンロードしたファイルを解凍した中から必要なファイルをAndroid Studioプロジェクトの所定の場所にコピーします。

ArcGIS Runtime SDK for Androidの入手

開発者サイトにサインインします。アカウントは無償で作成できます。
http://developers.arcgis.com/

サインイン後に表示されるページの右上にあるダウンロードアイコンをクリックします(下図)。

ダウンロード可能なSDK一覧から、Android用をダウンロードします。

download-1.png

ArcGIS Runtime SDK for Androidの解凍・展開

以下は、WindowsにおけるJDKのインストール先と同じ場所に展開した例です。
ここに配置するには、Administrator権限が必要です。Administrator権限がない場合は、C:\ProgramData\Esri\arcgis-android-sdk-10.2.6などに置くのがよいかもしれません。

C:\Program Files\Java\arcgis-android-sdk-10.2.6\
  +-- doc\
  |     +-- api-doc\
  |           +-- arcgis-android\
  |           +-- arcgis-app-toolkit\
  +-- legal\
  +-- lib-project\
  |     +-- arcgis-android-v10.2.6.aar
  +-- libs
  |     +-- armeabi\
  |     |     +-- librender_script_analysis.so
  |     |     +-- librs.main.so
  |     |     +-- libruntimecore_java.so
  |     +-- armeabi-v7a\
  |     |     +-- librender_script_analysis.so
  |     |     +-- librs.main.so
  |     |     +-- libruntimecore_java.so
  |     +-- x86\
  |     |     +-- librender_script_analysis.so
  |     |     +-- librs.main.so
  |     |     +-- libruntimecore_java.so
  |     +-- arcgis-android-api.jar
  |     +-- arcgis-android-app-toolkit.jar
  |     +-- jackson-core-1.9.5.jar
  |     +-- jackson-mapper-1.9.5.jar
  |     +-- jcifs-1.3.17.jar
  +-- res\
  |     +-- values\
  |     |     +-- arcgis_ui_strings.xml
  |     +-- values-ar\
  |     |     +-- arcgis_ui_strings.xml
  :     :  
  +-- resources\
  |     +-- app6b\
  |     +-- mil2525c\
  +-- samples\
  |     +-- arcgis-android-samples-v10.2.6.zip
  +-- EMULATOR.txt
  +-- LICENSE.txt
  +-- README.txt
  +-- REVISIONS.txt

Android StudioプロジェクトへのArcGIS Runtime SDK for Android配置(1)

公式手順に記載の方法で、ネイティブライブラリ(*.so)とJavaライブラリ(*.jar)を使います。
Android Studioプロジェクトを作成したら、上述のArcGIS Runtime SDK展開ディレクトリから次のファイルをコピーします。

ネイティブライブラリのコピー

実行するAndroidデバイスのCPU種類に応じて、ArcGIS Runtime SDK for Android展開ディレクトリの中のlibs\armeabilibs\armeabi-v7a、またはlibs\x86のいずれかのディレクトリを、Android Studioプロジェクトのapp\src\main\jniLibsディレクトリ下へコピーします。

jniLibsディレクトリはデフォルトでは存在しないので作成します。

C:\Users\<ユーザー名>\Documents\android\MyApp> cd app\src\main
C:\Users\<ユーザー名>\Documents\android\MyApp\app\src\main> mkdir jniLibs
C:\Users\<ユーザー名>\Documents\android\MyApp\app\src\main>
C:\Users\<ユーザー名>\Documents\android\MyApp
  +-- app
  :     +-- src
  :     :     +-- main
  :     :           +-- jniLibs
  :     :           :     +-- armeabi-v7a
                                +-- librender_script_analysis.so
                                +-- librs.main.so
                                +-- libruntimecore_java.so
Javaライブラリのコピー

ArcGIS Runtime SDK for Android展開ディレクトリの中のlibsディレクトリ直下にあるjarファイルを、Android Studioプロジェクトのapp\libsディレクトリにコピーします。

C:\Users\<ユーザー名>\Documents\android\MyApp
  +-- app
        +-- libs
              +-- arcgis-android-api.jar
              +-- arcgis-android-app-toolkit.jar
              +-- jackson-core-1.9.5.jar
              +-- jackson-mapper-1.9.5.jar
              +-- jcifs-1.3.17.jar
リソースファイルのコピー
  • ArcGIS Runtime SDK for Android展開ディレクトリの中のres\values\arcgis_ui_strings.xmlを、Android Studioプロジェクトのapp\src\main\res\valuesディレクトリにコピーします。
  • ArcGIS Runtime SDK for Android展開ディレクトリの中のres\values-ja\ディレクトリを、Android Studioプロジェクトのapp\src\main\res\ディレクトリにコピーします。
C:\Users\<ユーザー名>\Documents\android\MyApp
  +-- app
        +-- src
              +-- main
                    +-- res
                          +-- values
                          |     +-- arcgis_ui_strings.xml
                          +-- values-ja
                                +-- arcgis_ui_strings.xml
設定ファイルの追記
  • app\build.gradle
     android {
         :
         defaultConfig {
           :
         }
    +    packagingOptions {
    +        exclude 'META-INF/LGPL2.1'
    +        exclude 'META-INF/LICENSE'
    +        exclude 'META-INF/NOTICE'
    +    }
         buildTypes {
           :
         }
     }
    

ArcGIS Runtime SDKのJARを利用するときは、次のパーミッションを明示的に設定します。(mavenリポジトリで参照するときは、AARのマニフェストにこの設定が記載されているのでアプリケーション側での設定は不要です。)

  • app\src\main\AndroidManifest.xml
        </application>
    
    +    <uses-permission android:name="android.permission.INTERNET" />
    +    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    +    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    +    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
    </manifest>
    

Android StudioプロジェクトへのArcGIS Runtime SDK for Android配置(2)

Androidライブラリパッケージ(*.aar)を使います。

Androidライブラリのコピー

ArcGIS Runtime SDK for Android展開ディレクトリの中のlib-projectディレクトリ直下にあるaarファイルを、Android Studioプロジェクトのapp\libsディレクトリにコピーします。

C:\Users\<ユーザー名>\Documents\android\MyApp
  +-- app
        +-- libs
              +-- arcgis-android-v10.2.6.aar
設定ファイルの追記
  • app\build.gradle
     android {
         :
         defaultConfig {
           :
         }
    +    packagingOptions {
    +        exclude 'META-INF/LGPL2.1'
    +        exclude 'META-INF/LICENSE'
    +        exclude 'META-INF/NOTICE'
    +    }
         buildTypes {
           :
         }
     }
     dependencies {
         compile fileTree(dir: 'libs', include: ['*.jar'])
         compile 'com.android.support:appcompat-v7:22.1.1'
    +     compile(name:'arcgis-android-v10.2.6', ext:'aar')
     }
    +repositories {
    +    flatDir {
    +        dirs 'libs'
    +    }
    +}
    

Androidデバイスの設定

Android Virtual Deviceで実行するときは、Targetを、Google APIsにしておきます。Android x.x.x で実行すると、インターネットへのアクセス権限を付与していてもエラーとなってしまいます。

Military Symbol

MIL-STD-2525C(米軍)およびAPP-6B(NATO)のシンボルを扱う機能について

10.2.5ではデータファイルが・・・

(お知らせ)10.2.6では含まれるようになりました。

ArcGIS Runtime SDK for Android 10.2.4には含まれていたresources/{app6b,mil2525c}ディレクトリが、ArcGIS Runtime SDK for Android 10.2.5には含まれていません。そこで、10.2.4のresourcesディレクトリ以下を抜粋 するか、別途ダウンロード します。

ダウンロードは以下URLから"ArcGIS Runtime SDK for Android"にあるUtilities欄にある"2525c Symbology Dictionary v10.2.x"と"App-6b Symbology Dictionary v10.2.x"です。
http://www.esri.com/apps/products/download/

Androidデバイスへリソースファイルの配置

adbコマンドでデバイス上にディレクトリを作成し、そこへファイルをコピーします。

C:\Users\torutk\Documents> adb shell
root@generic:/ # cd /sdcard
root@generic:/sdcard # mkdir -p ArcGIS/SymbolDictionary
root@generic:/sdcard # exit
C:\Users\torutk\Documents> cd "\Program Files\Java\arcgis-android-sdk-10.2.6\resources" 
C:\Program Files\Java\arcgis-android-sdk-10.2.6\resources> adb push mil2525c /sdcard/ArcGIS/SymbolDictionary
  :
C:\Program Files\Java\arcgis-android-sdk-10.2.6\resources> 

Military Symbolが表示されない

ArcGIS Runtime SDK 10.2.5 for Androidに、2525c Symbology Dictionary v10.2.xを組み合わせると、サンプルプログラムをそのまま動かしても表示されません。SDK 10.2.4のものを使用します。

ケース SDKバージョン Symbology Dictionary 結果
1 10.2.5 v10.2.x NG
2 10.2.4 10.2.4 OK
3 10.2.5 10.2.4 OK

プログラミング

背景地図(ベースマップ)

com.esri.android.map.MapViewを使います。

XMLでのレイアウト定義

    <com.esri.android.map.MapView
        android:id="@+id/map" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        mapoptions.MapType="Streets" 
        mapoptions.center="37.4, 140.4" 
        mapoptions.ZoomLevel="15" />
  • idとlayout_width、layout_heightは、Androidのビューのよくある定義です。
  • mapoptionsは、MapViewへの制御で、使用する地図種類("Streets")、表示中心緯度経度、表示縮尺を指定しています。
    • 地図種類に"Streets"を指定すると、ArcGIS Onlineで提供されるOpenStreetMapを参照します。

アクティビティでの制御

import com.esri.android.map.MapView;

public class MainActivity extends ActionBarActivity {
    MapView mapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.map);
    }
    @Override
    protected void onPause() {
        super.onPause();
        if (mapView != null)
            mapView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mapView != null)
            mapView.unpause();
    }
    :
}

デフォルトのゼスチャの抑制

MapViewがデフォルトで対応するピンチ操作での拡大・縮小、ドラッグ操作でのパニング、などを抑制したい場合は、MapOnTouchListenerクラスのサブクラスを作成し、抑制したいイベントのリスナーメソッドをオーバーライドし、MapViewのsetOnTouchListenerで設定します。

  • パニング操作の抑制
    • onDragPointerMoveメソッドをオーバーライドしtrueを返却
      onDragPointerMoveは、ドラッグ操作で呼ばれるメソッドです。ただしフリックと認定される操作では呼ばれません。
    • onFlingメソッドをオーバーライドしtrueを返却
      onFlingは、フリック操作で呼ばれるメソッドです。

操作

タッチパネル・インタフェースなしのADV上での操作

タッチパネル・インタフェースがない環境でADVを動かすと、マルチタッチの操作ができず困ることがあります。

地図の拡大・縮小

MapViewはデフォルトではピンチ操作で地図を拡大・縮小します。
マウスのみで操作する場合、ダブルクリック+上下にドラッグで地図の拡大・縮小ができます。

  • マウスボタン押下(1回目)
  • マウスボタン解放
  • マウスボタン押下(2回目)
  • マウスボタンを押下したままマウスを上下へ移動(上方向へ移動すると縮小、下方向で拡大)

developers_arcgis_com-1.png 表示 (7.43 KB) 高橋 徹, 2015/05/28 03:47

download-1.png 表示 (98.4 KB) 高橋 徹, 2015/05/28 03:52

クリップボードから画像を追加 (サイズの上限: 1 GB)