
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