ArcGIS Runtime SDK for Android¶
- 目次
- 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用をダウンロードします。
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\armeabi
、libs\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は、フリック操作で呼ばれるメソッドです。
- onDragPointerMoveメソッドをオーバーライドしtrueを返却
操作¶
タッチパネル・インタフェースなしのADV上での操作¶
タッチパネル・インタフェースがない環境でADVを動かすと、マルチタッチの操作ができず困ることがあります。
地図の拡大・縮小¶
MapViewはデフォルトではピンチ操作で地図を拡大・縮小します。
マウスのみで操作する場合、ダブルクリック+上下にドラッグで地図の拡大・縮小ができます。
- マウスボタン押下(1回目)
- マウスボタン解放
- マウスボタン押下(2回目)
- マウスボタンを押下したままマウスを上下へ移動(上方向へ移動すると縮小、下方向で拡大)