QGISで自動更新された日付と時刻フィールドを作成しますか?


8

yyyy-mm-dd 00:00:00(= 2016-05-08 11:04:00) -ローカルの日付/時刻の形式で属性フィールドを編集するときに、日付と時刻を更新するフィールドを作成します。データは次のスクリーンショットのように、QGIS 2.14シェープファイルとベクターラインにあります。

「名前」フィールドにNULLとしての機能は、私はデ受け取らなければならない道路と「MOD」フィールドの名前を入力したい場合は、MOD「2016年5月8日夜3時16分00秒」のようなified日付/時刻を。

私はすでにいくつかのオプションを試しましたが失敗しました。最初から始めるには手助けが必要です。

  1. 日付/時刻型の新しいフィールドを作成しましたが、「名前」フィールドまたはそれ自体の機能で、編集後もNULL値のままです。
  2. 式now()も使用しましたが、編集後もNULL値のままです。

注:そこに表示される日付、2016-04-14は「フィールド計算」で作成された最初の値です。

ここに画像の説明を入力してください

QGIS 2.14を使用しています。


質問を編集して、使用しているソフトウェアのデータ形式とバージョンを指定してください。ターゲット列のデータ型も指定する必要があります(日付フィールドには形式がないため)
Vince

してください質問を編集し、要求された情報を格納します。あなたは、詳細あなたは試してみましたがどうあるべきか、そしてまさにそれが失敗しましたか。これは、ボランティアがあなたが達成しようとしていることを理解するのに役立ちます。現状では、ソリューションを推測するだけの十分な情報がありません。DB2の自動入力列がニーズを満たしていないと想像しています。
ビンス

機能の最後の編集/更新のタイムスタンプを属性に保存したい場合、私には聞こえますか?ESRIが「エディタートラッキング」と呼んでいるようなものですか?
Jochen Schwarze

2
では、どのような種類のデータプロバイダーを使用していますか(図形、郵便番号など)、ところで3桁の月は入力エラーですか、それとも2016-may-08のようなものが必要ですか?おそらく、postgesqlで「QgsVectorLayer」または「UPDATE」トリガーの「beforeCommitChanges」信号をキャッチすると、成功する可能性があります。
Jochen Schwarze

1
シェープファイルは、タイムスタンプの悲惨なデータ形式です。dBaseがサポートするのは日の解決だけだからです(実際にはNULLもサポートしていません)。この情報には文字列を使用する必要があります(その後、さらに使用するために解析する必要があります)
Vince

回答:


12

attributeValueChangedイベントを関数に接続する次のコードを使用して、$now式の結果を挿入する関数を定義できます。レイヤーを強調表示し、以下をコピーしてPythonコンソールに貼り付けます。

layer = qgis.utils.iface.activeLayer()

def update():
    field = layer.fieldNameIndex('mod')
    e = QgsExpression( " $now " )
    e.prepare( layer.pendingFields() )
    for feat in layer.selectedFeatures():
        feat[field] = e.evaluate( feat )
        layer.updateFeature( feat )

layer.attributeValueChanged.connect(update)

(画像中の赤色のボックスに示されている)行番号をクリックするか、マップキャンバスとeditから機能を選択し、任意のそのフィーチャの属性。modフィールドの属性が更新されます。

結果


注:時間を取得するために、日付の代わりに文字列フィールドを使用しました。それ以外の場合、日付フィールドはYYYY-MM-DDのみを記録します。


@CarlosPires-大歓迎です!それがお役に立てば幸いです:)
ジョセフ

新しいテキストstring(20)フィールド 'mod' (1を参照)を作成し、コードをPythonコンソールに貼り付け(ctrl-alt-Pの後)、通りの名前 'name'を挿入します(2を参照)、レコードを残しましたが、画面キャプチャーに表示されるように、フィールドはまだNULLです(3を参照。![ScreenshotTry](i.stack.imgur.com/lGR2D.png)。
Carlos Pires、2016年

2
今ではうまくいきます!私はプログラマーではないので、最初にコードを実行したことを知りませんでした!! :(申し訳ありません。 :。。これは、選択ツールと連携属性フィールドは情報ツール(機能を識別)で編集されている場合は、それが仕事をdoesn't
カルロス・ピレス

2
@CarlosPires これにはAutoFieldsプラグインを使用できます。日付と時刻の自動計算の例については、このビデオをご覧ください。識別ツールを使用して値を更新する場合にも機能すると思いますが、確認できますか?
ヘルマン・カリージョ

1
@GermánCarrillo、それは良い選択のようです。後でやってみます。ありがとう。
Carlos Pires

3

プラグインを使用してレコードに加えた日付/タイムスタンプの変更方法を探しているときに、このQ&Aを見つけました。少し変更したバージョンのコードをプラグインに配置して、日付/時刻を変更したレコードに自動的に更新します。

""" Prepare Change Date/Time Stamp"""
e = QgsExpression( " $now " )
cDate = e.evaluate()

"""" Identify column(s) to change and new value(s) to assign"""
attrs = { 10 : newStat, 20 : cDate }

""" Make record change and capture date/time of change'''
layer.dataProvider().changeAttributeValues({ fid : attrs })

技術的にはこれは答えではないようですが、この「答え」はQ&Aの一部として将来の読者に何らかの価値があると思うので、そのままにしておきます。コメントに変換するよりも多くのフォーマットが必要です。私が思っているよりQGISプラグインの作成に近い人がここでコメントを書いて、私または他のモデレーターにpingを送信したい場合、私は却下されてうれしいです。
PolyGeo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.