Gibt es eine Möglichkeit zur automatischen Inkrementierung der ID-Spalte in QGIS


22

Ich erstelle eine fiktive Karte und muss daher viele Punkte, Linien und mit Sicherheit Polygone erstellen. Später exportiere ich meine Daten als Geojson. Aber vorher muss ich immer jedem Element eine eindeutige ID geben.

Ich brauche keine spezielle Sortierung, da das größte Polygon die kleinste ID erhält oder so. Ich habe gerade brauchen alle Polygone mit einer ID am Ende, ohne dabei es von Hand , wie ich jetzt zu tun haben.

Wäre toll, wenn jemand weiß, wie man das macht.


Verwenden Sie Shapefiles? Müssen die IDs nach jedem Export gleich sein, oder können Sie das ID-Feld nach jeder Editiersitzung ausfüllen?
DPSSpatial,

Wie erstellen Sie die Polygone aus einem Skript, digitalisieren im QGIS-Desktop oder kopieren sie aus einem Shapefile usw.?
Landocalrissian

Nun, ich erstelle eine Form in QGIS, speichere als Geojson und es ist in Ordnung. Tut mir leid, vielleicht habe ich Ihre Frage falsch verstanden?
KWOXER

Antworten:


26

Die Verwendung des Feldrechners ist der richtige Weg:

In wurde kein Ausweis angegeben

  1. Digitalisieren Sie alle Funktionen, ohne eine ID einzugeben.
  2. Aktualisieren Sie vor dem Export eindeutige IDs mit dem Ausdruck '$ Id' mithilfe des Feldrechners.

Kein Ausweis angegeben

Einige Ausweise sind bereits in angegeben

  1. Wenn Sie bereits IDs haben, können Sie '- $ Id' verwenden. Stellen Sie sicher, dass Sie nur neue Features auswählen, was bedeutet, dass diese in der ID-Zeile "NULL" sind. Tun Sie dies einfach, indem Sie die Säule bestellen.
  2. Führen Sie nun die Schritte aus den Bildern aus:

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben


Ja, großartig. Super einfach und funktioniert einwandfrei. Danke, Mann. Übrigens: Vielleicht wissen Sie, wie Sie das auch an bereits vorhandenen Ausweisen machen können?
Wenn

Fand eine Lösung und fügte sie Ihrem Beitrag hinzu. Danke noch einmal.
kwoxer

6

Halleluja! Oder Eureka. Oder Wasauchimmer. Das kann gemacht werden. Mit einem Shapefile.

  1. Wenn noch keines vorhanden ist, fügen Sie ein Feld mit der Feature-ID "FID" vom Typ Ganze Zahl (Ganzzahl) hinzu .
  2. Öffnen Sie die Ebeneneigenschaften (klicken Sie mit der rechten Maustaste auf die Ebene und wählen Sie Eigenschaften ... oder doppelklicken Sie auf die Ebene), klicken Sie auf die Registerkarte Attributes Form und deaktivieren Sie unter General die Option Editable und unter Defaults im Feld Default value type maximum("FID") + 1.

Wenn Sie das Kontrollkästchen "Bearbeitbar" deaktivieren , können Sie keinen anderen Wert eingeben oder löschen, was sich dort befindet. Beachten Sie, dass Werte ohne ID nicht aktualisiert werden. Irgendwann experimentiere ich mit dem Kontrollkästchen Standardwert beim Aktualisieren anwenden und meine Formel überarbeiten, um zu prüfen, ob beim Bearbeiten nur diese Datensätze auf Null oder NULL aktualisiert werden Nachträglich wurde besprochen, wie das FID-Feld mit eindeutigen Werten aktualisiert werden kann. Dies müssen Sie tun, wenn Sie das Feld hinzugefügt haben, nachdem bereits Features im Shapefile vorhanden waren.)

Beachten Sie, dass dies mit der aktuellen Kartendatei und nicht mit dem Shapefile gespeichert wird. Wenn Sie dieses Shapefile also mehrmals hinzufügen, müssen Sie diesen Teil des Ebenenstils in die neu hinzugefügte Ebene kopieren. Klicken Sie dazu mit der rechten Maustaste auf die Ebene, wählen Sie „ Stile“> „Stil kopieren“> „Felder“ und klicken Sie mit der rechten Maustaste auf eine andere Ebene, wählen Sie „ Stile“> „Stil einfügen“> „Alle Stilkategorien“ (oder fahren Sie mit „ Felder“ fort ). Sie können diesen Teil des Stils auch auf jeder anderen Ebene kopieren, die auf einem Shapefile basiert. Das ID-Feld muss jedoch denselben Namen haben wie die Ebene, von der Sie kopieren.

Schichteigenschaften


Beachten Sie, dass Sie hierfür mindestens ein Feature erstellen und dessen FID eingeben müssen, bevor Sie das Attribut Formular Standardwert ändern. Andernfalls erhalten Sie eine NULL-FID.
Techie_Gus

4

Dieses Thema wurde hier behandelt: Shapefile mit automatischem Inkrementieren des Primärschlüssels in QGIS erstellen

Meine Vorschläge wären:

1) SQLITE / SpatialLite-Datenbanken unterstützen das automatische Inkrementieren in einem Feld, das auf INTEGER PRIMARY KEY festgelegt ist:

Wenn bei einem INSERT der Spalte ROWID oder INTEGER PRIMARY KEY kein expliziter Wert zugewiesen wird, wird dieser automatisch mit einer nicht verwendeten Ganzzahl gefüllt, normalerweise derjenigen, die größer ist als die derzeit verwendete größte ROWID. Dies gilt unabhängig davon, ob das Schlüsselwort AUTOINCREMENT verwendet wird oder nicht.

Jedes Mal, wenn Sie Polygone bearbeiten / erstellen, können Sie deren Attribute ausfüllen. SQLITE weist ihm in dem Feld, das Sie auf den Typ INTEGER PRIMARY KEY festgelegt haben, einen inkrementellen eindeutigen Wert zu.

Wenn Sie bereit sind, nach GEOJSON zu exportieren, werden Ihre EINZIGARTIGEN IDs festgelegt.

2) Wenn Sie Shapefiles verwenden, erstellen Sie ein OBJECTID-Feld vom Typ INTEGER und füllen Sie dieses Feld jedes Mal mit einem Feldrechnerausdruck aus, wenn Sie Polygone bearbeiten / erstellen und exportieren müssen. Sie verlieren die ursprüngliche ID, die ein Polygon einmal hatte, aber Sie können dies nur mit .SHP erreichen. (Ich muss den Feldrechnerausdruck finden).

PostGIS ist eine weitere Datenquelle, die Sie möglicherweise erkunden möchten. Obwohl es sich eher um eine Schwerfälligkeit als um SQLITE handelt, werden Sie in einem solchen System möglicherweise einen Wert finden, wenn Sie voranschreiten ...


Danke fürs Erklären. Aber ich denke nicht, dass es eine gute Lösung anstelle einer auto_increment-Option direkt im Tool sein wird. Ich habe bereits so viele Datenformate und möchte kein weiteres Tool. Vielleicht sollte ich ein Addon dafür schreiben, wenn ich etwas Zeit habe ...
kwoxer

Es könnte einfacher sein, die .SHP zu verlassen! Wer weiß, auf welche neuen Unternehmungen Sie sich
einlassen werden

4

Ich möchte den Beitrag von vinayan ergänzen und kurz die Rownum- Funktion erwähnen , da sie sehr ähnlich ist und in einigen Fällen etwas praktischer sein könnte.

Bildbeschreibung hier eingeben

id gibt die Feature-ID zurück , dh sie beginnt immer bei null .
rownum gibt die Nummer der Zeile zurück , dh sie beginnt bei eins .

Bildbeschreibung hier eingeben

Wenn Sie also möchten, dass das automatische Inkrement bei 0 beginnt, wählen Sie $ id , und wenn Sie möchten, dass es bei 1 beginnt, wählen Sie $ rownum .


Ausprobiert und auch eine gute Lösung in der Tat. Aber mit dieser Lösung hier, wenn Sie bereits einige IDs haben und diese behalten möchten, ist die Rownum-Funktion nicht gut. Diese Funktion beginnt immer mit 1. Der obige Weg zählt viel intelligenter, auch wenn es schwieriger ist, sie einzurichten. Also danke für die Alternative, aber im
Moment

2

Ein alter Beitrag, aber für alle anderen, die nach einer schnellen Lösung suchten, war es, ein Feld mit $ ID + 1 zu erstellen, und es wird automatisch ab 1 generiert!


2

Update für QGIS 3

Ich weiß, dass ich ziemlich spät dran bin, aber es ist immer gut, Updates zu geben:

In QGIS 3 gibt es jetzt ein natives Tool, mit dem genau diese Aufgabe erledigt werden kann. Es heißt "Autoinkrementelles Feld hinzufügen".

Es ist nicht erforderlich, einen Ausdruck im Feldrechner zu verwenden oder eine Codierung vorzunehmen, aber dennoch sind diese alle sehr nützlich und gut zu wissen.

Bildbeschreibung hier eingeben


1

Am einfachsten geht das wahrscheinlich mit einem Python-Skript oder mit dem Feldrechner. Tut mir leid, ich habe keine für dich, vielleicht wird es jemand anderes tun. In der Zwischenzeit würde ich nach einem Python-Skript dafür suchen. Für ArcGIS habe ich viel darüber gesehen, aber ich bin sicher, dass es für QGIS etwas gibt.


Naja am besten wäre, wenn es wirklich nichts gibt, eine Feature-Anfrage. Ich möchte kein zusätzliches Python-Skript zu QGIS, auch wenn es sich möglicherweise um eine Ein-Klick-Lösung handelt. Aber danke.
KWOXER

1

Wenn Sie etwas nicht für Menschen Verdauliches benötigen, gibt es jetzt eine einfache Lösung: Wählen Sie in den Feldeigenschaften "UUID-Generator" und lassen Sie alles leer.

Dadurch wird automatisch eine UUID im Feld erstellt. Nicht so freundlich wie eine einfache Zahl (gemäß $ id oder $ rownum), sondern generiert die UUID von Anfang an, also keine aufeinander folgenden Schritte.Bildbeschreibung hier eingeben


0

Ich möchte hinzufügen, dass dies nicht funktioniert, wenn Sie PostgreSQL-Datenbankebenen verwenden. $ ID und $ rownum geben jeweils 0 zurück. PostgreSQL 9.6 QGIS 2.18.12


0

Diese Lösungen funktionierten in QGIS 2.01 Dufour nicht mehr. Eingabe $idauf ein neues oder bestehendes Feld mit dem Namen ‚id‘ in dem Ausdruck Eingabefeld gab mir einen Fehler „Ausdruck ist ungültig“

Was funktionierte, war, die Funktion $rownumeinzugeben und dann auf "OK" zu klicken.

Bildbeschreibung hier eingeben


0

Sie können einfach die erste Spalte (ID) löschen und eine neue "Als virtuelles Feld" erstellen. Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.