[OSGeoJapan-discuss] 【質問】QGISのshapeファイル:既存+新しく地物を追加した際に自動的にユニークIDが入力される方法(uuid()以外でもあるでしょうか?)
Junta TAGUSARI
j.tagusari @ eng.hokudai.ac.jp
2023年 11月 12日 (日) 22:35:40 PST
藤田様
自動で採番する方法,など考えてもみなかったので,逆に勉強になっています。
たとえば,整数フィールドnに連番を入れるなら,次のようにすれば良いようです。
IF(maximum("n") is NULL, 1 , maximum("n") + 1)
qgis - Unable to get correct @row_number in Attribute Table - Geographic
Information Systems Stack Exchange
<https://gis.stackexchange.com/questions/359757/unable-to-get-correct-row-number-in-attribute-table>
ただ,この方法は,お気づきの通り,レイヤが複数存在すると,同じ連番の地物が複数出てきます。
レイヤが複数あるならば,uuid等のハッシュを使った方が安全です。
ちなみに,タイムスタンプを組み合わせることで,uuidの衝突リスクはさらに下げることができますね。
(タイムスタンプのみを使ったためか衝突が大問題になったのが,例のマイナンバーカードでした。)
たとえば,次のようにyyMMddとuuid(の一部)をidに使うことにすれば,年月日が異なる場合の衝突は100%防げます。
uuidは3桁もあれば十分かもしれません。
concat(format_date(now(),'yyMMdd'),right(left(uuid(),4),3))
色々な方法,何が良いかは,ケースバイケースかと思います。
ご参考になれば。
田鎖
On 2023/11/13 15:11, 藤田卓 (OSGeoJapan-discuss 経由) wrote:
> かやまさま
>
> 早速アドバイスいただきありがとうございます
> 藤田です
>
> >ベクタのレイヤを作成した後 プロセッシングツールボックス ->
> ベクタテーブル -> 自動インクリメント属性を追加 で可能かもしれません。
> >https://docs.qgis.org/3.28/ja/docs/user_manual/processing_algs/qgis/vectortable.html#qgisaddautoincrementalfield
>
> ありがとうございます
> ご教授いただいた方法では、ベクタの新しい地物を追加する度に毎回、
> 「 ベクタのレイヤを作成した後 プロセッシングツールボックス ->
> ベクタテーブル -> 自動インクリメント属性を追加 」を実行して
> 出力してSHAPEを作成する必要があるということですね
>
> この場合は、過去に作成していた地物のIDは、変わらず、同じIDが付与することも可能ということでしょうか
> (編集の際は、地物の追加だけでなく、過去に作成した地物を削除、または過去に作成していた地物を編集する場合もある(IDはそのままにしたい)したりすることもありますが、過去のIDはそれぞれ引き継ぐもしく、削除した地物のIDは復活しないとしたいです)
>
> たびたびのお伺いとなってしまい申し訳ございません
>
> 2023年11月13日(月) 13:58 Yoichi Kayama <yoichi.kayama @ gmail.com>:
>
> 藤田様
>
> ベクタのレイヤを作成した後 プロセッシングツールボックス ->
> ベクタテーブル -> 自動インクリメント属性を追加 で可能かもしれません。
>
> https://docs.qgis.org/3.28/ja/docs/user_manual/processing_algs/qgis/vectortable.html#qgisaddautoincrementalfield
>
> 2023年11月13日(月) 12:39 藤田卓 (OSGeoJapan-discuss 経由)
> <osgeojapan-discuss @ lists.osgeo.org>:
>
> みなさま
>
> 日本自然保護協会の藤田と申します。
> QGISについて1つ教えていただきたいことがあり、ご連絡いたしました。
>
>
>
> *【質問】*
> QGISでshapeファイルのユニークID(地物毎に固有の値)を作成する際に、
> 既存の地物だけでなく、新しく地物を追加した際に自動的にユニークIDが入力される方法
> として、
>
> uuid() を使用する方法があるようですが
> *uuid() 以外の 関数を用いて自動でユニークIDを入力できる方法はないでしょうか*
> (もしくは uuid() を38文字より縮めるなどができるか?)
>
> *【質問した理由】*
> _uuid()の場合、IDが38文字と長いため、ファイルサイズが大きくなる、扱いがやや面倒との懸念もあり_
> $idなど、6~10桁などの数値など短いIDでユニークIDを自動生成できる方法で
> 新しく地物を追加した際に自動的にユニークIDを 追加できないかと考えております
>
>
> アドバイスいただけましたら幸いです
>
>
>
>
>
>
> 藤田卓 / Dr. Taku FUJITA
> (理学博士・ 技術士(環境部門)
> *公益財団法人 日本自然保護協会(NACS-J**)*
> *生物多様性保全部*
> fujita @ nacsj.or.jp | https://www.nacsj.or.jp/
> TEL: 03-3553-4101 (代表)
> 〒104-0033 東京都中央区新川1-16-10 ミトヨビル2F
> *★70周年キャンペーン★ **https://www.nacsj.or.jp/activist
> <https://www.nacsj.or.jp/activist>*
> FB <https://www.facebook.com/NACSJ>TW
> <https://twitter.com/NACSJ>Instagram
> <https://www.instagram.com/nacsj_official/>Youtube
> <https://www.youtube.com/channel/UClUy3wg5i1qB1GYT6YxRTDQ>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>
>
>
> --
>
>
>
>
>
> 藤田卓 / Dr. Taku FUJITA
> (理学博士・ 技術士(環境部門)
> *公益財団法人 日本自然保護協会(NACS-J**)*
> *生物多様性保全部*
> fujita @ nacsj.or.jp | https://www.nacsj.or.jp/
> TEL: 03-3553-4101 (代表)
> 〒104-0033 東京都中央区新川1-16-10 ミトヨビル2F
> *★70周年キャンペーン★ **https://www.nacsj.or.jp/activist
> <https://www.nacsj.or.jp/activist>*
> FB <https://www.facebook.com/NACSJ>TW
> <https://twitter.com/NACSJ>Instagram
> <https://www.instagram.com/nacsj_official/>Youtube
> <https://www.youtube.com/channel/UClUy3wg5i1qB1GYT6YxRTDQ>
>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20231113/470895fd/attachment-0001.htm>
OSGeoJapan-discuss メーリングリストの案内