У меня есть слой MultiLineStringZM в базе данных sqlite, и я пытаюсь визуализировать меры или m-значения в вершинах. Я попытался найти информацию о том, как это сделать в QGIS, и все, что мне удалось собрать, это то, что это невозможно напрямую из слоя линейных линий и что точки должны быть извлечены в отдельный слой.
Я использовал Vector
-> Geometry Tools
-> Extract nodes
для создания многоточечного слоя, представляющего вершины моего многострочного слоя, но процесс теряет m-значения вершин. Мне нужно сохранить m-значения, сохранив m-значение как атрибут точки или что-то еще?
Внутри у нас есть инструмент командной строки, который преобразует линейные строки в точечный шейп-файл с m-значениями, хранящимися в качестве атрибута в каждой точке, и я использовал это для проверки наличия m-значений, назначенных вершинам, и я мог бы использовать что если мне нужно, но если это возможно, было бы неплохо, если бы это можно было сделать непосредственно внутри QGIS.
РЕДАКТИРОВАТЬ - повторяя то, что я сказал выше, но еще раз подчеркивая тот факт, что у нас есть инструмент командной строки, который может достичь ожидаемых результатов, который использует библиотеки GDAL, поэтому решение, показывающее только частичный ответ в PyQGIS - не тот ответ, который я ищу. Я ищу встроенный инструмент, готовый плагин для QGIS или полный скрипт, который может извлекать (не создавать / генерировать) и визуализировать m-значения из геометрии MultiLineStringZM или LineStringZM.
источник
Ответы:
Из того, что я могу найти, похоже, не существует существующего решения для этой конкретной ситуации, но я все еще хотел иметь возможность сделать это в QGIS, поэтому я погрузился в сценарии Python.
Руководство по написанию алгоритмов обработки можно найти здесь https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html.
Чтобы использовать этот код, откройте панель инструментов Обработка, затем разверните Сценарии, затем разверните Инструменты. Выберите «Создать новый сценарий», скопируйте и вставьте приведенный ниже код в окно сценария (соблюдайте осторожность при копировании и вставке кода Python, поскольку пробел является синтаксически значимым. Если у вас возникли проблемы, поместите код в текстовый редактор, отображающий пробелы, и убедитесь, что чтобы оно правильно копировалось). Сохраните его, где хотите, и в верхней части окна есть кнопка «Выполнить скрипт». После того, как вы сохраните его, вы можете «Добавить сценарий из файла» и навсегда сохранить сценарий в разделе «Пользовательские сценарии».
Когда появится окно обработки, выберите слой, который содержит векторную геометрию, и выберите «Выполнить». Сценарий ведет себя так же, как «Узлы извлечения», за исключением того, что он добавляет столбец с именем
MValues
и или вZValues
зависимости от того, что доступно во входной геометрии.источник
С QGIS 3.0 или новее эта задача тривиальна. В «Панели инструментов обработки» (Открыть с помощью Ctrl + Alt + T или Обработка -> Панель инструментов) найдите «Извлечь вершины» и запустите этот алгоритм.
Выберите линию M или ZM или геометрию многоугольника в качестве входного слоя и запустите.
Вершины будут извлечены со значениями M и Z без изменений в зависимости от того, что находится в исходной геометрии.
Если значение M необходимо в качестве поля в таблице атрибутов, тогда калькулятор поля можно использовать с выражением, подобным
m($geometry)
источник