DOC
|
はじめに 前回の記事ではウィジェットの基本実装の方法を学習する手段の第一歩として、ArcGIS Experience Builderを使用したチュートリアル、Create a starter widget のサンプルを翻訳して紹介しました。本記事ではチュートリアルの Get map coordinates のサンプルの解説を翻訳して紹介します。 ArcGIS Experience Builder のすぐに使用できるマップ ウィジェットには、ArcGIS API for JavaScript のビューのインスタンスが含まれています。View は、マップとの対話的な操作や、マップの位置に関する情報を取得する方法を提供します。View のプロパティとイベント ハンドラを使用すると、マップまたは画面上の任意のポイントの空間参照情報や緯度、経度、縮尺、ズーム レベルを取得することができます。これらの取得した情報を使って、カスタム ウィジェットに表示したり、他の場所を検索したり、エクスペリエンスの開始時のマップの初期範囲を設定したりできます。 このチュートリアルでは、マップ ウィジェットにアクセスし、カスタム ウィジェット内にマップの緯度、経度、縮尺、ズームレベルを表示します。 インストール ArcGIS Experience Builder のインストール ガイドを参照して、ArcGIS Experience Builder (Developer Edition) のダウンロードやインストール、設定を行います。 ステップ スターター ウィジェットの入手 1. スターター ウィジェット テンプレートをこちらからダウンロードします。 スターター ウィジェットの作成のチュートリアルをすでに完了している場合は、続きから始めることができます。/client/your-extensions/widgets 内のウィジェット フォルダを複製します。 2. ArcGIS Experience Builder フォルダで、zip を次のパスに解凍します。 /client/your-extensions/widgets ウィジェット名の変更 3. client フォルダで npm start が実行されている場合はターミナルで ctrl + c を押して、スクリプトを停止します。 4. エクスプローラーなどで ArcGIS Experience Builder を解凍したフォルダに移動します。 5. ArcGIS Experience Builderフォルダで、次のパスを展開します。 /client/your-extensions/widgets 6. widgets フォルダで starter-widget フォルダの名前を get-map-coordinates に変更します。 7. 名前を変更した get-map-coordinates フォルダの manifest.json ファイルを開きます。 8. コード エディターなどで neme プロパティを get-map-coordinates に変更します。 manifest.json の name プロパティがウィジェットのフォルダ名と一致することが重要です。 {
// *** UPDATE ***
// "name": "starter-widget",
"name": "get-map-coordinates",
"type": "widget",
"version": "1.1.0", 9. manifest.json の version プロパティの後の dependency に jimu-arcgis を追加します。これを宣言することで、ウィジェット内で ArcGIS API for JavaScript のモジュールを使用できるようになります。 {
"name": "get-map-coordinates",
"type": "widget",
"version": "1.1.0",
// *** ADD ***
"dependency": "jimu-arcgis", 設定パネルの実装 設定パネルを実装すると、エクスペリエンスの作成者がウィジェットをカスタマイズすることができます。ArcGIS Experience Builder でウィジェットを選択すると、右側のサイドバーに設定パネルが表示されます。パネルを作成するには、BaseWidgetSetting クラスを実装します。 10. ウィジェットのルートフォルダに、空のオブジェクトを含む config.json ファイルを作成します。 後で、ウィジェットの設定パラメーターをこのオブジェクトに追加してウィジェットの設定値を保存することができます。 {} 11. src フォルダ内に、setting という名前で別のフォルダを作成します。 12. setting フォルダ内に setting.tsx ファイルを作成します。 13. setting/setting.tsx ファイルを開き、以下の import 文を記述します。 /** @jsx jsx */
import { React, jsx } from "jimu-core";
import { BaseWidgetSetting, AllWidgetSettingProps } from "jimu-for-builder"; 14. BaseWidgetSetting を実装するコードを追加します。 export default class Setting extends BaseWidgetSetting<AllWidgetSettingProps<any>, any> {
render() {
return <div className="widget-setting-demo">This is your starter widget setting area!</div>;
} 15. ターミナルで停止 (ctrl + c) して (該当する場合)、npm start で client フォルダで実行されているスクリプトを再起動します。 マップビュー データソースの選択を有効にする ArcGIS Experience Builder では、一つのページ上に複数のマップ ウィジェットを配置できます。このため、カスタム ウィジェットには、作成者が使用するマップ ウィジェットを選択できる設定パネルのセクションが必要です。 16. setting/setting.tsx ファイルで jimu ライブラリの JimuMapViewSelector をインポートします。 import { JimuMapViewSelector } from "jimu-ui/advanced/setting-components"; 17. render 関数の前に onMapWidgetSelected 関数を定義します。 // *** ADD ***
onMapWidgetSelected = (useMapWidgetIds: string[]) => {
this.props.onSettingChange({
id: this.props.id,
useMapWidgetIds: useMapWidgetIds
});
};
render() {
return <div className="widget-setting-demo">This is your starter widget setting area!</div>;
} 18. render 関数の return() 文の中に、JimuMapViewSelector を表すタグを追加します。 render() {
return <div className="widget-setting-demo">
<JimuMapViewSelector
useMapWidgetIds={this.props.useMapWidgetIds}
onSelect={this.onMapWidgetSelected}
/>
</div>;
} マップにアクセスする 前のステップでは、設定パネルが拡張され、マップ ウィジェットを選択できるようになりました。マップ オブジェクトにアクセスするには、JimuMapViewComponent を使用します。 19. widget.tsx ファイルに JimuMapViewComponent と JimuMapView をjimu ライブラリから追加します。 import { JimuMapViewComponent, JimuMapView } from "jimu-arcgis"; 20. render 関数の前にデフォルトの state を設定します。 export default class Widget extends BaseWidget<AllWidgetProps<any>, any> {
// *** ADD ***//
state = {
jimuMapView: null
};
render() { 21. JimuMapView のデータ ソースが変わるたびに state を更新する機能を追加します。 この関数は、次のステップの JimuMapViewComponent 内で呼び出されます。 state = {
jimuMapView: null
};
// *** ADD ***//
activeViewChangeHandler = (jmv: JimuMapView) => {
if (jmv) {
this.setState({
jimuMapView: jmv
});
}
}; 22. render 関数で JSX マークアップに JimuMapViewComponent を追加します。 追加したコードの最初の 3 行 ({this.props.hasOwnProperty...) は JSX での条件式の使い方です。これは基本的に「エクスペリエンスが設定パネルで有効なマップ ウィジェットを選択した場合にのみ、JimuMapViewComponent を追加する」というものです。 render() {
return (
<div className="widget-starter jimu-widget">
{/* *** ADD *** */}
{this.props.hasOwnProperty("useMapWidgetIds") &&
this.props.useMapWidgetIds &&
this.props.useMapWidgetIds.length === 1 && (
<JimuMapViewComponent
useMapWidgetIds={this.props.useMapWidgetIds}
onActiveViewChange={this.activeViewChangeHandler}
/>
)
}
</div>
);
} 緯度と経度を追跡する 23. マウスが指す緯度経度のプロパティを表示するには、マウスポインタの状態を追跡する必要があります。widget.tsx ファイルで、state オブジェクトにlatitude プロパティと longitude プロパティを追加します。 state = {
jimuMapView: null,
//*** ADD ***//
latitude: "",
longitude: ""
}; 24. ファイルの先頭で Point クラスをインポートします。 import Point = require("esri/geometry/Point"); 25. setState コマンドのすぐ下にある activeViewChangeHandler 関数で、緯度と経度を取得し、pointer-move イベントが発生するたびに state を更新します。 マウスの入力した x と y の位置を使って Point オブジェクトを作成し、view.toMap() 関数を使って座標に変換します。緯度経度の state を設定して、座標値を表示します。 jmv.view.on("pointer-move", evt => {
const point: Point = this.state.jimuMapView.view.toMap({
x: evt.x,
y: evt.y
});
this.setState({
latitude: point.latitude.toFixed(3),
longitude: point.longitude.toFixed(3)
});
}); 緯度経度座標を表示する コンポーネントの state に緯度と経度があれば、render 関数で値を簡単に表示することができます。 26. render 関数の return() 文 (先ほど配置した JimuMapViewComponent の直後) に、緯度経度を表示するための JSX を追加します。 render() {
return (
<div className="widget-starter jimu-widget">
{this.props.hasOwnProperty("useMapWidgetIds") &&
this.props.useMapWidgetIds &&
this.props.useMapWidgetIds.length === 1 && (
<JimuMapViewComponent
useMapWidgetIds={this.props.useMapWidgetIds}
onActiveViewChange={this.activeViewChangeHandler}
/>
)
}
{/* *** ADD *** */}
<p>Lat/Lon: {this.state.latitude} {this.state.longitude}</p>
</div>
);
} ウィジェットのテスト コードの変更が完了したら、ArcGIS Experience Builder を実行してエクスペリエンスを表示することで、ウィジェットをテストできます。 27. Web ブラウザでArcGIS Experience Builder を表示します。例:https://localhost:3001 28. ArcGIS Experience Builder で [新規作成] をクリックして、新しいエクスペリエンス ページを作成します。 29. 空白のスクロール テンプレートの [作成] をクリックします。 30. [ウィジェットの挿入] をクリックし、[マップ] ウィジェットと新しい [get-map-coordinates] ウィジェットをエクスペリエンスにドラッグします。 31. ウィジェットの設定パネルのドロップダウンリストから [マップ1] を選択します。 32. ArcGIS Experience Builder のツールバーで、[保存] をクリックしてから [プレビュー] をクリックすると、カスタム ウィジェットとマップが表示されたエクスペリエンスが新しいブラウザ タブで開きます。 おめでとうございます、これで完了です ArcGIS Experience Builder のプレビューで、マップにカーソルを合わせると、カスタム ウィジェットで緯度と経度の値が動的に変化することを確認できます。ウィジェットを完成したウィジェットと比較してみてください。 チャレンジ ズームレベルと縮尺の追加 緯度経度の右隣に地図のズームレベルと縮尺を追加するにはこちらのサンプルを参照してください。 まとめ 今回は、ArcGIS Experience Builder を使用した Get map coordinates のサンプルを翻訳して紹介しました。次のステップとして Add layers to a map のチュートリアルも併せて参照してください。また、その他にもカスタム ウィジェットには、多くのサンプル コードが ArcGIS Experience Builder の Sample Code や GitHub に公開されていますので、こちらも併せて参照していただければと思います。 関連リンク ・スターター ウィジェットの作成 (ArcGIS Experience Builder) ・Create a starter widget ・Get map coordinates ・Add layers to a map ・ArcGIS Experience Builder (Sample Code) ・arcgis-experience-builder-sdk-resources (Esri GitHub)
... View more
12-10-2020
05:30 PM
|
0
|
0
|
4024
|
DOC
|
はじめに 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 回のシリーズとして紹介していく予定です。 基本編 (GIS モジュール編) フィーチャ データ編 場所検索、ジオコーディング編 ネットワーク解析編(前編)/ ネットワーク解析編(後編) マッピング、可視化編 ラスター編 第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 モジュールの主なクラスは次のとおりです。 GIS:Web 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 オブジェクトは、UserManager、GroupManager、ContentManager といった、ユーザーやグループ、コンテンツ等の 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 (英語)
... View more
11-12-2020
08:31 PM
|
0
|
0
|
9733
|
DOC
|
はじめに 以前、GeoNetブログでは、ArcGIS API for Python のガイド、サンプル、API リファレンスなどのリソースを最大限ご活用いただく第一歩として、ガイドの中で紹介されている主要なモジュールを中心にご紹介する「さわって覚える ArcGIS API for Python」シリーズを公開しました。 さわって覚える ArcGIS API for Python シリーズ 基本編 (GIS モジュール編) フィーチャ データ編 場所検索、ジオコーディング編 ネットワーク解析編 (前編) / ネットワーク解析編 (後編) マッピング、可視化編 ラスター編 本記事では、ラスター編として前回ご紹介できなかった「イメージ レイヤーの使用」のノートブックをもとにご紹介します。紹介したノートブックは GitHub にも公開しますのでご参照ください。 ArcGIS API for Python の環境構築がお済みでない方は、開発リソース集のインストールガイドに掲載しておりますので、ご参照ください。 本記事では以下の内容でご紹介します。 イメージ レイヤーへのアクセス ・イメージ レイヤーの検索とアイテムの取得 ・ImageryLayer クラスへのアクセス イメージ レイヤーの可視化 ラスター関数の使用したオンザフライの画像処理の例 イメージ レイヤーへのアクセス イメージ レイヤーの検索とアイテムの取得 arcgis.raster モジュールにはラスター データやイメージ レイヤーを扱うためのクラスやラスターの解析を行う関数が含まれています。 ラスター データは各セルまたはピクセルが値を持つことのできるセルのグリッドで構成されており、衛星画像や化学物質の濃度面、標高のような連続的に変化するデータを扱うのに利用されます。 ここでは raster モジュールの中の ImageryLayer クラスへのアクセス方法についてご紹介します。 ImageryLayer クラスを使用することでイメージ サービスをレイヤーとして表示することができます。 まずは、イメージ レイヤーのアイテムを取得します。イメージ レイヤーは「基本編」でも紹介した方法と同様に search メソッドで検索、get メソッドでアイテムを取得することができます。 以下のコードでは、search メソッドの item_type パラメーターに “Imagery Layer” を指定することでイメージ レイヤーのみを検索対象としています。 # インポート
from arcgis.gis import GIS
from IPython.display import display
gis = GIS()
# イメージ レイヤーの検索
items = gis.content.search(“Landsat 8 Views”, item_type="Imagery Layer" max_items=2)
for item in items:
display(item)
また、以下のように、get メソッドの引数にアイテム ID を指定することで、イメージ レイヤーをアイテムとして取得することができます。 # アイテムIDでイメージ レイヤーの取得
l8_views = gis.content.get(“4ca13f0e4e29403fa68c46d188c4be73”)
ImageryLayer クラスへのアクセス イメージ レイヤーのアイテムを取得することができたら、次は ImageryLayer クラスへアクセスします。 ほかのレイヤー ベースのアイテムと同様にイメージ レイヤーもアイテムの layers プロパティを使用してImageryLayer クラスにアクセスすることができます。上記のコードで取得したアイテム (l8_views) の layers プロパティを使用して以下のように記述します。 l8_lyr = l8_views.layers[0]
l8_lyr
また、イメージ サービスの URL を使用して ImageryLayer にアクセスすることも可能です。以下の例では、先ほど使用したイメージ レイヤーを今度は URL (https://landsat2.arcgis.com/arcgis/rest/services/Landsat8_Views/ImageServer) からアクセスしています。 # ImageryLayer クラスのインポート
from arcgis.raster import ImageryLayer
# イメージ サービスの URL
img_svc_url = 'https://landsat2.arcgis.com/arcgis/rest/services/Landsat8_Views/ImageServer'
landsat_lyr = ImageryLayer(img_svc_url)
landsat_lyr
イメージ レイヤーの可視化 取得したイメージ レイヤーは以下のように add_layer メソッドを用いてマップ ウィジェットに追加して可視化することができます。まずは、イメージ レイヤーを追加するためのマップ ウィジェットを表示します。 # マップ ウィジェットの表示
map = gis.map(“Pallikaranai”, zoomlevel=13)
続いて、先ほどアクセスしたイメージ レイヤー (landsat_lyr) を引数として、add_layer メソッドを使用することで、以下の画像のようにイメージ レイヤーをマップ ウィジェットに追加して可視化することができます。 # イメージ レイヤーの追加
map.add_layer(landsat_lyr)
map
ラスター関数を使用したオンザフライの画像処理の例 イメージ レイヤーの画像処理にはさまざまなラスター関数を使用することができます。イメージ レイヤー自体に画像処理を含むラスター関数を追加することで処理が適用された状態に表示を切り替えることができます。 上記で表示したイメージ レイヤーに含まれているラスター関数は以下のように ImageryLayer クラスの properties で確認することができます。 for fn in landsat_lyr.properties.rasterFunctionInfos:
print(fn['name'])
上記で確認したラスター関数のほかにも Rater function objects ページに記載されているラスター関数を使用することもできます。 その中のバンド演算関数のSAVI 関数を使用した例をご紹介します。SAVI (Soil-Adjusted Vegetation Index) は土壌調整係数を用いて、土壌の明るさの影響を最小化することを目的とした植生指数であり、植生被覆が少ない乾燥した地域でよく使われます。 ※SAVI関数の詳細はこちらのページの SAVI メソッドの項目をご参照ください。 以下の例では、SAVI の指標を使用して乾燥したサハラ砂漠の中の、ナイル川の堤防やデルタ周辺の肥沃な土壌を表現しています。 # ナイル川周辺のマップを表示
savi_map = gis.map("Cairo", zoomlevel=6)
savi_map
#savi 関数をインポート
from arcgis.raster.functions import savi
#savi 関数を使用した結果をマップ ウィジェットに追加
savi_map.add_layer(savi(landsat_lyr, band_indexes="5 4 0.3"))
おわりに 今回は、ラスター編としてイメージ レイヤーのアイテムや ImageryLayer クラスへのアクセス方法や、ラスター関数を使った例をご紹介しました。ご紹介した以外にも多数のラスター関数が提供されており、それぞれを組み合わせたりすることで様々な分析や画像処理などが可能になります。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入門 関連するノートブック ・イメージ レイヤーの使用 ・Using Imagery Layers (英語)
... View more
10-01-2020
07:00 PM
|
0
|
0
|
2276
|
DOC
|
はじめに 「さわって覚える ArcGIS API for Python」シリーズブログは、 ArcGIS API for Python のガイドやサンプル、API リファレンスなどのリソースを最大限ご活用いただく第一歩として、ガイドの中で紹介されている主要なモジュールを中心に、実際にさわって覚えていただくようなノートブックと共に、全 5 回のシリーズとして紹介していく予定です。 基本編 (GIS モジュール編) フィーチャ データ編 場所検索、ジオコーディング編 ネットワーク解析編(前編)/ ネットワーク解析編(後編) マッピング、可視化編 ラスター編 前回の記事では、gis モジュールの基本的な使い方についてご紹介しました。シリーズ第 2 回目となる今回は、フィーチャ データ編としまして、「フィーチャ レイヤーの使用」と「フィーチャの編集」のノートブックをもとに、主要な処理を解説していきます。紹介したノートブックは GitHub にも公開しますので、ご参照ください。 ArcGIS API for Python の環境構築がまだお済みでない方は、開発リソース集のインストールガイドに掲載しておりますので、ご参照ください。 本記事では以下の内容で フィーチャ レイヤーへのアクセス方法やフィーチャの編集についてご紹介します。 フィーチャ レイヤーの使用 ・フィーチャ レイヤーへのアクセス方法 ・検索を使用したフィーチャ レイヤーへのアクセス ・アイテム ID を使用したフィーチャ レイヤーへのアクセス ・URLを使用したフィーチャ レイヤーへのアクセス フィーチャの編集 ・フィーチャの更新 ・フィーチャの追加 ・フィーチャの削除 フィーチャ レイヤーの使用 フィーチャ レイヤーへのアクセス方法 FeatureLayer クラスにアクセスすることで、分析や編集等の GIS の操作を行うことができるようになります。 フィーチャ レイヤーへは検索や、アイテム ID、フィーチャ レイヤーの URL 等を使用してアクセスすることができます。 ここでは、いくつかの例を用いてフィーチャ レイヤーへアクセスする方法をご紹介します。 検索を使用したフィーチャ レイヤーへのアクセス 前回の記事でもご紹介した search() メソッドを用いてフィーチャ レイヤーにアクセスすることができます。 フィーチャ レイヤーは、search() メソッドの item_type パラメーターに 'Feature Layer' を指定することで検索することができます。 以下の例では、タイトルが 'USA major cities' のフィーチャ レイヤーを検索し、リストとして返却される検索結果の中から 1 番目のアイテムにアクセスしています。 search_results = gis.content.search('title: USA Major Cities',
'Feature Layer')
# 検索結果の1番目のアイテムにアクセス
major_cities_item = search_results[0]
major_cities_item
上記で取得した検索結果は Item が返却されます。Item が持つ layers プロパティにアクセスすると FeatureLayer を取得することができます。 major_cities_layers = major_cities_item.layers
major_cities_layers
アイテム ID を使用したフィーチャ レイヤーへのアクセス get() メソッドでアイテム ID を使用して特定のフィーチャ レイヤーにアクセスすることもできます。 freeways = gis.content.get('91c6a5f6410b4991ab0db1d7c26daacb')
freeways
先ほどと同様に取得した Item の layers プロパティにアクセスすることで、FeatureLayer を取得することができます。 URLを使用したフィーチャ レイヤーへのアクセス フィーチャ レイヤーの REST エンドポイントのURLを使ってアクセスすることもできます。 以下のコードでは、URL を指定してインスタンス化しています。 lyr_url = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0'
layer = FeatureLayer(lyr_url)
layer
ここまでは、フィーチャ レイヤーにアクセスするいくつかの方法をご紹介してきました。ここでご紹介した以外にもフィーチャ レイヤーやフィーチャを使用した操作が記載されていますので、ノートブックやガイドもご参照ください。 フィーチャ レイヤーにアクセスすることができましたので、ここからはフィーチャの編集をしてみましょう。 フィーチャの編集 フィーチャは FeatureLayer クラスの edit_features() メソッドを使用して編集を行うことができます。 以下では、「品川区避難場所」フィーチャ レイヤーのフィーチャを更新、追加、および削除する方法をご紹介します。 フィーチャの更新 フィーチャの更新は edit_features() メソッドの updates パラメーターの引数にフィーチャのリストを渡すことで行うことができます。 フィーチャは FeatureSet クラスを介して選択することができるため、まずは FeatureSet を取得します。FeatureSet は FeatureLayer クラスの query() メソッドを使用することで取得できます。query() メソッドの引数を指定しない場合は全ての FeatureSet が返却されます。 以下のコードでは、フィーチャ レイヤーにアクセスをし、FeatureSet を取得しています。 #更新するフィーチャ レイヤー
item = gis.content.get("de57ff0cb65b45adbb5df983dd6baced")
# FeatureLayer の取得
layer = item.layers
# query() メソッドで FeatureSet を取得
fset = layer[0].query()
fset.sdf
下図のように FeatureSet は sdf プロパティを使用すると、データフレーム形式でフィーチャの属性を表示することができます。 FeatureSet を取得することができましたら、FeatureSet が持つ features プロパティで更新を行いたいフィーチャを取得し、edit_feature() メソッドで編集を実行します。今回は上記で取得した FeatureSet から ”施設名” フィールドが “大崎駅西口地区一帯_変更前” のフィーチャを編集します。 #更新するフィーチャを選択
feature = [f for f in fset.featues if f.attributes['施設名']=='大崎駅西口地区一帯_変更前'][0]
以下のように、edit_features() メソッドを使用してフィーチャを更新することができます。”施設名” フィールドの属性を “大崎駅西口地区一帯_変更後” に編集し、フィーチャをリスト化したもの (ここでは、[update_feature]) を edit_features() の updates パラメーターに渡しています。 # フィーチャの属性を編集
update_feature = feature
update_feature.attributes['施設名'] = '大崎駅西口地区一帯_変更後'
#edit_features() メソッドの引数にフィーチャのリストを渡しフィーチャを更新
update_result = layer[0].edit_features(updates=[update_feature])
再度データフレームを表示するとフィーチャの属性が更新されたことを確認できます。 フィーチャの属性だけでなく、以下のように geometry プロパティを編集してフィーチャの位置も更新することができます。 # フィーチャの位置 (XY) を編集
update_feature.geometry = Point({'x': 139.729592,'y': 35.617076 ,"spatialReference" : {"wkid" : 4326}})
#edit_features() メソッドの引数にフィーチャのリストを渡しフィーチャを更新
update_result = layer[0].edit_features(updates=[update_feature])
フィーチャの追加 フィーチャを追加は edit_features(adds = [dict]) のように、edit_features() メソッドの adds パラメーターの引数にフィーチャの情報を定義した辞書 (dictionary) 型をリスト化したもの渡すこと行うことができます。リストの中には以下のように辞書 (dictionary) 型で定義します。 今回は「品川区避難場所」レイヤーに新たに“戸越公園”のフィーチャを追加します。フィーチャの表し方や複数のフィーチャを追加する場合など詳しくは Add Featuresをご参照ください。 dict = {"attributes":
{'施設名': '戸越公園',
'カテゴリ': '広域避難場所',
'都道府県名': '東京都',
'住所': '品川区豊町',
'緯度': 35.610598,
'経度': 139.722376},
"geometry":
{'x': 139.722376,'y': 35.610598 ,"spatialReference" : {"wkid" : 4326}}}
フィーチャを追加する前と後を比較するため、フィーチャ追加前のレイヤーをマップに表示してみます。マップ ウィジェットにレイヤーを追加する方法については前回の記事もご参照ください。 下図の戸越公園の位置にはまだフィーチャがないことが確認できます。 次のコードでは、先ほど定義したフィーチャの情報のリストを edit_features() メソッドの adds パラメーターに渡して追加をしています。 add_result = layer[0].edit_features(adds = [dict]) もう一度マップ ウィジェットにレイヤーを追加すると新しくフィーチャが追加されたことがわかります。 フィーチャの削除 フィーチャの削除はedit_features() メソッドの deletes パラメーターに削除したいフィーチャのオブジェクト ID を渡します。 まず、フィーチャの更新と同様 FeatureLayer クラスの query() メソッドを使用して削除したい FeatureSet 取得します。query() メソッドの where パラメーターで条件を指定することで目的のフィーチャを取得することができます。以下では、先ほど追加した戸越公園のフィーチャを削除します。 #削除するフィーチャの選択
delete_fset = layer[0].query(where = "施設名 = '戸越公園'")
delete_feature = delete_fset.features deletes パラメーターに渡すために get_value() メソッドを使用して、選択したフィーチャのオブジェクト ID を取得します。 oid = delete_feature[0].get_value('ObjectId') edit_features() メソッドの deletes パラメーターで取得したオブジェクト ID を文字列として渡し、削除を実行します。 delete_result = layer[0].edit_features(deletes=str(oid)) 再度マップ ウィジェットにレイヤーを追加すると戸越公園のフィーチャが削除されています。 データ出典:東京都オープンデータカタログサイト 品川区 避難所を基にフィーチャ レイヤーを作成 おわりに 今回は、フィーチャ レイヤーを使用した処理をご紹介しました。今回ご紹介したようなフィーチャ レイヤーにアクセスしたり、フィーチャを編集することは ArcGIS でよく使用する処理ですので、ArcGIS API for Python でフィーチャ レイヤーやフィーチャを操作する際は冒頭でご紹介したガイドやサンプル、API リファレンスなどのリソースと併せて、本シリーズブログもご活用ください。 次回は「場所検索、ジオコーディング編」としまして geocoding モジュールを使用した処理についてご紹介する予定です。 関連リンク 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入門 関連するノートブック ・フィーチャ レイヤーの使用 ・フィーチャの編集 ・Working with feature layers and features (英語) ・Editing Features (英語)
... View more
06-09-2020
09:14 PM
|
0
|
0
|
5149
|
DOC
|
1. はじめに この記事は、[続編 はじめてのWeb マッピングアプリケーション開発] のシリーズ記事として、はじめて地図アプリの開発を行う開発者の方に向けて、ウィジェットを使ったアプリ開発についてシリーズで紹介しています。 続編 はじめてのWeb マッピングアプリケーション開発:ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:印刷ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:編集ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:ナビゲーション ウィジェット編 続編 はじめてのWeb マッピングアプリケーション開発:OAuth 2.0編 前回の記事では、手軽にルーティング機能を実装できるナビゲーション ウィジェットについて紹介しました。 最終回となる今回は、過去に紹介した編集ウィジェットを使用して、特定の人のみに公開しているようなセキュアなデータを扱う方法を紹介します。 これまでの記事と同様に、ソースコードは ESRIジャパンの GitHub で公開していますので、ご覧ください。 2. アプリケーションの認証方法 ArcGIS で公開したデータには、誰もが見ることができるよう全体に公開されているデータや、プライベートなデータなど、特定の人のみの間で公開しているデータがあるかと思います。編集ウィジェット編でご紹介したアプリケーションでは全体に公開されているデータの編集でしたので、誰でも編集ができてしまいますが、特定の人のみに編集させたいなど、プライベートなデータを扱うケースも多いと思います。その場合は認証の仕組みを使用してアプリを開発する必要があります。 ArcGIS for Developers で作成したアプリケーションは、OAuth 2.0 に基づいたいくつかの認証パターンを実装することで、セキュアなコンテンツや ArcGIS Online のサービスにアクセスすることができます。アプリケーションを認証するために使用できる方法は「ユーザー ログイン認証」と「アプリ認証」の2つの方法が存在します。 ユーザー ログイン認証では、アプリを利用するユーザーが ArcGIS Online アカウントを使用してアプリケーションにログインする方法です。 アプリ認証では、アプリケーションが ArcGIS Online で認証を行い、ArcGIS Online アカウントを持たないユーザーでもサービスにアクセスするための認証情報を取得することができます。 以降の手順では、編集ウィジェット編で作成したアプリケーションに OAuth 2.0 による認証を実装します。今回は、ArcGIS Online のアカウントでサイン インして行うユーザー ログイン認証の方法をご紹介します。他の記事とは異なり、JSBin を使用することはできず、ローカルでコードを実行する必要がありますのでご注意ください。また、認証パターンやアプリの登録については開発リソース集も併せてご参照ください。 3. OAuth 2.0 による認証の実装 ① アプリケーションの登録 開発リソース集のアプリの登録の手順に従って、ArcGIS for Developers の開発者アカウントで ArcGIS for Developers にサイン インしアプリケーションを登録します。 アプリケーションを登録後、認証の実装に必要な ClientID をコピーしておきます。 ② モジュールの追加 requireステートメントに Portal、OAuthInfo、IdentityManager を追加します。 require([
"esri/portal/Portal",
"esri/identity/OAuthInfo",
"esri/identity/IdentityManager",
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/widgets/Search",
"esri/widgets/BasemapGallery",
"esri/widgets/Print",
"esri/widgets/Expand",
"esri/widgets/Editor"
], function(Portal, OAuthInfo, identityManager, Map, MapView,
FeatureLayer, Search, BasemapGallery, Print, Expand, Editor) {
③ 認証の実装 OAuthInfo クラスの appId に手順の①でアプリを登録した際のClient ID を入力し 認証に必要な情報を追加します。popup にはデフォルトでは false に設定されていますが、ture に設定するとポップアップ ウィンドウにサイン インをするページが表示されます。 続いて、IdentityManager クラスの registerOAuthInfos メソッドを用いて認証情報の定義を登録します。 // ポータルのURL
var portalUrl = "https://www.arcgis.com";
var info = new OAuthInfo({
appId: "xxxx", //アプリケーションの Client ID を入力
popup: false
});
identityManager.registerOAuthInfos([info]);
IdentityManager クラスの、セキュアなリソースへアクセスするための Credential オブジェクトを取得する getCredential メソッドや Credential オブジェクトの破棄を行う destroyCredentials メソッドを使用して、ArcGIS にサイン イン / サイン アウトを行う処理を実装します。そして、checkSignInStatus メソッドで取得した認証情報を確認し、編集処理を実行します。 // ArcGIS にサイン イン
document.getElementById('sign-in').addEventListener('click', function(){
identityManager.getCredential(portalUrl);
}, false);
// サイン アウト
document.getElementById('sign-out').addEventListener('click', function(){
identityManager.destroyCredentials();
window.location.reload();
});
//認証に成功した場合に編集処理を実行
identityManager.checkSignInStatus(portalUrl).then(function() {
document.getElementById('anonymousPanel').style.display = 'none';
document.getElementById('personalizedPanel').style.display = 'block';
editorMap();
});
④ 編集ウィジェットの実装 認証後、editorMap() 関数 にPortal クラスの load メソッドでマップを読み込み、編集ウィジェットを使用した処理を実装します。編集ウィジェットを使用した処理は「続編 はじめての Web マッピングアプリケーション開発:編集ウィジェット編」をご参照ください。 function displayMap() {
var portal = new Portal();
// ポータルの読み込み
portal.load().then(function() {
document.getElementById('viewDiv').style.display = 'flex';
/************************************************************
* 省略(編集ウィジェット編で実装したコード)
************************************************************/
これで、ArcGIS Online のアカウントでサイン インをし,アプリケーションに OAuth 2.0 による認証を実装することができました。全体のコードは ESRIジャパンの GitHub をご参照ください。 4. まとめ 今回は OAuth 2.0 を用いた認証についてご紹介しました。ArcGIS API for JavaScript には今回使用した OAuthInfo や IdentityManager などといった認証に必要なクラスが用意されています。目的に応じてアプリに認証の仕組みを取り入れることができますので、ご活用ください。また、今回は ArcGIS Online アカウントを用いた「ユーザー ログイン認証」を実装しましたが、ArcGIS ユーザーでない方もアプリにアクセスする場合等で特定のアプリをログインなしで認証を行う「アプリ認証」といった方法もございますので、開発リソース集をご参照ください。 5. さいごに このシリーズ記事は、「続編 はじめてのWeb マッピングアプリケーション開発:ウィジェット編」をはじめとして、ウィジェットを使ったアプリ開発についてシリーズで紹介してきました。 GeoNet ブログでは今後もより業務や研究などの場面で役立つ機能についてご紹介する予定ですのでご活用ください。 6. 関連リンク ● はじめての Web マッピングアプリケーション開発 はじめての Web マッピングアプリケーション開発:地図表示編 はじめてのWeb マッピングアプリケーション開発:レイヤー表示編 はじめての Web マッピングアプリケーション開発:レイヤーの可視化編 はじめての Web マッピングアプリケーション開発:ポップアップの設定編 はじめての Web マッピングアプリケーション開発:Web マップの作成・表示編 はじめてのWeb マッピングアプリケーション開発:グラフィック編 はじめてのWeb マッピングアプリケーション開発:クエリ編 続編 はじめての Web マッピングアプリケーション開発:ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:印刷ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:編集ウィジェット編 続編 はじめての Web マッピングアプリケーション開発:ナビゲーション ウィジェット編 ● ArcGIS API for JavaScript ● ArcGIS for Developer 開発リソース集
... View more
05-26-2020
10:01 PM
|
0
|
0
|
1862
|
DOC
|
ESRIジャパンの GitHub に Python / ArcPy の学習資料を公開しました! Python や ArcPy 初学者向けの資料となっており、以下の 3 種類の資料を公開しています。 ArcGIS ユーザーのための Python 基礎 Python によるプログラミング – ArcMap 版 Python によるプログラミング – ArcGIS Pro 版 ArcGIS ユーザーのための Python 基礎: これから ArcGIS で Python を初めて使う方向けに言語の基礎や構文の使い方など、Python の基本を紹介しています。 Python によるプログラミング: ArcPy を使った ArcGIS での処理の基本を紹介しており、ArcMap 版と ArcGIS Pro 版の 2 種類を公開しています。過去に ESRIジャパンが行った、GIS 学会でのハンズオン セッションで使用した資料にジオメトリの操作やサービスの公開等を加えた増強版の資料となっています。演習で使用するデータとPythonスクリプトも公開しておりますので、ArcMap または ArcGIS Pro の Python ウィンドウを用いて実際に操作をしながら学習することができます。 ArcPy を使って ArcGIS の処理を始める方、使ってみたいと思っている方はこれらの資料を活用し、Python や ArcPy の基礎学習にお役立てください。 また、「Python によるプログラミング - ArcGIS Pro 版」よりトピックを紹介する記事も GeoNet ブログで近日公開予定です。そちらも併せてご覧ください。 関連リンク Python を使って作業の効率化を図ろう!シリーズ記事 ArcMap で ArcPy を用いた処理の基本を紹介しているシリーズ記事です。 2018 年 GIS 学会ハンズオン セッション資料 (ArcMap) 2019 年 GIS 学会ハンズオン セッション資料 (ArcGIS Pro) ESRIジャパンが行った ArcPy を用いたハンズオンで使用した資料です。
... View more
03-17-2020
01:22 AM
|
0
|
0
|
3450
|
DOC
|
はじめに このシリーズでは「ArcGIS Pro SDK for .NET を使用した機能開発」のシリーズ記事として、ArcGIS Proを拡張するためのアドイン開発時によく使う便利なクラスやメソッド、また、それらを用いた実践的な開発をご紹介します。本シリーズで実装するソースはすべて Github に格納してありますので、ぜひArcGIS Pro SDK for .NET(以下 Pro SDK)を使用する開発の参考にしてください。 本記事で実装する機能の概要 前回の記事ではマップ ツールで選択したフィーチャの属性をドッキング ウインドウに配置した DataGrid に表示させる機能を実装しました。本記事では DataGrid をクリックした際に選択フィーチャを強調する処理や、DataGrid をダブルクリックした際に選択フィーチャにズームする処理を追加し、機能を拡張します。 完成イメージ 本記事で実装する機能の実装手順 DataGrid に表示された属性をクリックした際に選択フィーチャを強調 DataGrid に表示された属性をダブルクリックした際にフィーチャにズーム ※本記事では前回の記事で実装した、ドッキング ウインドウの「対話的操作」タブ内の一部機能の拡張を行います(当該タブ内のその他の機能は前回の記事にてご紹介しています)。他タブの機能も今後の連載でご紹介します。 本記事で使用するファイル ・MainDockPane.xaml ドッキング ウインドウの画面を構成するファイル。作成手順に関しては「Pro SDK を使用した ArcGIS Pro の拡張④:アドインの開発」をご参照ください。 ・MainDockPaneViewModel.cs ドッキング ウインドウの処理を記述するファイル。ViewModel の役割をしています。ドッキング ウインドウ(MainDockPane.xaml)作成時に自動的に作成されます。Pro SDK で扱う ViewModel については、「Pro SDK を使用した ArcGIS Pro の拡張③:アドインプロジェクトの構成」をご覧ください。 実装手順 1.DataGrid に表示された属性クリックした際に選択フィーチャを強調 この手順では、DataGrid に表示された属性をクリックしたときに、選択されたフィーチャを強調するように機能を拡張します。 手順 1.1 MainDockPane.xaml の設定 DataGrid の「SelectedItem」を「MainDockPaneViewModel.cs」 の 「SelectedFeature」プロパティとバインドします。 <DataGrid SelectedItem="{Binding Path=SelectedFeature}">
</DataGrid>
1.2 MainDockPaneViewModel.cs でフィーチャ選択時の処理を追加 MainDockPaneViewModel.cs でフィーチャ選択時 (手順1.1で設定したSelectedFeature) の処理を追加します。DataGrid に表示された属性を選択すると選択フィーチャを強調する「FlashFeatures」メソッドが実行されるように処理を追加します。 private DataRowView _selectedFeature = null;
// フィーチャの選択
public DataRowView SelectedFeature
{
Get
{
return _selectedFeature;
}
set
{
SetProperty(ref _selectedFeature, value, () => SelectedFeature);
if (_selectedFeature == null || SelectedFeatureLayer == null)
return;
// フィーチャの強調
FlashFeatures(Convert.ToInt64(_selectedFeature.Row["ObjectId"]));
}
}
1.3 選択フィーチャを強調 DataGrid をクリックして選択されたフィーチャに対して、後述の手順 1.4 で作成する強調するためのグラフィック、「CreateGraphic」メソッドを実行しています。 private void FlashFeatures(long oid)
{
var mapView = MapView.Active;
if (mapView == null)
return;
QueryFilter queryFilter = new QueryFilter
{
WhereClause = "ObjectId =" + oid,
};
QueuedTask.Run(() =>
{
var annotationLayer = _selectedFeatureLayer as AnnotationLayer;
//アノテーションの場合
if (annotationLayer != null)
{
CreateGraphic(annotationLayer.GetFeatureClass(), queryFilter);
}
//アノテーションでない場合
else
{
var featureLayer = _selectedFeatureLayer as FeatureLayer;
CreateGraphic(featureLayer.GetFeatureClass(), queryFilter);
}
});
}
1.4 選択フィーチャを強調するためのグラフィックを作成 フィーチャを強調するためのグラフィックを作成します。グラフィックを作成するには、ジオメトリ(ポイント、ライン、ポリゴン)やシンボルの設定が必要となります。作成したグラフィックをマップ ビューに追加することで表示が可能です。 グラフィックはジオメトリのタイプに応じてそれぞれ「CIMPointGraphic」、「CIMLineGraphic」、「CIMPolygonGraphic」クラスを使って作成しています。ジオメトリがポリゴンの場合はアノテーションかそうでないかで処理が分岐しており、アノテーションの場合はアウトラインを強調する処理を行います。 最後に、AddOverlay メソッドを用いて作成したグラフィックをマップ ビューに追加します。 private void CreateGraphic(FeatureClass featureClass, QueryFilter queryFilter)
{
var mapView = MapView.Active;
using (RowCursor rowCursor = featureClass.Search(queryFilter, true))
{
rowCursor.MoveNext();
//レコードを取得
using (Row row = rowCursor.Current)
{
Feature feature = row as Feature;
Geometry shape = feature.GetShape();
RemoveFromMapOverlay(); // 既存のグラフィックを削除
switch (shape.GeometryType)
{
// ポイントの場合
case GeometryType.Point:
// ポイント作成
var point = shape as MapPoint;
MapPoint mapPoint = MapPointBuilder.CreateMapPoint(point.X, point.Y, shape.SpatialReference);
// グラフィック作成
var pointGraphic = new CIMPointGraphic();
pointGraphic.Location = mapPoint;
// シンボル作成
CIMPointSymbol pointSymbol = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.RedRGB, 5);
pointGraphic.Symbol = pointSymbol.MakeSymbolReference();
// グラフィックをマップビューに追加
_overlayObject = mapView.AddOverlay(pointGraphic);
break;
// ポリゴンの場合
case GeometryType.Polygon:
// アノテーションの場合
if (feature.GetType().Name == "AnnotationFeature")
{
// グラフィック作成
var annoGraphic = new CIMPolygonGraphic();
annoGraphic.Polygon = shape as Polygon;
// シンボル作成
CIMStroke outline = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.RedRGB, 2, SimpleLineStyle.Solid);
CIMPolygonSymbol polygonSymbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.BlueRGB, SimpleFillStyle.Null, outline);
annoGraphic.Symbol = polygonSymbol.MakeSymbolReference();
// グラフィックをマップビューに追加
_overlayObject = mapView.AddOverlay(annoGraphic);
}
else
{
// グラフィック作成
var polygonGraphic = new CIMPolygonGraphic();
polygonGraphic.Polygon = shape as Polygon;
// シンボル作成
CIMPolygonSymbol polygonSymbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB);
polygonGraphic.Symbol = polygonSymbol.MakeSymbolReference();
// グラフィックをマップビューに追加
_overlayObject = mapView.AddOverlay(polygonGraphic);
}
break;
// ラインの場合
case GeometryType.Polyline:
// グラフィック作成
var lineGraphic = new CIMLineGraphic();
lineGraphic.Line = shape as Polyline;
// シンボル作成
CIMLineSymbol lineSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.RedRGB, 5);
lineGraphic.Symbol = lineSymbol.MakeSymbolReference();
// グラフィックをマップビューに追加
_overlayObject = mapView.AddOverlay(lineGraphic);
break;
default:
break;
}
}
}
}
これで DataGrid に表示された属性を選択したときにフィーチャを強調する処理は完了です。 強調した結果は以下の画像のようになります。 2.DataGrid をダブルクリックした際にフィーチャにズーム この手順では、DataGrid に表示された属性をダブルクリックしたときに、選択フィーチャにズームする処理を実装し、機能を拡張します。 手順 2.1 MainDockPane.xaml の設定 DataGrid の InputBindings の「Command」属性を「MainDockPaneViewModel.cs」 の 「DataGridDoubleClick」プロパティとバインドします。 <DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding Path=DataGridDoubleClick}">
</DataGrid.InputBindings>
2.2 MainDockPaneViewModel.cs でダブルクリック時の処理を追加 MainDockPaneViewModel.cs で DataGrid の属性をダブルクリックすると、「ExecuteDataGridDoubleClick()」メソッドが実行されるように実装します。メソッド内では、ZoomTo メソッドを使用してフィーチャにズームを行います。 private ICommand _dataGridDoubleClick;
//ダブルクリックしたときに ExecuteDataGridDoubleClick() メソッド実行
public ICommand DataGridDoubleClick => _dataGridDoubleClick;
private void ExecuteDataGridDoubleClick()
{
QueuedTask.Run(() =>
{
var oid = _selectedFeature.Row["ObjectId"];
//選択フィーチャにズーム
MapView.Active.ZoomTo(_selectedFeatureLayer, Convert.ToInt64(oid), TimeSpan.Zero, false);
});
}
これで DataGrid に表示されたフィーチャの属性をダブルクリックすると選択フィーチャにズームする処理は完了です。 まとめ 本記事では第 1 弾の記事で実装した機能に加え、DataGrid をクリックした際にグラフィックを使って選択フィーチャを強調する処理や、DataGrid をダブルクリックした際に選択フィーチャにズームする処理を実装、解説しました。このように Pro SDK を使うことによって ArcGIS Pro にはない機能を作成することができますので、ぜひご活用ください。 次回 次回はレンダリングタブ内に機能を実装する方法をご紹介する予定です。 関連リンク ・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
11-21-2019
08:26 PM
|
0
|
0
|
1795
|
DOC
|
はじめに ESRIジャパンでは ArcGIS を初めて使う開発者の方向けに、「ArcGIS for Developer 開発リソース集」(以下、開発リソース集) を公開しています。 この度、開発リソース集をリニューアルしましたのでお知らせいたします(URL は変更前と同じものを使用していただけます)。 開発リソース集とは? 開発リソース集は、ArcGIS を初めて使う方でも手軽に読んで開発を始められるよう ArcGIS for Developers(アプリ開発に必要な API/SDK やサービス/コンテンツ、ソフトウェアを提供するサブスクリプション プログラム)の情報を紹介しているサイトです。 スタートアップガイド スタートアップ ガイドでは、ArcGIS for Developers の開発者アカウント作成から、マップの作成、API を利用したアプリの開発、アプリを公開する際に必要となる認証方法まで、ArcGIS for Developers を利用したアプリ開発の基本的な流れを紹介しています。 ArcGIS for Developers を利用したアプリ開発の流れを順序立てて紹介 技術 Tips 集 スタートアップ ガイドのほかにも、ArcGIS for Developers で提供される各 API/SDK の開発をサポートするドキュメントなどをまとめた技術 Tips 集も公開しています。スタートアップ ガイドでアプリ開発の基本的な流れを理解した後はこちらも併せてご覧ください。 API/SDK ごとに開発に役立つドキュメントを公開 新しいサイトの特長 今回は各種情報を利用しやすいように、ドキュメント用に設計されたデザインに変更し、サイトのリニューアルを行いました。 左側のコンテンツ メニューから知りたい情報を探し出したり、ページ内やキーボードの方向キーで前後のページに遷移してドキュメントを読み進めたり、コードをコピーして使用できるようになりました。 コンテンツ メニューから目的のドキュメントを探す また、旧サイトでは検索機能がありませんでしたが、新しいサイトでは検索ボックスからキーワードで目的のドキュメントを検索できるようになりました。 キーワードで目的のドキュメントを検索 もちろん開発リソース集はスマートフォンでもご覧いただけます。上でご紹介した検索やコンテンツ メニュー、ページ遷移の機能もお使いいただけます。 今後の予定 今後は既存コンテンツの見直しや ArcGIS の開発コンセプト、各 API/SDK のチュートリアルなどコンテンツの拡充を行っていき、よりよい開発リソース集の提供を目指してまいります。 ArcGIS で開発を行う際は是非開発リソース集をご活用ください! 関連情報 新しいコンテンツとして Web AppBuilder for ArcGIS ウィジェット一覧表を公開しました。Web AppBuilder for ArcGIS をお使いの際は併せてご利用ください。
... View more
10-31-2019
05:46 PM
|
0
|
0
|
1196
|
DOC
|
はじめに 2019年 5 月 22 日 (水) ~ 24 日 (金)、東京ミッドタウン 六本木にて第 15 回 GIS コミュニティフォーラム及びプレフォーラム・セミナーが開催されました! 公開可能なセッションの発表資料は ESRIジャパンのサポート サイトで公開しております。また、GeoNetブログでは開発者向けのセッションで使用したコードなどを順次ご紹介していきます。発表資料や GeoNet記事、GitHub へのリンクなどの詳細は第 15 回 GIS コミュニティフォーラム開催報告記事をご覧ください。 本記事ではテクニカル セッション「Web GIS で集めたデータを ArcGIS Pro でも活用しよう!~レポート作成までのステップ~」のデモで使用した Python のコードに加え、セッションではご紹介しきれなかったアタッチメントの画像を一括出力するコードをご紹介します。 概要 Survey 123 for ArcGIS、Collector for ArcGIS などを使って現地調査で集めた Web GIS のデータは、どのように ArcGIS Pro で活用できるでしょうか? 集めたデータを ArcGIS Pro で解析し、データの傾向を見出すことに活用する、レイアウト機能を使用して調査結果や解析結果をもとにレポートを作成する・・・などといった活用方法があります。本記事では Web GIS のデータから ArcGIS Pro でレポート作成する手助けとなる以下の Python を用いた 3 つの処理をご紹介します。 ArcGIS Online のフィーチャ サービスをダウンロード ArcGIS Pro で設定したレイアウトを PDF にエクスポートし、別の PDF と結合 アタッチメント テーブルからアタッチメントの画像を一括出力 1.ArcGIS Online のフィーチャ サービスをダウンロード Survey123 for ArcGIS や Collector for ArcGIS などで集めた現地調査のデータを ArcGIS Pro で活用するために、ArcGIS Online 上のフィーチャ サービスを ArcGIS Pro にダウンロードします。 ArcGIS Online での操作 ① ArcGIS Online にサイン イン ② [コンテンツ] を開き、添付ファイル付きのフィーチャ サービス (Feature Layer) をクリックし、アイテム詳細ページを表示 ③ アイテム詳細ページから [エクスポート] → [FGDB にエクスポート] をクリック ④ エクスポートしたファイル ジオデータベースのアイテム詳細画面から [ダウンロード] をクリックし ZIP ファイルを保存 ⑤ ダウンロードしたZIPファイルを解凍 ArcGIS API for Python での操作 ArcGIS Online 上の操作は上記の手順①~⑤ですが、ArcGIS API for Python を使うと上記①~⑤の手順を以下のコードで実行でき、1 度の操作でダウンロードから解凍してファイル ジオデータベースにする処理までを行うことができます。 ArcGIS Online のフィーチャ サービスをファイル ジオデータベースにエクスポートし、ダウンロードと解凍までするコード import zipfile
from arcgis.gis import GIS
# ArcGIS Online にサイン イン
username = "ユーザー名"
password = "パスワード"
gis = GIS("https://www.arcgis.com", username, password)
# ArcGIS Online のフィーチャ レイヤーを FGDB にエクスポート
item = gis.content.get("フィーチャ レイヤーのID")
exportItem = item.export('demo_fgdb','File Geodatabase')
# エクスポートした FGDB をダウンロード
dlresult = exportItem.download(save_path="保存場所のパス")
# ZIPファイルを解凍
with zipfile.ZipFile(dlresult) as existing_zip:
existing_zip.extractall("保存場所のパス")
フィーチャ サービスを ファイル ジオデータベースにエクスポートしてからダウンロードすることで、現地調査の写真付きデータを ArcGIS Pro でも利用することができます。 ※添付ファイルの容量が大きいと処理がうまくいかない場合があります。容量の大きい添付ファイル付きのフィーチャ サービスをダウンロードする方法は ESRIジャパンのサポート サイトをご覧ください。 2.ArcGIS Pro で設定したレイアウトを PDF にエクスポートし、別の PDF と結合 ArcGIS Online からダウンロードしたデータを使って ArcGIS Pro でレイアウトを作成すれば、レポートとして PDF にエクスポートすることができます。ArcGIS Pro のレイアウトでは、マップ フレームや縮尺記号、方位記号、凡例などのエレメントやアタッチメントの画像、属性情報などを追加し高品質できれいなレポートを作成することができます。 さらにレイアウトでマップ シリーズを作成すると設定した図郭やデータごとに複数ページの PDF を出力することができます。ArcGIS Pro だけでも複数ページの出力は可能ですが、それだけでは表紙や概観図といったページまでは出力されません。 そこで、ArcPy の 「appendPages」を使用することで複数の PDF を結合した新たな PDF を出力することができます。PDF の結合処理を外部のソフトを使う必要がないことが ArcPy を使うメリットのひとつです。 マップシリーズで PDF にエクスポート後、別の表紙用PDF と結合して、1つのPDFファイルにするコード import arcpy
import os
# PDF の出力先を指定
pdfPath = r"C:\data\output\report.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath)
# プロジェクトファイルをPDFに出力
output = r"C:\data\output" # 出力フォルダのパス
aprx = arcpy.mp.ArcGISProject("プロジェクトファイルのパス")
aprx.listLayouts()[0].mapSeries.exportToPDF(output + r"\map.pdf")
# PDFを結合
pdfDoc = arcpy.mp.PDFDocumentCreate(pdfPath)
pdfDoc.appendPages(r"C:\data\output\title.pdf") # 表紙となるPDF
pdfDoc.appendPages(r"C:\data\output\map.pdf") # マップシリーズで出力したPDF
#保存とオブジェクトの削除
pdfDoc.saveAndClose()
del pdfDoc
3.アタッチメント テーブルからアタッチメントの画像を一括出力 ArcGIS Online からダウンロードした現地調査のデータには現地の様子を撮影した写真が添付されていることも多くあります。 ArcGIS Pro にダウンロードしたファイル ジオデータベースには、フィーチャ サービスの情報を含んだテーブル (GDB_ServiceItems)、フィーチャクラス、アタッチメント テーブル (<フィーチャクラス名>_ATTACH)、フィーチャクラスとアタッチメント テーブルを関連付けるリレーションシップ クラス (<フィーチャクラス名>_ATTACHREL) が格納されています。フィーチャクラスとアタッチメントテーブルは GlobalID で関連付けられています。 レポートとは別でアタッチメントの画像だけを保存して他の業務などに使用したい場合もあるかと思います。 以下の ArcPy を使ったコードではアタッチメント テーブルからアタッチメントの添付ファイルのみを一括でエクスポートすることができます。 アタッチメント テーブルから添付ファイルを一括出力するコード import arcpy
from arcpy import da
import os
# アタッチメントテーブルのパスと添付ファイルの出力先を指定
inTable = r"アタッチメントテーブルのパス"
fileLocation = r"添付ファイルの出力パス"
# アタッチメントテーブルから添付ファイルを抽出して出力
with da.SearchCursor(inTable, ['DATA', 'ATT_NAME', 'ATTACHMENTID']) as cursor:
for item in cursor:
attachment = item[0]
filenum = "ATT" + str(item[2]) + "_"
filename = filenum + str(item[1])
open(fileLocation + os.sep + filename, 'wb').write(attachment.tobytes())
# オブジェクトの削除
del item
del filenum
del filename
del attachment
アタッチメント テーブルから添付ファイルを一括出力するコードは Esri サポート (英語) や ESRIジャパンのサポート サイト (ArcMap版、要ログイン) にも記載されています。Esri サポートには上記のコードを ArcGIS Pro でジオプロセシング ツール化したコードが公開されています。ESRIジャパンのサポート サイトには ArcMap でジオプロセシング ツール化したコードとツールボックスが公開されていますのであわせてご活用ください。 おわりに 本記事では GIS コミュニティフォーラムでのテクニカル セッション「Web GIS で集めたデータを ArcGIS Pro でも活用しよう!~レポート作成までのステップ~」で使用したコードをご紹介しました。本記事でご紹介したスクリプトは ESRIジャパンの GitHub でも公開しています。現地調査のデータから ArcGIS Pro を使ってレポート作成する際には是非ご活用いただければと思います。 関連リンク ArcGIS Pro ヘルプ レイアウトの作成 マップ シリーズ ArcGIS Pro Python reference
... View more
06-19-2019
06:13 PM
|
0
|
0
|
2248
|
DOC
|
はじめに 2019 年 5 月 22 日 (水) ~ 24 日 (金)、東京ミッドタウン 六本木にて第 15 回 GISコミュニティフォーラム及びプレフォーラム・セミナーが開催されました! GeoNet ブログでご紹介した各開発者向けのテクニカル セッションへも、たくさんの方にご参加いただきました。ご来場いただいた皆様、ありがとうございました。 各開発者向けのテクニカル セッションでは、ArcGIS 開発者向け製品の概要やコードによる活用方法、最新情報などをご紹介しました。 テクニカル セッションの発表資料は ESRIジャパンのサポート サイトで公開しております。都合によりご参加できなかった、見逃してしまった、または資料をもう一度見たい…といった方々は是非ご活用ください (Esri 製品サポートへのログインが必要です)。 また、セッションで使用したソースコードなどは今後 ESRIジャパンの GitHub や GeoNet ブログでも順次公開を予定しておりますので、あわせてご期待ください。 発表資料およびソースコード セッション タイトル 発表資料 (要ログイン) ソースコード (ブログ・GitHub) ※ ArcGISユーザーのためのデータハンドリング ~さまざまなデータ活用の第一歩~ https://esrij-esri-support.custhelp.com/ci/fattach/get/63983/0/filename/a_id_7697_22_r5_1130_02.pdf GeoNet ブログ GitHub ArcGISでデータサイエンスしよう ~GIS 解析とそのプロセスの新しい共有方法~ https://esrij-esri-support.custhelp.com/ci/fattach/get/64417/0/filename/a_id_7697_22_r5_1600_02.pdf GeoNet ブログ GitHub ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~ https://esrij-esri-support.custhelp.com/ci/fattach/get/63995/0/filename/a_id_7697_22_r5_1650_02.pdf GeoNet ブログ① GeoNet ブログ② GitHub Web GISで集めたデータをArcGIS Proでも活用しよう!~レポート作成までのステップ~ https://esrij-esri-support.custhelp.com/ci/fattach/get/64000/0/filename/a_id_7697_22_r7_1600_02.pdf GeoNet ブログ GitHub Pythonで始める自動化処理 https://esrij-esri-support.custhelp.com/ci/fattach/get/64007/0/filename/a_id_7697_22_r9_1650_02.pdf ー ArcGIS Developerセッション ~開発者向け サブスクリプション徹底活用~ https://esrij-esri-support.custhelp.com/ci/fattach/get/64353/0/filename/a_id_7697_24_r5_1530.pdf ー ※GeoNet ブログやソースコードを公開後、表のリンクを更新予定です。 関連リンク ArcGIS for Developers 開発リソース集 ESRIジャパン サポート サイト (要ログイン)
... View more
06-03-2019
06:33 PM
|
0
|
0
|
912
|
DOC
|
はじめに 5 月 22 日 ~ 24 日の日程で GIS コミュニティフォーラムが東京ミッドタウン 六本木にて開催されます! このイベントは、日本国内の GIS ユーザー並びに GIS にご興味をお持ちの方々の情報交換と GIS の利用促進を目的としています。GIS、リモートセンシングに携わる多くの方にご参加いただき、活用事例や最新テクノロジーの紹介を通してお互いのアイデアを共有する場として、毎年多くの方にご来場いただいています! 開発者向けセッションのご紹介 当フォーラムでは、GIS とは何か? から、実際に日本国内の GIS 導入事例など、GIS の基本から最新情報、活用方法についてたくさんのセッションをご用意しています。 本記事では、その中から ESRIジャパンの技術スタッフが ArcGIS 開発者向け製品の概要や活用方法、最新情報などを紹介する開発者向けセッションの概要をご紹介します! セッションのプログラム 日にち ルーム 時間 セッション タイトル 5月22日(水) ルーム5-6 (タワー4階) 11:30 - 12:10 ArcGISユーザーのためのデータハンドリング ~さまざまなデータ活用の第一歩~ 16:00 - 16:40 ArcGISでデータサイエンスしよう ~GIS 解析とそのプロセスの新しい共有方法~ 16:50 - 17:30 ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~ ルーム7 (タワー4階) 16:00 - 16:40 Web GISで集めたデータをArcGIS Proでも活用しよう!~レポート作成までのステップ~ ルーム9 (タワー4階) 16:50 - 17:30 Pythonで始める自動化処理 5月24日(金) ルーム5-6 (タワー4階) 15:30 - 17:30 ArcGIS Developerセッション ~開発者向け サブスクリプション徹底活用~ セッションの概要 ArcGIS ユーザーのためのデータハンドリング ~さまざまなデータ活用の第一歩~ 5 月 22 日 (水) 11:30 ~ 12:10 ルーム 5-6 (タワー4階) GIS を使い始めるにはデータが必要です。シェープファイル、ジオデータベース、Geojsonなどすぐに利用できる形式の場合は悩むことはありませんが、世の中にあるデータはそのまま使用できるものばかりではありません。情報が複数のファイルに分かれていたり、ファイル形式の違いなど、ひと手間加えることで有効なデータとして活用できるかもしれません。 本セッションでは、データハンドリングとして、Python も活用したアプローチを中心にご紹介します。 ArcGISでデータサイエンスしよう ~GIS 解析とそのプロセスの新しい共有方法~ 5 月 22 日 (水) 16:00 ~ 16:40 ルーム 5-6 (タワー4階) GIS を用いた解析は、これまで気づけなかったことにフォーカスできる可能性を秘めています。今までは、GIS で解析を行っても、結果のみを示すだけに過ぎなかったこともあるでしょう。これからはどのような解析を行ったのか、そのプロセスさえも Web 上で共有することができるよう進化しています。ArcPy や ArcGIS API for Python での処理結果とそのプロセスを、新しい製品である Notebook Server で共有する新しい体験をご紹介します。 ArcGISでデータサイエンスしよう ~より高度で自由な地理空間分析へ~ 5 月 22 日 (水) 16:50 ~ 17:30 ルーム 5-6 (タワー4階) ArcGIS を活用してデータ分析をする際、ジオプロセシングツールには無い統計解析や、より柔軟な統計のモデリングをしたい、と感じたことはありませんか?本セッションは、オープンなプラットフォームである ArcGIS の特徴を活かし、R の tidyverse、Python の pandas、seaborn といった便利なライブラリを活用し、統計解析及びデータの前処理についてデモを交えてご紹介します。 Web GIS で集めたデータを ArcGIS Pro でも活用しよう!~レポート作成までのステップ~ 5 月 22 日 (水) 16:00 ~ 16:40 ルーム 7 (タワー4階) Survey123, Collector など現地調査などで集めたデータは、どのように ArcGIS Pro で活用すればよいでしょうか? 収集したデータを分析に利用し傾向を見出すことはもちろんですが、結果をレポートとして出力することも業務の中では日常的に発生することです。 本セッションでは、そのような集めたデータから Python を用いて、レポートを作成するまでのステップをご紹介します。 Pythonで始める自動化処理 5 月 22 日 (水) 16:50 ~ 17:30 ルーム 9 (タワー4階) ArcGIS Pro を使っていて、手間のかかる作業や繰り返し作業を効率化したいと思ったことはありませんか?業務の面倒な作業を Python を使って自動化する方法をご紹介します。 ArcGIS Developerセッション ~開発者向け サブスクリプション徹底活用~ 5 月 24 日 (金) 15:30 ~ 17:30 ルーム5-6 (タワー4階) 近年話題の「サブスクリプション」、ArcGIS の開発者向けには「ArcGIS Developer Subscription」と呼ばれるプログラムを提供しています。本セッションでは、サブスクリプションに含まれるリソース(開発キット、サービス/コンテンツ、ソフトウェア)や、開発者向けクラウド サービスについて、基礎と活用方法をご紹介します。また、最新APIでの編集、3D、高パフォーマンスなどの進化、ArcGIS プラットフォームを活用したハッカソンでの開発例なども併せて、開発者向けの情報満載でお届けします。 参加方法 GISコミュニティフォーラムの参加登録、また、その他のプログラム内容は、「第15回 GISコミュニティフォーラム」をご参照ください。 皆様のご参加お待ちしております!! 関連リンク ArcGIS for Developers 開発リソース集
... View more
05-15-2019
10:13 PM
|
1
|
0
|
643
|
DOC
|
はじめに この記事は ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。 本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。また、本シリーズ記事では ArcGIS Desktop (ArcMap) を利用した操作をご紹介します。 前回の記事では、独自のツール作成方法についてご紹介しました。 第 6 回目となる今回のテーマは「アドインの作成方法」です。 アドインについて Python アドインは、ArcGIS Desktop に組み込むことができるカスタム機能です。ボタンやツール、ツールバーなどを追加することができ、ArcGIS Desktop の機能を拡張することが可能です。 本記事では、前回の記事でカスタム ツールボックスに登録した Print ツールをアドインのボタンから呼び出す手順をご紹介します。 ツールの作成方法については前回の記事を併せてご覧ください。 アドイン作成の準備 アドインを作成するにはPython アドイン ウィザードを使用します。Python アドイン ウィザードは以下のページでダウンロードすることができます。 「Python Add-In Wizard」 アドイン ウィザードを任意の場所に保存し、ダウンロードした「addin_assistant.zip」を解凍したらアドイン作成の準備は完了です。 ここからはアドインを作成する手順をご紹介します。 アドインの作成 Python アドインは次の 3 つのステップで作成します。 1.アドイン プロジェクトの作成 2.Python スクリプトの編集 3.アドイン ファイルの作成・実行 以下よりステップに沿ってご説明します。 1.アドイン プロジェクトの作成 アドイン ウィザードを使用して、アドインの作成に必要なプロジェクト ファイル群を指定したフォルダに作成します。 ダウンロードした「addin_assistannt」フォルダ →「bin」フォルダ →「addin_assistant.exe」をダブルクリックし、Python アドイン ウィザードを起動します。 Python アドイン ウィザードを起動するとフォルダの参照ダイアログが開きます。Python アドインは 1 つのアドインにつき、1 つのプロジェクト (1 つのフォルダ) で管理します。フォルダの参照ダイアログではプロジェクト ファイル群を格納するための任意のフォルダを指定します。ここで指定するフォルダ名がアドインのプロジェクト名となります。本記事では、前回の記事で使用した C ドライブ直下の「data」フォルダ内に新規に「Addin」フォルダを作成し、指定しています。使用データは冒頭でもご紹介した ESRI ジャパンの GitHub で公開していますので、ご活用ください。 ※フォルダ名には日本語を使用しないでください。 次に、Python アドイン ウィザードの [Project Settings] タブで作成したプロジェクトの名前や作者などの設定をします。以下の項目を設定することができます。 ・Select Product:対象アプリケーション ・Name:ツール名/カテゴリ名 * ・Version:バージョン * ・Company:会社/組織 ・Description:説明 ・Author:作成者 ・Image:アドインに関連づけられた画像 (* は必須入力項目です) 次に、ツールを呼び出すためのボタンを作成します。[Add-In Contents] タブをクリックし項目を定義していきます。本記事では、ツールバーの中にボタンを定義するため、まずはツールバーを作成します。 [TOOLBARS] を右クリックし、[New Toolbar] を選択します。ここではツールバーの表示名などを設定します。以下の項目を設定することができます。本記事ではツールバーの表示名である Caption に「Python ツールバー」と入力しています。 ・Caption:表示名 * ・ID:アドインを識別するための一意の名前 * ・Show Initially:アプリケーション起動時に表示/非表示 (* は必須入力項目です) 次に、ツールバーの中に格納するボタンの設定を行います。 [TOOLBARS] の下に作成した [Python ツールバー] を右クリックし、[New Button] を選択します。ここではボタンの名前やアイコンなど、ボタンの情報を定義することができます。以下の項目を設定することができます。本記事では、ボタンの表示名である Caption に「PDF に出力」と入力しています。 ・Caption:ボタンの表示名 * ・Class Name:ボタンのクラス名 * ・ID:アドインを識別するための一意の名前 * ・Tooltip:ツールチップ ・Message:説明 ・Help Heading:ヘルプ コンテンツの見出し ・Help Content:ヘルプ コンテンツ ・Image for control:アイコン画像 (* は必須入力項目です) 画面右下の [Save] をクリックしプロジェクトを保存します。 これで、アドイン作成に必要なプロジェクト ファイル群が作成されました。 [Open Folder] をクリックしプロジェクトを開きます。 2.Python スクリプトの編集 ステップ 1 で作成したプロジェクト フォルダの中にある Python スクリプトを編集し、ボタンをクリックしたときの動作を記述します。 プロジェクト フォルダの中の [Install] フォルダ内の Python スクリプトを任意のエディタで開きます。 ボタンをクリックした際にツールを呼び出す以下のコードを記述し、上書き保存します。 import arcpy
import pythonaddins
class ButtonClass1(object):
"""Implementation for Addin_addin.button (Button)"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self): # ボタンをクリックしたときに作成した「Print」ツールを呼び出す
pythonaddins.GPToolDialog(r‘C:\data\ArcMap\Toolbox.tbx‘, ‘Print’) # ツールボックスのパスとツール名を記述
3.アドイン ファイルの作成・実行 ここまでで、アドインを作成する準備が整いました。ステップ 3 ではアドイン ファイル作成し、アドインを ArcMap にインストールします。 プロジェクト フォルダ内の「makeaddin.py」をダブルクリックし実行すると、同フォルダ内に「<プロジェクト名>.esriaddin」ファイルが作成されます。作成されたアドインファイルを実行し、[Install Add-In] をクリックすると ArcMap にアドインを追加することができます。 ArcMap を開くと作成したツールバーとボタンが追加されています。 アドインが表示されていない場合は ArcMap の [カスタマイズ] メニュー → [ツールバー] から作成したツールバーをクリックすることで、アドインを追加することができます。 ボタンをクリックすると前回作成した「Print」ツールを呼び出すことができます。 おわりに 本記事ではアドインの作成方法についてご紹介しました。よく使うツールをまとめて自分のツールバーを作成することや、作成したアドインを配布して共有することなどが可能になりますので、是非試してみてください。 今回で「Python を使って作業の効率化を図ろう!」のシリーズ記事は最終回となります。 このシリーズを通して、ArcPy を使ってできることや、効率化を図るための手法を簡単ではありますが、ご紹介してきました。業務を効率化する際などに少しでも役立てていただければ幸いです。 関連リンク ArcPy とは ArcPy 関数一覧 ArcPy クラス一覧 Python アドイン
... View more
11-29-2018
09:28 PM
|
0
|
0
|
2695
|
DOC
|
はじめに この記事は ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。また、本シリーズ記事では ArcGIS Desktop (ArcMap) を利用した操作をご紹介します。 前回の記事では ArcPy を使ったジオプロセシング ツールの操作についてご紹介しました。 第 4 回目となる今回は ArcPy を使ったデータの操作についてご紹介します。 データの操作 ArcPy を使用すると、ジオプロセシングオブジェクトやデータ要素 のプロパティ取得や、フィーチャクラスやテーブルに含まれるレコードにアクセスしデータの取得や挿入、更新などができます。ここではデータ プロパティの取得方法と、データの操作方法についてご紹介します。 データ プロパティの取得 プロパティを取得するためには ArcPy の Describe 関数を使用します。使い方は、arcpy.Describe(value,{dataType}) の value にジオプロセシングオブジェクトやデータ要素を与えることで実行できます。Describe 関数はフィーチャクラスやラスター レイヤーなど、ジオプロセシングオブジェクトやデータ要素が持つプロパティの情報を取得することができます。 カーソル 第 1 回目の記事で簡単にご紹介しましたが、データを操作するためには ArcPy が保有するデータ アクセス モジュールを使用します。データ アクセス モジュールに含まれているカーソルを使うとデータの操作を行うことができます。カーソルはテーブルに含まれるレコードの位置を示します。カーソルには SearchCursor や、InsertCursor、UpdateCursor があり、それぞれレコードの検索(Search)、挿入(Insert)、更新(Update)を行うことが可能です。 SearchCursor SearchCursor はフィーチャクラスやテーブルから行を検索し、値を読み取りたいときに使用します。取得した行の特定の値を取得したり、ジオメトリの座標を取得することなどが可能です。 次の例では、SearchCursor を使用して、下表のようなデータから name フィールドと users フィールドの値を取得しています。 # SearchCursor クラスを使用して SearchCursor オブジェクトを取得
cur = arcpy.da.SearchCursor(“Station”, [“name”, “users”])
# Cursor から、name (インデックス番号:0) フィールドと users (インデックス番号:1) フィールドの値を表示
for row in cur:
print row[0]
print row[1]
# オブジェクトを削除して、参照を解放
del cur
>> 永田町駅
>> 10
>> 六本木駅
>> 33
>> 赤坂見附駅
>> 25
InsertCursor InsertCursor はフィーチャクラスやテーブルに新たな行を追加したいときに使用します。 次の例では、InsertCursor を使用して、新たに表参道駅のフィーチャを行として追加しています。 # 追加する値をタプル型で変数に格納
rowValues = (“表参道駅”, (141.324167, 24.786667))
# InsertCursor オブジェクトを取得
cur = arcpy.da.InsertCursor(“Station”, [“name”, “SHAPE@XY”])
# カーソルに新しいレコード値をセットして行を追加
cur.insertRow(rowValues)
# オブジェクトを削除して、参照を解放
del cur
※SHAPE@XY はフィーチャの重心を表す X 座標と Y 座標にアクセスすることができます。 UpdateCursor UpdateCursor はフィーチャクラスやテーブルの行の情報を更新する際に使用します。 次の例では、UpdateCursor を使用して、下表のような永田町駅の属性を持つフィーチャの行に対して users フィールドの値を 10 から 20 に更新しています。 # 更新対象の永田町駅 を UpdateCursor オブジェクトで取得
cur = arcpy.da.UpdateCursor(“Station”, “users”, “name = ‘永田町駅’”)
# users (インデックス番号:0) フィールドの値を更新
for row in cur:
row[0] = 20
cur.updateRow(row)
# オブジェクトを削除して、参照を解放
del cur
このように ArcPy のデータ アクセス モジュールに含まれているを使用すると、データの取得や挿入、更新などをすることができますので、是非試してみてください。 おわりに 本記事では ArcPy を使ったデータの操作についてご紹介しました。次回は、独自のツール作成方法ついてご紹介します。 関連リンク ArcPy ArcPy 関数一覧 ArcPy クラス一覧
... View more
11-21-2018
06:16 PM
|
0
|
0
|
6670
|
DOC
|
はじめに この記事は ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。また、本シリーズ記事では ArcGIS Desktop (ArcMap) を利用した操作をご紹介します。 前回の記事では ArcPy を使ったマップとレイヤーの操作についてご紹介しました。 第 3 回目となる今回は ArcPy を使ったジオプロセシング ツールの操作についてご紹介します。 ジオプロセシング ツールとは ジオプロセシング(Geoprocessing)とは、GIS データに何らかの処理を行い、新しいデータを出力する一連の流れを指します。この処理を実行する機能を ArcGIS では、ジオプロセシング ツールと呼び、データの解析や管理、別のデータ形式へ変換する処理を行うことが可能です。ジオプロセシングの詳細は、弊社ホームページのGIS 基礎解説にある ジオプロセシング とは? を参照ください。 ジオプロセシング ツールは ArcGIS Desktop が提供するツールボックスに、データ管理ツールや解析ツールなどのようにカテゴリごとに格納されています。 ジオプロセシング ツールの実行 ArcPy からもジオプロセシング ツールを実行することができます。 使い方は arcpy.<ツール名>_<ツールボックスのエイリアス名>(ツールに必要なパラメータ) で実行することができます。ツール名やエイリアス名は、ツールボックスやツールのプロパティから確認することができます (下図)。 GIS ではよく使う属性検索と空間検索を実行する例をご紹介します。 ジオプロセシング ツールの実行:属性検索 属性検索 (Select Layer By Attribute) ツールは、属性値の指定した条件をもとに、フィーチャの選択を行うことができます。 次の例では、tokyo レイヤーから新宿区の属性を持つフィーチャを選択しています。 # tokyo レイヤーから新宿区のフィーチャを選択
arcpy.SelectLayerByAttribute_management (“tokyo”, “NEW_SELECTION”, “CITY1 = ‘新宿区‘“)
ジオプロセシング ツールの実行:空間検索 空間検索 (Select Layer By Location) ツールは、別のレイヤーのフィーチャに対する空間的な関係性に基づいて、フィーチャを選択することができます。 次の例では、千葉駅から一定の距離内(500メートル)にある建物を選択しています。 # 千葉駅から 500 メートル以内にある建物を検索
arcpy.SelectLayerByLocation_management(“building“, “WITHIN_A_DISTANCE”,“ChibaStation“, “500 meters”, “NEW_SELECTION”)
このように、ArcPy からもジオプロセシング ツールを簡単なコーディングで実行することができました。また、前回の記事でご紹介した、取得したオブジェクトをジオプロセシング ツールの引数として解析などに使用することもできますので、是非試してみてください。 おわりに 本記事では ArcPy を使ったジオプロセシング ツールの操作ついてご紹介しました。 次回は、ArcPyを使ったデータの操作についてご紹介します。 関連リンク ArcPy ArcPy 関数一覧 ArcPy クラス一覧 ジオプロセシング (GIS 基礎解説)
... View more
11-21-2018
05:56 PM
|
0
|
0
|
3844
|
DOC
|
はじめに この記事は、ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。 ※ 本シリーズ記事では ArcPy の実行環境として ArcGIS Desktop (ArcMap) を対象としております。 ArcGIS Pro を対象とした記事は「【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!① : ArcPy の基礎」 をご参照ください。 第 1 回:ArcPy の基礎 (本記事) 第 2 回:マップ・レイヤーの操作 第 3 回:ジオプロセシング ツールの操作 第 4 回:データの操作 第 5 回:独自のツールの作成方法 第 6 回:アドインの作成方法 第 1 回目となる今回は、ArcPy の基礎についてご紹介します。 ArcPy とは? ArcPy は Esri が提供する Python のサイトパッケージです。Python スクリプトを使って地理的データの解析、変換、管理などを実行するために提供されています。ArcPy を使うとプロパティの設定やジオプロセシング ツールの実行、マップの操作などの ArcGIS 上での一連の処理をスクリプト化し自動化することができます。また、一連の処理が記述されたスクリプトをツールに登録することでジオプロセシング ツールとして汎用的に使用することも可能です。Python や ArcPy を使うことで繰り返し作業を自動化させ、作業効率を上げることができます。 ArcPy サイトパッケージの内容 ArcPy サイトパッケージは関数、クラス、モジュールがあります。ArcPy サイトパッケージを使用すると ArcGIS Desktop (エクステンションを含む) のすべてのジオプロセシング ツールに Python からアクセスすることができます。また、GIS データの操作や参照に役立つさまざまな関数やクラスも使用することができます。それぞれについて簡単にご紹介します。 ArcPy 関数 ArcPy ではすべてのジオプロセシング ツールが関数として提供されています。関数を使用すれば、ArcGIS で扱うデータセットのリスト作成、データセットのプロパティの取得、ジオデータベースに追加する前のテーブル名の検証など、数多くの便利なスクリプト タスクを実行できます。関数は arcpy.<関数名> で使用します。 次の例は GetParameterAsText 関数を使用してパラメータの入力値を受け取り、Exists 関数を使用して入力の有無を判別しています。 関数の使い方 # GetParametrAsText でパラメータの入力値を受け取る
input = arcpy.GetParameterAsText(0) # arcpy.<関数名> で使用
# Exists で入力の有無を判別
if arcpy.Exists(input):
print("Data exists")
else:
print("Data does not exist")
ArcMap から実行できるジオプロセシング ツールは、おおむね arcpy 直下に定義されています。 ArcPy クラス 関数と見分けがつきにくいですが、ArcPy もまとまったデータや一律に設定した値で処理を行うために “クラス” を定義しています。例えば、SpatialReference クラスでは、空間参照を指定して SpatialReference クラスをインスタンス化 (このクラスのメソッドやプロパティの値を参照できる形) すると、その名称などを取得することができます。 次の例では、SpatialReference (空間参照) クラスの設定を行っています。 クラスの使い方 # 空間参照クラスを Web メルカトル (3857) で設定
spref = arcpy.SpatialReference(3857) # arcpy.<クラス名> で使用
# 設定した SpatialReference のプロパティ (name と type) を出力
print(spref.name)
print(spref.type)
モジュール ArcPy のモジュールは、データ アクセス モジュール (arcpy.da) や、マッピング モジュール (arcpy.mapping) など役割に応じたいくつかのモジュールを保有しています。マッピング モジュールは主に既存のマップ ドキュメント (.mxd) やレイヤー ファイル (.lyr) の内容を操作することができます。また、マップのエクスポートや印刷を自動化する機能も提供しています。使い方は arcpy.mapping.<クラス名または関数名> で使用します。 データ アクセス モジュールはデータを扱う振る舞いを提供するモジュールで、例えばフィーチャクラスやデータビューなどにアクセスして操作を行うことができます。使い方は arcpy.da.<クラス名> で使用することができます。 その他にもエクステンションである、Spatial Analyst モジュール (arcpy.sa) や Network Analyst モジュール (arcpy.na) などのモジュールも保有しています。 ※エクステンション製品の関数やクラスをすでに保有していますが、ご利用は各ライセンスが必要となります。 次の例ではマッピング モジュールを使ってマップ ドキュメントを参照し、PDF に出力しています。 モジュールの使い方 # arcpy.<モジュール名>.<クラス名または関数名> で使用
# マップ ドキュメントの参照
mxd = arcpy.mapping.MapDocument(r“C:\data\ArcMap\arcpy.mxd“)
# PDF ファイルにエクスポート
arcpy.mapping.ExportToPDF(mxd, r“C:\data\output\sample.pdf“)
ArcPy の使い方 ArcPy のサイトパッケージをインポートすることで ArcPy を使用することができます。コードに import arcpy と記述することで、Python は ArcPy を読み込み、これまでにご紹介した関数、クラス、モジュールを Python から呼び出して実行することができます。ArcMap の Python ウィンドウを利用する場合はインポートが不要です。 次の例は ArcPy を使ってマップの操作を行い、レイヤー名の一覧を出力しています。 # arcpy のインポート
import arcpy
# ArcMapで現在開いているマップ ドキュメントを取得
mxd = arcpy.mapping.MapDocument(“CURRENT”)
# 現在のデータフレームのレイヤー一覧を取得
lyrs = arcpy.mapping.ListLayers(mxd)
# レイヤーの一覧を出力
for lyr in lyrs:
print lyr.name
>> レイヤー名 1
>> レイヤー名 2
おわりに 本記事では ArcPy の基礎についてご紹介しました。次回は ArcPy を使ったマップとレイヤーの操作についてご紹介します。 関連リンク ArcPy ArcPy 関数一覧 ArcPy クラス一覧
... View more
11-07-2018
08:49 PM
|
0
|
0
|
17974
|
Title | Kudos | Posted |
---|---|---|
1 | 05-15-2019 10:13 PM |
Online Status |
Offline
|
Date Last Visited |
yesterday
|