6.2. Занятие: Векторный анализ
Векторные данные также можно анализировать, чтобы узнать, как различные объекты взаимодействуют друг с другом в пространстве. Есть множество различных функций, связанных с анализом, но мы не будем их все рассматривать. Мы лучше зададим вопрос и попытаемся найти на него ответ с помощью инструментов QGIS.
Цель этого урока: Задать вопрос и решить его с помощью инструментов анализа.
6.2.1. Процесс GIS
Перед тем как начать было бы хорошо сделать краткий обзор процесса, который надо пройти для решения проблемы. Он представлен ниже:
Обозначить проблему.
Получить данные.
Проанализировать проблему.
Представить результаты.
6.2.2. Проблема
Начнем с определения проблемы, которую нужно решить. Например, вы являетесь агентом по продаже недвижимости и ищете жилое помещение в Свеллендаме / Swellendam для своих клиентов со следующими критериями:
Жилое помещение должно находиться в Swellendam.
Оно должно находиться в пределах умеренного расстояния от школы (например, 1 км).
Его площадь должна быть более 100 квадратных метров.
Находиться на расстоянии менее чем 50 метров от главной дороги.
Находиться на расстоянии менее чем 500 метров от какого-нибудь ресторана.
6.2.3. Данные
Чтобы ответить на эти вопросы, нам нужны следующие данные:
Жилые помещения (здания) в этом районе.
Дороги внутри города и вокруг него.
Месторасположение школ и ресторанов.
Размер зданий.
Эти данные можно получить через OSM (OpenStreetMap) и вы узнаете, что набор данных, который вы использовали в этом руководстве, также можно использовать для выполнения этого урока.
Если вы хотите загрузить данные из другой местности, перейдите в Раздел Введение и ознакомьтесь, как это можно сделать.
Примечание
Хотя загружаемые файлы OSM содержат согласованные поля данных, охват и детализация могут быть разными. Если вы обнаружили, что выбранный вами регион, к примеру, не содержит сведения по ресторанам, то вам, возможно, надо выбрать другой регион.
6.2.4. Идем дальше: Начать проект и получить данные
Сначала нам надо загрузить данные, с которыми мы будет работать.
Начать новый проект QGIS.
Если хотите, можете добавить фоновую карту. Откройте Browser и загрузите фоновую карту OSM из меню XYZ Tiles.
В базе данных Geopackage
training_data.gpkg
вы сможете найти большинство наборов данных, которые мы будем использовать в это разделе:buildings
roads
restaurants
schools
Загрузите их, а также
landuse.sqlite
.Увеличьте масштаб слоя, чтобы увидеть Свеллендам в Южной Африке.
Прежде чем пойти дальше, мы должны отфильтровать слой roads, чтобы работать только с некоторыми конкретными типами дорог.
Некоторые дороги в наборах данных OSM перечислены как
unclassified
,tracks
,path
, а такжеfootway
. Нам надо исключить их из нашего набора данных и сосредоточиться на других типах дорог, которые больше подходят для этого упражнения.Кроме того, не все данные OSM могут быть актуализированы и мы также надо исключить значения
NULL
.Кликните правой кнопкой мыши на слой
roads
и выберите Filter….В диалоговом окне, которое появится, мы должны отфильтровать эти объекты с помощью следующего выражения:
"highway" NOT IN ('footway', 'path', 'unclassified', 'track') AND "highway" IS NOT NULL
Объединение двух команд
NOT
иIN
исключает все объекты, которые имеют эти атрибуты значений в полеhighway
.IS NOT NULL
в сочетании сAND
исключает дороги, не имеющие значения в полеhighway
.Примечание: значок рядом со слоем roads. Он поможет вам запомнить, что на этом слое активирован фильтр и потому некоторые функции могут быть недоступны в проекте.
Карта со всеми данными должна выглядеть следующим образом:
6.2.5. Попробуйте сами: Сконвертировать ССК слоев
Так как мы собираемся измерить расстояния внутри наших слоев, нам надо изменить ССК слоев. Для этого нам надо выбрать каждый слой по очереди, сохранить слой по-новому с нашей новой проекцией, а затем импортировать этот новый слой на нашу карту.
У вас появится много различных опций, например, вы сможете экспортировать каждый слой как набор данных формата ESRI Shapefile, вы можете добавить слои в существующий файл GeoPackage или создать другой файл GeoPackage и заполнить его новыми пере-проецированными слоями. Мы покажем последнюю опцию, чтобы training_data.gpkg
остался чистым. Вы сможете выбрать для себя свой лучший рабочий процесс.
Примечание
На этом примере мы используем ССК WGS 84 / UTM zone 34S, но вы должны использовать UTM ССК, который больше подходит для вашего региона.
Кликните правой кнопкой мыши на слой roads в панели Layers.
Кликните Export –> Save Features As…
В диалоговом окне Save Vector Layer As выберите GeoPackage в качестве Format.
Кликните на … для File name и назовите новый GeoPackage
vector_analysis
.Изменить Layer name на
roads_34S
.Измените CRS на WGS 84 / UTM зону 34S.
Кликните на OK:
Это позволит создать новую базу данных GeoPackage и добавить слой
roads_34S
.Повторите этот процесс для каждого слоя, создав новый слой в
vector_analysis.gpkg
файле GeoPackage с_34S
как приложение к исходному названию и убрав каждый из старых слоев из проекта.Примечание
Когда вы решите сохранить слой в существующий GeoPackage, QGIS добавит этот слой в GeoPackage.
После того, как вы завершили процесс по всем слоям, вам надо кликнуть правой кнопкой мыши на любой слой и нажать Zoom to layer extent, чтобы сфокусировать карту на местность, которая вас интересует.
Теперь, когда мы преобразовали данные OSM в Универсальную поперечную проекцию Меркатора (УППМ), мы можем начать наши вычисления.
6.2.6. Идем дальше: Анализируем проблемы: расстояние от школ и дорог
QGIS позволяет рассчитывать расстояния между любыми векторными объектами.
Удостоверьтесь в том, что только слои
roads_34S
иbuildings_34S
были видны (для упрощения карты во время работы).Кликни на
для того, чтобы открыть аналитическое ядро QGIS. В основном, в этом наборе инструментов имеются все алгоритмы (для векторного и растрового анализа).Мы можем начать рассчитывать площади вокруг
roads_34S
используя алгоритм Buffer. Вы можете найти его в группе .Или вы можете набрать в меню поиска
buffer
в верхней части панели инструментов:Два раза кликните по нему, чтобы открыть диалоговое окно алгоритма.
Выбираете
roads_34S
в качестве Input layer, указываете Distance до 50 и используйте значения по умолчанию для остальных параметров.По умолчанию Distance измеряется в метрах, потому что наш входной набор данных находится в системе координат проекции, которая использует метр в качестве основной единицы измерения. Вы можете использовать поле со списком, чтобы выбрать другие проецируемые единицы, такие как километры, ярды и т.д.
Примечание
Если вы пытаетесь создать буфер на слое с географической системой координат, система при обработке предупредит вас и предложит перепроецировать слой в метрическую систему координат.
По умолчанию при обработке создаются временные слои и они добавляется в панель Layers. Вы также можете приложить результат в базу данных GeoPackage:
Нажав на кнопку … и выбрав Save to GeoPackage…
Назвав новый слой
roads_buffer_50m
.Сохранив его в файле
vector_analysis.gpkg
.
Кликните на Run, а затем закройте диалоговой окно Buffer.
Ваша карта теперь будет выглядеть примерно так:
Если ваш новый слой находится в верхней части списка Layers, он, скорее всего, закроет большую часть вашей карты, но вы сможете увидеть все местности в вашем регионе, которые находятся на расстоянии в 50 м от дороги.
Обратите внимание, что в вашем буфере есть отдельные местности, соответствующие каждой отдельной дороге. Чтобы устранить эту проблему необходимо:
Убрать надпись roads_buffer_50m в слое и снова создать буфер с включённой Dissolve results командой.
Сохраните выход как roads_buffer_50m_dissolved.
Кликните на Run и закройте диалоговой окно Buffer.
После того, как вы добавили слой в панель Layers, она будет выглядеть так:
Теперь лишних делений уже нет.
Примечание
Краткая справка (помощь) в правой части диалогового окна объясняет, как работает алгоритм. Если вам нужна дополнительная информация, просто кликните на кнопку Help в нижней части, чтобы открыть более подробное руководство по алгоритму.
6.2.7. Попробуйте сами: Расстояние от школ
Следуйте тому же подходу, который описан выше, и создайте буфер для ваших школ.
It shall be 1 km
in radius.
Save the new layer in the vector_analysis.gpkg
file as schools_buffer_1km_dissolved
.
Answer
Your buffer dialog should look like this:
The Buffer distance is 1 kilometer.
The Segments to approximate value is set to 20. This is optional, but it’s recommended, because it makes the output buffers look smoother. Compare this:
To this:
The first image shows the buffer with the Segments to approximate value set to 5 and the second shows the value set to 20. In our example, the difference is subtle, but you can see that the buffer’s edges are smoother with the higher value.
6.2.8. Идем дальше: Зоны перекрытия
Теперь мы определили местности, где дорога находится на расстоянии менее чем в 50 метрах, а также местности, расположенные от школы в пределах 1 км (по прямой линии, а не по дороге). Естественно нам нужны только те местности, которые отвечают обоим этим критериям. Для этого нам нужно будет использовать инструмент Intersect. Вы сможете найти его в группе в Processing Toolbox.
Используйте два буферных слоя как Input layer и Overlay layer выберите
vector_analysis.gpkg
GeoPackage в Intersection с Layer nameroad_school_buffers_intersect
. Остальное оставьте как предлагается (по умолчанию).Кликните на кнопку Run.
На изображении ниже местности, окрашенные синим цветом это те местности, где оба соответствия по критериям расстояния соблюдены.
Вы можете убрать два буферных слоя и оставить только тот, который показывает, где они перекрываются, так как мы действительно хотели это выяснить в первую очередь:
6.2.9. Идем дальше: Извлечение зданий
Теперь у вас есть местность, на которой здания должны перекрывать друг друга. Теперь вам надо извлечь здания в этой местности.
Ищите пункт в меню
в Панели инструментов обработки.Выберите
buildings_34S
в Extract features from. Проверьте intersect в Where the features (geometric predicate), выберите буферный слой пересечения в By comparing to the features from. Сохраните вvector_analysis.gpkg
и назовите слойwell_located_houses
.Кликните на кнопку Run и закройте диалоговое окно.
Вы, скорее всего, обнаружите, что мало что изменилось. Если так, переместите слой well_located_houses в верхнюю часть списка слоев, затем увеличьте масштаб.
Здания красным цветом отвечают нашим критериям, а зеленым - нет.
Теперь у вас два отдельных слоя и вы сможете убрать
buildings_34S
из списка слоев.
6.2.10. Попробуйте сами: Дальше отфильтровать наши здания
Теперь у нас есть слой, который показывает нам все здания в пределах 1 км от школы и в пределах 50 м от дороги. Нам теперь надо сократить этот отбор и показать только те здания, которые находятся в пределах 500 м от ресторана.
Следуя процессам, описанным выше, вам надо создать новый слой, который будет называться houses_restaurants_500m и который дополнительно профильтрует ваш слой well_located_houses для того, чтобы показать только те, которые находятся в пределах 500 м от ресторана.
Answer
To create the new houses_restaurants_500m layer, we go through a two step process:
First, create a buffer of 500m around the restaurants and add the layer to the map:
Next, extract buildings within that buffer area:
Your map should now show only those buildings which are within 50m of a road, 1km of a school and 500m of a restaurant:
6.2.11. Идем дальше: Выбираем здания подходящего размера
Чтобы увидеть, какие здания имеют правильный размер (более 100 квадратных метров), нам надо рассчитать их размер.
Выберите слой houses_restaurants_500m и откройте Калькулятор поля, нажав на кнопку Open Field Calculator на главной панели инструментов или в окне таблицы.
Выберите Create a new field, установите Output field name на
AREA
, выберите Decimal number (real) как Output field type, и выберите$area
из группы .В новом поле
AREA
будет площадь каждого здания в квадратных метрах.Кликните на OK. Поле
AREA
добавлено в конце таблицы атрибутов.Кликните мышкой на кнопку Toggle Editing для того, чтобы завершить редактирование и сохраните ваши изменения при появлении запроса.
Во вкладке Provider Feature Filter на
в свойствах слоя установите"AREA >= 100
.Кликните на кнопку OK.
Ваша карта теперь должна показывать только те здания, которые соответствуют нашим первоначальным критериям и имеют размер более 100 квадратных метров.
6.2.12. Попробуйте сами
Сохраните ваш вариант как новый слой, следуя подходу, которому вы научились выше. Файл должен быть сохранен внутри той же базы данных GeoPackage с названием solution
.
6.2.13. В заключении
Следуя подходу решения проблем GIS вместе с инструментами векторного анализа QGIS, вы смогли быстро и легко решить проблему с несколькими критериями.
6.2.14. Что дальше?
На следующем уроке мы изучим, как рассчитать наикратчайшее расстояние по дорогам от одной точки до другой.