Расчет зон доступности станций метрополитена Москвы в 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.