|
日付時刻型フィールドの値をベクター固有属性「更新日付」へ設定
レイヤーのベクター内部属性にある日付時刻型フィールドに入力されている日付を、そのベクター固有属性「更新日付」へ設定するスクリプトをご紹介します。
ここでは、前景または表示レイヤーを対象に、アーク・ノード・ポリゴン・ポイント内部属性に「更新日付」フィールドが存在する場合、そのフィールドに入力されている日付をアーク・ノード・ポリゴン・ポイントの固有属性「更新日付」へ設定しています。
- ■ サンプル
サンプル[script57.zip(約36KB)]をダウンロードする
 | sample.pcm | :サンプルプロジェクト |
- ■ 準備
-
- ダウンロードしたファイルを解凍します。
ここでは、「C:\sample\script57」フォルダーとします。
- PC-Mappingを起動します。
- 「C:\sample\script57\sample.pcm」を開きます。
- [プロジェクト]-[プロジェクトエキスパート]から「スクリプト」パネルを開きます。
- 「スクリプト」パネルは、ウィンドウ右下の角をドラッグ&ドロップし、広げることができます。それでも「スクリプト」パネルが見にくい場合は、【編集>>】ボタンをクリックし、スクリプトエディターで開くことができます。
- ■ 解説
-
- 要点1
- function pcmDateAttriTrans(fTitle)
[プロジェクトエキスパート]-[スクリプト]パネルにfunction ○○()とスクリプトを記述すると、コマンド”○○”として実行できます。
fTitleはコマンドの第一パラメーターで、日付時刻型フィールドのタイトルを指定します。
ここでは、コマンド”pcmDateAttriTrans△更新日付”(△は半角スペース)と入力すれば、実行できます。
- 要点2
- if(GetNumOfParams() != 1){
コマンドパラメーター数が1つか確認します。
1つでなければ、「パラメーターを指定してください。」メッセージをウィンドウ表示して、処理を中止します。
- 要点3
- if(fTitle == ""){
第一パラメーターが空欄ではないか確認します。
空欄であれば、「第一パラメーターに誤りがあります。」メッセージをウィンドウ表示して、処理を中止します。
- 要点4
- for(var i = 0; i < prj.GetNumofLayer(); i++){
var lyr = prj.GetLayer(i, true);
if(lyr.IsCurrent() || lyr.Status == 1){
プロジェクトに登録されているレイヤー数を取得し、登録順にレイヤーオブジェクトを取得します。
そのレイヤーが前景レイヤーまたは表示レイヤーであれば、処理を行います。非表示レイヤーであれば、処理を行いません。
- 要点5
- for(var ii = 1; ii <= 4; ii++){
var db = lyr.GetDb(ii);
var fid = db.FindField(fTitle);
if(fid == -1){
レイヤーオブジェクトからアーク(1)・ノード(2)・ポリゴン(3)・ポイント(4)の順に内部属性データベースオブジェクトを取得します。
内部属性データベースに第一パラメーターで取得したフィールドタイトルの有無を確認します。
フィールドがなければ、処理を行いません。
- 要点6
- for(var iii = 1; iii <= db.GetNumofRec(); iii++){
if(db.IsValidRec(iii)){
var dt = db.GetCellData(iii, fid, false);
date = dt.DateTime32;
var temp = lyr.TimeSet(ii, iii, date);
全レコード(ベクター)に対して、Pcm.PcmAutoPcmDbClass:GetCellData()メソッドから日付時刻型フィールドの値を日付時刻型オブジェクトで取得し、Pcm.PcmAutoDateTimeClass:DateTime32プロパティから整数型シリアル日付時刻に変換した値を取得、Pcm.PcmAutoPcmLayerClass:TimeSet()メソッドからその値をベクター固有属性「更新日付」へ設定します。
- 要点7
- var mf = GetMainFrame();
var ob = mf.GetOutputbar();
var mw = ob.GetMessageWnd();
var temp = mw.AddText(msg);
処理結果をアウトプットバー「メッセージ」パネルへ出力します。
例えば、「画地」レイヤーノード内部属性「更新日付」フィールドがなければ、「「画地」レイヤーノード内部属性「更新日付」フィールドがありません。」メッセージをアウトプットバー「メッセージ」パネルへ出力します。
また、「画地」レイヤーアーク内部属性「更新日付」フィールドがあれば、「「画地」レイヤーアーク内部属性「更新日付」フィールドの日付を固有属性へ設定しました。」メッセージをアウトプットバー「メッセージ」パネルへ出力します。
- 要点8
- function strType(vecType){
ベクター番号”1”〜”4”からベクター名称”アーク”・”ノード”・”ポリゴン”・”ポイント”を取得します。
- ■ 実行
- 本サンプルJavaScriptは、前景または表示レイヤーを対象に、アーク・ノード・ポリゴン・ポイント内部属性に「更新日付」フィールドが存在する場合、そのフィールドに入力されている日付をアーク・ノード・ポリゴン・ポイントの固有属性「更新日付」へ設定します。
- ベクターウィンドウをアクティブにします。
- [属性]-[属性照会]-ベクター属性照会を実行し、「画地」レイヤーアーク・ポリゴン・ポイント固有属性「更新日付」をご確認ください。
ここでは、”2026/11/5”とします。
- コマンドラインバーが表示されているか確認します。
表示されていなければ、[ワークスペース]-[コマンドバー]-[コマンドラインバー]を実行します。
- コマンド「pcmDateAttriTrans△更新日付」と記述し、実行します(アルファベットは半角大文字・小文字、△は半角スペース)。
- アウトプットバーが表示されているか確認します。
表示されていなければ、[ワークスペース]-[コマンドバー]-[アウトプットバー]を実行します。
- 処理結果がアウトプットバー「メッセージ」パネルへ出力されていることをご確認ください。
- また、[属性]-[属性照会]-ベクター属性照会を実行し、ベクター内部属性「更新日付」フィールドの日付が「画地」レイヤーアーク・ポリゴン・ポイント固有属性「更新日付」へ設定されていることをご確認ください。

|