OpenTripPlanner (OTP) — это семейство программных проектов с открытым исходным кодом, которые предоставляют услуги по информированию пассажиров и анализу транспортных сетей. Недавно я попытался запустить экземпляр OTP на своем довольно старом ноутбуке и вскоре обнаружил, что у меня недостаточно оперативной памяти для построения необходимых графиков.
В моем случае меня интересовало только одно агентство в наборе данных (например, OTP должен находить маршруты, предоставленные только одной компанией, а не для всего набора данных GTFS), поэтому я попытался извлечь это агентство. по данным ГТФС. После процесса извлечения я смог настроить свой экземпляр OTP без каких-либо дополнительных проблем. Вот краткое описание того, как этого добиться.

OTP использует в основном два открытых стандартных источника ввода для построения своего представления транспортной сети:

  • GTFS (в моем случае: germany.gtfs.zip)
  • Данные OpenStreetMap (OSM)

Первым шагом для запуска OPT на вашем компьютере является построение графиков с использованием файлов GTFS и OSM. Просто запустите следующую команду в том же каталоге, где находятся ваши данные GTFS и OSM:

docker run \
  -v $PWD:/graphs \
  -e JAVA_OPTIONS=-Xmx4G \
  urbica/otp --build /graphs

В зависимости от того, насколько велика область, с которой вы работаете, это может привести к сбою (молча) из-за нехватки оперативной памяти. К счастью, на гитхабе есть отличный проект под названием transitland-lib, который предоставляет отличные инструменты для работы с файлами GTFS.

Среди прочего, он предоставляет расширенный метод extract, который можно использовать для извлечения различных аспектов файла данных GTFS:

% transitland extract --help
Usage: extract <input> <output>
  -allow-entity-errors
    	Allow entities with errors to be copied
  -allow-reference-errors
    	Allow entities with reference errors to be copied
  -create
    	Create a basic database schema if none exists
  -create-missing-shapes
    	Create missing Shapes from Trip stop-to-stop geometries
  -ext value
    	Include GTFS Extension
  -extract-agency value
    	Extract Agency
  -extract-calendar value
    	Extract Calendar
  -extract-route value
    	Extract Route
  -extract-route-type value
    	Extract Routes matching route_type
  -extract-stop value
    	Extract Stop
  -extract-trip value
    	Extract Trip
  -fvid int
    	Specify FeedVersionID when writing to a database
  -interpolate-stop-times
    	Interpolate missing StopTime arrival/departure values
  -normalize-service-ids
    	Create Calendar entities for CalendarDate service_id's
  -set value
    	Set values on output; format is filename,id,key,value
  -use-basic-route-types
    	Collapse extended route_type's into basic GTFS values

Поскольку в моем случае меня в основном интересовали маршруты одного агентства, я извлек это агентство (id: 53) и создал новый — гораздо меньший — файл GTFS (my_agency.gtfs.zip) с помощью следующей команды:

sudo ./transitland-linux extract -extract-agency 53 germany.gtfs.zip my_agency.gtfs.zip

После этого я смог создать OTP grpah и запустить экземпляр OTP локально, используя следующие команды для docker:

docker run \
  -v $PWD:/graphs \
  -e JAVA_OPTIONS=-Xmx4G \
  urbica/otp --build /graphs
docker run \
  -p 8080:8080 \
  -v $PWD:/var/otp/graphs \
  -e JAVA_OPTIONS=-Xmx4G \
  urbica/otp --server --autoScan --verbose