はじめに
この記事は、「ArcGIS API for Python を使ってみよう」シリーズその③です。
当シリーズブログでは、ArcGIS API for Python(以下、Python API)の使い方をご紹介しています。
前回の記事では、Python API を用いた ArcGIS Online へのデータ作成方法をご紹介しました。今回は、ArcGIS Online 上に公開したデータを検索する方法をご紹介します。
アイテムの持つ情報から ArcGIS Online 上のアイテムを検索する
Python API を使用すると ArcGIS Online 上にあるアイテムを様々な切り口から検索することができます。検索を行う際の基本コードは次の通りです。1 行目は検索を行うコード、2 行目は検索結果を表示させるコードです。
search_result = gis.content.search(query = "【クエリ構文を設定】")
search_result
アイテムを検索するためには、ContentManager クラスの search() メソッドを使用します。検索の条件にクエリ構文を設定することで検索を行うことができます。サポートされているクエリ 構文については、search reference をご覧ください (英語)。
今回は次のクエリ構文を使用します。
- title:アイテムのタイトル
- uploaded:アイテムをアップロードした日付
- tags:アイテムのタグ
- access:アイテムの共有レベル
アイテム タイトルで検索
まずは、アイテムのタイトルで検索をしてみましょう。今回は、シリーズ②で ArcGIS Online に作成した、kanazawaParking というタイトルのフィーチャサービスを検索します。
アイテム タイトルで検索をする場合、クエリ構文に title を使用します。
searched_featureservice = gis.content.search(query="title: kanazawaParking ")
searched_featureservice
検索結果は次のように配列で返されます。
検索にはワイルドカードも使用することができます。
searched_featureservice = gis.content.search(query = "title: kanazawa*")
searched_featureservice
アイテムを ArcGIS Online にアップロードした日付で検索
アイテムを ArcGIS Online にアップロードした日付(作成日時)で検索してみましょう。クエリ構文に uploaded を使用し、期間を指定します。なお、ArcGIS 上での日付は Unix タイムで扱われているため、検索したい日付を Unix タイムに変換した上で、さらに 6 桁で 0 埋めして 19 桁にする必要があります。
以下では、指定日から現在時刻までの間にアップロードしたファイルを検索します。
import time
nowUnixtme = int(round(time.time() * 1000))
nowUnixtme_padded = '%019d' % nowUnixtme
import datetime
tstr = '2018-03-15'
tdatetime = datetime.datetime.strptime(tstr, '%Y-%m-%d')
unixtime = tdatetime.timestamp()
miliUnixtime = unixtime *1000
execUnixtme_padded = '%019d' % miliUnixtime
execUnixtme_padded
日付を Unix タイムに変換できたら、変換した Unix タイムをパラメータに指定して、検索してみましょう。
searched_date = gis.content.search(query="uploaded:["+ execUnixtme_padded+ " TO " + nowUnixtme_padded + "]")
searched_date
アイテムをタグで検索
アイテムを ArcGIS Online にアップロードするときに付けたタグで検索してみましょう。付けたタグは、ArcGIS Online 上でアイテム詳細を表示して確認することができます。タグを設定することでアイテムをより検索しやすくなります。
クエリ構文に tag を指定します。
searched_tag = gis.content.search(query= "tags:geodev_jp")
searched_tag
アイテムを共有レベルで検索
ArcGIS Online のアイテムはそれぞれに共有レベルが設定され、デフォルトでは非公開が選択されています。アイテム共有の詳細については ArcGIS Online ヘルプをご覧ください。
アイテムの公開レベルをまとめて確認したいときに便利です。
共有レベルは次の 4 種類です。
- private:非公開
- org:組織サイトのメンバーに公開
- public:全体に公開
- shared:グループに公開
searched_data = gis.content.search(query= "access:public")
searched_data
上記のコードでは、全体に公開しているアイテムを検索しています。
フォルダーを検索
ここまでは、アイテムの持つ情報をキーにアイテムを検索してきました。次は、ユーザーのフォルダーを検索します。
まずは自分が持っているフォルダーの一覧を取得してみましょう。結果は配列として返されます。
searched_folderlist = user.folders
searched_folderlist
では、結果として返ってきたフォルダー一覧の 1 つ目のフォルダーの中身を検索してみましょう。
user.items(folder = folderlist[0])
検索するフォルダー名がわかっている場合は、文字列で直接フォルダー名を指定します。
user.items(folder = "geodev_2018/03/15")
おまけ:ArcGIS Online 全体で公開されているアイテムを検索
自分の組織外を検索するかどうかを決めるプロパティである outside_org を True にすると、他のユーザーが全体に公開しているアイテムを検索することができます。
searched_public = gis.content.search("title:境界線表示用 ", outside_org=True)
searched_public
今回ご紹介したコードは ESRIジャパン GitHub 上で公開しています。
ぜひ、みなさんもお試しください!
当シリーズ記事では、引き続き Python API でできることを紹介していきます。次回は、今回の記事で検索したアイテムを削除する方法をご紹介予定です。
関連リンク集
ArcGIS 関連ページ
・ArcGIS API for Python(ESRIジャパン製品ページ)
・ArcGIS for Developers(ESRIジャパン製品ページ)
・ArcGIS Online(ESRIジャパン製品ページ)
・ArcGIS for Developers 開発リソース集
・ESRIジャパン オープンデータポータル
・ArcGIS API for Python(米国Esri ページ(英語))
シリーズブログ 関連ページ
・ArcGIS API for Python を使ってみよう:できることや使いどころ
・ArcGIS API for Python を使ってみよう ①:Jupyter Notebook で使うための環境構築
・ArcGIS API for Python を使ってみよう:ArcGIS Pro からの環境構築 (ArcGIS Pro 2.1)
・ArcGIS API for Python を使ってみよう ②:ローカル端末から ArcGIS Online へデータを作成してみよう
・ArcGIS API for Python を使ってみよう ③:ArcGIS Online のアイテムを検索してみよう
・ArcGIS API for Python を使ってみよう ④:ArcGIS Online 上のアイテムを削除してみよう
・ArcGIS API for Python を使ってみよう ⑤:Web マップを作成してみよう
・ArcGIS API for Python を使ってみよう ⑥:解析ツールを使ってみよう
ArcGIS 開発リソース集
・ArcGIS for API for Pythonのコンセプト
・インストールガイド
・ArcGIS for API for Pythonのための基礎環境:conda入門