Чи існує спосіб автоматичного збільшення для стовпця ідентифікаторів у QGIS


22

Я створюю вигадану карту, і тому мені потрібно створити безліч точок, ліній та впевнених багатокутників. Пізніше я експортую свої дані як geojson. Але перед цим я завжди мушу піти і дати кожному елементу унікальний ідентифікатор.

Мені не потрібне спеціальне сортування, так як найбільший багатокутник отримує найменший ідентифікатор або близько того. Я просто потрібно все багатокутники з до ID врешті-решт, НЕ робити це вручну , як я повинен робити.

Було б чудово, якби хтось знав, як це зробити.


Ви використовуєте shapefiles? Чи повинні ідентифікатори повинні бути однаковими після кожного експорту, чи ви могли заповнити поле ідентифікатора після кожного сеансу редагування?
DPSSpace

Як ви створюєте полігони зі скрипту, оцифровуєте на робочому столі QGIS або копіюєте з файлу форми тощо?
landocalrissian

Ну я створюю форму в QGIS, Збережіть як Geojson, і це добре. Вибачте, можливо, я зрозумів ваше запитання неправильно?
kwoxer

Відповіді:


26

Використання калькулятора поля - це шлях:

Ідентифікатор не вказано

  1. Оцифруйте всі функції, не вводячи жодного ідентифікатора.
  2. Перед експортом оновіть унікальні ідентифікатори на вираз "$ Id" за допомогою калькулятора поля.

Ідентифікатор не вказаний

Деякі посвідчення особи вже надані в

  1. Якщо у вас вже є ідентифікатор, ви можете використовувати "- $ Id". Переконайтеся, що ви просто вибрали нові функції, що означає, що це "NULL" у рядку id. Просто зробіть це, замовивши стовпчик.
  2. Тепер виконайте кроки із малюнків:

введіть тут опис зображення введіть тут опис зображення


Так, приголомшливий. Супер легко і правильно працює. Спасибі людина. Btw: можливо, ви знаєте, як це зробити і для вже існуючих ідентифікаторів? Якщо я це роблю, я отримую -2 -3 і так далі
kwoxer

Знайшов рішення та додав його до своєї публікації. Знову дякую.
kwoxer

6

Алілуя! Або Еврика. Або що завгодно. Це можна зробити. З формоюфайлу.

  1. Якщо його ще немає, додайте поле, яке містить ідентифікатор функції, скажімо, "FID" типу цілого номера (ціле число) .
  2. Відкрити Властивості шару (права кнопка миші на шарі і виберіть Властивість ... або двічі клацніть по шару), натисніть на Властивості форми вкладки, потім в розділі General зніміть прапорець Editable і під Defaults в поле Значення по замовчуванням типу maximum("FID") + 1.

Знявши прапорець Editable , ви не можете ввести інше значення або видалити те, що там є. Зауважте, що якщо є значення без ідентифікатора, ці значення не оновлюються. У якийсь момент я експериментую з перевіркою Застосувати значення за замовчуванням для оновлення та перегляну свою формулу, щоб перевірити наявність нульового чи NULL значення, щоб оновити лише ті записи, коли вони редагуються, а не будь-яку запис зі значенням, що перевищує 1. (Раніше в цьому після цього обговорювалося, як оновити поле FID унікальними значеннями, що вам потрібно буде зробити, якщо ви додали поле після того, як у файлі форм вже були функції.)

Зауважте, що це зберігається за допомогою поточного файлу карти, а не файлу форми, тому для додавання цього формату декілька разів потрібно буде скопіювати цю частину стилю шару в щойно доданий шар. Для цього клацніть правою кнопкою миші на шарі, виберіть Стилі> Стиль копіювання> Поля та клацніть правою кнопкою миші на іншому шарі, виберіть Стилі> Стиль вставки> Усі категорії стилів (або продовжте до Поля ). Ви також можете скопіювати цю частину стилю в будь-який інший шар на основі файлу форми, але поле ідентифікатора повинно мати те саме ім'я, що і шар, з якого ви копіюєте.

Властивості шару


Зауважте, що для цього вам потрібно принаймні створити одну функцію та ввести її FID, а потім змінити форму атрибута Значення за замовчуванням. В іншому випадку у вас виявиться НУЛЬНА ПІДКЛАДА.
Techie_Gus

5

Я хотів би додати до посади vinayan і коротко згадати функцію rownum , оскільки вона дуже схожа і в деяких випадках може бути трохи зручнішою.

введіть тут опис зображення

id повертає ідентифікатор функції , це означає, що він завжди починається з нуля .
rownum повертає номер рядка , тобто він починається з одиниці .

введіть тут опис зображення

Отже, в основному, якщо ви хочете, щоб автоматичний приріст починався з 0, перейдіть на $ id , а якщо ви хочете, щоб він почався з 1, тоді перейдіть до $ rownum .


Перевірений, а також хороше рішення. Але з цим рішенням тут, якщо ви вже маєте кілька посвідчень і хочете зберегти їх, функція rownum не є хорошою. Ця функція завжди починається з 1. Шлях вище вважається набагато розумнішим, навіть якщо це важче налаштувати. Тож дякую за альтернативу, але наразі функція ідентифікатора - це моє переважне рішення =)
kwoxer

4

Ця тема з'явилася тут: Створіть Shapefile з автоматичним збільшенням первинного ключа в QGIS

Мої пропозиції:

1) Бази даних SQLITE / SpatialLite підтримують автоматичне нарощування в полі, встановленому на ІНТЕГРОВИЙ ПЕРВИЧНИЙ КЛЮЧ:

У INSERT, якщо стовпцю ROWID або INTEGER PRIMARY KEY явно не задано значення, воно автоматично заповнюється невикористаним цілим числом, як правило, тим, що найбільше, ніж найбільший ROWID, який використовується зараз. Це справедливо незалежно від того, використовується ключове слово AUTOINCREMENT чи ні.

Кожен раз, коли ви редагуєте / створюєте багатокутники, ви можете заповнити їх атрибути, і SQLITE надасть йому додаткове унікальне значення у полі, яке ви встановили для типу INTEGER PRIMARY KEY.

Коли ви будете готові експортувати в GEOJSON, ви все готові до своїх унікальних ідентифікаторів.

2) Якщо ви використовуєте Shapefiles, створіть поле OBJECTID типу INTEGER та використовуйте вираз калькулятора поля, щоб заповнити це поле кожного разу, коли ви редагуєте / створюєте багатокутники та потребуєте їх експорту. Ви втратите оригінальний ідентифікатор, який колись мав багатокутник, але ви це єдиний спосіб досягти цього, використовуючи .SHP. (Мені доведеться знайти вираз польового калькулятора).

PostGIS - це ще одне джерело даних, яке ви, можливо, захочете вивчити, хоча більш важкий підйом, ніж SQLITE, ви можете знайти цінність у такій системі, коли рухаєтесь вперед ...


Дякуємо за пояснення. Але я не думаю, що це буде корисним рішенням замість опції auto_increment безпосередньо в інструменті. У мене вже так багато форматів даних і не хочу іншого інструменту. Можливо, я повинен написати для цього аддон, коли у мене є час ...
kwoxer

Можливо, буде простіше відмовитися від .SHP! Хто знає, які нові починання вас візьмуть на себе ...
DPSSpatial

2

Стара публікація, але для тих, хто шукає швидкого рішення, було створити поле з $ ID + 1, і воно автоматично генерується, починаючи з 1!


2

Оновлення для QGIS 3

Я знаю, що я досить спізнююсь із цим, але завжди радимо будь-які оновлення:

У QGIS 3 зараз є власний інструмент, який можна використовувати для виконання цієї точної роботи, і він називається "Додати автоінкрементальне поле"

Не потрібно використовувати вираз у польовому калькуляторі чи робити якесь кодування, але все-таки все це дуже корисно і добре знати.

введіть тут опис зображення


1

Найпростіше це зробити, мабуть, за допомогою сценарію python або, можливо, це можливо за допомогою калькулятора поля. Вибачте, що у вас немає такого для вас, можливо, хтось інший захоче. Тим часом я шукав би сценарій пітона для цього. Я багато що про це бачив для ArcGIS, але впевнений, що є щось для QGIS.


Найкраще було б, якщо насправді нічого немає, запит на функцію. Я не хочу, щоб сценарій python був додатковим до QGIS також, якщо це може бути рішення одним клацанням миші. Але дякую
kwoxer

1

Якщо вам не потрібне щось людське для засвоєння, тепер є легке виправлення: у полі властивості виберіть "Генератор UUID" і залиште все порожнім.

Це автоматично створить UUID в полі. Не настільки дружнє, як просте число (за $ id або $ rownum), але генерує UUID з самого початку, тому ніяких послідовних кроків немає.введіть тут опис зображення


0

Хочу додати, що це, мабуть, не працює, коли ви використовуєте шари бази даних postgreSQL. $ ID та $ rownum всі повертаються 0. PostgreSQL 9.6 QGIS 2.18.12


0

ці рішення більше не працювали для мене в QGIS 2.01 Dufour. Набравши $idнове або існуюче поле під назвою 'id' у полі введення виразу, виникла помилка «Вираз недійсний»

Що було для роботи, було набрати функцію, $rownumа потім натиснути «ОК»

введіть тут опис зображення


0

ви можете просто видалити перший Colmn (id) та створити новий "Як віртуальне поле" введіть тут опис зображення введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.