[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 メーリングリストの案内