Приєднання даних з Excel до таблиці атрибутів у QGIS без створення дублікатів?


15

У мене в QGIS є таблиця атрибутів з двома порожніми полями.

Приклад_1

Я хочу імпортувати базу даних Excel, щоб заповнити порожні поля в QGIS. Мій файл excel відповідає стовпцям моєї таблиці атрибутів QGIS.

Приклад_2

Я в змозі належним чином приєднати свій excel (.CSV) до мого файлу форм. Однак процес замість заповнення порожніх полів, як я хотів, створив дублікати. За допомогою «Табличного менеджера» я в змозі виправити ситуацію, але це вимагає багато часу. Я шукаю більш ефективний спосіб приєднатися до моїх даних Excel.

Приклад_3

Як я можу приєднати файл Excel до таблиці атрибутів без створення дублікатів?


3
Погляньте на цей підручник: Виконання
приєднання

Відповіді:


13

Я б зробив наступні речі, щоб полегшити життя:

Перш ніж зробити це, зробіть резервну копію файлу форм.

  1. У своєму форматі перейдіть до властивостей / полів шару та увімкніть режим редагування.
  2. виберіть все поле, крім поля ідентифікатора
  3. Видаліть усі поля, крім поля ідентифікатора
  4. додайте файл csv як шар у QGIS (головне меню / шар / Додати шар / Додати розмежуваний текстовий шар) введіть тут опис зображення(виберіть геометрію не)
  5. у вашому файлі форм виберіть властивості / об'єднуватись та виберіть обидва поля ідентифікатора для джерела та цілі. Як описано в іншій відповіді на це питання.
  6. Збережіть модифікований Shapefile.

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

це вкладка «Поле», на яку я маю на увазі

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

Не забудьте переключити редагування до та після видалення непотрібного поля


13

Ви хочете приєднати файл excel до filefile. Ви приєднаєтесь до них за загальним атрибутом, і результат буде об'єднаним шаром, де кожен запис містить атрибути як filefile, так і файлу excel.

Гаразд, спочатку ви завантажуєте свій файл excel та вектор пізніше в шари. Я використав декілька даних тесту, які я зробив, але ваша установка повинна виглядати, як показано нижче. введіть тут опис зображення

Тепер клацніть правою кнопкою миші на шарі (на панелі шарів) і виберіть властивості, а потім виберіть об'єднання. Спочатку натисніть на знак "зелений +" внизу ліворуч (Велика червона стрілка на малюнку нижче), і він відкриє нове меню "Додати вектор приєднання" (наприклад, нижче). & аркуш) поле приєднання - це поле у ​​файлі excel, яке містить загальний атрибут формфайлу. Поле цілі - це поле відповідності у файлі форми. (у моєму випадку обох загальних полів трапилося назвати одиницею, але якби це поле називалося UNIT_ у файлі форм, я б використав це замість UNIT для мого цільового поля)
введіть тут опис зображення Є кілька інших варіантів, з якими можна зіпсуватись під час з'єднання, як, наприклад, якщо ви хочете бачити лише певні поля тощо ... так чи інакше, тепер вони приєднуються, і якщо ви повернетесь назад і подивитеся на атрибути файлу форм, які ви побачите тепер він має відповідні атрибути файлу excel, як показано нижче.

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

Ось кілька зручних навчальних посібників, щоб показати вам крок за кроком, як це зробити:

https://www.mapbox.com/tilemill/docs/guides/joining-data/

http://maps.cga.harvard.edu/qgis/wkshop/join_csv.php

http://qgis.spatialthoughts.com/2012/03/using-tabular-data-in-qgis.html

Як з'єднати зовнішні таблиці з таблицею атрибутів shapefile у QGIS?

http://www.digital-geography.com/qgis-tutorial-ii-how-to-join-data-with-shapefiles/#.Vs9vpmHXKUk

і підручник ArMoraer, згаданий у коментарях.


Я подивився на підручник mapbox.com/tilemill/docs/guides/joining-data , який, до речі, був дуже корисним. Однак я все ще не можу приєднати свій файл DBF до мого формату. Це мене дивує, оскільки обидві структури моєї таблиці чудово збігаються. Мені здається, неправильно розумію «Поле приєднання» та «Цільове поле». Чи можете ви додати більше деталей?
Лоран Робіталь-Лайнсе

1
@Laurent Robitaille-Lainesse Я оновив свою публікацію більш покроковою інструкцією. Я приєднався до тестового файлу excel до поліфонічного формату, щоб переконатися, що мої кроки були правильними
ed.hank

Я вдався належним чином приєднати свій файл excel до QGIS. Я зауважу, що опція «приєднатися» додає нове поле в таблицю атрибутів. Виправте мене, якщо я помиляюся, але здається, що неможливо додати дані з мого файлу excel до порожнього поля моєї таблиці атрибутів.
Лоран Робіталь-Лайнсе

1
Якщо у вас є порожнє поле, ви використовуєте калькулятор поля, щоб заповнити з недавно приєднаного поля до поля у вашій таблиці.
ed.hank

10

Просто для додавання іншого методу ви можете встановити макрос Project, який під час завантаження:

  1. Автоматично приєднується до вашого формату файлів до csv
  2. Оновлення IP1та IP2поля
  3. Вилучає об'єднані поля, залишаючи лише поля формфайлу (тобто відсутні дублікати)

Спочатку створіть проект, якщо ви цього ще не зробили, а потім перейдіть на панель інструментів:

Проект> Властивості проекту ...> Макроси

Потім використовуйте наступний код у def openProject():функції та введіть назви ваших шарів та полів, до яких потрібно долучитись. Я використовував "Приклад" та "Електронну таблицю" для файлу shapefile та CSV відповідно з полем ID:

from PyQt4.QtCore import *
import qgis
from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your shapefile name
    if layer.name() == "Example":
        qgis.utils.iface.setActiveLayer(layer)
        shp = qgis.utils.iface.activeLayer()

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your csv name
    if layer.name() == "spreadsheet":
        qgis.utils.iface.setActiveLayer(layer)
        csv = qgis.utils.iface.activeLayer()

# Set up join parameters
shpField='ID'
csvField='ID'
joinObject = QgsVectorJoinInfo()
joinObject.joinLayerId = csv.id()
joinObject.joinFieldName = csvField
joinObject.targetFieldName = shpField
shp.addJoin(joinObject)

# Define fields to update and joined fields to copy values from
ip1 = shp.fieldNameIndex('IP1') 
ip1_join = shp.fieldNameIndex('spreadsheet_IP1')
ip2 = shp.fieldNameIndex('IP2') 
ip2_join = shp.fieldNameIndex('spreadsheet_IP2')

shp.startEditing()
for feat in shp.getFeatures():
    shp.changeAttributeValue(feat.id(), ip1, feat.attributes()[ip1_join])
    shp.changeAttributeValue(feat.id(), ip2, feat.attributes()[ip2_join])
shp.commitChanges()

# Remove join 
shp.removeJoin(csv.id())

Макрос проекту

Переконайтесь, що шари не з'єднані, збережіть проект та увімкніть макроси , перейшовши на панель інструментів:

Налаштування> Загальне> Увімкнути макроси


Тепер, коли ви закриваєте проект і редагуєте файл csv, наступного разу, коли ви завантажуєте проект, поля повинні автоматично оновлюватися:

Редагування файлу CSV

Результати


7

Моя пропозиція - використовувати Open Source LibreOffice / Open Office для редагування файлу Excel та створення .dbf-файлу. Я підготував для вас тестову робочу книжку. Тестовий робочий зошит - посилання

  1. Відкрити файл у Libre Office / Open Office.
  2. Вставте дані аркуша "Excel" з вашого файлу excel.
  3. Вставте дані аркуша "DBF" з вашого файлу .dbf (вставте лише ідентифікатор, X, Y) (значення IP1, IP2 додаються автоматично).
  4. Збережіть як файл name.dbf (де ім’я таке ж, як і ім’я файлу форми).

Таблиця результатів без дублікатів у QGIS: введіть тут опис зображення


5

Чому там слід почати порожні поля? Чи можете ви почати без порожніх полів і просто використовувати два стовпчики, створені при з'єднанні? Я думаю, що це найпростіший підхід. Або це, або знайдіть інструмент, подібний до інструменту "Завантажити" в ArcGIS.

https://desktop.arcgis.com/en/arcmap/latest/extensions/production-mapping/loading-data-into-a-geodatabase.htm

Якщо ви не використовуєте базу геоданих, я дуже рекомендую це.


Я не використовую базу геоданих. Насправді я з цим не знайомий.
Лоран Робіталь-Лайнс

1
@ LaurentRobitaille-Lainesse Я настійно рекомендую створити нову базу даних геоданих, а потім новий клас функцій в межах цього і використовувати це для зберігання даних. Я також рекомендую провести коротке дослідження баз геоданих та функціональних класів і чому ми їх використовуємо, що вони пропонують поза формами.
Стелла

4

Я не знаю, чи є прямий спосіб приєднатись без дублікатів, оскільки ця підтримка .shp-файлу підтримується attribut у .DBF (файл бази даних). Цей DBF має декларування типу стовпців, таких як ціле число, дійсне, рядок тощо, з деталізацією його довжини та точності. У файлі CSV є лише звичайний стовпець без оголошеного типу. Я не знаю, наскільки великий ваш файл. Для мене я зберігатимуть дублікати полів, а потім використовувати калькулятор поля із загальною формулою:

Оригінальний Field_x = Дублікат Field_x

Потім видаліть усі ці дублювані поля (через QGIS або програму бази даних)


3

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

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