QGISのID列にauto_incrementの方法はありますか


22

架空のマップを作成しているので、たくさんのポイント、ライン、そして確かにポリゴンを作成する必要があります。その後、データをgeojsonとしてエクスポートします。しかしその前に、私は離れてすべての要素に一意のIDを与えなければなりません。

最大のポリゴンが最小のIDを取得するなど、特別な並べ替えは必要ありません。私は必要なすべてのポリゴン IDを、終わりにせずに やって、それを手動で私が今しなければならないように。

誰かがそれを行う方法を知っていれば素晴らしいでしょう。


シェープファイルを使用していますか?IDはすべてのエクスポート後に同じである必要がありますか、またはすべての編集セッション後にIDフィールドに入力できますか?
DPSSpatial

スクリプトからポリゴンを作成する方法、QGISデスクトップでデジタル化する方法、またはシェープファイルなどからコピーする方法は?
-landocalrissian

さて、QGISで図形を作成し、Geojsonとして保存すれば問題ありません。申し訳ありませんが、私はあなたの質問を間違った方法で受け取りましたか?
kwoxer

回答:


26

フィールド計算機を使用する方法があります:

にIDは与えられませんでした

  1. IDを入力せずにすべての機能をデジタル化します。
  2. エクスポートする前に、フィールド計算機を使用して式「$ Id」で一意のIDを更新します。

IDなし

一部のIDは既に指定されています

  1. 既にIDがある場合は、「-$ Id」を使用できます。idの行が「NULL」であることを意味する新しい機能を選択していることを確認してください。単に列を注文することでそれを行います。
  2. 次に、写真から手順を実行します。

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


うん、すごい。超簡単で適切に動作します。ありがとう。ところで:多分あなたはすでにいくつかの既存のIDでそれを行う方法を知っていますか?これを行うと、-2 -3などを取得します
kwoxer

ソリューションを見つけて、投稿に追加しました。再度、感謝します。
kwoxer

6

ハレルヤ!またはユーレカ。または何でも。これを行うことができます。シェープファイル付き。

  1. まだない場合は、整数型の機能ID(「FID」など)を含むフィールドを追加します。
  2. オープンレイヤープロパティ(レイヤー上で右クリックして、[ プロパティ]を...またはレイヤーをダブルクリック)、をクリックしてフォームの属性、その後の下、タブを一般的なチェックを外し編集可能と下のデフォルトのフィールドでデフォルト値タイプmaximum("FID") + 1

[ 編集可能]のチェックを外すと、別の値を入力したり、そこにあるものを削除したりできません。IDのない値がある場合、これらの値は更新されないことに注意してください。ある時点で、更新時にデフォルト値を適用をチェックし、式を修正してゼロまたはNULL値をチェックして、編集時にそれらのレコードのみを更新し、値が1より大きいレコードは更新しないようにします。一意の値でFIDフィールドを更新する方法について説明しました。シェープファイルに既に機能があった後にフィールドを追加した場合は、これを行う必要があります。

これは、シェープファイルではなく現在のマップファイルと共に保存されるため、シェープファイルを複数回追加するには、レイヤースタイルのその部分を新しく追加したレイヤーにコピーする必要があります。、層の上にこの、右クリックを行う選択するにはスタイル>スタイルのコピー>フィールド別の層の上に、そして右クリックし、選択したスタイルを>スタイル>すべてのスタイルカテゴリーを貼り付け(またはに進みフィールド)。スタイルのその部分をシェープファイルに基づいて他のレイヤーにコピーすることもできますが、IDフィールドにはコピー元のレイヤーと同じ名前を付ける必要があります。

レイヤーのプロパティ


これが機能するには、少なくとも1つの機能を作成し、そのFIDを入力してから、属性値をデフォルト値から変更する必要があることに注意してください。そうしないと、NULL FIDになってしまいます。
Techie_Gus

5

vinayanの投稿に追加し、rownum関数について簡単に説明します。これは非常によく似ており、場合によってはもう少し便利かもしれないからです。

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

id Feature IDを返します。つまり、常に 0から始まります
rownumは、行番号を返します。つまり、 1から始まります。

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

したがって、基本的に、自動インクリメントを0から開始する場合は$ idに進み、1から開始する場合は$ rownumに進みます。


試してみましたが、確かに良い解決策でもありました。ただし、このソリューションでは、すでにいくつかのIDがあり、それらを保持したい場合、rownum関数は適切ではありません。その関数は常に1で始まります。上記の方法は、セットアップがより困難であっても、よりインテリジェントな方法を数えています。代替案に感謝しますが、今のところはID関数が私の
好みの

4

このトピックはここに来ました:QGISで自動増分主キーでシェープファイルを作成します

私の提案は次のとおりです。

1)SQLITE / SpatialLiteデータベースは、INTEGER PRIMARY KEYに設定されたフィールドでの自動インクリメントをサポートしています。

INSERTで、ROWIDまたはINTEGER PRIMARY KEY列に明示的に値が指定されていない場合、通常は現在使用されている最大のROWIDよりも大きい未使用の整数が自動的に入力されます。これは、AUTOINCREMENTキーワードが使用されているかどうかに関係なく当てはまります。

ポリゴンを編集/作成するたびに、その属性を入力することができます。SQLITEは、INTEGER PRIMARY KEYタイプに設定したフィールドに増分の一意の値を与えます。

GEOJSONにエクスポートする準備ができたら、すべて一意のIDが設定されています。

2)シェープファイルを使用する場合、INTEGERタイプのOBJECTIDフィールドを作成し、フィールド計算式を使用して、ポリゴンを編集/作成し、エクスポートする必要があるたびにそのフィールドに入力します。ポリゴンにあった元のIDは失われますが、これは.SHPを使用してこれを達成する唯一の方法です。(フィールド計算式を見つける必要があります)。

PostGISは、探索したい別のデータソースです。SQLITEよりもかなり重要ですが、このようなシステムに価値を見いだすことができます。


説明してくれてありがとう。しかし、ツールで直接auto_incrementオプションを使用するのではなく、良い解決策になるとは思いません。私はすでに非常に多くのデータ形式を持っているので、さらに別のツールは必要ありません。時間があれば、そのためのアドオンを書くべきかもしれません
...-kwoxer

.SHPを放棄する方が簡単かもしれません!誰が新しいベンチャーがあなたを連れて行くかを知っています
...-DPSSpatial

2

古い投稿ですが、スピーディなソリューションを探している他の人にとっては、$ ID + 1のフィールドを作成することで、1から自動的に生成されます!


2

QGIS 3の更新

私はこれにかなり遅れていることを知っていますが、アップデートを提供するのは常に良いです:

QGIS 3には、この正確なジョブを実行するために使用できるネイティブツールがあり、「自動増分フィールドの追加」と呼ばれます。

フィールド計算機で式を使用したり、コーディングをしたりする必要はありませんが、それでもこれらはすべて非常に便利で知っておくと便利です。

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


1

これを行う最も簡単な方法は、おそらくpythonスクリプトを使用するか、フィールド計算機を使用することです。申し訳ありませんが、私はあなたのためにそれを持っていません、多分他の誰かがそうするでしょう。それまでは、Pythonスクリプトを検索しました。ArcGISでこれについて多くのことを見てきましたが、QGISには何かがあると確信しています。


本当に何もない場合は、機能のリクエストが最適です。ワンクリックソリューションである可能性がある場合も、QGISにPythonスクリプトを追加したくありません。でもありがとう。
-kwoxer

1

人間が消化できるものが必要ない場合は、簡単な修正があります。フィールドプロパティで、[UUID Generator]を選択し、すべて空白のままにします。

これにより、フィールドにUUIDが自動的に作成されます。($ idや$ rownumのように)単純な数字ほどフレンドリーではありませんが、最初からUUIDを生成するため、連続したステップはありません。ここに画像の説明を入力してください


0

postgreSQLデータベースレイヤーを使用している場合、これが機能しないように見えることを付け加えます。$ IDと$ rownumはすべて0を返します。PostgreSQL9.6 QGIS 2.18.12


0

これらのソリューションは、QGIS 2.01 Dufourではもはや機能しませんでした。タイピング$id式入力欄に「ID」という名前の新規または既存のフィールドには、「式が無効である」私にエラーを与えました

機能$rownumしたのは、関数を入力して[OK]をクリックすることでした

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


0

最初の列(id)を削除して、「仮想フィールドとして」新しい列を作成できます。 ここに画像の説明を入力してください ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.