Расчет зон доступности станций метрополитена Москвы в GRASS GIS

Материал из GIS-Lab
Перейти к навигации Перейти к поиску

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

Цель работы --- разделить граф дорог города на участки в зависимости от расстояния до ближайшей станции метро. Предполагается, что пешеход будет передвигаться по дорогам, он не может "срезать" путь через дворы, парки и другие территории, если на них явным образом не указано наличие дороги.

Все действия будут производится в геоинформационной системе GRASS GIS.

Обзор

Для построения зон доступности нам понадобится:

  1. Импортировать данные по дорогам г. Москвы и выходам станций метрополитена из shp файлов в GRASS GIS.
  2. Произвести построение топологии для импортированных данных.
  3. Построить граф дорог.
  4. Расчитать зоны доступности.

Подготовка данных: импорт и построение топологии

Перед началом работы был создан проект, в который были импортированы дороги г. Москвы в формате 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

здесь при помощи команды v.distance расчитываются расстояния от объектов, хранящихся в 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

В результате выполнения команды v.net точки, лежащие в векторной карте stations будут присоеденены (операция=connect) к карте roads_net. Если бы в векторной карте stations были точки, находящиеся далее пятидесяти метров (thresh=50) от объектов карты roads_net, то такие точки остались бы без изменений.

В результате выполнения команды будет создан граф roads_net.

Построение изолиний на графе дорог

На предыдущем шаге был построен граф дорог и к нему были присоеденены точки, соответствующие выходам из станций метрополитена.

Следующим шагом будет построение зон доступности в зависимости от расстояний от станций. Возьмем например, расстояния, равные 500, 1000 и 1500 метров и построим для них зоны доступности. Для этого выполним следующую команду:

v.net.iso input=roads_net output=roads_net_iso ccats=1-100000 costs=500,1000,1500

В результате выполнения команды v.net.iso будет расчитана карта roads_net_iso, дороги этой карты кодируются так:

категория 1: расстояние до станции не превышает 500 метров
категория 2: расстояние до станции 500-1000 метров
категория 3: расстояние до станции 1000-1500 метров
категория 4: расстояние до станции свыше 1500 метров.

Пример построенной карты представлен на рисунке.