さわって覚える ArcGIS API for Python : 基本編 (GIS モジュール編)

924
0
2 weeks ago

さわって覚える ArcGIS API for Python : 基本編 (GIS モジュール編)

はじめに

ArcGIS API for Python は ArcGIS REST API を介して Web GIS (ArcGIS Online または ArcGIS Enterprise の特に Portal for ArcGIS) を管理・操作するための Python API です。

 

国内でのサポートは 2018 年から開始された比較的新しい API のため、まだ使い慣れていない方も多いかもしれませんが、ArcGIS API for Python も、他の API と同様、ガイドサンプルAPI リファレンスなど、英語のリソースが充実しております。

本シリーズブログでは、それらのリソースを最大限ご活用いただく第一歩として、ガイドの中で紹介されている主要なモジュールを中心に、実際にさわって覚えていただくようなノートブックと共に、全 5 回のシリーズとして紹介していく予定です。

 

  1. 基本編 (GIS モジュール編)
  2. フィーチャ データ編
  3. 場所検索、ジオコーディング編
  4. ネットワーク解析編(前編)/ ネットワーク解析編(後編)
  5. マッピング、可視化編
  6. ラスター編

 

1回目となる今回は、基本編として gis モジュールの概要を解説したあとに、「gis モジュールの使用」のノートブックをもとに、gis モジュールの主要な処理を解説していきます。紹介したノートブックは GitHub にも公開しますので、ご参照ください。

 

ArcGIS API for Python を初めて使う場合は環境構築が必要です。環境構築がまだの方は、開発リソース集のインストールガイドに掲載しておりますので、ご参照ください。

また、ArcGIS 製品をお持ちでない場合でも、ArcGIS for Developers のサイトからアカウントを作成するだけで、無料の ArcGIS Developer Subscription (Essentials) を有効化し、使い始めることが可能です。詳細は STAY HOME でマッピング & ロケーション開発を学ぶ方法の「ArcGIS for Developers & ArcGIS Developer Subscription」をご参照ください。

 

gis モジュールの概要

ArcGIS API for Python は、ArcGIS Online ArcGIS Enterprise が提供する Web GIS プラットフォームを使用して実装されています。 ArcGIS API for Python には、ArcGIS プラットフォーム上のデータやユーザーなどの要素を管理、操作するためのモジュール、クラス、および関数等があります。

 

ArcGIS API for Python は arcgis パッケージとして配布されています。 このパッケージの中には、最も基本になる gis モジュールを中心に、Web GIS で使用できる機能がさまざまなモジュールとしてまとめられています。

 

gis モジュールは最も重要なモジュールで、Web GIS への入口となり、ユーザー、グループ、およびコンテンツを管理 (作成、読み込み、更新、削除) する機能を提供します。Web GIS の管理者権限をもつユーザーは、自身の組織のメンバー、グループなどの管理にこのモジュールを使用します。

以下の画像は、gis モジュールとその様々なクラスを表した図です。

 

gis モジュールの主なクラスは次のとおりです。

  • GISWeb GIS (ArcGIS Online / ArcGIS Enterprise) にアクセスするクラスです。gis モジュールの中で最も重要なクラスであり、URL、ユーザー名、パスワードを引数に与えることで、組織の Web GIS のインスタンスが作成され、組織内のコンテンツの利用や、公開することができるようになります。組織の管理者であれば、ユーザーやグループなどを管理するためにも使われます。ArcGIS API for Python を利用する際は多くの場合スクリプトの最初に利用するクラスです。
  • User:上記の GIS のユーザーにアクセスするクラスです。ユーザーのプロフィールやロールを変更するメソッドや、当該ユーザーを削除するメソッド等が利用できます。
  • Role:組織のカスタムのロールにアクセスするクラスです。作成済みロールの権限をプロパティで確認したり、不要なロールを削除するメソッドを使うことができます。
  • Group:組織内のグループにアクセスするクラスです。グループへユーザーを追加したり招待したりするメソッドや、グループ自体を削除するメソッドがあります。
  • Item:組織内のアイテムにアクセスするクラスです。そのアイテムのコピーを作成したり、削除するだけでなく、例えば csv ファイルであれば緯度経度の情報を元にフィーチャ サービスとして公開することもが可能です。

上記のユーザー、ロール、グループ、コンテンツを管理する機能をもつ、以下のヘルパー クラスも用意されています。

  • UserManager:ユーザーを管理するクラスで、組織内のユーザーの検索、ユーザーの作成、利用可能なライセンスの確認などが可能です。
  • RoleManager:組織のロールを作成したり、作成されているロールのリストを出力したりすることができます。
  • GroupManager:組織内のグループの作成や検索が可能です。
  • ContentManager :組織内のコンテンツを管理するクラスで、アイテムの検索、複数のアイテムの複製や削除、ローカルの csv ファイルなどのアップロードなどが可能です。

 

gis モジュールの使用

ここからは 「gis モジュールの使用」のノートブックをもとに、以下の内容で gis モジュールの基本的な使い方についてご紹介します。

 

GISクラスの使用

ヘルパー クラス

ArcGIS API for Python Jupyter Notebook

Jupyter Notebook で地図表示

アイテムの検索

・レイヤーの追加

 

では、それぞれご紹介していきます。

 

GISクラスの使用

GIS クラスを使用するには、arcgis.gis モジュールから以下のように GIS をインポートします。

from arcgis.gis import GIS‍‍‍‍‍‍‍‍‍‍

 

GIS インスタンスを作成するには、以下のように ArcGIS Online もしくは ArcGIS Enterprise URL とログイン認証情報を渡します。

gis = GIS("https://www.arcgis.com", "<ユーザー名>", "<パスワード>")‍‍‍‍‍‍‍‍‍‍

 

URL を指定していない場合はデフォルトで ArcGIS Online (https://www.arcgis.com) が URL となります。次の例のように、ユーザー名とパスワードも指定しない場合は匿名ユーザーとして接続することになります。

gis = GIS()‍‍‍‍‍‍‍‍‍‍

 

また、以下のようにオブジェクトの後に '?' を追加して実行すると、ノートブックにそのオブジェクトのヘルプが表示されます。

gis?‍‍‍‍‍‍‍‍‍‍

 

Jupyter Notebook には、インテリセンス (入力支援機能) が用意されています。オブジェクトの後に「.」を入力して Tab キーを押すと、プロパティやメソッドのドロップ ダウンが表示されます。

 

ヘルパー クラス

GIS オブジェクトは、UserManagerGroupManagerContentManager といった、ユーザーやグループ、コンテンツ等の GIS リソースを管理するためのヘルパー クラスを提供します。これらは、それぞれ users, groups, content というプロパティで提供されています。

このようなヘルパー クラスは、それぞれのリソースを取得、検索、作成するget() メソッド、 search() メソッド、 create() メソッドを持っています。

ArcGIS API for Python でユーザーやグループ、コンテンツ等の GIS リソースにアクセスするには、一般的に上述した対応するヘルパー クラスを使用します。例えば、ユーザーにアクセスするには、gis オブジェクトの users プロパティを使用して UserManager クラスのインスタンスを取得し、get() メソッドを、ユーザー名を引数として以下のように使用します。

user = gis.users.get('<ユーザー名>')‍‍‍‍‍‍‍‍‍‍

 

ArcGIS API for Python Jupyter Notebook

ArcGIS API for Python は Jupyter Notebook と統合されており、GIS リソースを表示して対話的な操作ができるようになっています。例えば user オブジェクトは、以下のように記述することで Jupyter Notebook 上にプロパティを表示することができます。

user['firstName']‍‍‍‍‍‍‍‍‍‍

また、以下のように「.」を使用することでもプロパティを表示することができます。

user.lastName‍‍‍‍‍‍‍‍‍‍

 

Jupyter Notebook で地図表示

GIS オブジェクトにはマップ ウィジェットが含まれており、リソースの表示をするだけでなく、地図を表示することもできます。地図を表示するには、gis.map() のように記述します。引数に場所や住所を入力することで、その場所を中心とした地図を表示することができます。以下の例では引数に “品川区” を入力して品川区周辺の地図を表示しています。

map1 = gis.map("品川区")
map1
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

アイテムの検索

アイテムの検索は、gis.content.search() を使用することで、ノートブック内に検索結果を表示することができます。

search_result = gis.content.search("AED設置場所")
search_result‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

上記のように検索すると検索結果には “AED設置場所” が含まれていないものも表示されているように見えますが、タイトル以外でもタグやアイテム説明等に検索した文字が含まれていれば検索結果に表示されます。

では、ここからはより検索結果を絞り込むためにタイトルで検索する方法ご紹介します。

search() メソッドはクエリを設定することで検索結果を絞り込むことができます。以下の例のように search(title:AED設置場所”) と記述するとタイトルに “AED設置場所” が含まれるアイテムを検索することができます。

search_result = gis.content.search("title:AED設置場所")
search_result
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

クエリはアイテムのタイトル (title) の他にもタグ (tags) や所有者 (owner) 共有レベル (access) 等を使用して検索を行うことができます。例えば、タイトルとタグの 2 つを使用して検索する場合は、以下のように記述します。

search_result = gis.content.search("title:AED設置場所 tags:東京都,品川区")
search_result
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

このようにクエリ使用して検索条件を設定すると検索結果を絞り込むことができます。検索やクエリについての詳細は Accessing and creating content (英語) search reference (英語)をご参照ください。

 

レイヤーの追加

マップ ウィジェットにレイヤーを追加することもできます。マップ ウィジェットにレイヤーを追加するには add_layer() メソッドを使用します。以下では検索結果を絞り込んだ「AED設置場所」のレイヤーをマップ ウィジェットに追加しています。実行すると、マップ ウィジェットが更新され追加したレイヤーが表示されます。

map1.add_layer(search_result)‍‍‍‍‍‍‍‍‍‍‍

データ出典:東京都オープンデータカタログサイト 品川区 AED設置場所情報 を元にフィーチャ レイヤーを作成

 

ここまでは「gisモジュールの使用」のノートブックの内容で既存のデータに対する ArcGIS API for Python の基本的な使い方をご紹介しました。

さて、GISを使い始めるには Web GIS にデータを作成する必要があります。以前、「ArcGIS API for Python を使ってみよう」シリーズブログでもご紹介しておりますが、改めて csv データをアップロードしフィーチャ レイヤーを作成する方法について簡単にご紹介します。

 

コンテンツの作成

アイテムをアップロードするには、gis.content.add() 使用します。add() メソッドは、item_properties パラメーターで作成するアイテムのプロパティを受け取り、data パラメーターでファイルのパスを受け取っています。また、thumbnail パラメーターでは画像のパスを受け取り、アイテムのサムネイルを設定することができます。以下の例では add() メソッドを使用して csv ファイルを ArcGIS Online にアップロードしています。

data_path = (r"./data")
csv_path = os.path.join(data_path, "building.csv")
csv_properties={'title':'品川区公共施設',
                'type': 'CSV',
                'description':'品川区の公共施設情報',
                'tags':'arcgis, python'}
thumbnail_path = os.path.join(data_path, "thumbnail.png")

csv_item = gis.content.add(item_properties=csv_properties,
                           data=csv_path,
                           thumbnail = thumbnail_path)
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

csv ファイル出典:東京都オープンデータカタログサイト 品川区の公共施設位置情報

 

GISにアップロードした csv ファイルからレイヤーを作成するには Item クラスの publish() メソッドを使用します。以下では、上述のコードでアップロードした csv からレイヤーを作成しています。

緯度経度の情報を持つ csv ファイルであればその情報を元にレイヤーを作成することができます。

layer_item = csv_item.publish()‍‍‍‍‍‍‍‍‍‍

 

作成したレイヤーは上記でご紹介した add_layer() メソッドを使用して、同様にマップ ウィジェットに追加することができます。

 

※バージョン 1.8.0 では csv のファイル名が日本語だとエラーになるため、ファイル名は英数字にしてください。

 

おわりに

今回は、gis モジュールの概要と gis モジュールを使用した処理をご紹介しました。今回ご紹介したGIS にアクセスし、ノートブックで地図の表示やレイヤーの追加等といった処理は ArcGIS API for Python を使う上で基本的な部分になります。ArcGIS API for Python をご利用の際は冒頭でご紹介したガイドサンプルAPI リファレンスなどのリソースと併せて、本シリーズブログもご活用ください。

次回は「フィーチャ データ編」としまして、feature モジュールについてご紹介する予定です。

 

関連リンク

ArcGIS 関連ページ

ArcGIS API for Python(ESRIジャパン製品ページ)

ArcGIS for Developers(ESRIジャパン製品ページ)

ArcGIS Online(ESRIジャパン製品ページ)

ArcGIS for Developers 開発リソース集

ArcGIS API for Python(米国Esri ページ(英語))

 

シリーズブログ 関連ページ

ArcGIS API for Python を使ってみよう シリーズブログ

 

開発リソース集

ArcGIS for API for Pythonのコンセプト

インストールガイド

ArcGIS for API for Pythonのための基礎環境:conda入門

 

関連するノートブック

gis モジュールの使用

Using the GIS (英語)

Accessing and creating content (英語)

Version history
Revision #:
4 of 4
Last update:
2 weeks ago
Updated by:
 
Contributors