サポート > PC-MAPPING ヒント集 > スクリプト > プロジェクトワークスペースから選択したレイヤーやDBのオブジェクトを取得
プロジェクトワークスペースから選択したレイヤーやDBのオブジェクトを取得
プロジェクトワークスペースから選択した要素のタイプ番号やIDを取得するメソッドを追加しました。
これまでは、スクリプトで処理したいレイヤーを指定する場合、スクリプトの引数にレイヤータイトルを入力、またはHtmlMenuを使用してレイヤーをドロップダウンリストに表示しレイヤータイトルを選択する、などを行ってきました。
これらの追加したメソッドを使用することで、プロジェクトワークスペースから選択したレイヤーのオブジェクトを取得し、処理することができるようになります。
ただし、プロジェクトワークスペースの性質上、1つ要素しか選択できませんので、複数の要素を選択したい場合は、これまで同様、引数やHtmlMenuを使用してください。
■ サンプル
サンプル[script56.zip(約93KB)]をダウンロードする
Sample.pcm:サンプルプロジェクト
1-1.nai:サンプルラスター
1-2.nai:サンプルラスター
11.nav:サンプルベクター
12.nav:サンプルベクター
pcmSelectTitle.js:サンプルJScript

■ 準備
  1. ダウンロードしたファイルを解凍します。
    ここでは、「C:\sample\script56」フォルダーとします。

  2. PC-Mappingを起動します。

  3. PC-MappingはVer.8.061 BN.710106以降のバージョンを使用してください。

  4. 「C:\sample\script56\sample.pcm」を開きます。

  5. 「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は、プロジェクトワークスペースから選択した要素のタイトルをメッセージウィンドウに表示します。

  1. 「pcmSelectTitle」スクリプトウィンドウをアクティブにします。

  2. プロジェクトワークスペースから「画地」レイヤーを選択します。

  3. [スクリプト]-[スクリプト]-[スクリプトの実行]メニューをクリックします。

  4. すると、「「画地」レイヤーを選択しています」メッセージを表示します。【OK】ボタンをクリックします。

  5. プロジェクトワークスペースから「その他」レイヤーフォルダーを選択します。

  6. [スクリプト]-[スクリプト]-[スクリプトの実行]メニューをクリックします。

  7. すると、「「その他」レイヤーフォルダーを選択しています」メッセージを表示します。【OK】ボタンをクリックします。

  8. プロジェクトワークスペースから他の要素を選択し、ご確認ください。

■ 要素のタイプ番号とID一覧
要素GetSelectedType()GetSelectedID()
要素のタイプ番号(16進)要素に関連するID
システムプロジェクト0x10000000システムプロジェクト内部ID
表示モード0x30000000システムプロジェクト内部ID
表示モードタイトル0x00300000表示モード内部ID
描画パラメーター0x40000000システムプロジェクト内部ID
描画パラメーターフォルダータイトル0x03000000描画パラメーターフォルダー内部ID
描画パラメータータイトル0x00400000描画パラメーター内部ID
環境0x50000000システムプロジェクト内部ID
環境-10x005000001
環境-20x005000002
キーリスト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
環境-10x005000001
環境-20x005000002
属性データベース0x60000000プロジェクト内部ID
属性データベースフォルダータイトル0x02000000属性データベースフォルダー内部ID
属性データベースタイトル0x00600000属性データベース内部ID
広域イメージ0x70000000プロジェクト内部ID
広域イメージレベルタイトル0x00700000広域イメージレベル番号(0〜)
広域ベクター0x80000000プロジェクト内部ID
広域ベクタースロットタイトル0x00800000広域ベクタースロット番号(0〜)
背景ピクチャー0x90000000プロジェクト内部ID
背景ピクチャーフォルダータイトル0x04000000背景ピクチャーフォルダー内部ID
背景ピクチャータイトル0x00900000背景ピクチャー内部ID
標高メッシュ0x05000000プロジェクト内部ID
標高メッシュタイトル0x00A00000標高メッシュ登録順番号(0〜)
TIN0x06000000プロジェクト内部ID
TINタイトル0x00B00000TIN登録順番号(0〜)
背景プロジェクト0xE0000000プロジェクト内部ID
背景プロジェクトフォルダータイトル0x07000000背景プロジェクトフォルダー内部ID
背景プロジェクトタイトル0x00E00000背景プロジェクト内部ID
キーリスト0xC0000000プロジェクト内部ID
メモ0xB0000000プロジェクト内部ID
WMS/WMTS/RasterTile0xD0000000プロジェクト内部ID
WMSタイトル0x00D00000WMS登録順番号(0〜)
WMSTタイトル0x00D00000WMST登録順番号(4096〜)
RasterTileタイトル0x00D00000RasterTile登録順番号(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