Расчет зон доступности станций метрополитена Москвы в GRASS GIS
В данной статье рассматривается задача построения зон пешей доступности станций метрополитена города Москвы.
Цель работы --- разделить граф дорог города на участки в зависимости от расстояния до ближайшей станции метро. Предполагается, что пешеход будет передвигаться по дорогам, он не может "срезать" путь через дворы, парки и другие территории, если на них явным образом не указано наличие дороги.
Все действия будут производится в геоинформационной системе GRASS GIS.
Обзор
Для построения зон доступности нам понадобится:
- Импортировать данные по дорогам г. Москвы и выходам станций метрополитена из shp файлов в GRASS GIS.
- Произвести построение топологии для импортированных данных.
- Построить граф дорог.
- Расчитать зоны доступности.
Подготовка данных: импорт и построение топологии
Перед началом работы был создан проект, в который были импортированы дороги г. Москвы в формате shp, созданные на основе данных OpenStreetMap. Данные доступны для загрузки по адресу http://beryllium.gis-lab.info/project/osmshp/.
Далее в этот проект были импортированы точки выходов из станций метро.
Полученный в результате импорта данных проект можно загрузить по следующей ссылке Медиа:MSK_28407.zip.
Поскольку данные были импортированы из нетопологического формата shp, то следующим действием необходимо построить топологию, т.е. добавить в случае необходимости узлы в местах пересечения дорог. Построение топологии производится при помощи команды v.clean:
v.clean in=roads out=roads_cross tool=break type=line
В результате будет создана новая карта roads_cross.
Построение графа дорог
Следующим шагом будет построение графа дорог и присоединение к нему дополнительных узлов --- выходов метрополитена. Дело в том, что точки, соответствующие выходам, были получены из другого источника, и они не обязательно попадают в точности на линию дороги. В итоге эти выходы представляются недоступными из дорожной сети. Пример такой ситуации приведен на рисунке.
Поэтому следующим шагом будет поиск для каждой точки-выхода ближайшей к ней дороги. После того, как ближайшая дорога определена, требуется соединить дорогу и точку дополнительной линией, чтобы включить точку в граф дорог.
- Посмотрим на каком расстоянии лежат выходы метро от дорог. Будем исходить из предположения, что расстояние от станции до дороги не превышает километра, т.к. маловероятно, что станция метро есть, а подходов к ней нет:
v.distance -p from=stations to=roads_cross upload=dist col=dist dmax=1000
здесь расчитываются расстояния от объектов, хранящихся в stations до ближайших объектов, хранящихся в roads_cross. Получившиеся значения будут выведены на экран в формате: номер станции | расстояние в метрах до ближайшей дороги. Первые несколько строк показаны ниже:
from_cat|dist 1|7.637926 2|7.637926 3|4.901780 4|4.901780 5|8.664475 6|8.664475 7|6.610899 ...
- Из полученной таблицы видно, что 50-ти метровых отрезков достаточно для того, чтобы соединить станции и дороги, поскольку все расстояния меньше 50 метров. Проводим отрезки:
v.net roads_cross points=stations out=roads_net op=connect thresh=50
Здесь точки, лежащие в векторной карте stations будут присоеденены (операция=connect) к карте roads_net. Если бы в векторной карте stations были точки, находящиеся далее пятидесяти метров (thresh=50) от объектов карты roads_net, то такие точки остались бы без изменений.
В результате выполнения команды будет создан граф roads_net.