Как рассчитать зоны влияния в QGIS?

10

Я пытаюсь создать слой многоугольника, показывающий многоугольники, которые соответствуют ближайшему магазину.

Для набора из 30 магазинов, в результате должен быть слой многоугольника с 30 объектами, по одному на каждый магазин. Каждая функция будет представлять область, в которой соответствующий магазин находится ближе всего. Например, адрес в многоугольнике 12 означает, что хранилище 12 является ближайшим.

У меня есть слой расположения магазинов и слой улиц OSM со столбцом максимальной скорости. Получающийся слой многоугольника должен быть основан на слое улиц OSM, а не просто линейных областях.

Идея состоит в том, что при фиксированном наборе магазинов и дорог ближайший магазин должен оставаться постоянным в любой точке на карте. Таким образом, я надеюсь, что полученный слой многоугольника будет без зазоров.

Это видео о программном обеспечении Maptitude представляет собой прекрасный пример того, чего я пытаюсь достичь (перемотка вперед к 1:55 видео). В качестве альтернативы, см. Изображение ниже для примера:

Ближайшие к больнице районы Maptitude

Для каждой больницы есть соответствующая область, где что-либо в пределах этой области является самым близким к больнице, расположенной в этой области.

Как я могу повторить это с помощью QGIS?

ge0m3try
источник

Ответы:

8

Алгоритм Grass v.net.alloc может создавать подсети - вы можете вызвать его из панели инструментов Processing (протестировано в QGIS 2.16).

Вам понадобится точечный слой (для объектов) и слой линий с затратами (либо время / длина). Это создаст новый слой линии с полем с именем catдобавлено, который будет идентификатором ближайшего объекта.

Вот пример, основанный на расстоянии, которое можно пройти пешком до ближайшего паба. Каждый сегмент линии окрашен с catиспользованием случайных цветов: -

Пример v.net.alloc

Обратите внимание, что иногда дорожные сети двух соседних пабов получают очень похожие цвета; если вы пометите их, вы увидите, что это действительно сработало.

Что касается получения свободных полигонов, как вы видите выше, я в тупике. Если вы «извлекаете узлы» из результатов и применяете «Выпуклый корпус» (группировка по коту), будут пробелы и совпадения.

РЕДАКТИРОВАТЬ

Вы действительно можете получить желаемый результат. Как вы предложили в своем комментарии, вы можете сделать следующее ..

  • запустить извлечение узлов на выходе v.net.alloc
  • запустить полигоны Вороного на слое узлов извлечения
  • запустите фиксированный буфер расстояния , чтобы убедиться, что полигоны перекрываются (например, буфер на 1 метр)
  • запустите Dissolve в буферном слое, используя поле 'cat'

Вот результат ... он не идеален, иногда вы можете увидеть, как части дорожной сети уходят в соседние полигоны.

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

В новом 2.16 GUI есть «ловушка» для растворения. Я установил поле, но, казалось, все растворилось. Вы должны помнить, чтобы снять флажок «распустить все», или настройка поля игнорируется.

Стивен Кей
источник
Это полезно, и я, безусловно, могу использовать результат в моем приложении. Я временно оставлю это открытым, чтобы увидеть, есть ли способ получить полигоны. Возможно ли, что использование инструмента Полигоны Ворони как-то поможет?
ge0m3try
Вороной на ваших объектах даст только приблизительное значение, основанное на евклидовом расстоянии «по прямой линии» , поэтому он фактически игнорирует вашу дорожную сеть.
Стивен Кей,
Мне любопытно, если бы мне пришлось извлекать узлы из результата v.net.alloc, воронить его, а затем растворить полигоны голосования на основе уникального идентификатора объекта. Размер набора данных дорог очень велик, поэтому я не смогу проверить это быстро, но, возможно, в то же время возникнут некоторые мысли о том, почему это может не сработать.
ge0m3try
на самом деле, ваша догадка верна - только что попробовал.
Стивен Кей
2
ВАЖНОЕ ПРИМЕЧАНИЕ: есть несколько неприятностей с этим рабочим процессом, которые я понял, как преодолеть. Инструмент с фиксированным расстоянием не требуется. Инструмент SAGA Dissolveкажется намного быстрее, чем эквивалент QGIS. И, кажется, быстрее разделить Voronoiслой по catполю, а затем dissolveкаждую область отдельно. Mergeих снова вместе. Затем запустите GRASS v.cleanи выберите инструмент rmduplдля удаления дубликатов узлов. Это важно, в противном случае другие процессы, такие как отсечение, пространственное соединение, не будут работать должным образом на объединенном растворенном вороном лауэре.
ge0m3try