Страница 1 из 1
Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 16:10
Natalia Novoselova
В QGIS есть опция - Data Management tools – Merge.
Она склеивает темы в одну тему. При этом ей требуется точная идентичность атрибутов темы.
Я склеиваю большое число слоев. Конечно перед этим вычищаю их максимально, проверяя по многу раз что их атрибуты идентичны. Какие- то она склеивает, а какие-то, хоть они в упор одинаковые - не берет!

Как узнать что ему не нравится?? Вот в примере 2 таких - совершенно (на мой взгляд) одинаковые атрибуты двух слоев.
Может там 1 буква не такая в названии или еще что-то? Есть ли способ быстро выявить эти различия для множества тем? Или есть ли ему более удобная альтернатива для склеивания?
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, и сшивка получается.
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 16:43
Natalia Novoselova
Александр Мурый писал(а): ↑24 окт 2017, 16:31
Вывод: переводим геометрию в 2D, и сшивка получается.
А как вы переводите в 2d геометрию? Я пробую пересохранить слой, убирая галочку на Geometry type - Include Z-dimensions.
В другом случае (для работы плагина) это помогало. Но в этом - нет. У меня после пересохранения эти 2 слоя не склеиваются.
В приложении - мое пересохранение этих слоев.
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 16:48
Александр Мурый
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 17:08
Natalia Novoselova
Александр Мурый писал(а): ↑24 окт 2017, 16:48
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
А через QGIS это никак не сделать?
Не умею я пока ..как вы сказали. GRASS пока не пользуюсь. А данных таких у меня много. Точнее сейчас не так много (на 21 мб)
Не в первый раз, точно, проблемы из-за этой "грязной" геометрии возникают. Может быть, есть способы почистить ее в QGIS?
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 17:48
Александр Мурый
Меню "Processing" ("Анализ данных" в русскоязычном варианте) - это как раз про QGIS. Надеюсь, вы пользуетесь этим творением коллективного гения))
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 18:02
Natalia Novoselova
Александр Мурый писал(а): ↑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.
Но они утеряли все свои атрибуты!!

Так не годится в моем случае. А есть ли способ, чтобы он очищал геометрию, но не удалял атрибутивную таблицу?
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 18:08
Natalia Novoselova
Помимо этого, он еще и склеил как-то каждую тему внутри (где у меня объекты были разделены смежной линией - он их склеил в один).. То есть не просто очистил, и видоизменил геометрию.. Или я не те настройки использую, или этот метод не подходит в моем случае.
Хм... может быть, вернуться к тому, почему когда я просто пересохраняю слой без 3d , почему ему этого не достаточно для того, чтобы склеить слои?
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 18:33
Natalia Novoselova
Нашла плагин MMQGIS.
А вот он взял все и склеил.... причем (т.к. для пробы делала ) в одном поле одного слоя были целые значения (7, 9) а в этом же поле другого слоя значения со знаком после запятой (7.17 9.12) - так и склеил. И плевать он хотел на грязную геометрию..
не знаю...надеюсь, с данными все нормально.
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 19:16
Natalia Novoselova
Александр Мурый писал(а): ↑24 окт 2017, 16:48
Я прогоняю шейпы через модуль GRASS <v.buffer.distance> (через Processing) с нулевым значением буфера. Это один из вариантов. Кстати, эта операция вообще часто полезна при работе с топологически "грязными" данными.
Вообще, хорошо понимать, что делает машина и что происходит с данными. Вот почему плагин MMQGIS склеил без проблем все слои (ед. условие, чтобы поля назывались одинаково). И опция Merge запнулась на чем-то , причину чего даже выявить было нельзя? Я так и не поняла, в чем там дело. Поскольку пересохранение без 3d не помогло. А очистка геометрии - тоже не выход (или я не так делала, но удалять атрибуты и сращивать объекты уж точно нельзя).
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 20:53
ericsson
Natalia Novoselova писал(а): ↑24 окт 2017, 19:16
Вообще, хорошо понимать, что делает машина и что происходит с данными.
Золотые слова. Вот потому и нужно изучать технологию, а не просить пошаговые инструкции, которые дают ноль к пониманию.
Я вот не пользуюсь GRASS, но первый же беглый взгляд на документацию к v.buffer говорит мне, что там есть опция переноса атрибутов на создаваемую геометрию. А понимание алгоритма построения буфера подсказывает, что чтобы для соприкасающихся полигонов не создавался общий буфер, нужно создавать буфер внутри, а не снаружи.
Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 20:55
trir
это можно решить используя только SQL

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 24 окт 2017, 21:58
Natalia Novoselova
trir писал(а): ↑24 окт 2017, 20:55
это можно решить используя только SQL
I see

Re: Как узнать причину различия атрибутивных таблиц для операции Merge?
Добавлено: 25 окт 2017, 11:01
Александр Мурый
Natalia Novoselova писал(а): ↑24 окт 2017, 18:02
Но они утеряли все свои атрибуты!!

Так не годится в моем случае. А есть ли способ, чтобы он очищал геометрию, но не удалял атрибутивную таблицу?
Каюсь, с ходу не заметил такого непристойного поведения модуля. Поспешил с советом. Для чистки геометрии в вашем случае модуль вообще не подходит, т.к. объединяет смежные полигоны.
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"):