Estou criando um mapa fictício e, portanto, preciso criar muitos pontos, linhas e com certeza polígonos. Posteriormente, exporto meus dados como geojson. Mas antes disso eu sempre tenho que atribuir um ID único a cada elemento.
Não preciso de uma classificação especial, pois o polígono maior recebe a menor identificação. Eu só preciso de todos os polígonos com um ID no final, sem fazê- lo manualmente, como devo fazer agora.
Seria ótimo se alguém sabe como fazer isso.
Respostas:
O uso da calculadora de campo é o caminho a seguir:
Nenhum ID foi fornecido em
Alguns IDs já são fornecidos em
fonte
Aleluia! Ou Eureka. Como queiras. Isto pode ser feito. Com um shapefile.
maximum("FID") + 1
.Ao desmarcar Editável , você não pode inserir outro valor ou excluir o que está lá. Observe que, se houver valores sem um ID, esses valores não serão atualizados. Em algum momento, experimentarei verificar Aplicar valor padrão na atualização e revisar minha fórmula para verificar se há um valor zero ou NULL para atualizar apenas esses registros quando forem editados, e não nenhum registro com um valor maior que 1. (Anteriormente Depois, discutimos como atualizar o campo FID com valores exclusivos, o que você precisará fazer se tiver adicionado o campo depois que já houver recursos no shapefile.
Observe que isso é salvo com o arquivo de mapa atual, não com o shapefile, portanto, adicionar esse shapefile várias vezes exigirá que você copie essa parte do estilo da camada para a nova camada adicionada. Para fazer isso, clique com o botão direito do mouse na camada, escolha Estilos> Copiar estilo> Campos e clique com o botão direito do mouse em outra camada, escolha Estilos> Colar estilo> Todas as categorias de estilo (ou continue com Campos ). Você também pode copiar essa parte do estilo para qualquer outra camada com base em um shapefile, mas o campo ID deve ter o mesmo nome da camada da qual você está copiando.
fonte
Gostaria de acrescentar ao post de Vinayan e mencionar brevemente a função rownum , pois é muito semelhante e, em alguns casos, pode ser um pouco mais conveniente.
id retorna o ID do recurso , o que significa que ele sempre começa em zero .
rownum retorna o número da linha , o que significa que começa em uma .
Então, basicamente, se você deseja que o incremento automático comece em 0, vá para $ id e se você deseja que comece em 1, vá para $ rownum .
fonte
Este tópico foi apresentado aqui: Criar Shapefile com chave primária de incremento automático no QGIS
Minhas sugestões seriam:
1) Os bancos de dados SQLITE / SpatialLite oferecem suporte ao incremento automático em um campo definido como INTEGER PRIMARY KEY:
Cada vez que você editar / criar polígonos, poderá preencher seus atributos, e o SQLITE fornecerá um valor único incremental no campo que você definiu para o tipo INTEGER PRIMARY KEY.
Quando você estiver pronto para exportar para GEOJSON, estará pronto com seus IDs ÚNICOS.
2) Se estiver usando Shapefiles, crie um campo OBJECTID do tipo INTEGER e use uma expressão de calculadora de campo para preencher esse campo toda vez que você editar / criar polígonos e precisar exportá-los. Você perderá o ID original que um polígono já teve, mas essa é a única maneira de conseguir isso usando .SHP. (Terei que encontrar a expressão da calculadora de campo).
O PostGIS é outra fonte de dados que você pode querer explorar, embora seja mais pesado do que o SQLITE, você pode encontrar valor nesse sistema à medida que avança ...
fonte
Post antigo, mas para quem procura uma solução rápida, a mina foi criar um campo com $ ID + 1 e ele irá gerar automaticamente começando com 1!
fonte
Atualização para QGIS 3
Eu sei que estou muito atrasado para isso, mas sempre bom para atualizar:
No QGIS 3, agora existe uma ferramenta nativa que pode ser usada para fazer esse trabalho exato e é chamada "Adicionar campo autoincremental"
Não é necessário usar uma expressão na calculadora de campo ou fazer qualquer codificação, mas, mesmo assim, elas ainda são muito úteis e úteis.
fonte
A maneira mais fácil de fazer isso seria provavelmente com um script python ou talvez seja possível com a calculadora de campo. Desculpe, não tenho um para você, talvez alguém o tenha. Enquanto isso, eu procuraria por um script python para ele. Eu já vi muito sobre isso no ArcGIS, mas tenho certeza de que há algo lá para o QGIS.
fonte
Se você não precisa de algo digerível humanamente, agora existe uma solução fácil: nos objetos de campo, selecione "UUID Generator" e deixe tudo em branco.
Isso criará automaticamente um UUID no campo. Não é tão amigável quanto um número simples (como $ id ou $ rownum), mas gera o UUID desde o início, portanto, não há etapas sucessivas.
fonte
Gostaria de acrescentar que isso não parece funcionar quando você está usando uma camada de banco de dados postgreSQL. $ ID e $ rownum retornam 0. PostgreSQL 9.6 QGIS 2.18.12
fonte
essas soluções não funcionaram mais para mim no QGIS 2.01 Dufour. Digitar
$id
em um campo novo ou existente chamado 'id' no campo de entrada da expressão me deu um erro "Expressão inválida"O que funcionou foi digitar a função
$rownum
e clicar em "OK"fonte
você pode simplesmente excluir a primeira colmn (id) e criar uma nova "como campo virtual"
fonte