DOC
|
はじめに 「さわって覚える ArcGIS API for Python」シリーズブログは、 ArcGIS API for Python のガイドやサンプル、API リファレンスなどのリソースを最大限ご活用いただく第一歩として、ガイドの中で紹介されている主要なモジュールを中心に、実際にさわって覚えていただくようなノートブックと共に、全 5 回のシリーズとして紹介していく予定です。 基本編 (GIS モジュール編) フィーチャ データ編 場所検索、ジオコーディング編 ネットワーク解析編(前編)/ ネットワーク解析編(後編) マッピング、可視化編 ラスター編 前回の記事では、フィーチャ レイヤーへのアクセス方法やフィーチャの編集についてご紹介しました。第 3 回目となる今回は、場所検索、ジオコーディング編として、「geocode() メソッドの理解」のノートブックをもとに、主要な処理を解説していきます。紹介したノートブックは GitHub にも公開しますので、ご参照ください。 ArcGIS API for Python の環境構築がまだお済みでない方は、開発リソース集のインストールガイドにインストール方法を掲載しておりますので、ご参照ください。 本記事では以下の内容でジオコーディングについてご紹介します。 geocode() メソッドを使用したジオコーディング address パラメーターを使用したジオコーディング search_extent パラメーターを使用したジオコーディング location パラメーターと distance パラメーターを使用したジオコーディング geocode() メソッドを使用したジオコーディング ジオコーディングとは、住所、地名、目標物、郵便番号などが示す場所に対して座標を付与することです。 geocoding モジュールの geocode() メソッドは、住所や地名等を含む文字列を指定することでジオコーディングすることができるメソッドです。ここからは geocode() メソッドが持つさまざまなパラメーターを使用したジオコーディングについてご紹介していきます。 ArcGIS Online を利用している場合、デフォルトでは ArcGIS World Geocoding Service がジオコーダーとして利用されます。以降では ArcGIS World Geocoding Service の利用を前提として話を進めます。なお、以下のコードを実行すると現在利用しているジオコーダーの URL を把握することができます。
from arcgis.gis import GIS
from arcgis.geocoding import get_geocoders
gis = GIS(“ポータルの URL”, “ユーザー名”, “パスワード”)
get_geocoders(gis) address パラメーターを使用したジオコーディング geocode() メソッドの address パラメーターではジオコーディングする住所や地名、郵便番号、または POI を含む文字列を指定することができます。 以下のコードでは geocode() メソッドに住所を入力しマップ ウィジェットにジオコーディング結果を表示します。 まずは、ジオコーディング結果を表示するマップ ウィジェットを表示します。 # インポート
from arcgis.geocoding import geocode
from arcgis.gis import GIS
# 地図の表示
gis = GIS(“ポータルの URL”, “ユーザー名”, “パスワード”)
map = gis.map("東京都千代田区平河町")
map 続いて geocode() メソッドで “東京都千代田区平河町2-7-1” の住所を指定しジオコーディングを行います。 # geocode() メソッドでジオコーディング
single_line_address = "東京都千代田区平河町2-7-1"
esrij = geocode(single_line_address)[0] ジオコーディングの結果は辞書 (dictionary) 型で返却され以下のキーを持っています。 score:入力した住所が返却された候補の住所情報とどの程度マッチしているかを 0 ~ 100 の値で表します。100 は完全に一致していることを表し、低い値は一致度合いが低いことを表します。 location:マッチした住所の位置情報(x, y)が含まれています。 address:マッチした住所が含まれています。 attributes:ジオコーディング結果の情報をさまざまなフィールドで表します。各フィールドの詳細については Output Fields をご参照ください。 extent:マッチした住所のエクステントが含まれています。このエクステントは、マッチしたフィーチャを表示するために、ArcGIS World Geocoding Service で設定されている値です。空間参照は WGS84 が用いられています。 最後にジオコーディング結果の location キーに含まれる XY の情報を使用してマップ ウィジェットに表示します。 以下のコードではポップアップを設定して draw() メソッドの引数にジオコーディング結果の location (esrij['location']) を設定し、マップ ウィジェットに描画しています。また、ここではシンボルを見やすいように調整しています。シンボル設定に使用する辞書 (dictionary) は GitHub で公開されているツールを使うと簡単に生成できます。 # ポップアップを追加しマップ ウィジェットに描画
popup = {"title" : "ESRIジャパン株式会社",
"content" : esrij['address']}
# シンボルを設定(設定用の辞書生成ツール: https://esri.github.io/arcgis-python-api/tools/symbol.html)
symbol = {"color":[0,0,128,128],
"size":18,
"type":"esriSMS",
"style":"esriSMSCircle",
"outline":{"color":[0,0,128,255],
"width":1,
"type":"esriSLS",
"style":"esriSLSSolid"}}
map.draw(esrij['location'], popup, symbol=symbol) マップ ウィジェットを確認するとジオコーディングの結果が表示されます。表示されたポイントをクリックしてポップアップも確認してみましょう。 search_extent パラメーターを使用したジオコーディング search_extent パラメーターでは、座標の組み合わせを指定し、検索範囲を特定の地域に限定することができます。このパラメーターを使用することで、例えば現在のマップのエクステント内にある場所や住所を検索する際に活用することができます。 以下の例では、東京都千代田区平河町のジオコーディング結果のエクステント内にある病院を検索しています。 まず、東京都千代田区平河町でジオコーディングを行いマップ ウィジェットを表示します result = geocode("東京都千代田区平河町")[0]
map = gis.map(result)
map 先ほどご紹介したようジオコーディング結果の辞書 (dictionary) にはエクステントの情報 (result[‘extent’]) が含まれています。 以下のコードでは、ジオコーディング結果から取得したエクステント (result[‘extent’]) をgeocode() メソッドのsearch_extent パラメーターに指定して検索範囲を東京都千代田区平河町のジオコーディング結果のエクステント内に絞り込んでいます。 # 平河町周辺の病院をジオコーディング
# ArcGIS World Geocoding Service を用いて郵便局、病院など不特定のPOIを検索する際は英単語で行うことをおすすめします。
# 平河町周辺の病院をジオコーディング
hospitals = geocode("hospital", search_extent = result['extent'])
# マップ ウィジェットに描画
for hospital in hospitals:
map.draw(hospital['location'], symbol = symbol) location パラメーターを使用したジオコーディング 本記事執筆時点では、ArcGIS API for Python の API リファレンスの location パラメーターの説明では、 distance パラメーターと併せて用いるものとして説明されていますが、ラッピングしている ArcGIS REST API のドキュメントでは distance パラメーターは既に廃止されており、パラメーターを渡しても認識されない旨が記載されています。 location パラメーターは指定した位置からの近さに基づいてジオコーディングの候補をソートするために用います。location location パラメーターを使うことで指定した座標から近い場所にある候補ほど上位に表示されるようになります。そのため、例えばモバイル アプリケーションで GPS で取得したユーザーの位置から近い場所や、現在表示しているマップの中心地に近い場所などを優先的に検索したい場合などに便利です。 location パラメーターは、XY 座標で表現するか、JSON ポイント オブジェクトとして表現することができます。XY で表現する場合、空間参照は WGS 84 でなければなりません。そうでない場合は、座標の空間参照は、JSON オブジェクトで定義することができます。JSON での定義についてはこちらをご参照ください。 以下の例では東京都千代田区平河町2-7-1 をジオコーディングし、その座標を location に指定して郵便局を検索しています。 # 中心となる地点をジオコーディング
esrij = geocode("東京都千代田区平河町2-7-1")[0]
esrij['location'] location パラメーター上記のジオコーディング結果の XY 座標 (esrij['location'])を指定し、郵便局を検索します。 post_offices = geocode("post office", location=esrij['location'])
for post_office in post_offices:
print(post_office["attributes"]["LongLabel"])
比較のために location パラメーターを指定せずに実行してみましょう。この場合、東京都千代田区平河町2-7-1 の座標からの近さは表示順に影響を与えなくなります。そのため、海外の郵便局が上位に表示されます。 post_offices = geocode("post office")
for post_office in post_offices:
print(post_office["attributes"]["LongLabel"])
おわりに 今回は、geocode () メソッドを使ったジオコーディングについてご紹介しました。geocode () メソッドは他にも返却される結果の件数を制御する max_location や、結果を FeatureSet として返却するかどうかを指定する as_featureset パラメーターなどが提供されており、それぞれを組み合わせたりすることで検索結果の絞り込みや活用の幅を広げることができます。ご紹介したもの以外のジオコーディングの方法については「geocode() メソッドの理解」や「ジオコーディング結果のフィルタリング」のノートブックの他、「Understanding the geocode() function」や「Filtering your geocoding results」等のガイドもご参照ください。また、ArcGIS API for Python を使用する際は冒頭でご紹介したガイドやサンプル、API リファレンスなどのリソースと併せて、本シリーズブログもご活用ください。 次回は「ネットワーク解析編」としましてルート検索についてご紹介する予定です。 関連リンク 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入門 関連するノートブック geocode() メソッドの理解 ジオコーディング結果のフィルタリング Understanding the geocode function (英語) Filtering your geocoding results (英語)
... View more
06-17-2020
10:19 PM
|
0
|
0
|
3694
|
DOC
|
※ この記事は、米国 Esri 社のブログ記事「Developer Tools for COVID-19 Apps」を翻訳したものです。 もしあなたが、斬新な可視化や対応支援をおこなうような新型コロナウイルス感染症 (COVID-19) のアプリを開発しているのなら、Esri はあなたのソリューションに利用することができる無償のロケーション サービスと SDK の一式を提供します。 このブログは ArcGIS for Developers を通じて使うことができるいくつかの重要なサービス (OpenStreetMap (OSM) ベースマップとスタイル設定、、そしてデータ ホスティング) について、シンプルなマッピング アプリを作成する観点から紹介します。これらのサービスを使用して利益を得る、または200MB以上のデータをホストする場合を除いて、無償で利用することができます (詳細 ※ ) ※ 具体的には ArcGIS Online(開発者向け)Subscription で毎月無償提供される50クレジットの範囲内でデータ ホスティングを含む各種サービスを利用できます。自動で有償プランに切り替わることはありません。サービスの利用によるクレジットの消費量については ArcGIS Online のページを参照ください。 はじめるには 要約 (主要なリンクのみまとめています):アカウント作成とアプリの骨組み部分を作成するチュートリアル 最初のステップは無償の開発者アカウントを作成 ※ することです。このアカウントはマップのスタイル設定の管理、データのホスト、セキュアなサービスのためのトークンの生成などに使用されます。次に、このチュートリアルに従って基本的な Web アプリの骨組みを作成しましょう。 ※ 開発リソース集の開発者アカウントの作成で日本語のガイドを掲載しています。 このブログの残りの部分では、JavaScript の Web アプリについて紹介します。しかし、リンクしているチュートリアルではその他のプログラミング言語とプラットフォームにも共通するコンセプトをカバーしています。 これがアウトプットです (私達はアメリカ合衆国を俯瞰できるように中心点を変更しています)。 ベースマップの選択 要約:OSM と イコール アース図法のマップ ギャラリー、スタイル設定とアプリへの追加のチュートリアル 次はベースマップを更新しましょう。このリンク先では、OSM データから作成された高速描画のが豊富に提供されています。このチュートリアルを行うことで、これらのマップのスタイル設定をあなたの創造的なセンスに合うように変更することができます。 私の同僚の John Nelson も、いくつかの素晴らしいイコール アース図法のベースマップを公開しています。これらは COVID-19 の場合のように人口に基づいた可視化をする際により適切に表現することができます (詳細)。 ベースマップを選んだら、アイテムをクリックし、アイテム ID を URL から取得して、このチュートリアルに従ってあなたのアプリに追加しましょう。JavaScript の場合、更新した主要部分は次のとおりです。 // OSMのグレイ ベクター ベースマップを URL から取得します:
// https://www.arcgis.com/home/item.html?id=1932e7d4432d45dabc0d4d13109c1f09
var basemap = new Basemap({
baseLayers: [
new VectorTileLayer({
portalItem: {
id: "1932e7d4432d45dabc0d4d13109c1f09"
}
})
]
});
var map = new Map({
basemap
}); アウトプットはこちらを参照してください。 データのホストと追加 要約:データのアップロード、スタイルとポップアップの設定、そしてアプリへの追加のチュートリアル。サービスのベスト プラクティス 無償の200MB のベクター データのホスティングを活用しましょう!このチュートリアルでは CSV、 GeoJSON、そしてその他のデータ ソースを UI または Python を使ってアップロードします。アップロードしたら、このチュートリアルを通じて、アプリに追加することが可能な RESTful なサービスを作成します。 サービスは編集、動的なタイル表示、空間または統計的なクエリなどをサポートしています。これらのサービスは一日に数十億のリクエストを処理することがきますので、重要な運用の実践方法についてはこのブログを参照してください。アプリでは、レイヤーのスタイルの設定や (チュートリアル) 、クリックされたときのポップアップにデータを表示させる (チュートリアル) ことができます。 デモとして、この Unacast のソーシャル・ディスタンシングのデータを所有しており、アップロードしたと仮定しましょう。主要なコードの更新部分は次のようになります。 // Unacast social distancing layer
// pulled from REST API link (bottom right) of item page
// https://www.arcgis.com/home/item.html?id=ab72fb3e9bf24d9594f0b942718bffeb
var layer = new FeatureLayer({
url: 'https://services.arcgis.com/DO4gTjwJVIJ7O9Ca/arcgis/rest/services/Unacast_Latest_Available__Visitation_and_Distance_/FeatureServer',
renderer: {
type: 'unique-value',
field: 'grade_distance',
defaultSymbol: {type: 'simple-fill', outline: {color: 'gray', width: '0.1px'}},
legendOptions: {title: 'Grade'},
uniqueValueInfos: [{
value: 'A',
symbol: {type: 'simple-fill', color: '#0070ff', outline: {color: 'gray', width: '0.1px'}}
}, {
value: 'B',
symbol: {type: 'simple-fill', color: '#bed2ff', outline: {color: 'gray', width: '0.1px'}}
}, {
value: 'C',
symbol: {type: 'simple-fill', color: '#e6e600', outline: {color: 'gray', width: '0.1px'}}
}, {
value: 'D',
symbol: {type: 'simple-fill', color: '#ffaa00', outline: {color: 'gray', width: '0.1px'}}
}, {
value: 'F',
symbol: {type: 'simple-fill', color: '#e60000', outline: {color: 'gray', width: '0.1px'}}
}],
},
popupTemplate: {
title: "{county_name}",
content: "Unacast's social distancing grade is {grade_distance}"
}
});
var map = new Map({
basemap,
layers: [layer]
}); アウトプットはこちらを参照してください。 注:個別にレイヤーを追加、スタイリングする代わりに、ArcGIS Online の Map Viewer を使用して Web マップを作成することも可能です。Web マップはアプリにコード 1 行で追加することができます。詳細はWeb マップのチュートリアル、レイヤーのスタイル設定のチュートリアル、そしてWeb マップを追加するチュートリアル ※ を参照してください。 ※ 日本語で Web マップの作成・表示に関するブログ記事も公開しているのでご参照ください。 信頼性の高いデータの追加 要約:データ ソースと上記と同じチュートリアル コロナ ウイルス対策の一貫として、数多くの信頼性の高い地理空間データが全世界の GIS コミュニティや信頼できるパートナーから提供されています。これらの中には上記で紹介した Unacast のデータや、ジョンズ・ホプキンス大学の現在の COVID-19 の発生件数、Definitive Healthcare の病床数などが含まれています。これらのデータセットはここから検索し、上記のチュートリアルと同じ手順であなたのマップに追加することができます。 注:これらのデータは多くの業務の中で価値を付加することができ、クライアントのアプリから直接呼び出す必要はありません。REST API に直接アクセスしたり、Python と Pandas を使ってデータ処理のパイプラインを作成したりすることもできます (ガイド)。 ユーザー エクスペリエンス を組み込む 要約:検索とルート案内のチュートリアル、その他の機能 データとレイヤーは、アプリの中でその他の位置情報サービスや解析処理と組み合わせることで、情報量が多く説得力のあるソリューションを構築することができます。検索とルート案内機能 ※ 、そして強力なビジュアライゼーションの作成に関するチュートリアルがあるのでご参照ください。 ※ 訳注:日本語でルート案内に関するブログ記事も公開しているのでご参照ください。 ここではユーザーが場所を発見できるようにするための Search と凡例を追加するだけにとどめますが、追加のアイディアのために最後の「追加のリソース」もチェックしてください。主なスニペットは次のとおりです。 var searchWidget = new Search({
view
});
view.ui.add(searchWidget, 'top-right');
var legendWidget = new Legend({
view
});
view.ui.add(legendWidget, 'bottom-right'); 全てのアウトプットはこちらを参照してください。 追加のリソース これが最終的なアウトプットです!以下は、もしあなたがより深く学びたい場合に私がおすすめするいくつかのリソースです。 Esri の COVID-19 resources と ArcGIS for Developers resources ページ GitHub 上のサンプルアプリ– これらはアプリに追加することができる API のその他の機能と対話的な UX に焦点を当てています (フィードバックやプル リクエスト歓迎です!)。 構成可能なアプリ– もしすぐにアプリを作成する必要があったり、デバッグのことを考えたりしたくなければ、Esri はたくさんの構成可能なアプリのビルダーとテンプレートを提供しています。 Disaster response program – もしあなたが追加のリソースや支援が必要であれば、Esri は公衆衛生当局や他の組織を緊急の GIS 支援で支援します ※ 。 ※ 国内においても同様に無償の支援プログラムを展開しています。 開発ブログとチュートリアル ※ : 全ての開発チュートリアル | Google Maps からの移行 | スマートマッピングのブログ | クライアント サイドのクエリのブログ ※ 日本語でも Web アプリ開発のブログをシリーズ記事として公開しています。また、上記Google Maps からの移行については翻訳記事を公開しています。 カートグラフィーのブログ: | Mapping Coronavirus, responsibly | Improve Your COVID-19 Cases Map | Better colors for better mapping
... View more
04-30-2020
01:42 AM
|
0
|
0
|
773
|
DOC
|
はじめに みなさんは Web AppBuilder for ArcGIS (以下、「Web AppBuilder」)を使用したことはありますでしょうか。ArcGIS Online や ArcGIS Enterprise をご利用されている方であれば一度は使ったことがあると思いますが、Web AppBuilder を活用すると、コーディングをしなくてもウィジェット (機能別の部品) を組み合わせるだけで簡単に Web アプリケーションを作成することができます。 2019 年の Esri User Conference の発表では、Web AppBuilder で作成された ArcGIS Online 上の Web アプリケーションの総数が 500,000 を超えており、多くのお客様にご利用いただいております。一例としてあげると、以下のようなものがあります。 国内 出典:放置自転車情報マップ (大東京防犯ネットワーク 防犯情報マップ) 海外 出典:Manufacturing sites in Sweden (Business Sweden) そんなWeb AppBuilder を拡張するために、開発者向けには、Web AppBuilder for ArcGIS (Developer Edition) (以下、「Developer Edition」) を提供しています。細かいUIのカスタマイズが必要な場合や、用意されているウィジェット (一覧) では対応できないような機能が要件にある場合に、ご利用頂くことが可能です。 Developer Edition を利用してカスタマイズした Web アプリケーション Developer Edition を利用してカスタマイズした Web アプリケーションの例では以下があります。クリックした地点の属性情報をアプリ左側に表示させる機能や住所検索機能を拡張しています。 出典:都市計画情報マップ (千代田区都市計画情報提供ポータル) Developer Edition のデプロイ パターン 先日、Developer Edition のバージョン 2.15 をリリースしましたが、皆様から、デプロイに係る問い合わせを受けることがよくあります。そこで、当該リリースに合わせて主なデプロイ パターンの解説を開発リソース集に掲載いたしました。 以下ではその内容を簡単にご紹介いたします。エンド ユーザーの利用形態や要件によって最適なデプロイは異なりますが、主なパターンとしては次の 3 つが考えられます。 1. Web アプリケーションをデプロイ Developer Edition を使って、Web マップやウィジェットも含めて Web アプリケーションとして作成し・デプロイするパターンです。マップやウィジェットが固められているため柔軟性には欠けますが、特定の業務で継続的に利用されることが想定される場合や、エンドユーザーによる設定変更等が不要な場合等に活用できます。 作成からデプロイまでの流れは Developer Edition を使って Web アプリケーションを作成後、作成した Web アプリケーションをダウンロードし、Web サーバーに配置するだけです。 ご注意いただきたい点は、作成した Web アプリケーションは独自に用意した Web サーバーに配置する必要があることです。 2. ウィジェットをデプロイ カスタムのウィジェットのみを作成・デプロイするパターンです。エンド ユーザーさま自身が ArcGIS Online や ArcGIS Enterprise の Web AppBuilder を使用して web アプリケーションを作成することを想定しているものの、デフォルトの Web AppBuilder のウィジェットには無い機能が必要な場合にカスタム ウィジェットを追加しておくことができます。 この場合、ご注意いただきたい点は 2 つあります。1 つ目は、Web アプリケーションをデプロイする時と同様、作成したウィジェットは独自の Web サーバーに配置する必要があります。もう 1 つは、作成したウィジェットは ArcGIS Online の Web AppBuilder からは利用できないことです。ArcGIS Enterprise の Web AppBuilder を使用する必要があります。 3. テンプレートをデプロイ Esri が用意している web アプリケーションのテンプレートとは別に、Web AppBuilder で作成した web アプリケーションをベースに独自のテンプレートを作成・配置するパターンです。マップや設定の変更のみでエンドユーザーがWebアプリケーションを作成することができます。 ただし、今回開発リソース集でご紹介している方法は、開発環境と運用環境が同じでなる点にご注意ください。運用時においてもユーザーが Developer Edition にアクセスできる必要があります。 まとめ 以下の表は、上記3つのパターンについて、必要なコンポーネント等を表にまとめたものです。 パターン 開発時に必要なコンポーネント 運用時に必要なコンポーネント ArcGIS Online での 利用可否 ArcGIS Enterpriseでの 利用可否 Web アプリケーションをデプロイ Node.js、Developer Edition Web サーバー、ArcGIS Online もしくは ArcGIS Enterprise ◯ ◯ ウィジェットをデプロイ Node.js、Developer Edition Web サーバー、ArcGIS Enterprise ✕ ◯ テンプレートをデプロイ Node.js、Developer Edition Developer Edition、ArcGIS Online もしくは ArcGIS Enterprise ◯ ◯ より詳しい内容は開発リソース集のデプロイ パターンのページをご覧ください。 関連リンク Web AppBuilder for ArcGIS (Developer Edition) (ESRIジャパン 製品ページ) ArcGIS for Developer開発リソース集 Web AppBuilder for ArcGIS (Developer Edition) デプロイパターン
... View more
01-31-2020
12:30 AM
|
0
|
0
|
1394
|
DOC
|
はじめに 2019 年も残すところあとわずかとなりました。 マッピング & ロケーション開発のプラットフォームである「ArcGIS for Developers」を最大限活用いただくために、 ESRIジャパンの開発者製品を担当するチームでは、多くのセミナーの開催や ArcGIS の開発に係る情報発信を行ってまいりました。 これらの資料やサンプルコードは、その都度ブログやフォローアップのメール等でお知らせしてまいりましたが、見逃してしまった方もいらっしゃるかもしれません。 また、ArcGIS プラットフォームを拡張するパターンも多岐にわたり、開発者向けの製品が多いことから、初めての方は欲しい情報を探す時間が長くなりがちです。 そこで、今回の記事では、2019 年に公開したサンプル コードやブログ記事などを中心に、API/SDK別にリンクをまとめておきたいと思います。各リンクにはそれぞれ、紹介している内容のレベルの目安として、【基礎】、【応用】、【最新情報】のフラグを付けています。気になったリンクがあれば、この機会にブックマーク等していただければ幸いです。 ArcGIS for Developers & ArcGIS Developer Subscription イベント資料 開発塾2019:はじめに_まとめ ArcGIS プラットフォーム及び開発者製品・サブスクリプション プログラムの概要 マッピング & ロケーション 開発 最前線:01_ArcGIS_開発者製品の概要と最新動向 上記を簡潔に説明したものに加え、ArcGIS for Developers を使ってできることも記載 ArcGIS API for JavaScript イベント資料 JavaScript API ハンズオン(資料/コード) 【基礎】 API を使用した Web アプリ開発の基礎を学べるハンズオン 開発塾2019:ウィジェット開発ハンズオン(資料/コード) 【応用】 API で利用可能なカスタム ウィジェットの開発手法を学べるハンズオン マッピング&ロケーション開発最前線:Web アプリケーション(資料/コード) 【最新情報】 WebGLによるパフォーマンス向上やスマートマッピング、編集ウィジェット等 ブログ はじめての Web マッピングアプリケーション開発シリーズ【基礎】 API を使用した Web アプリ開発の基礎を紹介するシリーズ記事 Web マッピング アプリ開発に便利なツール紹介シリーズ【応用】 TypeScript を使用した開発やカスタム ビルドの作成方法等を紹介するシリーズ記事 レイヤーを拡張して「Tile Map Service」のサービスを表示【応用】 カスタム レイヤーを作成して今昔マップを表示してみた記事 ガイド カスタム フォント【応用】 ラベルやグラフィック等で独自フォントを使用する手順を紹介するガイド Web AppBuilder for ArcGIS (Developer Edition) ガイド ウィジェット一覧表【基礎】 Web AppBuilder for ArcGIS(ArcGIS Online 版、ArcGIS Enterprise 版、Developer Edition 版)で提供されているウィジェットの一覧表 ArcGIS Runtime SDK イベント資料 Runtime SDK ハンズオン(資料/コード) 【基礎】 ArcGIS Runtime SDK for .NET を使用したデスクトップ アプリ開発の基礎を学べるハンズオン 開発塾2019:ArcGIS プラットフォームを活用した調査アプリケーション構築までのハンズオン(資料/コード)【応用】 Esri のサンプル(Data Collection for .NET)を拡張して現地調査アプリを開発するハンズオン(デプロイ方法の手順は近日公開予定) マッピング&ロケーション開発最前線:ネイティブ アプリケーション(資料/コード) 【最新情報】 オフライン利用のワークフロー(プレプラン/オンデマンド)や AR 連携 ArcGIS Pro SDK for .NET イベント資料 ArcGIS Pro SDK for .NET ハンズオン【基礎】 SDK を使用した ArcGIS Pro 拡張の基礎を学べるハンズオン マッピング&ロケーション開発最前線:デスクトップ拡張、スクリプト(資料/コード) 【最新情報】 構成管理やアドイン(ジオコーディング、座標系設定、属性テーブル等)による ArcGIS Pro の拡張 ブログ ArcGIS Pro SDK for .NET を使用した機能開発シリーズ【応用】 SDK を使用したアドイン開発の実装方法と解説を交えたシリーズ記事 ArcGIS API for Python イベント資料 ArcGIS プラットフォームを活用した調査アプリケーション構築までのハンズオン(開発塾2019)(資料/コード(zipファイル内のNotebook参照))【基礎】 後半で ArcGIS API for Python を使用した基礎的な可視化・集計を紹介 GIS コミュニティフォーラム:ArcGISでデータサイエンスしよう ~GIS 解析とそのプロセスの新しい共有方法~(ブログ/コード)【応用】 Notebook Server (※ 現在は国内未サポートです) で ArcGIS API for Python を使用 GIS コミュニティフォーラム:ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~ (ブログ/コード)【応用】 ArcGIS API for Python を使用した物体検出 マッピング&ロケーション開発最前線:最新テクノロジー (資料/コード)【最新情報】 勾配ブースティングを用いた機械学習、ディープ ラーニングで動画内の物体検出 ブログ ArcGIS API for Python を使ってみようシリーズ【基礎】 API の使い方の基礎を紹介するシリーズ記事 ArcGIS API for Python のコアコンセプト(その1、その2)【基礎】 API の基本となるコンセプトや、環境構築に係るベストプラクティスを解説 ArcPy イベント資料 GIS コミュニティフォーラム:ArcGIS ユーザーのためのデータハンドリング~さまざまなデータ活用の第一歩~ (ブログ/コード)【基礎】 いくつかのデータを例に Python を活用したデータハンドリングの手法を紹介 Web GIS で集めたデータを ArcGIS Pro でも活用しよう! ~レポート作成までのステップ~ (ブログ/コード)【基礎】 ArcPy を使った Web GIS のデータから ArcGIS Pro でレポート作成する処理を紹介 Python を使って作業の効率化を図ろう! (GIS 学会 ハンズオン セッション)【基礎】 arcpy を使った自動化の基礎を解説 マッピング&ロケーション開発最前線:デスクトップ拡張、スクリプト (資料/コード)【最新情報】 CIM を用いたシンボル変更、arcpyとArcGIS API for Python を用いたデータ処理自動化 ブログ Python を使って作業の効率化を図ろう!シリーズ【基礎】 ArcPy を使った処理の基本を紹介するシリーズ記事 ArcPy でのフィーチャ データの利用【基礎】 ArcPy でのフィーチャ データ, テーブルの操作について Esri Developer Summit 2019 のセッションスライドに沿って紹介 ArcGIS の Python でのマルチプロセス処理【応用】 ArcPy とPython を使用したマルチプロセス処理のベストプラクティスを紹介 ArcGIS の Python でのマルチプロセス処理 - 実装例【応用】 上記ベストプラクティスに従い現実のデータをマルチプロセス処理したコードを紹介 ブログ記事 アクセス数 TOP 5! 開発製品担当チームでは特にブログに力を入れて発信してきました!上記と重複する記事もありますが、2019年 公開記事の閲覧数 (2019 年 12 月 27 日時点) が多かった記事 TOP 5 をご紹介します! 第 1 位:「地理院地図Vector」(仮称)を ArcGIS で表示してみました【応用】 国土地理院が試験公開中の「地理院地図Vector」(仮称)を、ArcGIS API for JavaScript で表示できるか試行 第 2 位:ArcGIS の Python でのマルチプロセス処理【応用】 ArcPy とPython を使用したマルチプロセス処理のベストプラクティスを紹介。実装編もご覧ください。 第 3 位:GISコミュニティフォーラム開催報告:「ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~」②【応用】 ArcGIS API for Python を使用した物体検出のワークフローを解説 第 4 位:Web マッピング アプリ開発に便利なツールをご紹介:~Visual Studio Code で開発環境を構築~【基礎】 Visual Studio Code を使って ArcGIS API for JavaScript の開発環境を構築をインストールから紹介 第 5 位:Web マッピング アプリ開発に便利なツールをご紹介:~ TypeScript を使用したアプリ開発~【応用】 TypeScript と ArcGIS API for JavaScript の型定義ファイルを使うための開発環境の設定方法を紹介 まとめ ここではご紹介しきれなかったものもありますが、上記の中身を見ていただければそれぞれの API/SDK の基礎から応用までを一とおりご確認いただけると思います。ESRIジャパンの GitHub では他にもコードを公開しており、例えばworkshop リポジトリでは過去のイベントで発表した資料やコードがまとまっていますので、さらに色々見てみたいという方はご覧ください。 来年も多くのサンプル コードやブログ記事など、ArcGIS で開発する皆様に役立つ情報をお届けしたいと思います。 それでは、よいお年をお過ごしください。来年も引き続きよろしくお願いいたします。 ■関連リンク ArcGIS for Developer 開発リソース集 GeoNet 開発ブログ Esri Japan GitHub
... View more
12-26-2019
09:33 PM
|
0
|
0
|
1642
|
DOC
|
はじめに このシリーズでは「ArcGIS Pro SDK for .NET を使用した機能開発」のシリーズ記事として、ArcGIS Proを拡張するためのアドイン開発時によく使う便利なクラスやメソッド、また、それらを用いた実践的な開発をご紹介しています。本シリーズで実装しているソースはすべて GitHub に格納してありますので、ArcGIS Pro SDK for .NET(以下 Pro SDK)を使用する開発の参考にしてください。 本シリーズのこれまでの記事では、以下のような機能の実装方法をご紹介しました。 第 1 弾: マップとの対話的な操作により選択したフィーチャの属性表示を行う機能 第 2 弾: フィーチャの強調表示、フィーチャへのズーム機能 第 3 弾: レイヤーのレンダラーの設定 第 4 弾となる今回は、アノテーションを操作する機能の実装方法をご紹介します。 本記事の対象読者 ・Pro SDK を使用してArcGIS Pro のアドイン開発を行っている方 ・Pro SDK を使用したArcGIS Pro のアドイン開発をこれから行う、もしくは、検討している方 ※「ArcGIS Pro SDK for .NET を使った独力での開発」でご紹介した Pro SDK のハンズオンで予習しておくと、本シリーズをよりスムーズに理解できると思います。 本記事で実装する機能の概要 GIS の成果物である「地図」において、最も重要な要素の一つは地物の名称などが見やすく記載されているかどうかです。ArcGIS Pro では Maplex ラベル エンジンを使用することで高度なラベル制御が可能ですが、地図調製の現場ではアノテーションを作成して更に細かな制御が必要な場合が多いでしょう。 アノテーションの操作に係る機能をカスタマイズすることで、こうした細かな注記表現の制御の作業効率を向上させることが期待できます。 本記事でご紹介するサンプルでは、選択したアノテーションをコピーしたり回転したりする機能を Pro SDK を使って拡張します。 完成イメージ 本記事で実装する機能の実装手順 選択したアノテーション フィーチャの角度を取得 選択したアノテーション フィーチャを回転 選択したアノテーション フィーチャをコピー ※本記事ではドッキング ウインドウの「アノテーション操作」タブの機能を実装します。「ジオメトリ変換」タブの機能は今後の連載でご紹介します。 本記事で使用する主な API カテゴリ 本記事では「編集」、「ジオデータベース」、「ジオメトリ」を中心に使用します。 ※API カテゴリに関しては「ArcGIS Pro SDK for .NET を使った独力での開発」をご参照ください。 本記事で使用するソース 本記事で使用するソースは GitHub に格納しています。ソースに関して実装のポイントとなる部分を抜粋して解説しますので、ダウンロードをお願いします。 本記事で使用するファイル MainDockPane.xaml ドッキング ウインドウの画面を構成するファイル。作成手順に関しては「Pro SDK を使用した ArcGIS Pro の拡張④:アドインの開発」をご参照ください。 MainDockPaneViewModel.cs ドッキング ウインドウの処理を記述するファイル。ViewModel。ドッキング ウインドウ(MainDockPane.xaml)作成時に自動的に作成されます。Pro SDK で扱う ViewModel については、「Pro SDK を使用した ArcGIS Pro の拡張③:アドインプロジェクトの構成」をご参照ください。 実装手順 1. 選択したアノテーション フィーチャの角度を取得 この手順では、選択されたアノテーション フィーチャの角度を取得し、ドッキング ウインドウ内のテキストボックス内に取得した角度を表示するように機能を拡張します。 手順 1.1 MainDockPane.xaml の設定 「アノテーション操作」タブ アイテムの「TextBox」の「Text」属性を「MainDockPaneViewModel.cs」の「Angle」プロパティにバインドさせます。 <TextBox x:Name="angle_textBox" Grid.Row="0" Grid.Column="1" Margin="5,5,5,5" TextAlignment ="Right" MaxLength="4" Text="{Binding Path = Angle, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/> また、「選択」ボタンの「Command」属性を「MainDockPaneViewModel.cs」の「AnnotationAngle」プロパティにバインドさせます。 <Button Content="選択" Grid.Column="3" HorizontalAlignment="Stretch" Command="{Binding Path=AnnotationAngle}"Style="{DynamicResource Esri_Button}"></Button> 1.2 テキスト ボックスとバインドするプロパティを作成 「MainDockPaneViewModel.cs」に Angle プロパティを作成します。次の手順で実装しますが、アノテーション フィーチャを選択した際に取得した角度を格納します。 private double _angle;
public double Angle
{
get { return _angle; }
set
{
SetProperty(ref _angle, value, () => Angle);
}
} 1.3 MainDockPaneViewModel.cs でイベント ハンドラーを登録 「選択」ボタンを押すと 「ExexuteAnnotationAngle()」メソッドが実行されるように実装します。第一回目の手順2.2で紹介したように「GetPlugInWrapper()」を使用し、マップ ツール と「選択」ボタンをバインドしています。 // アノテーション タブの選択ボタンを押すと ExexuteAnnotationAngle() が実行される
_annotationAngle = new RelayCommand(() => ExexuteAnnotationAngle(), () => true);
/// <summary>
/// アノテーション操作タブの選択ボタンをクリック
/// </summary>
private ICommand _annotationAngle;
public ICommand AnnotationAngle => _annotationAngle;
public void ExexuteAnnotationAngle()
{
var cmd = FrameworkApplication.GetPlugInWrapper("AddInSamples_IdentifyFeatures") as ICommand;
if (cmd.CanExecute(null))
cmd.Execute(null);
} 1.4 イベント ハンドラーの実装 第一回目の手順 5.3 で実装した OnMapSelectionChanged() を拡張し、「アノテーション操作」タブの「選択」ボタンを使用した場合に、アノテーション フィーチャの角度を取得するように if 文で制御します。前回までの記事で既に実装済みの部分は else で処理します。 /// <summary>
/// マップ内の選択状態が変わった場合に発生
/// </summary>
private void OnMapSelectionChanged(MapSelectionChangedEventArgs args)
{
var mapView = MapView.Active;
if (mapView == null)
return;
RemoveFromMapOverlay();
// アノテーション操作タブの場合
if (_tabPage == 2)
{
QueuedTask.Run(() =>
{
var selection = mapView.Map.GetSelection();
// 選択しているフィーチャクラスがある場合
if (selection.Count > 0)
{
var featureLayer = selection.FirstOrDefault().Key as BasicFeatureLayer;
// アノテーションの場合
if (featureLayer.GetType().Name == "AnnotationLayer")
{
var table = featureLayer.GetTable();
var feature = featureLayer.GetSelection();
// OBJECTIDを指定
QueryFilter queryFilter = new QueryFilter
{
WhereClause = "ObjectId =" + feature.GetObjectIDs().First(),
};
// 複数選択した場合は最初に取得したアノテーションの角度を使用する
using (RowCursor rowCursor = table.Search(queryFilter))
{
rowCursor.MoveNext();
using (Row row = rowCursor.Current)
{
// 角度取得
Angle = Convert.ToDouble(row["Angle"]);
}
}
}
}
});
}
else
{
(後略)
2. 選択したアノテーション フィーチャを回転 この手順では、選択したアノテーション フィーチャの角度を任意の角度に回転する機能を実装します。 手順 2.1 MainDockPane.xaml の設定 「回転」ボタンの「Command」属性を「MainDockPaneViewModel.cs」の「RotateAnnotation」プロパティにバインドさせます。 <Button Content="回転" Grid.Column="4" HorizontalAlignment="Stretch" Command="{Binding Path=RotateAnnotation}" Style="{DynamicResource Esri_Button}"></Button> 2.2 MainDockPaneViewModel.cs でイベント ハンドラーを登録 「実行」ボタンを押すと「ExecuteRenderingClick()」メソッドが実行されるように実装します。 // アノテーション タブの回転ボタンを押すと ExecuteRotateAnnotation() が実行される
_rotateAnnotation = new RelayCommand(() => ExecuteRotateAnnotation(), () => true); 2.3 イベント ハンドラーの実装 選択したフィーチャをループ処理し、アノテーション フィーチャであった場合、テキスト ボックスに入力されている値を使用して角度を更新します。フィーチャの属性情報等にアクセスする際は Inspector クラスを使用します。EditOperation クラスの Modify メソッドを使用することでジオメトリや属性情報を更新し、Execute メソッドで実行します。EditOperation クラスは編集する際に必ず使用するクラスです。主要な機能として以下の3つがあります。 データに対して編集操作を実行する 複数の編集を一つの実行 (Execute) に集約する 編集操作によって編集されたレイヤーのキャッシュを無効化する 詳細については Editing のコンセプト (英語)をご参照下さい。 /// <summary>
/// アノテーション操作タブの回転ボタンをクリック
/// </summary>
// アノテーションの回転
private ICommand _rotateAnnotation;
public ICommand RotateAnnotation => _rotateAnnotation;
private void ExecuteRotateAnnotation()
{
var mapView = MapView.Active;
if (mapView == null)
return;
try
{
QueuedTask.Run(() =>
{
var selection = mapView.Map.GetSelection();
// 選択しているフィーチャクラスがある場合
if (selection.Count > 0)
{
var editOperation = new EditOperation();
// フィーチャクラスごとにループ
foreach (var mapMember in selection)
{
var layer = mapMember.Key as BasicFeatureLayer;
// アノテーションの場合
if (layer.GetType().Name == "AnnotationLayer")
{
using (var rowCursor = layer.GetSelection().Search(null))
{
var inspector = new Inspector();
while (rowCursor.MoveNext())
{
using (var row = rowCursor.Current)
{
// 角度更新
inspector.Load(layer, row.GetObjectID());
var annoProperties = inspector.GetAnnotationProperties();
annoProperties.Angle = _angle;
inspector.SetAnnotationProperties(annoProperties);
editOperation.Modify(inspector);
}
}
}
}
}
editOperation.Execute();
}
});
}
catch
{
MessageBox.Show("アノテーションの角度変更に失敗しました。");
}
} 3. 選択したアノテーション フィーチャをコピー この手順では、選択したアノテーション フィーチャをコピーする機能を実装します。 手順 3.3 MainDockPane.xaml の設定 「コピー」ボタンの「Command」属性を「MainDockPaneViewModel.cs」の「RotateAnnotation」プロパティにバインドさせます。 <Button Content="コピー" Grid.Column="5" HorizontalAlignment="Stretch" Command="{Binding Path=CopyAnnotation}" Style="{DynamicResource Esri_Button}"></Button> 3.2 MainDockPaneViewModel.cs でイベント ハンドラーを登録 「実行」ボタンを押すと「ExecuteRenderingClick()」メソッドが実行されるように実装します。 // アノテーション タブのコピーボタンを押すと ExecuteCopyAnnotation() が実行される
_copyAnnotation = new RelayCommand(() => ExecuteCopyAnnotation(), () => true); 3.3 イベント ハンドラーの実装 選択したフィーチャをループ処理し、アノテーション フィーチャであった場合に処理を実行する点は上述した 2.3 の処理と同じです。 コピーする処理は下に記載するメソッドを別に作成しています。大まかな処理の流れは以下の通りです。 CreateRowBuffer メソッド等を使用しコピー先のアノテーション フィーチャを作成 コピー元のアノテーション フィーチャのエクステントとテキストのグラフィックを取得 (それぞれ GetShape メソッド、GetGraphic メソッドを使用) エクステントから重心を算出 作成したアノテーション フィーチャにコピー private void InsertAnnotation(AnnotationFeature annofeat)
{
var selectedFeatures = MapView.Active.Map.GetSelection().Where(kvp => kvp.Key is AnnotationLayer).ToDictionary(kvp => (AnnotationLayer)kvp.Key, kvp => kvp.Value);
var layer = selectedFeatures.Keys.FirstOrDefault();
// コピーするアノテーション用に行を作成
AnnotationFeatureClass annotationFeatureClass = layer.GetFeatureClass() as AnnotationFeatureClass;
RowBuffer rowBuffer = annotationFeatureClass.CreateRowBuffer();
Feature feature = annotationFeatureClass.CreateRow(rowBuffer) as Feature;
// コピーするアノテーションを作成
AnnotationFeature copyAnnoFeat = feature as AnnotationFeature;
copyAnnoFeat.SetStatus(AnnotationStatus.Placed);
copyAnnoFeat.SetAnnotationClassID(0);
// コピー元のアノテーションの重心にポイントを作成
Envelope shape = annofeat.GetShape().Extent;
var x = shape.Center.X;
var y = shape.Center.Y;
var mapPointBuilder = new MapPointBuilder(layer.GetSpatialReference());
mapPointBuilder.X = x;
mapPointBuilder.Y = y;
MapPoint mapPoint = mapPointBuilder.ToGeometry();
// コピー元のアノテーションのテキストを作成
var annoGraphich = annofeat.GetGraphic() as CIMTextGraphic;
CIMTextGraphic cimTextGraphic = new CIMTextGraphic();
// 作成したポイントとアノテーションをコピー先のアノテーションにコピー
cimTextGraphic.Text = annoGraphich.Text;
cimTextGraphic.Shape = mapPoint;
// シンボル設定
var symbolRef = new CIMSymbolReference();
symbolRef.SymbolName = annoGraphich.Symbol.SymbolName;
symbolRef.Symbol = annoGraphich.Symbol.Symbol;
cimTextGraphic.Symbol = symbolRef;
// コピー
copyAnnoFeat.SetGraphic(cimTextGraphic);
copyAnnoFeat.Store();
} アノテーションを操作する際に使用されている CIMTextGraphic はアノテーションのテキストやフォーマットに係る属性を含んでいます。詳細は Annotation のコンセプト (英語) 及び Editing Annotation のコンセプト (英語) をご参照ください。 今回実装したような CIMTextGraphic を操作する仕組みを流用することで、アノテーションのテキストを動的に変更することや、任意のフォント設定でアノテーションを作成・更新することも可能になるでしょう。 まとめ 本記事ではアノテーション フィーチャの角度を取得し、回転、コピーする処理を実装、解説しました。これらの操作はカスタマイズしなくとも可能ですが、Pro SDK を活用することでより効率的に実行できるようになります。細かなアノテーション操作が必要な地図調製などの業務向けには、本記事でご紹介した内容をご参考にしていただき、利用頻度の高い操作等を効率的に行えるようカスタマイズしていただければと思います。 次回 次回はジオメトリ操作タブ内に機能を実装していきます。 関連リンク ArcGIS Pro SDK for .NET を使用した ArcGIS Pro の拡張 シリーズ ArcGIS Pro SDK for .NET ArcGIS Pro SDK for .NET コンセプト(GitHub) ArcGIS Pro SDK for .NET サンプル集(GitHub) ArcGIS Pro SDK 2.4 for .NET API リファレンス ArcGIS Pro SDK for .NET ハンズオン
... View more
12-18-2019
11:57 PM
|
0
|
0
|
1864
|
BLOG
|
Hi David, Thank you for your reply! I am very excited with a lot of new funtionalities!
... View more
11-18-2019
06:47 PM
|
0
|
0
|
2537
|
BLOG
|
Hi, Do we need Enterprise 10.8 (prerelease) for some of the new functionalities of the API? or 10.7.1 is enough for them? Thanks,
... View more
11-05-2019
03:13 AM
|
0
|
0
|
2537
|
POST
|
Hi Fang, Thank you for replying. Yup, I know the IE11 is not recommended for the API. I recommend modern browsers to our customers Best regards, Hiromu
... View more
11-04-2019
09:07 PM
|
0
|
0
|
523
|
POST
|
Hi, The functionality is beta, so this is just a notification. IE11 seems to be not able to render bottom of text of dictionary renderer on SceneView. Left: Chrome, Right: IE11 It happens probably not just only in Japanese, but also in English. Thanks,
... View more
11-04-2019
06:39 PM
|
0
|
2
|
587
|
DOC
|
はじめに 2019年 5 月 22 日 (水) ~ 24 日 (金)、東京ミッドタウン 六本木にて第15回GIS コミュニティフォーラム及びプレフォーラム・セミナーが開催されました。 公開可能なセッションの発表資料は ESRIジャパンのサポートサイトで公開しております。また、GeoNet ブログでは開発者向けのセッションで使用したコードなどをご紹介しています。発表資料や GeoNet 記事、GitHub へのリンクなどの詳細は第15回GISコミュニティフォーラム開催報告記事をご覧ください。 テクニカル セッション「ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~」の中では、R や Python との連携による高度な解析についてデモンストレーションを交えてご紹介しました。少し間が空いてしまいましたが、今回は ArcGIS API for Python と ArcGIS Pro を用いてディープ ラーニング モデルを作成し、航空写真から航空機を検出したデモンストレーションについて詳細をご紹介いたします。R との連携については前回の記事をご参照ください。 概要 本稿は以下の流れに沿ってご紹介します。 ArcGIS API for Python を用いたディープ ラーニングについて 環境構築 セッションでご紹介したデモンストレーションの全体像 デモンストレーションの再現手順 トレーニング データの作成 ArcGIS API for Python を用いたディープ ラーニング モデルの作成 作成したディープ ラーニング モデルの適用 まとめ 1.ArcGIS API for Python を用いたディープ ラーニングについて ArcGIS API for Python は、Web GIS (ArcGIS Online / ArcGIS Enterprise) を活用してマップと地理空間データを扱うための API です。本 API は、想定されるユーザーが以下の 4 つのタイプとして明確に定められています。 Web GIS の管理者 コンテンツ作成者 GIS アナリスト/データ サイエンティスト 開発者 上記の中でも、特に GIS アナリスト/データ サイエンティストに対しては、Web サイトで公開されているサンプル コードの数が最も多く、米国 Esri 社も利用の推進に力を入れているセグメントです。 ArcGIS API for Python は、TensorFlow や PyTorch 等のディープ ラーニング用フレームワークと組み合わせて使用することが可能です。特に PyTorch については、PyTorch をベースに開発されている fastai というライブラリをラッピングしており、両者を追加でインストールすることで、arcgis.learn モジュールから直接機能を呼び出して使用することができるようになっています。 以降では、GIS コミュニティフォーラムでご紹介したデモンストレーションをもとに、具体的な環境構築の方法、トレーニング データの作成、ArcGIS API for Python によるディープ ラーニングの学習、そして学習したモデルを適用するまでの一連の流れをご紹介していきます。 2.環境構築 ① 使用したソフトウェア等 ご紹介したデモンストレーションで使用したソフトウェア、エクステンションおよび Python のライブラリは以下のとおりです(右側に記載した数字は使用したバージョンです)。 ArcGIS 製品 ArcGIS Pro 2.3.2 ArcGIS API for Python (arcgis) 1.6.0 ArcGIS Image Analyst サード パーティーの Python ライブラリ pytorch 1.0.0 torchvision 0.22 fastai 1.0.39 spacy 2.1.3 ② GeoAI Data Science VM について ディープ ラーニングによる学習を実行するにあたり、比較的ハイスペックな GPU が必要となるため、今回は Microsoft Azure の Geo AI Data Science VM (GeoAI DSVM) を使用して仮想マシンを構築しました。Azure 上での GeoAI DSVM のプロビジョニングについては Microsoft Azure のドキュメントをご参照ください。GeoAI DSVM には ArcGIS Pro の英語版があらかじめインストールされています。 ③ ディープ ラーニング用の Python 環境の作成 ArcGIS Pro は Miniconda を内包しており、Python パッケージ マネージャーから複数の Python 環境を作成・管理することができます (詳細については「ArcGIS API for Python のコアコンセプト その 2」を参照ください)。以降では、この機能を用いてデフォルトの Python 環境とは別にディープ ラーニング用の環境を作成します。 必須ではありませんが、GeoAI DSVM の ArcGIS Pro の UI を日本語に設定したい場合は、弊社サポートサイトから日本語版をダウンロードしてインストールしてください。 ※ 英語環境でも以降の手順は同じです。 ArcGIS Pro を起動し、スタートアップ画面の左下にある [設定] をクリックします。 [Python] メニューオプションを選択します。 [環境の管理] ボタンをクリックし、「環境の管理」ウィンドウを開いて、[デフォルトのクローン] ボタンを選択します。 デフォルト環境のクローンが作成されます。 クローンの作成中は下部にインストール中のパッケージ名が表示されます。 すべてのパッケージのインストールが完了すると、クローンされた環境が格納されているディレクトリ名が表示されます。 ※ 完了前に操作をすると、作成した環境が正常に動作しない可能性があります。 クローン環境作成の様子 作成した環境のラジオボタンをクリックして、環境をアクティブにします。 ※ アクティブな環境をデフォルトに戻したい場合は、arcgispro-py3 (デフォルトの環境) のラジオボタンをクリックしてください。 環境をアクティブにしたら、ArcGIS Pro を終了し、[スタート] → [ArcGIS] → [Python コマンド プロンプト] の順にクリックして、Python コマンドプロンプトを起動します。 <img
... View more
09-04-2019
05:18 AM
|
1
|
0
|
2559
|
DOC
|
はじめに 先月、ArcGIS API for Python のコアコンセプト その 1ArcGIS API for Python のコアコンセプト その1:Python、API、そしてREST を掲載いたしましたが、本稿はその続きです。前回は Python、API、REST など、ArcGIS API for Python を理解する上での前提となる技術やコンポーネントについて紹介しましたが、今回は Anaconda や Conda について、また ArcGIS API for Python の環境を構築する上でのベストプラクティスについてご紹介します。前回の記事をまだご覧になっていない方は、併せてお読みいただければ幸いです。 ※ 以降の文章は、米国 Esri 社のブログ記事「ArcGIS API for Python Core Concepts Part 2: Anaconda, Conda, Jupyter Notebooks and ArcGIS Pro」を翻訳したものです。 私達は ArcGIS API for Python とは何かについて前回のブログで把握しました。今回は、特に ArcGIS Pro や Jupyter Notebookのような他のソフトウェアと組み合わせて、API をインストールして利用するためのベスト プラクティスへと話を進めましょう。 はじめに、Anaconda、Conda について、そしてこれらが ArcGIS Pro 及び ArcGIS API for Python とどのように関係しているかについて、少しだけ回り道をする必要があります。 Anaconda、Conda、そして ArcGIS Pro Anaconda は、ユーザー インターフェイスと共に Python 及び 各種 Python パッケージをバンドルしたフリーのオープン ソース ソフトウェアで、ユーザーが Python 環境とパッケージを管理することができます。 Anaconda は Conda も含んでおり、これはパッケージ管理と環境を管理するためのシステムです。Conda は、Anaconda や ArcGIS Pro のような他のプログラムが、複数の環境を管理できるようにするためのバックエンド プログラムでもあります。 さらに、Conda は各環境内のパッケージ管理も可能にし、あなたのパッケージを最新に保つ他、パッケージ間の依存関係も把握します。例えば、もし arcpy が特定のバージョンの numpy を必要とする場合、Conda はあなたが numpy をアップデートしないようにしてくれます。そのため、Conda は Anaconda の中心的な役割を果たしています。 また、Conda と Anaconda の間には Miniconda と呼ばれるバンドルもあります。Anaconda が Conda、Pythonの基本インストール、その他 150 のモジュール、そしてユーザー インターフェイス (訳注:以下、複数回インターフェイスという単語が現れますが、厳密には GUI を指すものと思われます。) を含むのに対し、Miniconda は Conda と Python の基本的なインストールだけを含んでいます。 ArcGIS Pro のバック グラウンドで動くためユーザーは直接利用することはありませんが、Miniconda は ArcGIS Pro と一緒にインストールされます。 Conda、Miniconda、Anacondaの違い Python 環境の管理 環境の管理について話を続けましょう。環境の管理とはどういう意味でしょうか?シンプルに言うと、「Python 環境」とは Python とパッケージを動かすために必要な全てのファイルを含んだコンピューター上のフォルダーです。 もし、あなたが ArcMap をインストールしたら、デフォルトでは Python 2.7の環境が C:\Python27\ArcGISXX フォルダーに作成されます。これが、あなたが ArcMap と ArcMap バージョンの arcpy で利用できる唯一の環境です。 一方、あなたが ArcGIS Pro を Miniconda と一緒にインストールした場合、arcgispro-py3 と呼ばれるデフォルトの Python 環境が、C:\Program Files\ArcGIS\Pro\bin\Python\envs フォルダーの中に作成されます。しかし、ArcMap とは異なり、あなたが必要なだけ別の環境を作成することが可能です。あなたは、ArcGIS Pro が使う環境を切り替えることもできます。これにより、あなたは異なるパッケージの組み合わせを使うことが可能になります。これは、コンフリクトを起こす相互依存パッケージに対応する際便利です (例えば、2 つの異なるパッケージが、共通する第 3 のパッケージの異なるバージョンを使っている場合など)。 これは、ArcMap と ArcGIS Pro の両方を利用している場合、特に便利です。あなたが 2 つのバージョンの Python をマニュアルでインストールしていなかったとしても、あなたは既に異なる 2 つの Python 環境を持っていることになります。 ArcMap と ArcGIS Pro をコンピューターにインストールした場合の Python あなたがどのバージョンの Python を利用しているのかをスクリプトや IDE (統合開発環境) に知らせるためにはどうしたら良いでしょうか? Conda が登場する以前は、異なる Python 環境を切り替えることは困難でした。環境を切り替えるためには、個々のスクリプトに対して正しい環境を伝えるか、環境変数 (PATH か PYTHONPATH) を変更してコンピューターに python.exe をどこで探せばよいか伝える必要がありました。これを、環境を変えるたびに行う必要があったのです。 このワークフローにはいくつかの問題があります。すなわち、 ユーザーが、Path 変数を変更するとは何なのかを把握している必要がある Python プログラムの全てに影響が及ぶ 特に複数の Python を利用するプログラムを持っている場合や、複数の Python のインストールがある場合、ソフトウェアに問題が起きる可能性がある ユーザーが何の環境を持っているのか、それらがどこにあるのかを把握している必要がある パッケージのインストールがユーザーに依存する パッケージの自動アップデートや管理がされないため、パッケージの依存関係を損なう可能性がある Conda はこれらの問題を全て解決します。 ユーザーがシステム環境を変更する必要が無い プログラムごとに異なる Python 環境を利用できる ユーザーが Python のパスを変えないため、ソフトウェアが影響を受ける可能性が減る ArcGIS Pro と Anaconda は環境とパッケージ管理のための直感的なインターフェイスを持っている Conda がパッケージのバージョン アップデートを把握し、ユーザーがコンフリクトを起こす相互依存パッケージをインストールすることを防止する Conda の機能にアクセスするためには、Anaconda、ArcGIS Pro、もしくはコマンド プロンプトが利用できます。 Anacoda Anaconda では、インターフェイスにより環境の作成、クローン、インポート、切り替えができます。さらに、パッケージのインストール、アンインストール、そしてアップデートも可能です。 一つだけ留意することは、ArcGIS API for Python (arcgis パッケージ) をAnaconda でインストールする場合、Esri のチャネルを Anaconda に追加する必要があります。これにより、Conda が arcgis のインストールとパッケージのアップデートにアクセスできるようになります。 Anaconda のインターフェイス ArcGIS Pro ArcGIS Pro では、[設定] > [Python] (以前のバージョンの場合、[ArcGIS Pro について] > [Python]) に進むとパッケージと環境の管理が可能です。 以下の画像では、arcgispro-py3 と arcgispro-py3-clone の 2 つの環境を持っていることがわかります。 ArcGIS Pro では、Esri のチャネルがデフォルトで追加されます。しかし、現段階では、その他のチャネルを ArcGIS Pro の中で追加する方法はありません。 Python 環境を ArcGIS Pro で管理する コマンド プロンプト 最後に、コマンド プロンプトで Conda にアクセスすることも可能です。 Conda を操作する最も簡単な方法は、ArcGIS Pro と共にインストールされる Python コマンド プロンプトを使うことです。Python コマンド プロンプトは通常のコマンド プロンプトと同じですが、すでにデフォルトの環境とディレクトリがセットアップされています。 Python 環境を Python コマンドプロンプトで管理する 上のスクリーンショットでは、環境のリストとパッケージのリストをリクエストしています。コマンド プロンプトの中では、Conda のコマンドによりAnaconda や ArcGIS Pro のユーザー インターフェイスと同じような管理を実行することができますが、これらのコマンドを知っている必要があります。 Conda のコマンドについて詳しく知りたい方は、https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf を参照ください。 Python コマンド プロンプトについて、もう少し掘り下げましょう。コマンドは 4 つのパートに別れます。 Environment:行の最初の () 内に記載され、exe があるフォルダーの場所を示しています。 Directory:インプット ファイルが検索されたり、アプトプット ファイルが保存されたりするフォルダーの場所です。 Toolset:コマンドを実行するためのパッケージ Command またはパッケージに実行させたいこと:コマンドはパラメーターを含みます 以下のスクリーンショットでは、デフォルトの ArcGIS Pro 環境をディレクトリとしても使用していることがわかります。これは必ずしもそうしなければいけないわけではなく、ディレクトリを変更してファイルを別の場所に保存することが可能です。 コマンド プロンプトのコンポーネント では、いつ Anaconda を使い、いつ ArcGIS Pro を使うべきなのか? これは、あなたの目的によります。Esri では通常 ArcGIS Pro を利用することをお勧めします。ArcGIS Pro の Miniconda は通常の Anaconda 単体のインストールよりもサイズが小さく、ArcGIS Pro 2.2 の時点では arcpy と arcgis (ArcGIS API for Python) の両方が自動的にインストールされています。ArcGIS Pro 2.2 以前のバージョンでは、ArcGIS API for Python は手動でインストールする必要がありました。arcpy は ArcGIS (訳注:ArcGIS Pro ないし ArcMap) をインストールした場合のみ利用できます。 一つだけ認識しておくべき重要なことは、あなたは Anaconda か ArcGIS Pro のどちらかが必要だということです。どちらかで構いません。しかし、 Anaconda と ArcGIS Pro の両方を単一のマシンにインストールすることは推奨しません。これは、複数の Python を Conda 無しでインストールすることと同じように、PATH の問題を引き起こすためです。 Conda と ArcGIS API for Python ここまでで、私達は Conda について深く掘り下げてきました。では Conda は ArcGIS API for Python とどのように関わっているのでしょうか?Conda は ArcGIS API for Python のシステム要件ではありません。しかし、arcgis パッケージは年に複数回アップデートされ、他の Python パッケージと複数の依存関係にあるため、Conda を使うことで arcgis パッケージの管理がより簡単になります。もしあなたが ArcGIS Pro の ArcGIS API for Python を使用しているなら、あなたは arcgis パッケージを含む全てのパッケージ管理のために Conda を使用していることになります。 . IDE (統合開発環境) について 最後に、「統合開発環境」もしくは「IDE」について話しましょう。IDE とは何でしょうか? 基本的に IDE はあなたがスクリプトを書いて実行できるようにするためのプログラムです。IDE はデバッグする際に非常に便利で、通常はスクリプトの記述を容易にするためにオートコンプリート機能を備えています。 ArcGIS API for Python は Python 3.5 に対応していれば、どの IDE でも実行可能です (訳注:ArcGIS API for Python のシステム要件https://www.esrij.com/products/arcgis-api-for-python/environments/は Python 3.5 以上のバージョンです。)。もしあなたが複数の環境を使っているのであれば、私達は Spyder や PyCharm のような環境の切り替えをサポートする IDE をお勧めします。 いくつかお勧めとして挙げたものの、ArcGIS API for Python と一緒に使う IDE としては Jupyter Notebook が推奨されます。Jupyter Notebook は Python のコードを対話的に実行し、マップ、チャート、テーブルといったアウトプットを可視化できます。また簡単にスクリプトを共有することもできます。あなたが ArcGIS Pro または Anaconda をインストールした時、Jupyter Notebook も同様にインストールされるでしょう。 Jupyter Notebook に埋め込まれたマップ Jupyter Notebook は Python だけでなく、複数の言語をサポートしているため、開発者にとっては更に便利でしょう。 以上が ArcGIS API for Python のコアコンセプトです!まとめると、ArcGIS API for Python を利用するには様々な方法がありますが、ArcGISプラットフォームと十分に統合するために、Esri は ArcGIS Pro と共にインストールされる Miniconda と Jupyter Notebook を利用することをお勧めします。Happy Scripting! 関連リンク集 米国 Esri 社ブログ (英語) ArcGIS API for Python Core Concepts Part 1: Python, APIs, and REST ArcGIS API for Python Core Concepts Part 2: Anaconda, Conda, Jupyter Notebooks and ArcGIS Pro ArcGIS 関連ページ ArcGIS API for Python(ESRIジャパン製品ページ) ArcGIS API for Python(米国Esri ページ(英語)) ArcGIS 開発リソース集 技術 Tips 集 関連する ArcGIS Blog のコンテンツ (英語😞 administration arcgis api for python arcgis enterprise arcgis online analytics mapping and visualization arcgis api for python jupyter notebooks python rest api
... View more
07-10-2019
07:23 PM
|
0
|
0
|
2655
|
DOC
|
はじめに 2019年 5 月 22 日 (水) ~ 24 日 (金)、東京ミッドタウン 六本木にて第15回GIS コミュニティフォーラム及びプレフォーラム・セミナーが開催されました! 公開可能なセッションの発表資料はESRIジャパンのサポート サイトで公開しております。また、GeoNetブログでは開発者向けのセッションで使用したコードなどを順次ご紹介していきます。発表資料や GeoNet記事、GitHub へのリンクなどの詳細は第15回GISコミュニティフォーラム開催報告記事をご覧ください。 テクニカル セッション「ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~」の中では、以下の 3 つのポイントをお伝えいたしました。 ArcGIS はデータサイエンスの様々な場面で活用できる 既に多くの統計及び機械学習の手法がジオプロセシング ツールとして実装されている 既存のツールでは対応が難しい場合においても、オープンなプラットフォームである特徴を生かして R や Python の各種ライブラリ等と連携することで対応できる 特に ArcGIS の既存のツールでは対応が難しいケースとして、空間的自己相関を持つデータの回帰分析や、ディープ ラーニングを用いた物体検知を例に挙げ、それぞれ R およびArcGIS API for Python を用いてデモと共にご紹介しましたが、本ブログの中でセッション中ではご紹介しきれなかった具体的なコードの中身について詳しくご紹介します。 本稿では R との連携についてご紹介し、ArcGIS API for Python を用いたディープラーニングは別記事にてご紹介します。 概要 本稿は以下の流れに沿ってご紹介します。 R と ArcGIS Pro を連携させる R-ArcGIS Bridgeについて 環境構築の手順 テクニカル セッションでご紹介したデモの詳細 まとめ R と ArcGIS Pro を連携させる R-ArcGIS Bridgeについて セッション中でもご紹介しましたが、R-ArcGIS Bridge というツールを用いることで、R と ArcGIS Pro を連携させることが可能になります。R-ArcGIS Bridge は米国 Esri 社の GitHub 上で Apache License 2.0 に基づいて公開されているツールです。国内でのサポート等はしておりませんが、商用利用も可能な無償のツールとして提供されており、ArcGIS Pro 1.1 以降及び R 3.2.2 以降のバージョンに対応しています。 このツールが提供する機能は大きく分けて以下の 3 つです。 R と ArcGIS Pro 間でのデータを読み込み/書き込みする機能 R で用いられるデータ フォーマットへ変換する機能 R をラッピングしてスクリプト ツールにするための機能 本稿では 3 番目の機能については紹介しませんが、Python からスクリプト ツールを作成できるように、R でも ArcGIS Pro 上で動作するスクリプト ツールを作成することが可能です。詳細は GitHub 上でのチュートリアル (英語) を参照ください。 環境構築の手順 以下では実際に R-ArcGIS Bridge を使用する際の環境構築の手順を、予めArcGIS Pro 及び R がインストールされていることを想定してご紹介します。 ArcGIS Proのインストール方法については弊社サポート サイト内のインストールガイドを、R のインストール方法ついてはオンライン上の各種ドキュメントをご参照下さい。インストーラーは CRAN (Rや各種パッケージをダウンロードするための Web サイト) から入手可能で、国内では統計数理研究所様や山形大学様がミラーサイトを運営しています。 セッションで利用したバージョンは ArcGIS Pro 2.3.2 及び R 3.5.9 です。 ※ オプションとして、統合開発環境 (IDE) を利用することで、R でのコーディングが容易になります。R で非常によく利用される IDE として、RStudio が挙げられます。他にVisual Studio や Jupyter Notebook 等でも実行可能です。 R-ArcGIS Bridge は、実際は arcgisbinding という名称の R のパッケージです。ArcGIS Pro 2.3.x では以下の手順でインストールすることができます。 ArcGIS Pro を開き、左下の [設定] をクリックします [オプション] をクリックし、ダイアログ ボックスを開きます [ジオプロセシング] をクリックし、[R-ArcGIS サポート] の項目の中の [検出された R ホーム ディレクトリ] にインストールした R のディレクトリが設定されていることを確認してください。ディレクトリが異なる場合は手動で変更してください。 [ArcGIS R 統合パッケージをインストールしてください] と記載されている右側のアイコンをクリックし、[インターネットからのパッケージのインストール] をクリックするとインストールが始まります。 別のインストールオプションとして、ファイルを指定してインストールすることも可能です。その場合は [最新バージョンのダウンロード...] をクリックし、リンク先から ZIP ファイルをダウンロード後、[ファイルからのインストール...] をクリックして、ダイアログに従ってダウンロードした ZIP ファイルを選択してください。 テクニカル セッションでご紹介したデモの詳細 本セッションにおいては、ボストンの各地区の住宅価格の中央値を、各地区の犯罪発生率や大気汚染の度合い等の変数を用いて予測する解析を、以下の 2 つのパターンで実行し結果を比較しました。 ArcGIS Pro の [一般化線形回帰分析] を使用した場合 R の spdep パッケージを用いて空間的自己相関を考慮した統計モデルを使用した場合 ここからは、セッションの中では詳しく紹介できなかった、R での解析について具体的なコードと共にご紹介します。 パッケージのインストール R では多数のパッケージが公開されており、それらを利用することで機能拡張が可能です。デモでは以下のパッケージを利用しました。必要に応じてコメントアウトしてパッケージをインストールしてください。 # 必要に応じてパッケージをインストール=========================================================
# install.packages("spData", dependencies = TRUE)
# install.packages("sf", dependencies = TRUE)
# install.packages("tidyverse", dependencies = TRUE)
# install.packages("spdep", dependencies = TRUE)
# install.packages("spatialreg", dependencies = TRUE)
# install.packages("ggthemes", dependencies = TRUE) ArcGIS Pro へのデータの書き込み 上記でインストールした spData パッケージは多数の空間データを含んでいます。今回は spData の中にあるボストンの住宅価格のデータ (シェープファイル) を使用します。データの読み込みには sf パッケージの read_sf 関数を使用しています。 このデータを R から ArcGIS Pro へデータを書き込むために、R-ArcGIS Bridge (arcgisbinding) を読み込み、7 行目では arc.check_product 関数でライセンスのチェックを行っています。arc.write 関数を使用し、予め用意してあるジオデータベースへ bstn_house_price という名前のフィーチャクラスとして書き込んでいます。 # spDataパッケージのボストンの住宅価格のデータを ArcGIS へ渡す=================================
require(sf)
bstn_shp <- read_sf(system.file("shapes/boston_tracts.shp", package = "spData"))
head(bstn_shp)
# arcgisbindingをインポート
require(arcgisbinding)
arc.check_product()
# プロジェクトのFGBDへ書き込む
arc.write(path = "gcf2019_sem/gcf2019_sem.gdb/bstn_house_price", data = bstn_shp) ArcGIS Pro へのデータの読み込み ArcGIS Pro に書き込んだフィーチャクラスのデータを、arc.open 関数を使って再度 R へ読み込みましょう。読み込んだデータは、arc.select 関数を用いて arc.data というデータフレーム形式のオブジェクトに変換できます。また、その際にフィールド名やSQL 形式の構文を引数に渡して必要なデータだけ抽出することができます。今回は住宅価格の中央値 (CMEDV)、犯罪率 (CRIM)、大気汚染の度合い (NOX) 等が格納されているフィールドだけ抽出しました。 # ArcGIS Proのデータを読み込む===============================================================
d <- arc.open("gcf2019_sem/gcf2019_sem.gdb/bstn_house_price")
bstn_fc <- arc.select(d, c("OBJECTID", "Shape", "CMEDV", "CRIM", "NOX", "RM", "DIS", "LSTAT", "BB", "POP"))
head(bstn_fc) R の spatilreg パッケージを使用した解析 データの準備ができたので、解析を実行します。今回は空間データの解析に係る関数を多数提供している spedep 及び spatialreg パッケージを利用します。 以下のコードでは、poly2nb 関数及び nb2listw 関数を使用して、フィーチャクラス内の各ポリゴンの隣接関係を重み付きの行列として定義しています。 その後、spatialreg パッケージの errorsarlm 関数を使用して空間的自己相関を加味した統計モデルの解析を実行します。引数の formula = CMEDV ~ CRIM + NOX + RM + DIS + LSTAT + BB + POP は、CMEDV を目的変数、その他のフィールドを説明変数としていることを意味します。 また、summary 関数で実行した結果のサマリーを確認することが可能です。 # Rのspdepパッケージを使って空間誤差モデルの解析をする=======================================
bstn_sp <- arc.data2sp(bstn_fc)
require(spdep)
W <- poly2nb(bstn_sp, queen = TRUE) %>%
nb2listw(style = "W", zero.policy = TRUE)
require(spatialreg)
SEM <- errorsarlm(
formula = CMEDV ~ CRIM + NOX + RM + DIS + LSTAT + BB + POP,
listw = W,
data = bstn_sp
)
summary(SEM) 解析結果を元のデータに付与 解析結果を代入したオブジェクト (SEM) の中には residual (残差)、fitted.value (推定結果) が含まれています。以下のコードで、それらを元のデータに付与しています。 また、ここではパイプ演算子 (%>%) を使用しています。この演算子は関数等の実行結果を次の関数の第一引数に渡してくれるため、複数の処理を連続的に記述できます。中間処理結果を代入するための一時的な変数を作成する必要もなくなるため、コードの可読性が向上します。 # 解析結果を元のデータに付与する=================================================================
sem_values <- bstn_sp@data %>%
cbind(residuals = SEM$residuals) %>%
cbind(fitted = SEM$fitted.values)
bstn_sp@data <- (sem_values)
head(bstn_sp@data) 補足: R でのチャート作成 セッション中では詳しく紹介しませんでしたが、R の利用に慣れている場合は ggplot2 というパッケージを利用してチャートを作成しても良いでしょう。 以下のコードは 2 種類のチャートを作成しています。1 つ目は横軸に予測結果、縦軸に残差を取ったものです。プロットされた点が 0 を示す赤い点線から離れているほど残差が大きい (予測と実際の値の差が大きい) ことを示します。2 つ目は縦軸に予測結果を、横軸に実際の値を取っています。こちらも同じように赤い点線から離れたポイントは予測と実際の値の差が大きいことを示しています。 # 結果の可視化===============================================================================
require(ggplot2)
require(ggthemes)
g <- ggplot(bstn_sp@data, aes(x = fitted, y = residuals, ymin = -30, ymax = 30, xmin = -10, xmax = 50))
g <- g + theme_hc(base_size = 16)
g <- g + coord_fixed(ratio=1)
g <- g + geom_point(colour = "#003366", alpha = 0.4)
g <- g + geom_abline(aes(slope=0, intercept=0), color='red', linetype = "31")
g <- g + labs(x = "Predicted", y = "Residuals")
g
g <- ggplot(bstn_sp@data, aes(x = CMEDV, y = fitted, ymin = 0, ymax = 55, xmin = 0, xmax = 55))
g <- g + theme_hc(base_size = 16)
g <- g + coord_fixed(ratio=1)
g <- g + geom_point(colour = "#003366", alpha = 0.4)
g <- g + geom_abline(aes(slope=1, intercept=0), color='red', linetype = "31")
g <- g + labs(x = "Observed", y = "Predicted")
g 結果を ArcGIS Pro へ書き込む 最後に、冒頭と同じように arc.write 関数を使用して、解析結果を付与したデータを新たなフィーチャクラスとしてファイル ジオデータベースに書き込みます。 # データをArcGIS Proへ戻す==================================================================
arc.write(bstn_sp, path = "gcf2019_sem/gcf2019_sem.gdb/sem_rslt", overwrite = TRUE) 地図上での可視化 ArcGIS Pro 上で残差を地図上にプロットします。以下の画像では、ArcGIS Pro の [一般化線形モデル] の結果と、R での解析結果を交互に表示しています。両者の結果を比較できるようにシンボルを調整していますが、どちらも残差を等間隔で分類し塗り分けています。R での解析結果の方が色の濃い地区が減少しており、残差のばらつきが小さい (予測と実際の値の差が少ない) ことがわかります。 また、補足として R を用いたチャート作成のコードをご紹介しましたが、ArcGIS Pro にはノンコーディングで見栄えの良いチャートを作成する機能が標準で実装されています。以下では ArcGIS Pro での解析結果と、R を用いた場合の解析結果、それぞれの残差をプロットして比較しています。下側に表示されている R での解析結果の方が、残差が 0 付近に集まっているのがわかります。 作成したチャートはマップと連動しているため、チャート上でポイントを選択するとマップ上でも同じように選択され、マップ上でもすぐに確認することが可能です。 まとめ さて、本稿ではテクニカルセッション中にご紹介した ArcGIS Pro と R の連携のデモンストレーションついて主に R のコードを中心に紹介しました。ArcGIS の既存のツールでの解析が難しい場合などは R の様々なパッケージを利用することで対応できる範囲を拡張することが可能です。 一方で、R 側で空間的な処理を全て行うよりも、ArcGIS Pro のジオプロセシング ツールを利用した方がずっと手軽なケースも多いでしょう。また、R 単体では解析結果を表示する Web アプリを作成し、組織内外に共有するためには別途開発が必要です。Web GIS、特に ArcGIS Online を活用すればプラットフォームの利点を活かしてすぐに解析結果の共有が可能です。 本記事で紹介したコードは ESRIジャパンの GitHub 上で公開しています。是非ご参考にしていただき、双方の強みを組み合わせて、さらに ArcGIS をご活用いただければ幸いです。 ※ ArcGIS API for Python を用いたディープラーニングは、別途本ブログにてご紹介いたします。 関連リンク ArcGIS 関連 ArcGIS Pro R-ArcGIS Bridge 統計情報および R-ArcGIS Bridge を使用した犯罪の解析 (Learn ArcGIS) アフリカ水牛の生態的地位の識別 (Learn ArcGIS) R 関連 CRAN spData 0.3.0 spdep 1.1-2 spatialreg 1.1-3 tidyverse 1.2.1 ggthemes 4.1.1 RStudio
... View more
06-27-2019
10:13 PM
|
1
|
0
|
2175
|
DOC
|
はじめに 皆さんは ArcGIS API for Python を既に利用されていますか? これまで GeoNet 上で公開してきた ArcGIS API for Python に関わるブログでは、コードも交えて比較的具体的な利用方法についてご紹介してきました。しかし、ArcGIS API for Python とはそもそも何か、どのような仕組みで動作しているのか、利用する上でのベスト プラクティス等の根本的な話をする機会が無かったかもしれません。 先月、米国 Esri 社で「ArcGIS API for Python のコアコンセプト」と題して上記のような内容について紹介するブログが二回に分けて掲載されたので、今回は少し趣向を変えて当該ブログを翻訳した記事をご紹介したいと思います(翻訳版も二回に分けて掲載いたします)。 既に利用されている方も、これから利用することを検討している方も、是非参考にしてください。 ※ 以降の文章は、米国 Esri 社のブログ記事「ArcGIS API for Python Core Concepts Part 1: Python, APIs, and REST」を翻訳したものです。 あなたは、ArcGIS OnlineやArcGIS Enterpriseのワークフローを自動化するためにArcGIS API for Python に興味を持っていますか?興味はあるけれど、いくつもの異なるコンポーネントとソフトウェアのオプションがあることを知り、ハードルが高いと感じていませんか?ArcGIS API for Python は複雑で、異なるPython 環境に加えていくつものインストールのオプションがあるため、難しそうに見えます。また、ArcGIS API for Python は Anaconda や Jupyter Notebook のような、多くの方にとっては初めてのサード パーティー製品と連携します。 しかし、ArcGIS API for Python は、特にベスト プラクティスに従った時は、とても便利で直感的なものになります。また、あなたのスクリプトを非常にシンプルにすることが可能です。このサンプル コードは、ArcGIS API for Python を使わずに、コンテンツの所有者をあるユーザーから別のユーザーに移す (reassigining)処理です。この処理のためには、あなたが実行したい全てのことに対して、URL リクエストを行うとても長いスクリプトを作成しないといけません。 とても長いスクリプトです 対象的に、同じワークフローを ArcGIS API for Python を用いて実行する場合、以下が必要なコードの全てです。 短く素晴らしいスクリプトになりました ArcGIS API for Python が URL リクエストを生成してくれるため、使わなかった場合に比べて、よりシンプルなスクリプトを書いたり共有したりすることができます。上記の例では、ArcGIS API for Python を使うことで、同じタスクを実行するにあたり、 117 行のコードを 19 行に減らすことができました。あなたがArcGIS API for Python を使い始める前に、ArcGIS API for Python とは何かということと、いくつかのベスト プラクティスについてしっかりと把握しておくことは非常に良いことです。この二つのパートに別れたブログでは、各コンポーネントとArcGIS API for Python を使用するという概念、それらがどのように関連しているか、そしてベスト プラクティスについてブレイク ダウンしてご紹介します。 ArcGIS API for Python とは何か? ArcGIS API for Python は「Esri により開発された、ArcGIS REST API を介して Web GIS を管理するための Python の API」と定義できます。 しかし、この定義はあなたが以下の事項全てについて知っていることを想定しています。 Python API ArcGIS REST API Web GIS あなたがこのブログを読んでいるということは、あなたはすでに Web GIS を理解しているのではないかと思います。しかし、読者全員の足並みを揃えるために説明すると、Web GIS とは、データの共有、編集または管理をWeb を用いて行う GIS データ管理システムを含むコンセプトです。Esri においては、ArcGIS Online または ArcGIS Enterprise (特に Portal for ArcGIS) のことを示す際に Web GIS という言葉を用います。ここからは、その他のコンセプトと、これらが Web GIS の管理にどのように関連しているのかについて掘り下げていきましょう。 Python のインストールについて理解する Python は、Esriやその他多くのソフトウェア プラットフォームが、処理ツールを作成する際に用いているオープンソースのプログラミング言語です。Python のインストールは、コアとなるコード(例えば python.exe と関連ファイル)に加えて、追加のツールや関数のパッケージが一緒にインストールされます。ユーザーはその他のパッケージを機能拡張のために追加することができます。 ArcGIS DesktopのPython インストール 例えば、ArcGIS Desktop とともにインストールされるPythonには、arcpy パッケージが付属します。arcpy には全てのArcGIS のジオプロセシング ツールが含まれています。その他の一般的なパッケージでは、数学的な関数を扱う NumPyや、URL の生成とリクエストの送信ができるurllib と requests が含まれています。NumPy は通常デフォルトで Python と一緒にインストールされますが、urllib と requests はユーザーがインストールする必要があります。 ArcGIS Desktop は Python と一緒にインストールされますが、全ての ArcGIS 製品が同じ Python をインストールするわけではありません。ArcMap と ArcGIS Pro の開発の間、いくつかの新しい Python のバージョンが発表されました。 そのため、ArcMap のインストールでは Python 2.7 と arcpy パッケージがインストールされます。 ArcMap と Python 2.7 のインストール 一方、ArcGIS Pro は Python 3.5 を用いて開発されました。ArcGIS Pro の arcpy パッケージには Python 3.5 のインストールが必要です。同様に、ArcGIS API for Python は Python 3.5 を使用しているクライアントにのみインストールすることができます(※ 訳注:厳密には Python 3.5 かそれ以上のバージョンがシステム要件となりますが、ここでは原文に従いました。要件の詳細はシステム要件のページ(英語)をご参照ください)。ArcGIS API for Python の Python パッケージは arcgis と呼ばれます。 ArcGIS Pro と Python 3.5 のインストール 「ちょっと待てよ」、と思われるかもしれません。「ArcGIS API for Python は API なのに、なぜ Python パッケージと言っているの?」 良い質問ですね! ArcGIS API for Python とは Python パッケージ、API の両方です。 Python パッケージは Python 環境にインストールすることができるツールで、これは正に ArcGIS API for Python のことです。 しかし、ArcGIS API for Python は同様に API でもあります。これは私達を次の質問へと導きます。APIとは何か? API とは何か? API とは「アプリケーション プログラミング インターフェイス (Application Programming Interface) 」を意味し、二つのアプリケーションが互いにやり取りできるようにするためのツールのライブラリのことです。例としては、Javascript API 、Silverlight API、そしてArcGIS REST APIが挙げられます (訳注:Javascript API は 正確には ArcGIS API for JavaScript、Silverlight API は正確には ArcGIS API for Silverlight と思われますが、ここでは原文に従いました)。 自動販売機から飲み物を買いたいと思っている同僚を想像してみてください。私達はサーバー (自動販売機) に対してリクエストを実行 (炭酸飲料を買う) しようとしている一つのアプリケーション (喉が渇いた同僚) を持っています。これを実行するためには、アプリケーションとサーバーの両者が理解でき、やり取りするためのインターフェイスが必要です。この場合、自動販売機のボタンがアプリケーションとサーバーの間のインターフェイスの役割を果たします。 アプリケーションがサーバーに対してリクエストを送る 現実世界の API の例は、ArcGIS REST APIです。ArcGIS REST API は、アプリケーションが ArcGIS Server サイトにリクエストするためのツール セットです。名前が示すとおり、ArcGIS REST API はアプリケーションがRESTful な ArcGIS Server サイトに REST リクエストを送るためのツールが含まれています。ArcGIS API for Python は ArcGIS REST API とやり取りをするため、サーバー サイトが RESTful とは何を意味するのかについて掘り下げてみましょう。 アプリケーションとArcGIS REST API の関係 REST とは何か? リプレゼンテーショナル ステート トランスファー (Representational State Transfer) または REST は、人々がURLを読むことができるようにサイトを編成するアーキテクチャ スタイルです。 ArcGIS Server サイトは REST アーキテクチャ スタイルを使用して、コンピュータのフォルダーを移動するのと同じ方法で移動できるサイトを作成します。 以下のリンク先は SampleServer6 というサーバーの REST サイト上のサービス ディレクトリ です。 https://sampleserver6.arcgisonline.com/arcgis/rest/services SampleServer 6 の REST エンドポイント もし私がこのサービス ディレクトリの Energy フォルダーを開いたら、Windows Explorerのように、「/Energy」が URL に追加されます(https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy)。ここから、私はGeology フィーチャ サービスを開くことができ、URL には「Geology/FeatureServer」が追加されるでしょう。 もし私が特定のサービス レイヤー (例えば、Fault レイヤー) を操作したい場合、レイヤーの番号 (0) が以下のように追加されます。 https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy/Geology/FeatureServer/0 特定のサービスまたはサービス レイヤーの URL が開かれると、URL の最後に、そのサービスまたはレイヤーに対して実行したいオペレーションを追加できます。例えば、もしあなたが Geology サービス の Fault (0) レイヤーから、特定のフィーチャを ObjectID でクエリしたい場合、ArcGIS REST API から「query?」オペレーションと任意のパラメーター (例えば、「objectIds=41568」) を追加し実行することができます。あなたが URL リクエストを送ると、SampleServer6 は Geology フィーチャ サービスの最初のレイヤーにあるフィーチャ 41568 の情報を返します。URL リクエストは、以下のようなものになるでしょう。 https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy/Geology/FeatureServer/0/query?objectIds=41568 ArcGIS REST API は、ArcGIS Server サイトに対して、あなた(もしくはアプリケーション)が実行できる全てのオペレーションのリストです。これらのオペレーションは URL リクエストの REST アーキテクチャを通じてサービスに適用されます。 ArcGIS API for Python vs ArcGIS REST API もし API が二つのアプリケーション間のインターフェイスならば、そして ArcGIS REST API がアプリケーションと ArcGIS Server サイト間のインターフェイスならば、ArcGIS API for Python は何のインターフェイスなのでしょう? このことについて考えるには二通りの方法があります。 ArcGIS API for Python は、Python スクリプトと ArcGIS REST API のインターフェイスとして考えることができます。そして、ArcGIS REST API が ArcGIS API for Python と ArcGIS Server サイトとの間のインターフェイスとなります。 ArcGIS API for Python は Python スクリプトと ArcGIS REST API の間のインターフェイス もう一つの考え方は、ArcGIS API for Python は ArcGIS REST API の Python ベースのラッパーであり、両者がともにスクリプトと ArcGIS Server サイトの間のインターフェイスとして働くというものです。 ArcGIS REST API のラッパーとしての ArcGIS API for Python ArcGIS API for Python は ArcGIS REST API の URL 生成を Python ベースの関数でラップしているため、URLをスクリプト内にマニュアルで書く代わりに、関数を呼び出すことで、バックエンドで URL が生成されます。 同じオペレーションで ArcGIS API for Python を使わなかった場合 (上) と使った場合 (下) ArcGIS API for Python とは何か? 私達はここまでで Python、Python パッケージ、API、そして ArcGIS REST API を詳細に見てきました。ここで元の定義を振り返ってみて、最終版の定義にするためにもう少し詳細な形にしてみましょう。 「ArcGIS API for Python は、API と Python パッケージの両方です。これは、Python スクリプトと ArcGIS REST API を手助けするツール、つまり ArcGIS Server のサービスへのリクエストを作るためのツールを含んでいます。したがって、ArcGIS API for Python は、 WebGIS のコンテンツやユーザーを管理するための Python スクリプトを作ることを手助けします。」 さらに ArcGIS API for Python について学びたいですか?続編のブログも是非チェックしてください。 ※ 続編の翻訳したものは「ArcGIS API for Python のコアコンセプト その 2 : Anaconda、Conda、Jupyter Notebook、そしてArcGIS Pro」です。併せてご参照ください。 関連リンク集 米国 Esri 社ブログ ArcGIS API for Python Core Concepts Part 1: Python, APIs, and REST ArcGIS API for Python Core Concepts Part 2: Anaconda, Conda, Jupyter Notebooks and ArcGIS Pro ArcGIS 関連ページ ArcGIS API for Python(ESRIジャパン製品ページ) ArcGIS API for Python(米国Esri ページ(英語)) ArcGIS 開発リソース集 技術 Tips 集
... View more
06-06-2019
07:22 PM
|
1
|
0
|
2237
|
DOC
|
はじめに この記事は、「ArcGIS API for Python を使ってみよう」シリーズその⑦です。 当シリーズでは、ArcGIS API for Python (以下、Python API) の使い方をご紹介しています。 前回の記事では、ArcGIS Online が提供する解析ツールとホストされたデジタル標高モデル (DEM) を利用して、ダムの集水域の作成及び下流解析を実行し、ダムにどこから水が流れ込んでいるのか、またダムから放水された水がどの流路を通っていくのかを地図上で可視化しました。 今回の記事では Web GIS の管理に関する作業を一括で処理する使い方をご紹介します。 ポータルの管理 ArcGIS Online の組織向けプランをご契約いただくか、ArcGIS Enterprise のコンポーネントの1つである Portal for ArcGIS をオンプレミス環境に構築すると、組織のアイテムやユーザーを管理するための組織専用のポータルサイト (以下、ポータル) を利用できるようになります。ポータルを利用することで、所属するユーザーアカウント毎に権限を割り当てたり、作成されたマップやアプリケーションの共有範囲を設定したりすることができます。これにより、各ユーザーの業務の必要性に応じた GIS 機能の提供や、機密性を保持しながら組織内のデータ共有が可能になります。 このような便利な機能を提供するポータルですが、ポータルを組織で運用する中では、どうしても時期的な作業が発生することが避けて通れないことは、他システムの運用と同様です。 例えば、これからの時期ですと、新入社員の入社や組織変更に伴う部署異動などで以下のような作業が発生するでしょう。 ※ArcGIS Online と Portal for ArcGIS のバージョンによっては、ポータルの GUI や機能が異なる場合があります。本記事では執筆時点での ArcGIS Online のポータルを利用します。 入社等に伴う新規ユーザーの複数作成 新たに入社された方のために新規ユーザーを作成するケースを考えます。新たにユーザーを作成する方法はいくつかありますが、最も基本的なものは、管理者側でユーザーネーム等の情報を設定し作成する方法です。以下のようにポータルの GUI を使ってこの操作を実行する場合、管理者としてログインした後、組織タブの概要からメンバーの招待をクリックし、必要な情報を入力する作業を繰り返さなければいけません。CSVファイルを事前に用意して一括で取り込むことも可能ですが、定形の繰り返し作業になるため、プログラムで処理できると効率的です。 部署異動に伴う アイテム(データ) の引き継ぎ 部署異動でポータル上にアイテムを大量に所有している人が他の部署に異動するため、別の方にアイテムの所有権を移す必要があると仮定しましょう。この時、ポータルの GUI を使って手動で変更しようとすると、ログイン後にコンテンツの画面を開き、アイテムのチェックボックスにチェックを入れて、所有者の変更ボタンを押し、所有権を渡す相手のユーザーを指定し、ようやく処理を確定するボタンをクリックすることになります。この作業も、アイテム数が大量にある場合は、マウス操作を繰り返すのではなくプログラムで一括処理をしたいところです。 Python APIで一括処理 Python API は以下の 4 つのタイプの利用者を想定して開発されている Web GIS のための API です。 コンテンツ作成者 GIS アナリスト/データサイエンティスト 組織の管理者 開発者 組織の管理者が含まれているように、Python API を活用することで、上記のようなポータルの管理に係る作業をスクリプトで自動化したり、一括で処理したりすることが可能です。以降では、上記の作業を処理する具体的なコードについて紹介します。 また、今回は ArcGIS Developers Subscritpion を利用して作成した開発及び評価用途のための ArcGIS Online の組織サイト上で上記作業の一括処理を試行しました。ArcGIS Developer Subscription の Builder 以上の有償プランをご利用いただくと、開発及び評価用の ArcGIS Online 組織サイトを作成することが可能です。詳しくは ArcGIS for Developers の Web サイトを参照いただくか、ご不明な点があればお気軽にお問い合わせください。 新規アカウントの一括作成 開発及び評価用の ArcGIS Online 組織サイトでは、管理者のアカウントを含む Creator タイプのユーザーを 2つ、Viewer タイプのユーザーを 3 つ、合計 5 つのユーザーを作成可能です。今回は Viewer タイプのユーザーを 3 つ一括で作成します。ユーザータイプについては、ライセンス体系に関する記事を参照ください。 まずは Python API のモジュールを import して、管理者権限をもつアカウントで組織サイトにログインします。 # 必要なモジュールをインポート
from arcgis.gis import *
# 管理者としてログイン
user_name = "管理者のユーザーネーム"
my_gis = GIS("ポータルのURL", username = user_name)
print(str(my_gis.properties.user.username) + "としてログインしました。") 新規ユーザーの一括作成する際にループ処理をかけるため、ユーザーネームの配列を作成します。 # 新規作成するアカウントのユーザーネームの配列
new_viewers = ["esrij_dev1", "esrij_dev2", "esrij_dev3"]
new_viewers 作成した配列に対して、UserManager.create() メソッドを用い、アカウントを作成します。UserManager クラスは gis クラスのヘルパークラスです。ログインした際に作成した GIS オブジェクトから使用することができます。 # UserManager.create() メソッドを for 文で繰り返し、ユーザーを作成する
# UserManager クラスは arcgis.gis クラスのヘルパークラスです。arcgis.gis.users で利用することができます。
for viewer in new_viewers:
my_gis.users.create(
username = viewer, password = viewer + '_test_pass',
firstname = viewer.split("_")[0], lastname = viewer.split("_")[1],
email = viewer + "@esrij.com", role = "viewer", user_type = "viewer"
) 配列内のユーザーネームに対してループ処理をかけてユーザーを作成します。password は最初にログインする際に入力する一時的なパスワードです。新規ユーザーがログインした際に独自のパスワードに変更するよう要求されます。 氏名にあたる firstname、lastname には、ユーザーネームをアンダーバーで分割し、それぞれ使用しました。今回作成するユーザータイプは viewer なので、 role 及び user_type は viewerに設定します。その他 UserManager.create() の詳細については API リファレンス (英語) を参照下さい。 アイテム所有者の一括変更 次にアイテムの所有者を一括で変更します。まずはアイテムの現所有者を検索します。UserManager.search() メソッドを使うことで、組織内のユーザーアカウントを検索することができます。結果は配列で返されます。 # アイテムの現所有者を検索
current_owner = my_gis.users.search("ads_enterprise_dev1")[0]
current_owner User.items() メソッドでそのユーザーが所有するアイテムを配列で取得できます。パラメーターとしてフォルダー名を指定しますが、何も指定しない場合はルート フォルダー内のアイテムが表示されます。 # ルート フォルダー内のアイテムの確認
current_owner.items() 次に、新たにアイテムの所有者となるユーザーも同じように検索します。 # アイテムの新たな所有者となるユーザーを検索
target = my_gis.users.search("nakamura_dev_org")[0]
target アイテムの所有者の一括変更には、User.delete() もしくは User.reassign_to() を使用します。 前者を用いると、元の所有者であるユーザーの削除と同時に、アイテムの所有権が指定したユーザーに移されます。アイテム所有者が組織から異動する等で、所有者のアカウントが不要になる際に用いると便利です。パラメーターの reassign_to = には新たにアイテムの所有権を移す先のユーザーネームを指定します。削除対象のユーザーがアイテムを所有しているにもかかわらず、reassign_to = が指定されていなかった場合は、エラーとなり処理は実行されません。 ユーザーを削除せずにアイテムの所有権だけを移したい場合は、後者を用いることでアカウントは削除せずにアイテムの所有者のみ変更できます。 # 現所有者の所持する全てのアイテム、グループの所有権を新たな所有者へ移すと同時に、現所有者のアカウントを削除する
current_owner.delete(reassign_to = target)
# アカウントを削除せずにアイテムの所有者のみを変更するメソッドもあります
# current_owner.reassign_to(target) User.items() メソッドを用いてアイテムの所有者が変更されているかを確認します。誰のアイテムであったのかがわかるよう、"前所有者のユーザー名" + "_フォルダー名"で新たなフォルダーが作成され、中にアイテムが格納されています。ルート フォルダーの場合、フォルダー名は root となるため、以下のようにフォルダーを指定します。 # アイテムの所有が移ったかを確認
target.items("ads_enterprise_dev1_root") 結果は以下のとおりです。 今回のブログでは、ポータル管理に係る作業の一括処理についてご紹介しました。組織が所有するアイテムの数やユーザーの数が大きくなるほど作業が増えていきがちです。Python API を活用して一括処理や自動化を進めることで、効率的なポータル管理を実現できます。 本稿で使用した全体のコードは ESRIジャパン GitHub でも公開しています。是非参考にしていただければと思います。 本ブログでは今後も Python API の便利な使い方や特徴についてご紹介していきます。 ※ 本稿で表示したデータは ESRIジャパン オープンデータポータル内で公開されているデータを使用しました。当該データは、国内で ArcGIS Open Data を用いて公開された組織のデータ、または、全国都道府県・市区町村のオープンデータを ESRIジャパンにて収集・再公開したデータです。 関連リンク集 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 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入門
... View more
02-25-2019
05:40 AM
|
0
|
0
|
2579
|
DOC
|
はじめに 2018年10月17日から、クラウド連携をサポートするSORACOM Funnelの Partner Hosted Adapterが、ESRIジャパン株式会社のArcGIS Onlineに連携を開始しました。 それに伴いまして、「IoT通信プラットフォーム「SORACOM」とクラウドGISプラットフォーム「ArcGIS Online」の連携」シリーズで、3回にわたり連携手順をお伝えしています(1回目、2回目)。 SORACOMとArcGIS Onlineの連携イメージ 参考:「位置情報をマップ上で可視化・分析できるArcGIS Online が株式会社ソラコムのSORACOM Funnelと連携開始」 SORACOMのSORACOM Funnelアダプターを使用して、SORACOM 対応デバイスからArcGIS Onlineのフィーチャ サービス(フィーチャ レイヤー)へのデータ転送が可能になりました。転送されたセンシングデータは、ArcGIS Onlineにて可視化・共有・解析することができます。 第3回、いよいよ最終回となる今回は、デバイスからGISへのクラウド連携を完了させます。「第2回 ArcGIS Online の設定」の完了が前提です。下図のステップ1~3を行っていきます。 オレンジの丸部分が今回の設定箇所 ① デバイスの購入とデバイス設定 SORACOM を使った通信を始めるにあたり、手っ取り早いのは、SORACOM認定デバイス一覧から、要件にマッチする、あるいは十分に近いデバイスを探すことです。見つからない場合は調達からし直すことになります。 デバイス側にしなければならない設定としては、データ送信先を SORACOM Funnel のエンドポイントに固定することです。エンドポイントのアドレスは「funnel.soracom.io:23080」です。具体的な設定方法は各デバイスのマニュアルに記載されているはずです。 送信先エンドポイントの設定例 ここで、デバイスが送信するデータの形式を確認しておいてください。マニュアルに記載されているはずです。重要な確認項目は下記の3点です。 通信プロトコル(HTTP/TCP/MQTT/…?) 送信データ圧縮形式(RAW=無圧縮/Base64/…?) 具体的な送信内容(CSV?JSON?何番目にデバイスID?) ② グループの作成とデバイスの割り当て デバイスを購入したら、そのデバイスが SORACOM にデータを送信したのち、そこからどうするのか、を設定することになります。SORACOM ではデバイスの設定を一括で行えるよう、グループを作成して設定を適用します。各基地局や交換局から SORACOM までセキュアに集まった情報が、SORAOCM のグループに振り分けられて、グループ設定毎にクラウドやサーバーに転送されるという仕組みです。 デバイスからのデータ転送イメージ 実際にはグループはSIMとLoRaとSigfoxの3種類それぞれに存在するため、通信種類が異なるグループに所属することはできません(2018年10月現在)。グループの作成方法とデバイスの割り当て方法は、株式会社ソラコムのWebサイト「ユーザーコンソールの使い方」に掲載されています。新しいグループを1つ作成し、ArcGIS Online 向けと分かるような名前を付けます。 グループの作成画面 なお、SORACOM Air設定時に既にグループ割り当てがされている場合、新たにグループ作成する必要はありません。Air の設定と Funnel の設定は同居可能です。 ③ グループの SORACOM Funnel 設定 グループを作成し、SIM または デバイス(SORACOM Air for ○○)をグループに割り当て終わったら、そのグループの Funnel 設定を行います。 SORACOM ユーザーコンソールでメニューから設定したいグループを選択し、グループ一覧のなかから作成したグループ名をクリックし、グループ設定画面を開きます。開いた設定画面の中の [SORACOM Funnel 設定] を選択し、パネルを開いた状態にします。 左上の [OFF] 部分をクリックし、[ON] に切り替えると、転送先サービスが選択可能になります。転送先サービスのドロップダウン リストのなかから「Esri Japan ArcGIS Online」を選択します。 SORACOM Funnel の設定画面 選択すると設定可能な箇所が増えるので、設定箇所を埋めていきます。[転送先URL] には前回作成した2つ目のフィーチャ サービスのURLを貼り付けます。 SORACOM Funnel の設定画面 [転送データ設定] にはJSONの設定情報を貼り付ける必要があります。デバイスから送信されるデータと、ArcGIS Online のフィーチャ サービスのフィールドを紐づける設定になります。まずは、下記のJSON文字列をメモ帳などのテキスト エディタに貼り付けて編集します。 {
"sendType": "",
"delimiter": "",
"encode": "",
"d_id": "",
"lat": "",
"lng": "",
"D_TIME": "",
"v_dbl_1": "",
"v_dbl_2": "",
"v_dbl_3": "",
"v_dbl_4": "",
"v_int_1": "",
"v_int_2": "",
"v_str_1": "",
"v_str_2": ""
} それぞれの項目の内容と、フィーチャ サービスの転送先フィールドとの対応表は下記になります。(*)は必須設定です。 設定項目 設定値 転送先フィーチャサービスのフィールド名 sendType(*) “json“: デコード後の内容がJSON形式 “text”: デコード後の内容が区切り形式 ― delimiter “text”の場合のみ有効の区切り文字を指定 “,”: CSVということ “”: JSON形式の場合未設定 ― encode “base64”: 送信されてくるデータがBase64エンコードされている場合に設定するとデコードする “”: エンコードされていない場合は空に設定 ― d_id(*) デバイス固有のID情報を設定 ”ABCDE”: JSONの場合はKey名称を設定 “1”: CSV等のText形式の場合、分割後の位置を指定、数値は0からカウントアップ “#imei”: 固有IDを送信しない場合、IMEI番号を利用可能 “#imsi”: 固有IDを送信しない場合、IMSI番号を利用可能 device_id (String型) lat GPSなどで位置が取れるデバイスは、緯度(Latitude, Breite)が送信されてくる場合はここに設定する。 逆に位置が無い、静止デバイスの場合は、ここは未設定。 ※ NMEA文字列を飛ばす場合は、lat, lng の両方にNMEA文字列をセットすること ― lng GPSなどで位置が取れるデバイスは、経度(Longitude, Lange)が送信されてくる場合はここに設定する。 逆に位置が無い、静止デバイスの場合は、ここは未設定。 ※ NMEA文字列を飛ばす場合は、lat, lng の両方にNMEA文字列をセットすること ― D_TIME 送信したいデータのKey名称 or 区切った際のデータ格納位置 ”ABCDE”: JSONの場合はKey名称を設定 “1”: CSV等のText形式の場合、分割後の位置を指定、数値は0からカウントアップ “”: ない場合は空のまま ※ UNIXTIMEか文字列型に対応、エラーが出る場合はいったんv_str_1 or 2に格納してから加工すること device_time (DateTime型) v_dbl_1~4 送信したいデータのKey名称 or 区切った際のデータ格納位置 ”ABCDE”: JSONの場合はKey名称を設定 “1”: CSV等のText形式の場合、分割後の位置を指定、数値は0からカウントアップ “”: ない場合は空のまま “#imei”: IMEI番号を格納したい場合 “#imsi”: IMSI番号を格納したい場合 value_double_1~4 (Double型) v_int_1~2 送信したいデータのKey名称 or 区切った際のデータ格納位置 ”ABCDE”: JSONの場合はKey名称を設定 “1”: CSV等のText形式の場合、分割後の位置を指定、数値は0からカウントアップ “”: ない場合は空のまま value_integer_1~2 (Integer型) v_str_1~2 送信したいデータのKey名称 or 区切った際のデータ格納位置 ”ABCDE”: JSONの場合はKey名称を設定 “1”: CSV等のText形式の場合、分割後の位置を指定、数値は0からカウントアップ “”: ない場合は空のまま “#imei”: IMEI番号を格納したい場合 “#imsi”: IMSI番号を格納したい場合 value_string_1~2 (String型) 設定サンプルは下記のとおりです。 1.TR313Jからの情報登録 (移動体) {
"sendType": "text",
"delimiter": ",",
"encode": "base64",
"d_id": "1",
"lat": "10",
"lng": "9",
"D_TIME": "",
"v_dbl_1": "11",
"v_dbl_2": "12",
"v_dbl_3": "13",
"v_dbl_4": "",
"v_int_1": "",
"v_int_2": "",
"v_str_1": "",
"v_str_2": ""
} 2.Sens’it (Sigfox) からの情報登録 (静止デバイス) {
"sendType": "json",
"delimiter": "",
"encode": "",
"d_id": "device",
"lat": "",
"lng": "",
"D_TIME": "time",
"v_dbl_1": "tempC",
"v_dbl_2": "humidity",
"v_dbl_3": "battery",
"v_dbl_4": "rssi",
"v_int_1": "mode",
"v_int_2": "",
"v_str_1": "station",
"v_str_2": "modeText"
} デバイスに応じたJSONの設定ができあがったら、SORACOM Funnel 設定画面上の [転送データ設定] ブロックに貼り付けます。 次に、認証情報を設定します。前回のブログでフィーチャ サービス(プロキシ サービス)に設定した、リファラ―URLを設定します。 前回設定したリファラ―URL SORACOM Funnel 設定画面の [認証情報] 一覧から選択するか、ドロップダウンリスト横の+ボタンをクリックして、新たにリファラ―URLを設定します。 [登録] ボタンで認証情報を登録すると、SORACOM Funnel 設定画面に戻ります。 最後に [送信データ形式] を設定します。[転送データ設定] に設定済みの JSON 内で “encode” を指定する場合は「バイナリ」を、それ以外は「JSON」か「テキスト」を、設定内容にあわせて選択します。 すべての設定が終わったら、SORACOM Funnel 設定パネルの左下にある [保存] ボタンをクリックして設定は終了です。 設定の保存後はすぐに SORACOM Funnel が動き出し、デバイスからの転送にあわせて ArcGIS Online 上のフィーチャ サービスにデータが格納されます。これで IoT デバイスから GIS へのクラウド連携が完了となります。 データがフィーチャ サービスに到達したかどうか、また、データをマップ上でどのように表現するか、などについては、「ArcGIS Online 逆引きガイド」に掲載されています。 3回にわたりお伝えしてきた “IoT通信プラットフォーム「SORACOM」とクラウドGISプラットフォーム「ArcGIS Online」の連携” ですが、連携方法をお伝えしたのみです。 ダッシュボードによる可視化、Web アプリケーションによる可視化、そしてマップ ビューアーが備える強力な解析機能を使って、はじめて IoT と GIS の連携に価値が出てきます。ダッシュボードの設定方法については、また別の機会にお伝えしたいと思います。 お急ぎの方はぜひ、下記のオンライン ラーニング サイトや、ダッシュボードの作成にチャレンジして、ArcGIS Online の機能に触れてみてください。 はじめての ArcGIS Online 人口学的分析による子どもの貧困対策 到達圏分析による宅配の効率化 ダッシュボード オンライン ヘルプ ■関連リンク ArcGIS関連 ArcGIS Online(製品紹介) ArcGIS Onlineトライアル申し込み ESRIジャパンお問い合わせ 関連ブログ:IoT データをリアルタイムに地図上に可視化してみた! 関連ブログ:IoT通信プラットフォーム「SORACOM」とクラウドGISプラットフォーム「ArcGIS Online」の連携 ~ 第1回 連携の準備 ~ 関連ブログ:IoT通信プラットフォーム「SORACOM」とクラウドGISプラットフォーム「ArcGIS Online」の連携~ 第2回 ArcGIS Online の設定 ~ SORACOM関連 SORACOM SORACOM Funnel 株式会社ソラコム開発者向けサイト
... View more
11-12-2018
09:30 PM
|
1
|
0
|
2981
|
Title | Kudos | Posted |
---|---|---|
1 | 09-04-2019 05:18 AM | |
1 | 06-27-2019 10:13 PM | |
1 | 06-06-2019 07:22 PM | |
1 | 11-12-2018 09:30 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|