[OSGeoJapan-discuss] QGISでspatialiteの地物をコピーした時

喜多耕一 kou35tochas @ gmail.com
2016年 10月 20日 (木) 00:21:55 PDT


福田さま

喜多です。
原因がわかりました。
データをレイヤに追加するとき、Spatialiteレイヤの追加でなく、ベクタレイヤの追加もしくはドラッグ&ドロップで追加した場合、主キーがそのままコピーされます。
Spatialiteレイヤの追加で追加すると、主キーがNULLでコピーされます。

ありがとうございました。

北海道 喜多耕一

2016/10/20 9:16 "Yoh Fukuda" <yoh.fukuda @ gmail.com>:

> 喜多さま
>
> 福田です。
>
> 添付画像を拝見しました。当方では、地物をコピー&ペーストすると、
> 編集モードの間はPK_UIDがNULLの状態でレコードが挿入され、
> その後編集モードを解除して保存した段階でキーが更新されます。
> (添付画像)
>
> ペーストしたレコードは常に最終行の下に追加されるのですが、
> 喜多さんの画像を拝見すると、コピーしたレコードのすぐ下に挿入
> されているようですね。。
>
> 経験的に、SpatiaLite/SQLiteのレイヤに対してQGIS側で地物の
> コピーなど、データベースにレコードを 追加する際には、自動的に主
> キーはNULLにするようになっていると思うので、喜多さんの現象は
> 環境によるバグなのかもしれません。
>
> 現状では、コピーした地物のPK_UIDを削除するしかなさそうですね。
>
>
> そうかもしれません。
> それほど地物数が多くないようでしたら、一時的に主キーのないテーブル
> を作成して、一通り編集が完了したら再度主キーを持つテーブルに
> 戻す、ということも可能ではあります。
>
> ちなみにレコードを挿入するときに、トリガーを使って自動的にPK_UIDを
> NULLにできるかな、と思って試してみたのですが、そうすると逆に更新を
> 保存してもNULLになってしまいました^^;
>
>
> 福田 陽一朗
>
>
> 2016年10月19日 22:36 喜多耕一 <kou35tochas @ gmail.com>:
>
>> 福田さん
>>
>> 喜多です。
>> 返信ありがとうござます。
>>
>> 推察の通り、Spatialite-guiで変換したSpatialiteレイヤです。
>> 自宅でも試してみましたが、地物をコピーしたら、やはりPK_UIDが同じになってしまって、
>> そのままでは保存することができません。(添付を参照)
>> PK_UIDを削除して(NULLにして)保存すると、自動で番号が入力されます。
>> 地物のコピーは同じレイヤ内で地物をコピーして貼り付けています。
>>
>> リングの充填では、新しいポリゴンができると、
>> 元の地物と同じ属性データが自動的に入力された地物が、リングの中にできます。
>>
>> 現状では、コピーした地物のPK_UIDを削除するしかなさそうですね。
>>
>> 主キーがないと、処理が重くなるんですね。
>> 了解しました。
>>
>> QGISは2.16.3 32bit、64bit両方で行っています。
>>
>>
>>
>> 北海道 喜多耕一
>>
>>
>> 2016年10月19日 21:41 Yoh Fukuda <yoh.fukuda @ gmail.com>:
>>
>> 喜多さま
>>>
>>> こんにちは。福田です。
>>>
>>> リングの充填は経験がないのですが、当方の環境では地物のコピーは
>>> 行うことができています。
>>> (Win10、QGIS2.16.2-62bit、SpatiaLiteバージョン4.3.0)
>>>
>>> 元のデータは、SpatiaLite-guiでshpをインポートしたものでしょうか。
>>> (PK_UIDという主キー名からしてそうではないかな…と思うのですが、)
>>> それとも、別の方法でインポートしたものでしょうか。
>>>
>>> 通常は、主キーにAUTOINCREMENTというオプションが指定されている
>>> ので、地物をコピーした際に、自動的に新しいIDが付与されて、重複しない
>>> ようになっている、、と思います。
>>>
>>> ちなみに、
>>>
>>> Spatialiteでは、必ずユニークな主キーが必要なのでしょうか?
>>>
>>>
>>> については、ユニークな主キーがなくてもジオメトリを持つテーブルとして
>>> 扱うことができます。同様に、QGISへ読み込むことができます。
>>> ただし、表示や処理がとても重くなります。
>>>
>>>
>>> 福田 陽一朗
>>>
>>> 2016年10月19日 18:12 喜多耕一 <kou35tochas @ gmail.com>:
>>>
>>>> みなさま
>>>>
>>>> いつもお世話になっています。北海道の喜多です。
>>>> QGISでSpatialite使おうとしていますが、地物をコピーした時や、リングの充填を行ったときに、主キーである「PK
>>>> _UID」がダブってしまい、データを保存することができません。
>>>> Spatialiteでは、必ずユニークな主キーが必要なのでしょうか?
>>>> または、地物のコピーなどでも「PK_UID」を自動で更新される設定はありますか?
>>>>
>>>> よろしくお願いします。
>>>>
>>>> 北海道 喜多耕一
>>>>
>>>> _______________________________________________
>>>> OSGeoJapan-discuss mailing list
>>>> OSGeoJapan-discuss @ lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>>>>
>>>
>>>
>>
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20161020/78f0691c/attachment.html>


OSGeoJapan-discuss メーリングリストの案内