こちらの記事の続きです。
マップ上で円形ツールを使って選択した医療機関をレポートに表示します。
マップのサンプルではCircle Searchのページに実装されています。ひとつ前の記事で作成したレポート上で選択のページをコピーします。ページ番号は8、ページ名はマップ上で選択とします。
ページが作成されたら作業の開始です。
対話モード・レポートにページ・アイテムP8_CIRCLE_GEOJSONを作成します。タイプは非表示、設定の保護された値はOFFにします。マップ上で円形ツールを使って指定した領域をGeoJSONの形式で保持するために使用します。
円形ツールで指定した領域をP8_CIRCLE_GEOJSONに保存する動的アクションを作成します。
マップ・リージョンで動的アクションの作成を実行します。識別の名前をCircle Finished、タイミングのイベントはマップが変更されました[マップ]、選択タイプはリージョン、リージョンに..マップを選択します。
クライアント側の条件として、タイプにJavaScript式を選び、JavaScript式として以下を記述します。
this.data && this.data.changeType === "circle-drawn"
詳細のイベント有効範囲を動的にします。
最初のTrueアクションとして、値の設定を作成します。設定のタイプの設定はJavaScript Expressionを選択します。JavaScript式として以下を記載します。
( this.data.circle ? JSON.stringify( this.data.circle.data.geometry ) : "" )
影響を受ける要素の選択タイプをアイテム、アイテムとしてP8_CIRCLE_GEOJSONを指定します。これで this.data.circle.data.geometry として取得される円形ツールで指定した領域が、GeoJSON形式でページ・アイテムP8_CIRCLE_GEOJSONに設定されます。
ページ・アイテムP8_CIRCLE_GEOJSONに領域の情報が設定されたので、対話モード・レポートのリージョンとマップ・リージョンをリフレッシュして、検索結果に反映させるアクションを作成します。
TRUEアクションの作成を実行し、識別のアクションをリフレッシュとします。影響を受ける要素の選択タイプはリージョン、リージョンとして対話モード・レポートのリージョンである医療機関を指定します。
同様の手順で、マップ・リージョンをリフレッシュするアクションを作成します。
最後にTRUEアクションとしてJavaScriptコードの実行を作成します。円形ツールで選択した領域をクリアします。設定のコードには以下を記述します。
apex.region( "medical-facilities-region" ).call ( "clearCircle" );
円形ツールによって指定された領域に含まれる医療機関のみが検索されるよう、対話モード・レポートとマップ・リージョンのSQL問合せを更新します。Oracle SpatialのSDO_ANYINTERACTファンクションを使用します。
select f.facility_id, f.zip_code, f.facility_name, f.facility_addr, f.geometry
, m.ans_type ans_type_m, e.ans_type ans_type_e, h.ans_type ans_type_h
from c19_medical_facilities f
left outer join (
select ans_type, facility_type, facility_id
from c19_medical_facility_statuses
where facility_type = 'M') m
on f.facility_id = m.facility_id
left outer join (
select ans_type, facility_type, facility_id
from c19_medical_facility_statuses
where facility_type = 'E') e
on f.facility_id = e.facility_id
left outer join (
select ans_type, facility_type, facility_id
from c19_medical_facility_statuses
where facility_type = 'H') h
on f.facility_id = h.facility_id
where
:P8_CIRCLE_GEOJSON is null
or
sdo_anyinteract(
geometry,
mdsys.sdo_util.from_geojson( :P8_CIRCLE_GEOJSON)
) = 'TRUE'
対話モード・レポートのSQL問合せを更新します。送信するページ・アイテムにP8_CIRCLE_GEOJSONを追加します。
マップ・リージョンのSQL問合せも更新します。送信するページ・アイテムにP8_CIRCLE_GEOJSONを追加します。
円形ツールで指定した領域をマップ上に表示するために、新規にレイヤーを作成します。
レイヤーの作成を実行し、識別の名前を検索範囲とします。レイヤー・タイプはポリゴンです。ソースのSQL問合せに以下のSELECT文を記述します。
select 0 as id,
mdsys.sdo_util.from_geojson( to_clob( :P8_CIRCLE_GEOJSON )) as geometry
from sys.dual
where :P8_CIRCLE_GEOJSON is not null
送信するページ・アイテムにP8_CIRCLE_GEOJSONを指定します。
列のマッピングのジオメトリ列のデータ型にSDO_GEOMETRYを選択し、ジオメトリ列はGEOMETRYとします。主キー列にIDを選択します。外観の塗りつぶしの色にベージュ#d8aa12を指定し、塗りつぶしの不透明度は .2 とします。
以上で完了です。ページを実行して記事の最初にあるGIF動画のような動作を確認してみましょう。
索引がある最初の記事はこちらになります。