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.
Antworten:
Die Verwendung des Feldrechners ist der richtige Weg:
In wurde kein Ausweis angegeben
Einige Ausweise sind bereits in angegeben
quelle
Halleluja! Oder Eureka. Oder Wasauchimmer. Das kann gemacht werden. Mit einem Shapefile.
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.
quelle
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:
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 ...
quelle
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.
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 .
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 .
quelle
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!
quelle
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.
quelle
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.
quelle
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.
quelle
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
quelle
Diese Lösungen funktionierten in QGIS 2.01 Dufour nicht mehr. Eingabe
$id
auf 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
$rownum
einzugeben und dann auf "OK" zu klicken.quelle
Sie können einfach die erste Spalte (ID) löschen und eine neue "Als virtuelles Feld" erstellen.
quelle