Je crée une carte fictive et j'ai donc besoin de créer beaucoup de points, de lignes et à coup sûr des polygones. Plus tard, j'exporte mes données en tant que geojson. Mais avant cela, je dois toujours aller donner à chaque élément un identifiant unique.
Je n'ai pas besoin d'un tri spécial, comme le plus grand polygone obtient le plus petit ID. Je viens besoin tous les polygones avec un ID à la fin, sans faire cela manuellement comme je dois le faire maintenant.
Ce serait génial si quelqu'un sait comment faire ça.
Réponses:
Utiliser la calculatrice de terrain est la voie à suivre:
Aucune pièce d'identité n'a été donnée dans
Certaines pièces d'identité sont déjà fournies
la source
Alléluia! Ou Eureka. Ou peu importe. Ceci peut être fait. Avec un shapefile.
maximum("FID") + 1
.En décochant Modifiable , vous ne pouvez pas entrer une autre valeur ou supprimer ce qui s'y trouve. Notez que s'il existe des valeurs sans ID, ces valeurs ne seront pas mises à jour. À un moment donné, j'expérimenterai en vérifiant Appliquer la valeur par défaut à la mise à jour et en révisant ma formule pour vérifier une valeur nulle ou NULL pour mettre à jour uniquement ces enregistrements lorsqu'ils sont modifiés, pas n'importe quel enregistrement avec une valeur supérieure à 1. (Plus tôt dans ce après avoir discuté de la façon de mettre à jour le champ FID avec des valeurs uniques, ce que vous devrez faire si vous avez ajouté le champ alors qu'il y avait déjà des fonctionnalités dans le fichier de formes.)
Notez que cela est enregistré avec le fichier de carte actuel, et non le fichier de formes, donc l'ajout de plusieurs fois ce fichier de formes vous obligera à copier cette partie du style de couche dans la couche nouvellement ajoutée. Pour ce faire, cliquez avec le bouton droit sur le calque, choisissez Styles> Copier le style> Champs , puis cliquez avec le bouton droit sur un autre calque, choisissez Styles> Coller le style> Toutes les catégories de styles (ou passez aux champs ). Vous pouvez également copier cette partie du style vers tout autre calque basé sur un fichier de formes, mais le champ ID doit avoir le même nom que le calque à partir duquel vous copiez.
la source
Je voudrais ajouter au post de vinayan et mentionner brièvement la fonction rownum , car elle est très similaire et dans certains cas, pourrait être un peu plus pratique.
id renvoie l' ID de fonctionnalité , ce qui signifie qu'il commence toujours à zéro .
rownum renvoie le numéro de la ligne , ce qui signifie qu'il commence à un .
Donc, fondamentalement, si vous voulez que l'incrémentation automatique démarre à 0, optez pour $ id , et si vous voulez qu'elle démarre à 1, optez pour $ rownum .
la source
Cette rubrique a été soulevée ici: Créer un fichier de formes avec clé primaire d'incrémentation automatique dans QGIS
Mes suggestions seraient:
1) Les bases de données SQLITE / SpatialLite prennent en charge l'incrémentation automatique sur un champ défini sur INTEGER PRIMARY KEY:
Chaque fois que vous modifiez / créez des polygones, vous pouvez remplir leurs attributs, et SQLITE lui donnera une valeur unique incrémentielle dans le champ que vous avez défini sur le type INTEGER PRIMARY KEY.
Lorsque vous êtes prêt à exporter vers GEOJSON, vous êtes prêt à utiliser vos ID UNIQUE.
2) Si vous utilisez des fichiers de formes, créez un champ OBJECTID de type INTEGER et utilisez une expression de calculatrice de champ pour remplir ce champ chaque fois que vous modifiez / créez des polygones et devez les exporter. Vous perdrez l'ID d'origine d'un polygone, mais c'est le seul moyen d'y parvenir en utilisant .SHP. (Je devrai trouver l'expression de la calculatrice de champ).
PostGIS est une autre source de données que vous voudrez peut-être explorer, bien que plus lourde que SQLITE, vous pourriez trouver de la valeur dans un tel système au fur et à mesure ...
la source
Ancien poste, mais pour quiconque cherche une solution rapide, la mienne consiste à créer un champ avec $ ID + 1 et il sera automatiquement généré à partir de 1!
la source
Mise à jour pour QGIS 3
Je sais que je suis assez tard pour cela, mais toujours bon de donner des mises à jour:
Dans QGIS 3, il existe maintenant un outil natif qui peut être utilisé pour faire exactement ce travail et il est appelé "Ajouter un champ auto-incrémental"
Pas besoin d'utiliser une expression dans la calculatrice de champ ou de faire du codage mais néanmoins ceux-ci sont toujours très utiles et bons à savoir.
la source
La façon la plus simple de le faire serait probablement avec un script python ou peut-être que c'est possible avec la calculatrice de terrain. Désolé, je n'en ai pas pour vous, peut-être que quelqu'un d'autre le fera. En attendant, je rechercherais un script python pour cela. J'ai beaucoup vu à ce sujet pour ArcGIS, mais je suis sûr qu'il y a quelque chose pour QGIS.
la source
Si vous n'avez pas besoin de quelque chose de digeste humainement, il existe maintenant une solution simple: Dans les propriétés du champ, sélectionnez "Générateur UUID" et laissez tout vide.
Cela créera automatiquement un UUID sur le terrain. Pas aussi convivial qu'un simple numéro (selon $ id ou $ rownum), mais génère l'UUID dès le début, donc pas d'étapes successives.
la source
Je voudrais ajouter que cela ne semble pas fonctionner lorsque vous utilisez une couche de base de données postgreSQL. $ ID et $ rownum renvoient tous 0. PostgreSQL 9.6 QGIS 2.18.12
la source
ces solutions ne fonctionnaient plus pour moi dans QGIS 2.01 Dufour. Taper
$id
sur un champ nouveau ou existant nommé 'id' dans le champ de saisie d'expression m'a donné une erreur "L'expression n'est pas valide"Ce qui a fonctionné était de taper la fonction
$rownum
puis de cliquer sur "OK"la source
vous pouvez simplement supprimer la première colonne (id) et en créer une nouvelle "En tant que champ virtuel"
la source