Отображение сгенерированных линий вне экстента карты с использованием QGIS?

12

Я нарисовал карту потока OD, используя генератор геометрии QGIS, используя следующее выражение:

make_line( centroid( $geometry ),
centroid( geometry( get_feature( 'Layer2', 'Attribute1', attribute(
           $currentfeature, 'Attribute2') ) ) ) )

У меня все хорошо, определяя ширину моих линий по атрибутам.

Но когда я увеличиваю масштаб до «центра», линии, связанные с местами вне холста карты, не отображаются. Я думаю, это потому, что объекты не должны появляться на карте.

Я пытался снять флажок «Обрезать элементы по холсту» в расширенном меню, как в «Генераторе геометрии», так и в уровнях «Линия», но он все еще не отображается.

Когда увеличено на хаб

Когда не увеличено

Я хотел бы, чтобы все мои линии появлялись даже при увеличении масштаба на хабе.

mamouthautapis
источник
Это не поможет ... но у меня возникла та же проблема с подходом картографирования потока в Подземье. Должно быть что-то в способе визуализации плотной геометрии ... единственное предложение - поиграть с атрибутом width для карты локального уровня ... уменьшить ширину?
Андрей Тис
Может быть, вы можете загрузить свои данные (shp ...), чтобы иметь возможность повторить ваши шаги и попытаться получить ответ.
Сезар Аркеро
1
Отсюда и
шейп-
Возможно, сегментирование линии может быть хаком, чтобы она появилась на карте, если линии показаны только там, где оба конца близки к экстенту карты. Grass-tool 'v.split.length', возможно, делает свою работу.
Джулиан
1
Является ли это той же проблемой, что и у меня (если это дает простой способ понять эту проблему - если нет, игнорируйте меня): я хотел показать набор точечных данных со всем набором сгенерированных точек, смещенных в 300 км к востоку и 600 км север по сравнению с фактическими точками. Это работает - но только при уменьшении, так что исходные точки находятся внутри холста карты. Как только вы приближаетесь к набору сгенерированных точек (перемещая фактические точки за пределы холста), сгенерированные точки исчезают. (QGIS 2.14)
Ространимин

Ответы:

2

Проблема здесь в том, что нет фактических данных, говорящих «здесь есть линия». Ваше выражение является частью стиля слоя и встречается только в процессе рендеринга, когда также отображаются две применимые точки.

Попробуйте использовать инструмент Расстояние до ближайшего концентратора , который находится на панели инструментов обработки в разделе Инструменты векторного анализа. Я отмечаю, что вы выбираете определенные полигоны для своих спиц и стилизуете линии в соответствии с другими атрибутами. Это возможно, но вам нужно будет сделать несколько вещей, чтобы подготовиться к этому. К счастью, инструмент автоматически использует центроиды при выборе входов полигонов.

  1. Инструменты векторного выбора > Извлечь по атрибуту
    • Входной слой: 'LAYER_1'
    • Атрибут выбора: «ATTRIBUTE_1»
    • Оператор: =
    • Значение: 'значение, относящееся к многоугольнику хаба'
    • Извлечено (атрибут): 'HUB'

  2. Инструменты векторного выбора > Извлечь по атрибуту
    • Входной слой: 'LAYER_1'
    • Атрибут выбора: 'ATTRIBUTE_2'
    • Оператор: выбран по необходимости
    • Значение: «значение (я), относящиеся к многоугольникам со спицами»
    • Извлечено (атрибут): «SPOKES»

  3. Инструменты векторного анализа > Расстояние до ближайшего хаба
    • Слой исходных точек: «SPOKES»
    • Слой целевых узлов: 'HUB'
    • Атрибут имени слоя концентратора: создает поле «Имя концентратора» в выходных данных на основе выбранного атрибута, если на входном слое указано несколько концентраторов.
    • Тип выходной формы: Линия к концентратору
    • Единица измерения: Метры
    • Расстояние до концентратора: OUTPUT_LAYER_NAME

Результирующий вывод сохраняет все атрибуты ввода слоя «SPOKES», поэтому атрибуты, необходимые для стилевого оформления, все равно будут присутствовать. Как и собственный векторный слой, линии останутся видимыми на всех уровнях масштабирования, независимо от видимости любой конечной точки.

Если вы знакомы с Graphical Modeler, вы можете даже встроить эти шаги в один процесс, чтобы не загромождать рабочее пространство ненужными слоями.

JoshC
источник
3

Найден следующий обходной путь: используйте дополнительный виртуальный слой вместо генератора геометрии для отображения линий.

Определение виртуального слоя:

select m.FID, make_line(.....) as geometry from my_layer m

(исходная геометрия может быть использована с помощью m.geometry)

Чтобы убедиться, что виртуальный слой обновляется при редактировании my_layer, перейдите в Свойства слоя | зависимости и убедитесь, что my_layer отмечен (по умолчанию он неактивен).

столовая гора
источник