|
プロジェクトワークスペースから選択したレイヤーやDBのオブジェクトを取得
プロジェクトワークスペースから選択した要素のタイプ番号やIDを取得するメソッドを追加しました。
これまでは、スクリプトで処理したいレイヤーを指定する場合、スクリプトの引数にレイヤータイトルを入力、またはHtmlMenuを使用してレイヤーをドロップダウンリストに表示しレイヤータイトルを選択する、などを行ってきました。
これらの追加したメソッドを使用することで、プロジェクトワークスペースから選択したレイヤーのオブジェクトを取得し、処理することができるようになります。
ただし、プロジェクトワークスペースの性質上、1つ要素しか選択できませんので、複数の要素を選択したい場合は、これまで同様、引数やHtmlMenuを使用してください。
- ■ サンプル
サンプル[script56.zip(約93KB)]をダウンロードする
 | Sample.pcm | :サンプルプロジェクト |
| 1-1.nai | :サンプルラスター |
| 1-2.nai | :サンプルラスター |
| 11.nav | :サンプルベクター |
| 12.nav | :サンプルベクター |
 | pcmSelectTitle.js | :サンプルJScript |
- ■ 準備
-
- ダウンロードしたファイルを解凍します。
ここでは、「C:\sample\script56」フォルダーとします。
- PC-Mappingを起動します。
- PC-MappingはVer.8.061 BN.710106以降のバージョンを使用してください。
- 「C:\sample\script56\sample.pcm」を開きます。
- 「C:\sample\script56\pcmSelectedTitle.js」を開きます。
- ■ 解説
-
- 要点1
- var mf = GetMainFrame();
var pws = mf.GetProjectWorkspace();
プロジェクトワークスペースから選択した要素のタイプ番号やIDを取得するメソッドを実行するために、プロジェクトワークスペースのオブジェクトを取得します。
- 要点2
- var pid = pws.GetSelectProject();
プロジェクトワークスペースから選択した要素が登録されているプロジェクトの内部IDを取得します。
- 要点3
- var type = (pws.GetSelectedType() >>> 0).toString(16);
プロジェクトワークスペースから選択した要素のタイプ番号を取得します。
ただし、PC-MappingでJavaScript言語を使用する場合、以下の点にご注意ください。
JavaScriptにint型はなく、すべての数値が同じ型(Number)として扱われます。
よって、var intType = pws.GetSelectedType();を取得するとき、int型の最大値2,147,483,647より大きい値は負数になってしまうため、var strType = (pws.GetSelectedType() >>> 0).toString(16);のように、符号なし32ビット整数(最大値4,294,967,295)の16進数へ変換してください。
例えば、要素のタイプ番号が”0x90000000”の場合、数値にすると2,415,919,104とint型の最大値を超えてしまうため、var intType = pws.GetSelectedType()では-1,879,048,192を返します。
var strType = (pws.GetSelectedType() >>> 0).toString(16);にすれば、”90000000”(0xは省略)を返します。
また、”0x00A00000”であれば、”a00000”(0xと先頭0は省略、アルファベットは小文字に変換)を返します。
- 要点4
- var id = pws.GetSelectedID();
プロジェクトワークスペースから選択した要素のIDを取得します。
要素によって、IDは内部IDや登録順番号(0〜)など内容が異なります。
- 要点5
- var prj = GetProjectByID(pid);
プロジェクトの内部IDからプロジェクトのオブジェクトを取得します。
- 要点6
- }else if(type == "1000000"){
var mlf = prj.GetLayerFolder();
var lf = mlf.GetChild(id, false);
msg = "「" + lf.Title + "」レイヤーフォルダー";
}else if(type == "200000"){
var lyr = prj.GetLayer(id, false);
msg = "「" + lyr.Title + "」レイヤー";
例えば、プロジェクトワークスペースからレイヤーフォルダーを選択している場合、要素のタイプ番号は”1000000”になります。
要素のIDはレイヤーフォルダーの内部IDになりますので、PcmAutoProjectClass:GetLayerFolder()メソッドで最上位レイヤーフォルダーオブジェクトを取得し、PcmAutoLayerFolderClass:GetChild()メソッドで選択したレイヤーフォルダーオブジェクトを取得できます。
また、プロジェクトワークスペースからレイヤーを選択している場合、要素のタイプ番号は”200000”になります。
要素のIDはレイヤーの内部IDになりますので、PcmAutoLayerClass:GetLayer()メソッドで選択したレイヤーオブジェクトを取得できます。
- 要点7
- 本サンプルJavaScriptは、プロジェクトワークスペースから選択した要素のオブジェクトを取得し、タイトルをメッセージウィンドウに表示しているだけです。
しかし、このオブジェクトから各種メソッド・プロパティを使用することで、「プロジェクトワークスペースから選択したレイヤーを解除・破棄する」、「「開く」ウィンドウで指定したレイヤーファイル(*.nav)を、プロジェクトワークスペースから選択したレイヤーフォルダーに登録する」などのスクリプト処理を行うことができます。
- 要点8
- プロジェクトワークスペースから選択した要素によって、PcmAutoPwsClass:GetSelectedType()で取得できる要素のタイプ番号、PcmAutoPwsClass:GetSelectedID()で取得できる要素のIDは異なります。
詳しくは、後述「■ 要素のタイプ番号とID一覧」をご覧ください。
- ■ 実行
- 本サンプルJavaScriptは、プロジェクトワークスペースから選択した要素のタイトルをメッセージウィンドウに表示します。
- 「pcmSelectTitle」スクリプトウィンドウをアクティブにします。
- プロジェクトワークスペースから「画地」レイヤーを選択します。
- [スクリプト]-[スクリプト]-[スクリプトの実行]メニューをクリックします。
- すると、「「画地」レイヤーを選択しています」メッセージを表示します。【OK】ボタンをクリックします。
- プロジェクトワークスペースから「その他」レイヤーフォルダーを選択します。
- [スクリプト]-[スクリプト]-[スクリプトの実行]メニューをクリックします。
- すると、「「その他」レイヤーフォルダーを選択しています」メッセージを表示します。【OK】ボタンをクリックします。
- プロジェクトワークスペースから他の要素を選択し、ご確認ください。
- ■ 要素のタイプ番号とID一覧
-
| 要素 | GetSelectedType() | GetSelectedID() |
| 要素のタイプ番号(16進) | 要素に関連するID |
| システムプロジェクト | 0x10000000 | システムプロジェクト内部ID |
| 表示モード | 0x30000000 | システムプロジェクト内部ID |
| 表示モードタイトル | 0x00300000 | 表示モード内部ID |
| 描画パラメーター | 0x40000000 | システムプロジェクト内部ID |
| 描画パラメーターフォルダータイトル | 0x03000000 | 描画パラメーターフォルダー内部ID |
| 描画パラメータータイトル | 0x00400000 | 描画パラメーター内部ID |
| 環境 | 0x50000000 | システムプロジェクト内部ID |
| 環境-1 | 0x00500000 | 1 |
| 環境-2 | 0x00500000 | 2 |
| キーリスト | 0xC0000000 | システムプロジェクト内部ID |
| メモ | 0xB0000000 | システムプロジェクト内部ID |
| プロジェクトタイトル | 0x10000000 | プロジェクト内部ID |
| レイヤー | 0x20000000 | プロジェクト内部ID |
| レイヤーフォルダータイトル | 0x01000000 | レイヤーフォルダー内部ID |
| レイヤータイトル | 0x00200000 | レイヤー内部ID |
| 座標系情報 | 0x00070000 | レイヤー内部ID |
| アーク | 0x00010000 | レイヤー内部ID |
| ノード | 0x00020000 | レイヤー内部ID |
| ポリゴン | 0x00030000 | レイヤー内部ID |
| ポイント | 0x00040000 | レイヤー内部ID |
| メッシュ | 0x00050000 | レイヤー内部ID |
| 背景イメージ | 0x00060000 | レイヤー内部ID |
| 表示モード | 0x30000000 | プロジェクト内部ID |
| 表示モードタイトル | 0x00300000 | 表示モード内部ID |
| 描画パラメーター | 0x40000000 | プロジェクト内部ID |
| 描画パラメーターフォルダータイトル | 0x03000000 | 描画パラメーターフォルダー内部ID |
| 描画パラメータータイトル | 0x00400000 | 描画パラメーター内部ID |
| 環境 | 0x50000000 | プロジェクト内部ID |
| 環境-1 | 0x00500000 | 1 |
| 環境-2 | 0x00500000 | 2 |
| 属性データベース | 0x60000000 | プロジェクト内部ID |
| 属性データベースフォルダータイトル | 0x02000000 | 属性データベースフォルダー内部ID |
| 属性データベースタイトル | 0x00600000 | 属性データベース内部ID |
| 広域イメージ | 0x70000000 | プロジェクト内部ID |
| 広域イメージレベルタイトル | 0x00700000 | 広域イメージレベル番号(0〜) |
| 広域ベクター | 0x80000000 | プロジェクト内部ID |
| 広域ベクタースロットタイトル | 0x00800000 | 広域ベクタースロット番号(0〜) |
| 背景ピクチャー | 0x90000000 | プロジェクト内部ID |
| 背景ピクチャーフォルダータイトル | 0x04000000 | 背景ピクチャーフォルダー内部ID |
| 背景ピクチャータイトル | 0x00900000 | 背景ピクチャー内部ID |
| 標高メッシュ | 0x05000000 | プロジェクト内部ID |
| 標高メッシュタイトル | 0x00A00000 | 標高メッシュ登録順番号(0〜) |
| TIN | 0x06000000 | プロジェクト内部ID |
| TINタイトル | 0x00B00000 | TIN登録順番号(0〜) |
| 背景プロジェクト | 0xE0000000 | プロジェクト内部ID |
| 背景プロジェクトフォルダータイトル | 0x07000000 | 背景プロジェクトフォルダー内部ID |
| 背景プロジェクトタイトル | 0x00E00000 | 背景プロジェクト内部ID |
| キーリスト | 0xC0000000 | プロジェクト内部ID |
| メモ | 0xB0000000 | プロジェクト内部ID |
| WMS/WMTS/RasterTile | 0xD0000000 | プロジェクト内部ID |
| WMSタイトル | 0x00D00000 | WMS登録順番号(0〜) |
| WMSTタイトル | 0x00D00000 | WMST登録順番号(4096〜) |
| RasterTileタイトル | 0x00D00000 | RasterTile登録順番号(8192〜) |
| 3Dポイントクラウド | 0xF0000001 | プロジェクト内部ID |
- ■ 補足
- 申し訳ありませんが、PC-Mapping Automation リファレンス(CHM形式)【JScript】の更新は後日になってしまうため、本ヒント集で使用しているメソッド・プロパティが反映されていないかもしれません。
PC-Mapping Automation リファレンス(CHM形式)【JScript】に本ヒント集で使用しているメソッド・プロパティが見つからない場合は、以下をダウンロードしてください。
メソッド・プロパティ資料[script56_pdf.zip(約1.7MB)]をダウンロードする
| GetSelectProject.pdf | :pdfファイル |
| GetSelectedType.pdf |
| GetSelectedID.pdf |
| GetCopyOfPictureByID.pdf |
| GetBkMgrIndexByID.pdf |
|