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

Yoh Fukuda yoh.fukuda @ gmail.com
2016年 10月 20日 (木) 03:16:26 PDT


喜多さま

福田です。

なるほど、レイヤの追加方法の問題だったのですね。

「SpatiaLiteレイヤの追加」から追加するのが当たり前に
なっていて、思い至りませんでした。。。


福田 陽一朗

2016年10月20日 16:21 喜多耕一 <kou35tochas @ gmail.com>:

> 福田さま
>
> 喜多です。
> 原因がわかりました。
> データをレイヤに追加するとき、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/9367ddb3/attachment-0001.html>


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