Как узнать причину различия атрибутивных таблиц для операции Merge?

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 16:10

В QGIS есть опция - Data Management tools – Merge.
Она склеивает темы в одну тему. При этом ей требуется точная идентичность атрибутов темы.
Я склеиваю большое число слоев. Конечно перед этим вычищаю их максимально, проверяя по многу раз что их атрибуты идентичны. Какие- то она склеивает, а какие-то, хоть они в упор одинаковые - не берет! :twisted: Как узнать что ему не нравится?? Вот в примере 2 таких - совершенно (на мой взгляд) одинаковые атрибуты двух слоев.

Может там 1 буква не такая в названии или еще что-то? Есть ли способ быстро выявить эти различия для множества тем? Или есть ли ему более удобная альтернатива для склеивания?
Вложения
example2themes.zip
(4.04 МБ) 193 скачивания

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Александр Мурый » 24 окт 2017, 16:31

Для начала полезно посмотреть в лог QGIS, как советуют в тексте ошибки.
В логе видим:
2017-10-24T16:20:37 2 Uncaught error while executing algorithm
Traceback (most recent call last):
File "/usr/share/qgis/python/plugins/processing/core/GeoAlgorithm.py", line 203, in execute
self.processAlgorithm(progress)
File "/usr/share/qgis/python/plugins/processing/algs/qgis/Merge.py", line 92, in processAlgorithm
layers[0].crs())
File "/usr/share/qgis/python/plugins/processing/core/outputs.py", line 326, in getVectorWriter
crs, options)
File "/usr/share/qgis/python/plugins/processing/tools/vector.py", line 598, in __init__
uri = GEOM_TYPE_MAP[geometryType] + "?uuid=" + unicode(uuid.uuid4())
KeyError: -2147483645
Ругань в сторону "GEOM_TYPE_MAP" должна насторожить. Смотрим в свойства шейпов, а там "Polygon (WKB type: "PolygonZ")".

Вывод: переводим геометрию в 2D, и сшивка получается.
Редактор материалов, модератор форума

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 16:43

Александр Мурый писал(а):
24 окт 2017, 16:31
Вывод: переводим геометрию в 2D, и сшивка получается.
А как вы переводите в 2d геометрию? Я пробую пересохранить слой, убирая галочку на Geometry type - Include Z-dimensions.
В другом случае (для работы плагина) это помогало. Но в этом - нет. У меня после пересохранения эти 2 слоя не склеиваются.
В приложении - мое пересохранение этих слоев.
Вложения
exam2.zip
(4.04 МБ) 232 скачивания

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Александр Мурый » 24 окт 2017, 16:48

Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
Редактор материалов, модератор форума

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 17:08

Александр Мурый писал(а):
24 окт 2017, 16:48
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
А через QGIS это никак не сделать?
Не умею я пока ..как вы сказали. GRASS пока не пользуюсь. А данных таких у меня много. Точнее сейчас не так много (на 21 мб)



Не в первый раз, точно, проблемы из-за этой "грязной" геометрии возникают. Может быть, есть способы почистить ее в QGIS?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Александр Мурый » 24 окт 2017, 17:48

Меню "Processing" ("Анализ данных" в русскоязычном варианте) - это как раз про QGIS. Надеюсь, вы пользуетесь этим творением коллективного гения))
Редактор материалов, модератор форума

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 18:02

Александр Мурый писал(а):
24 окт 2017, 16:48
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными
В QGIS я иду в Processing (верхнее меню) > Comander (строка)>нахожу там Processing algorithm: grass7:v.buffer.distance
Открывается окно. В нем:
Buffer distance in map units вписываю « 0»
Maximum distance between theoretical ar and polygon segments as multiple of buffer - оставляю по умолчанию 0.01

Остальные настройки не трогаю - по умолчанию.


При этом перегоняю 2 темы. Да, после этого они склеиваются в Merge.
Но они утеряли все свои атрибуты!! :cry: Так не годится в моем случае. А есть ли способ, чтобы он очищал геометрию, но не удалял атрибутивную таблицу?

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 18:08

Помимо этого, он еще и склеил как-то каждую тему внутри (где у меня объекты были разделены смежной линией - он их склеил в один).. То есть не просто очистил, и видоизменил геометрию.. Или я не те настройки использую, или этот метод не подходит в моем случае.

Хм... может быть, вернуться к тому, почему когда я просто пересохраняю слой без 3d , почему ему этого не достаточно для того, чтобы склеить слои?

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 18:33

Нашла плагин MMQGIS.

А вот он взял все и склеил.... причем (т.к. для пробы делала ) в одном поле одного слоя были целые значения (7, 9) а в этом же поле другого слоя значения со знаком после запятой (7.17 9.12) - так и склеил. И плевать он хотел на грязную геометрию.. :)


не знаю...надеюсь, с данными все нормально.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 19:16

Александр Мурый писал(а):
24 окт 2017, 16:48
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
Вообще, хорошо понимать, что делает машина и что происходит с данными. Вот почему плагин MMQGIS склеил без проблем все слои (ед. условие, чтобы поля назывались одинаково). И опция Merge запнулась на чем-то , причину чего даже выявить было нельзя? Я так и не поняла, в чем там дело. Поскольку пересохранение без 3d не помогло. А очистка геометрии - тоже не выход (или я не так делала, но удалять атрибуты и сращивать объекты уж точно нельзя).

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение ericsson » 24 окт 2017, 20:53

Natalia Novoselova писал(а):
24 окт 2017, 19:16
Вообще, хорошо понимать, что делает машина и что происходит с данными.
Золотые слова. Вот потому и нужно изучать технологию, а не просить пошаговые инструкции, которые дают ноль к пониманию.
Я вот не пользуюсь GRASS, но первый же беглый взгляд на документацию к v.buffer говорит мне, что там есть опция переноса атрибутов на создаваемую геометрию. А понимание алгоритма построения буфера подсказывает, что чтобы для соприкасающихся полигонов не создавался общий буфер, нужно создавать буфер внутри, а не снаружи.

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение trir » 24 окт 2017, 20:55

это можно решить используя только SQL :mrgreen:

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Natalia Novoselova » 24 окт 2017, 21:58

trir писал(а):
24 окт 2017, 20:55
это можно решить используя только SQL
I see

:cry:

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?

Сообщение Александр Мурый » 25 окт 2017, 11:01

Natalia Novoselova писал(а):
24 окт 2017, 18:02
Но они утеряли все свои атрибуты!! :cry: Так не годится в моем случае. А есть ли способ, чтобы он очищал геометрию, но не удалял атрибутивную таблицу?
Каюсь, с ходу не заметил такого непристойного поведения модуля. Поспешил с советом. Для чистки геометрии в вашем случае модуль вообще не подходит, т.к. объединяет смежные полигоны.
ericsson писал(а):
24 окт 2017, 20:53
первый же беглый взгляд на документацию к v.buffer говорит мне, что там есть опция переноса атрибутов на создаваемую геометрию.
Да, однако кугисовская версия оказалась урезанной, там нет такого параметра.

Оказалось, проще всего сделать 2D-геометрию простым конвертированием с добавлением параметра "dim":

Код: Выделить всё

ogr2ogr -f "ESRI Shapefile" BH_fragm_2d.shp BH_fragm.shp -dim 2
Или, если в QGIS, то через инструмент "Convert format" (вписываем в опции "-dim 2"):
Вложения
Convert format_035.png
Convert format_035.png (91.53 КБ) 5657 просмотров
Редактор материалов, модератор форума

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей