サポート > PC-MAPPING ヒント集 > スクリプト > 日付時刻型フィールドの値をベクター固有属性「更新日付」へ設定
日付時刻型フィールドの値をベクター固有属性「更新日付」へ設定
レイヤーのベクター内部属性にある日付時刻型フィールドに入力されている日付を、そのベクター固有属性「更新日付」へ設定するスクリプトをご紹介します。
ここでは、前景または表示レイヤーを対象に、アーク・ノード・ポリゴン・ポイント内部属性に「更新日付」フィールドが存在する場合、そのフィールドに入力されている日付をアーク・ノード・ポリゴン・ポイントの固有属性「更新日付」へ設定しています。
■ サンプル
サンプル[script57.zip(約36KB)]をダウンロードする
sample.pcm:サンプルプロジェクト

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

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

  3. 「C:\sample\script57\sample.pcm」を開きます。

  4. [プロジェクト]-[プロジェクトエキスパート]から「スクリプト」パネルを開きます。

  5. 「スクリプト」パネルは、ウィンドウ右下の角をドラッグ&ドロップし、広げることができます。それでも「スクリプト」パネルが見にくい場合は、【編集>>】ボタンをクリックし、スクリプトエディターで開くことができます。

■ 解説
要点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は、前景または表示レイヤーを対象に、アーク・ノード・ポリゴン・ポイント内部属性に「更新日付」フィールドが存在する場合、そのフィールドに入力されている日付をアーク・ノード・ポリゴン・ポイントの固有属性「更新日付」へ設定します。

  1. ベクターウィンドウをアクティブにします。

  2. [属性]-[属性照会]-ベクター属性照会を実行し、「画地」レイヤーアーク・ポリゴン・ポイント固有属性「更新日付」をご確認ください。
    ここでは、”2026/11/5”とします。

  3. コマンドラインバーが表示されているか確認します。
    表示されていなければ、[ワークスペース]-[コマンドバー]-[コマンドラインバー]を実行します。

  4. コマンド「pcmDateAttriTrans△更新日付」と記述し、実行します(アルファベットは半角大文字・小文字、△は半角スペース)。

  5. アウトプットバーが表示されているか確認します。
    表示されていなければ、[ワークスペース]-[コマンドバー]-[アウトプットバー]を実行します。

  6. 処理結果がアウトプットバー「メッセージ」パネルへ出力されていることをご確認ください。

  7. また、[属性]-[属性照会]-ベクター属性照会を実行し、ベクター内部属性「更新日付」フィールドの日付が「画地」レイヤーアーク・ポリゴン・ポイント固有属性「更新日付」へ設定されていることをご確認ください。