Estoy creando un mapa ficticio, por lo que necesito crear muchos puntos, líneas y polígonos seguros. Más tarde exporto mis datos como geojson. Pero antes de eso siempre tengo que ir y darle a cada elemento una identificación única.
No necesito una clasificación especial, ya que el polígono más grande obtiene la identificación más pequeña más o menos. Yo sólo necesito todos los polígonos con un ID al final, sin hacer que manualmente como si tuviera que hacer ahora.
Sería genial si alguien sabe cómo hacerlo.
Respuestas:
Usar la calculadora de campo es el camino a seguir:
No se proporcionó identificación en
Algunas identificaciones ya están dadas en
fuente
¡Aleluya! O a Eureka. O lo que sea. Esto puede hacerse. Con un archivo de forma.
maximum("FID") + 1
.Al desmarcar Editable , no puede ingresar otro valor o eliminar lo que está allí. Tenga en cuenta que si hay valores sin ID, estos valores no se actualizarán. En algún momento experimentaré marcando Aplicar valor predeterminado en la actualización y revisaré mi fórmula para verificar si hay un valor cero o NULO para actualizar solo esos registros cuando se editan, no cualquier registro con un valor mayor que 1. (Anteriormente en este después se discutió cómo actualizar el campo FID con valores únicos, lo que deberá hacer si agregó el campo después de que ya había características en el archivo de forma).
Tenga en cuenta que esto se guarda con el archivo de mapa actual, no con el archivo de forma, por lo que agregar ese archivo de forma varias veces requerirá que copie esa parte del estilo de capa en la capa recién agregada. Para hacer esto, haga clic derecho en la capa, elija Estilos> Copiar estilo> Campos , y haga clic derecho en otra capa, elija Estilos> Pegar estilo> Todas las categorías de estilo (o continúe a Campos ). También puede copiar esa parte del estilo en cualquier otra capa basada en un archivo de forma, pero el campo ID debe tener el mismo nombre que la capa desde la que está copiando.
fuente
Me gustaría agregar a la publicación de vinayan y mencionar brevemente la función rownum , ya que es muy similar y en algunos casos podría ser un poco más conveniente.
id devuelve la ID de función , lo que significa que siempre comienza en cero .
rownum devuelve el número de la fila , lo que significa que comienza en uno .
Entonces, básicamente, si desea que el incremento automático comience en 0, vaya por $ id , y si desea que comience en 1, vaya por $ rownum .
fuente
Este tema ha aparecido aquí: Crear Shapefile con clave primaria de incremento automático en QGIS
Mis sugerencias serían:
1) Las bases de datos SQLITE / SpatialLite admiten el incremento automático en un campo establecido en INTEGER PRIMARY KEY:
Cada vez que edita / crea polígonos, puede completar sus atributos, y SQLITE le dará un valor único incremental en el campo que ha establecido en el tipo INTEGER PRIMARY KEY.
Cuando esté listo para exportar a GEOJSON, estará listo con su ID ÚNICA.
2) Si usa Shapefiles, cree un campo OBJECTID de tipo INTEGER y use una expresión de calculadora de campo para llenar ese campo cada vez que edite / cree polígonos y necesite exportarlos. Perderá la identificación original que tenía un polígono, pero esta es la única forma de lograr esto usando .SHP. (Tendré que encontrar la expresión de la calculadora de campo).
PostGIS es otra fuente de datos que puede explorar, aunque es más difícil que SQLITE, puede encontrar valor en un sistema de este tipo a medida que avanza ...
fuente
La publicación anterior, pero para cualquiera que buscara una solución rápida, la mía era crear un campo con $ ID + 1 y se generará automáticamente comenzando con 1.
fuente
Actualización para QGIS 3
Sé que llego bastante tarde a esto, pero siempre es bueno dar alguna actualización:
En QGIS 3 ahora hay una herramienta nativa que se puede utilizar para hacer este trabajo exacto y se llama "Agregar campo autoincremental"
No es necesario utilizar una expresión en la calculadora de campo ni realizar ninguna codificación, pero, sin embargo, todo esto sigue siendo muy útil y bueno de saber.
fuente
La forma más fácil de hacer esto sería probablemente con un script de Python o tal vez sea posible con la calculadora de campo. Lo siento, no tengo uno para ti, tal vez alguien más lo tenga. Mientras tanto, buscaría un script de Python para ello. He visto mucho sobre esto para ArcGIS, pero estoy seguro de que hay algo para QGIS.
fuente
Si no necesita algo que se pueda digerir humanamente, ahora hay una solución fácil: en las propiedades de campo, seleccione "Generador UUID" y deje todo en blanco.
Esto creará automáticamente un UUID en el campo. No es tan fácil como un número simple (según $ id o $ rownum), pero genera el UUID desde el principio, por lo que no hay pasos sucesivos.
fuente
Me gustaría agregar que esto no parece funcionar cuando está utilizando capas de base de datos postgreSQL. $ ID y $ rownum devuelven 0. PostgreSQL 9.6 QGIS 2.18.12
fuente
Estas soluciones ya no me funcionaron en QGIS 2.01 Dufour. Escribir
$id
en un campo nuevo o existente llamado 'id' en el campo de entrada de expresión me dio un error "La expresión no es válida"Lo que funcionó fue escribir la función
$rownum
y luego hacer clic en "Aceptar"fuente
simplemente puede eliminar el primer colmn (id) y crear uno nuevo "Como campo virtual"
fuente