diff --git a/.github/workflows/unit_test.yml b/.github/workflows/unit_test.yml index c4462f2..7ab2d0f 100644 --- a/.github/workflows/unit_test.yml +++ b/.github/workflows/unit_test.yml @@ -23,8 +23,12 @@ jobs: run: | sudo add-apt-repository ppa:sumo/stable sudo apt-get update - sudo apt-get install sumo sumo-tools + sudo apt-get install sumo sumo-tools build-essential cmake export SUMO_HOME=/usr/share/sumo/tools + git clone https://github.com/cityflow-project/CityFlow.git + cd CityFlow + python -m pip install -e . + cd .. python -m pip install -e . python -m pip install -e ".[test]" ./modify_traci_connect_timeout.sh diff --git a/.gitignore b/.gitignore index f0621a6..6e91c41 100644 --- a/.gitignore +++ b/.gitignore @@ -134,5 +134,8 @@ dmypy.json *_case_info.json *_flow*.sumocfg +.vscode debug -exp +exp* +replay*.json +replay*.txt diff --git a/README.md b/README.md index dc00193..087651c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DI-smartcross -icon +icon DI-smartcross - Decision Intelligence Platform for Traffic Crossing Signal Control. @@ -10,7 +10,7 @@ DI-smartcross is application platform under [OpenDILab](http://opendilab.org/) **DI-smartcross** is an open-source traffic crossing signal control platform. DI-smartcross applies several Reinforcement Learning policies training & evaluation for traffic signal control system in provided road nets. -DI-smartcross uses [**DI-engine**](https://github.com/opendilab/DI-engine), a Reinforcement Learning platform to build RL experiments. DI-smartcross uses [SUMO](https://www.eclipse.org/sumo/) (Simulation of Urban MObility) traffic simulator package to run signal control simulation. +DI-smartcross uses [**DI-engine**](https://github.com/opendilab/DI-engine), a Reinforcement Learning platform to build RL experiments. DI-smartcross uses [SUMO](https://www.eclipse.org/sumo/) (Simulation of Urban MObility) and [CityFlow](https://cityflow-project.github.io) traffic simulator packages to run signal control simulation. DI-smartcross supports: @@ -24,9 +24,10 @@ DI-smartcross supports: DI-smartcross supports SUMO version >= 1.6.0. You can refer to [SUMO documentation](https://sumo.dlr.de/docs/Installing/index.html) or follow our installation guidance in [documents](https://opendilab.github.io/DI-smartcross/installation.html). +CityFlow can be installed and compiled from source code. You can clone their repo and run `pip install .` Then, DI-smartcross is able to be installed from source code. -Simply run `pip install` in the root folder of this repository. +Simply run `pip install .` in the root folder of this repository. This will automatically insall [DI-engine](https://github.com/opendilab/DI-engine) as well. ```bash @@ -40,22 +41,37 @@ and Rainbow DQN RL methods with multi-discrete actions for each crossing, as wel in which each crossing is handled by a individual agent. A set of default DI-engine configs is provided for each policy. You can check the document of DI-engine to get detail instructions of these configs. +Here we show RL training sript for sumo envs, same with cityflow env. + - train RL policies -Example of running DQN in wj3 env with default config. +Example of running DQN in sumo wj3 env with default config. ```bash sumo_train -e smartcross/envs/sumo_wj3_default_config.yaml -d entry/config/sumo_wj3_dqn_default_config.py ``` +Example of running PPO in cityflow grid env with default config. + +```bash +cityflow_train -e ./smartcross/envs/cityflow_grid/cityflow_grid_config.json -d entry/cityflow_config/cityflow_grid_ppo_default_config.py +``` + - evaluate existing policies Example of running random policy in wj3 env. + ```bash sumo_eval -p random -e smartcross/envs/sumo_wj3_default_config.yaml ``` +Example of running fix policy in cityflow grid env. + +```bash +cityflow_eval -e smartcross/envs/cityflow_grid/cityflow_auto_grid_config.json -d entry/cityflow_config/cityflow_eval_default_config.py -p fix +``` + It is rerecommended to refer to [documation](https://opendilab.github.io/DI-smartcross/index.html) for detail information. @@ -68,6 +84,7 @@ We appreciate all contributions to improve DI-smartcross, both algorithms and sy DI-smartcross released under the Apache 2.0 license. ## Citation + ```latex @misc{smartcross, title={{DI-smartcross: OpenDILab} Decision Intelligence platform for Traffic Crossing Signal Control}, @@ -77,4 +94,3 @@ DI-smartcross released under the Apache 2.0 license. year={2021}, } ``` - diff --git a/docs/figs/di-smartcross_banner.png b/docs/figs/di-smartcross_banner.png new file mode 100644 index 0000000..dfafdb7 Binary files /dev/null and b/docs/figs/di-smartcross_banner.png differ diff --git a/docs/source/envs/cf_grid_env.rst b/docs/source/envs/cf_grid_env.rst new file mode 100644 index 0000000..d13c549 --- /dev/null +++ b/docs/source/envs/cf_grid_env.rst @@ -0,0 +1,2 @@ +CityFlow Grid Env +##################### \ No newline at end of file diff --git a/docs/source/envs/rl_arterial7_env.rst b/docs/source/envs/rl_arterial7_env.rst new file mode 100644 index 0000000..c05f3cc --- /dev/null +++ b/docs/source/envs/rl_arterial7_env.rst @@ -0,0 +1,2 @@ +SUMO RL Arterial 7 Crossings Env +################################# \ No newline at end of file diff --git a/docs/source/envs/wj3_env.rst b/docs/source/envs/wj3_env.rst new file mode 100644 index 0000000..9d3ba05 --- /dev/null +++ b/docs/source/envs/wj3_env.rst @@ -0,0 +1,3 @@ +SUMO Beijing Wangjing 3 Crossings Env +###################################### + diff --git a/docs/source/faq.rst b/docs/source/faq.rst new file mode 100644 index 0000000..b90795e --- /dev/null +++ b/docs/source/faq.rst @@ -0,0 +1,15 @@ +FAQ +############## + +.. toctree:: + :maxdepth: 2 + + +Q1: SUMO environment always showing `Retrying in 1 seconds` +------------------------------------------------------------------ + +:A1: + SUMO environments and `traci` lib is slow to reset when running with large roadnets. + It only check the collection after reset for 1 sec. DI-smartcross provides an easy way + to change the retry timeout for `traci`. You can run `modify_traci_connect_timeout.sh` + file. It will automatically diff --git a/docs/source/index.rst b/docs/source/index.rst index e915703..1f5abb2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,4 +1,4 @@ -.. DI-drive documentation master file, created by +.. DI-smartcross documentation master file, created by sphinx-quickstart on Mon Jan 25 13:49:15 2021. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. @@ -14,15 +14,14 @@ DI-smartcross Documentation installation quick_start rl_environments + faq - -.. figure:: ../figs/di-smartcross_logo.png +.. figure:: ../figs/di-smartcross_banner.png :alt: DI-smartcross - :width: 500px Decision Intelligence Platform for Traffic Crossing Signal Control. -Last updated on +Last updated on 2022.04.16 ----- @@ -50,10 +49,13 @@ Content ============== `Installation `_ --------------------------------------- +------------------------------------------ + +`Quick Start `_ +------------------------------------- -`Quick Start `_ ------------------------------ +`RL Environments `_ +------------------------------------------------- -`RL Environments `_ ----------------------------------------- +`FAQ `_ +-------------------- diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 13a3e7a..52f5c65 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -4,10 +4,17 @@ Installation .. toctree:: :maxdepth: 2 +Here we provide easy installation for **DI-smartcross** and all simulators supported. + +.. note:: + + You can choose one of the simulators to run your experiments. Only chosen one needs to be installed. + + SUMO installation ===================== -**DI-smartcross** support SUMO version >= 1.6.0. Here we show two easy guides +**DI-smartcross** supports SUMO version >= 1.6.0. Here we show two easy guides of SUMO installation on Linux. Install SUMO via apt-get or homebrew @@ -92,6 +99,23 @@ If successful, the following message will be shown in the shell. License EPL-2.0: Eclipse Public License Version 2 Use --help to get the list of options. + +CityFlow Installation +========================== + +CityFlow simulator can be installed from source code via `CMake `_. +Please make sure it is correctly worked in your system. + +Simply download their source code and run ``pip install`` in the root folder to install CityFlow. + +.. code:: bash + + git clone https://github.com/cityflow-project/CityFlow.git + cd CityFlow + pip install . + +You can check installation by running ``import cityflow`` in python. + Install DI-smartcross ========================== diff --git a/docs/source/quick_start.rst b/docs/source/quick_start.rst index ffb72a1..f87ea51 100644 --- a/docs/source/quick_start.rst +++ b/docs/source/quick_start.rst @@ -15,11 +15,13 @@ to get detail instructions of these configs. train RL policies -------------------- +The type of policy can be automatically parsed from the config file. + .. code:: usage: sumo_train [-h] -d DING_CFG -e ENV_CFG [-s SEED] [--dynamic-flow] - [-cn COLLECT_ENV_NUM] [-en EVALUATE_ENV_NUM] - [--exp-name EXP_NAME] + [-cn COLLECT_ENV_NUM] [-en EVALUATE_ENV_NUM] + [--exp-name EXP_NAME] DI-smartcross training script @@ -40,6 +42,10 @@ train RL policies Example of running DQN in wj3 env with default config. +.. note:: + + Running with dynamic flow is only supported for arterial7 env currently. + .. code:: bash sumo_train -e smartcross/envs/sumo_wj3_default_config.yaml -d entry/config/sumo_wj3_dqn_default_config.py @@ -47,11 +53,14 @@ Example of running DQN in wj3 env with default config. evaluate existing policies -------------------------------- +We provide two eval policies: random and fixed-time. You can choose one to evaluate +as comparison. It is suggested to use the `eval_default_config` for each env. + .. code:: usage: sumo_eval [-h] [-d DING_CFG] -e ENV_CFG [-s SEED] - [-p {random,fix,dqn,rainbow,ppo}] [--dynamic-flow] - [-n ENV_NUM] [--gui] [-c CKPT_PATH] + [-p {random,fix,dqn,rainbow,ppo}] [--dynamic-flow] + [-n ENV_NUM] [--gui] [-c CKPT_PATH] DI-smartcross testing script @@ -76,4 +85,63 @@ Example of running random policy in wj3 env. .. code:: bash - sumo_eval -p random -e smartcross/envs/sumo_wj3_default_config.yaml \ No newline at end of file + sumo_eval -p random -e smartcross/envs/sumo_wj3_default_config.yaml + + +CityFlow Entries +================= + +**DI-smartcross** provides a simple DQN and Off-policy PPO demo for CityFlow env. Each +policy comes with a default **DI-engine** configs is provided for each policy. You can +check the document of DI-engine to get detail instructions of these configs. + +train RL policies +-------------------- + +.. code:: + + usage: cityflow_train [-h] -d DING_CFG -e ENV_CFG [-s SEED] + [-cn COLLECT_ENV_NUM] [-en EVALUATE_ENV_NUM] + [--exp-name EXP_NAME] + + DI-smartcross training script + + optional arguments: + -h, --help show this help message and exit + -d DING_CFG, --ding-cfg DING_CFG + DI-engine configuration path + -e ENV_CFG, --env-cfg ENV_CFG + cityflow json configuration path + -s SEED, --seed SEED random seed + -cn COLLECT_ENV_NUM, --collect-env-num COLLECT_ENV_NUM + collector env num for training + -en EVALUATE_ENV_NUM, --evaluate-env-num EVALUATE_ENV_NUM + evaluator env num for training + --exp-name EXP_NAME experiment name to save log and ckpt + +evaluate existing policies +-------------------------------- + +Note that CityFlow will run in fixed-time mode by default when not in rl mode. +So the fix policy runs with an `auto_config.json`. + +.. code:: + + usage: cityflow_eval [-h] [-d DING_CFG] -e ENV_CFG [-s SEED] + [-p {fix,dqn,ppo}] [-n ENV_NUM] [-c CKPT_PATH] + + DI-smartcross training script + + optional arguments: + -h, --help show this help message and exit + -d DING_CFG, --ding-cfg DING_CFG + DI-engine configuration path + -e ENV_CFG, --env-cfg ENV_CFG + sumo environment configuration path + -s SEED, --seed SEED random seed for sumo + -p {fix,dqn,ppo}, --policy-type {fix,dqn,ppo} + RL policy type + -n ENV_NUM, --env-num ENV_NUM + sumo env num for evaluation + -c CKPT_PATH, --ckpt-path CKPT_PATH + model ckpt path diff --git a/docs/source/rl_environments.rst b/docs/source/rl_environments.rst index d04494c..4ea7b4f 100644 --- a/docs/source/rl_environments.rst +++ b/docs/source/rl_environments.rst @@ -69,3 +69,67 @@ Multi-agent It is only necessary to add ``multi_agent`` in **DI-engine** config file to convert common PPO into MAPPO, and change the ``use_centrolized_obs`` in environment config into ``True``. The policy and observations can be automatically changed to run individual agent for each cross. + +Roadnets +------------- + +.. `Beijing Wangjing 3 Crossings <./envs/wj3_env.html>`_ + +.. `RL Arterial 7 Crossings <./envs/rl_arterial7_env.html>`_ + +.. toctree:: + :maxdepth: 2 + + envs/wj3_env + envs/rl_arterial7_env + + +CityFlow environments +============================= + +configuration +----------------- + +CityFlow simulator has its own config `json` file, with roadnet file, flow file and replay file defined in it. +DI-smartcross adds some extra configs together with CityFlow's config file path in DI-engine's env config. + +.. code:: python + + main_config = dict( + env=dict( + obs_type=['phase', 'lane_vehicle_num', 'lane_waiting_vehicle_num'], + max_episode_duration=1000, + green_duration=30, + yellow_duration=5, + red_duration=0, + ... + ), + ... + ) + +Observation +---------------- + +We provide several types of observations of each cross. + +- phase: One-hot phase vector of current cross signal +- lane_vehicle_num: vehicle nums of each incoming lane +- lane_waiting_vehicle_num: waiting vehicle nums of each incoming lane + +Action +------------- + +CityFlow environment supports changing cross signal to target phase. The action space is set to multi-discrete for each cross to reduce action num. + +Reward +------------- + +CityFlow environment uses pressure of each cross as reward + +Roadnets +------------- + +.. toctree:: + :maxdepth: 2 + + envs/cf_grid_env diff --git a/entry/cityflow_config/cityflow_eval_default_config.py b/entry/cityflow_config/cityflow_eval_default_config.py new file mode 100644 index 0000000..70b8b7a --- /dev/null +++ b/entry/cityflow_config/cityflow_eval_default_config.py @@ -0,0 +1,36 @@ +from easydict import EasyDict + +cityflow_eval_default_config = dict( + env=dict( + manager=dict( + # Whether to use shared memory. Only effective if manager type is 'subprocess' + shared_memory=False, + context='spawn', + retry_type='renew', + ), + obs_type=['phase'], + n_evaluator_episode=1, + max_episode_duration=1000, + green_duration=30, + yellow_duration=5, + red_duration=0, + stop_value=0, + collector_env_num=1, + evaluator_env_num=1, + ), + policy=dict(cuda=False, ) +) + +create_config = dict( + env_manager=dict(type='subprocess', ), + env=dict( + # Must use the absolute path. All the following "import_names" should obey this too. + import_names=['smartcross.envs.cityflow_env'], + type='cityflow_env', + ), + policy=dict(), +) + +create_config = EasyDict(create_config) +cityflow_eval_default_config = EasyDict(cityflow_eval_default_config) +main_config = cityflow_eval_default_config diff --git a/entry/cityflow_config/cityflow_grid_dqn_default_config.py b/entry/cityflow_config/cityflow_grid_dqn_default_config.py new file mode 100644 index 0000000..72ca954 --- /dev/null +++ b/entry/cityflow_config/cityflow_grid_dqn_default_config.py @@ -0,0 +1,117 @@ +from easydict import EasyDict + +nstep = 1 +cityflow_mddqn_default_config = dict( + exp_name='cityflow_grid23_md_dqn', + env=dict( + manager=dict( + shared_memory=False, + context='spawn', + retry_type='renew', + max_retry=5, + ), + obs_type=['phase', 'lane_vehicle_num', 'lane_waiting_vehicle_num'], + max_episode_duration=1000, + green_duration=30, + yellow_duration=5, + red_duration=0, + # Episode number for evaluation. + n_evaluator_episode=1, + # Once evaluation reward reaches "stop_value", which means the policy converges, the training can end. + stop_value=0, + collector_env_num=15, + evaluator_env_num=1, + ), + policy=dict( + # Whether to use cuda for network. + cuda=True, + # Whether use priority + priority=True, + priority_IS_weight=True, + # How many steps in td error. + nstep=nstep, + # Reward's future discount facotr, aka. gamma. + discount_factor=0.99, + random_collect_size=10000, + # Model config used for model creating. Remember to change "obs_shape" and "action_shape" according to env. + model=dict( + obs_shape=264, + action_shape=[4] * 6, + # Whether to use dueling head. + dueling=True, + ), + # learn_mode config + learn=dict( + # How many steps to train after one collection. Bigger "update_per_collect" means bigger off-policy. + # collect data -> train fixed steps -> collect data -> ... + update_per_collect=200, + batch_size=64, + learning_rate=1e-4, + target_update_freq=100, + learner=dict( + hook=dict( + save_ckpt_after_iter=1000, + log_show_after_iter=1000, + ), + ), + ignore_done=True, + ), + # collect_mode config + collect=dict( + # Cut trajectories into pieces with length "unrol_len". + unroll_len=1, + # You can use either "n_sample" or "n_episode" in collector.collect. + # Get "n_sample" samples per collect. + n_sample=600, + collector=dict( + # Get "n_episode" complete episodic trajectories per collect. + # n_episode=8, + transform_obs=True, + collect_print_freq=1000, + ), + ), + eval=dict( + evaluator=dict( + # Evaluate every "eval_freq" training steps. + eval_freq=1000, + ) + ), + # command_mode config + other=dict( + # Epsilon greedy with decay. + eps=dict( + # Decay type. Support ['exp', 'linear']. + type='exp', + start=0.95, + end=0.1, + decay=50000, + ), + replay_buffer=dict( + replay_buffer_size=400000, + max_use=10000, + monitor=dict( + sampled_data_attr=dict(print_freq=300, ), + periodic_thruput=dict(seconds=300, ), + ), + ), + ), + ), +) + +create_config = dict( + env_manager=dict(type='subprocess', ), + env=dict( + # Must use the absolute path. All the following "import_names" should obey this too. + import_names=['smartcross.envs.cityflow_env'], + type='cityflow_env', + ), + # RL policy register name (refer to function "register_policy"). + policy=dict( + import_names=['dizoo.common.policy.md_dqn'], + type='md_dqn', + ), +) + +create_config = EasyDict(create_config) +cityflow_mddqn_default_config = EasyDict(cityflow_mddqn_default_config) +main_config = cityflow_mddqn_default_config \ No newline at end of file diff --git a/entry/cityflow_config/cityflow_grid_ppo_default_config.py b/entry/cityflow_config/cityflow_grid_ppo_default_config.py new file mode 100644 index 0000000..ab27cdc --- /dev/null +++ b/entry/cityflow_config/cityflow_grid_ppo_default_config.py @@ -0,0 +1,95 @@ +from easydict import EasyDict + +cityflow_mdppo_default_config = dict( + exp_name='cityflow_grid23_md_ppo', + env=dict( + manager=dict( + shared_memory=False, + context='spawn', + retry_type='renew', + max_retry=5, + ), + obs_type=['phase', 'lane_vehicle_num', 'lane_waiting_vehicle_num'], + max_episode_duration=1000, + green_duration=30, + yellow_duration=5, + red_duration=0, + # Episode number for evaluation. + n_evaluator_episode=1, + # Once evaluation reward reaches "stop_value", which means the policy converges, the training can end. + stop_value=0, + collector_env_num=15, + evaluator_env_num=1, + ), + policy=dict( + # Whether to use cuda for network. + cuda=True, + # Whether use priority + priority=False, + continuous=False, + # Model config used for model creating. Remember to change "obs_shape" and "action_shape" according to env. + model=dict( + obs_shape=264, + action_shape=[4] * 6, + ), + # learn_mode config + learn=dict( + # How many steps to train after one collection. Bigger "update_per_collect" means bigger off-policy. + # collect data -> train fixed steps -> collect data -> ... + epoch_per_collect=4, + batch_size=64, + learning_rate=1e-4, + value_weight=0.5, + entropy_weight=0.01, + clip_ratio=0.2, + learner=dict( + hook=dict( + save_ckpt_after_iter=1000, + log_show_after_iter=1000, + ), + ), + ), + # collect_mode config + collect=dict( + # Cut trajectories into pieces with length "unrol_len". + unroll_len=1, + discount_factor=0.99, + gae_lambda=0.95, + # You can use either "n_sample" or "n_episode" in collector.collect. + # Get "n_sample" samples per collect. + n_sample=600, + collector=dict( + # Get "n_episode" complete episodic trajectories per collect. + # n_episode=8, + transform_obs=True, + collect_print_freq=1000, + ), + ), + eval=dict( + evaluator=dict( + # Evaluate every "eval_freq" training steps. + eval_freq=1000, + ) + ), + # command_mode config + other=dict(), + ), +) + +create_config = dict( + env_manager=dict( + type='subprocess', + ), + env=dict( + import_names=['smartcross.envs.cityflow_env'], + type='cityflow_env', + ), + policy=dict( + import_names=['dizoo.common.policy.md_ppo'], + type='md_ppo', + ), +) + +create_config = EasyDict(create_config) +cityflow_mdppo_default_config = EasyDict(cityflow_mdppo_default_config) +main_config = cityflow_mdppo_default_config diff --git a/entry/cityflow_eval b/entry/cityflow_eval new file mode 100644 index 0000000..360c505 --- /dev/null +++ b/entry/cityflow_eval @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import os +import torch +import argparse +from functools import partial +from easydict import EasyDict + +from ding.config import compile_config +from ding.policy import create_policy +from ding.envs import get_vec_env_setting, create_env_manager +from ding.worker import InteractionSerialEvaluator +from ding.utils.default_helper import set_pkg_seed, deep_merge_dicts +from smartcross.utils.config_utils import read_ding_config +from smartcross.policy import FixedPolicy + + +def main(args, seed=None): + ding_cfg = args.ding_cfg + main_config, create_config = read_ding_config(ding_cfg) + cityflow_env_config = {'config_path': args.env_cfg} + if args.policy_type == 'fix': + create_config.policy['type'] = 'smartcross_fix' + main_config.env = deep_merge_dicts(main_config.env, cityflow_env_config) + cfg = compile_config(main_config, create_cfg=create_config, seed=seed, auto=True, save_cfg=False) + if args.env_num > 0: + cfg.env.evaluator_env_num = args.env_num + if cfg.env.n_evaluator_episode < args.env_num: + cfg.env.n_evaluator_episode = cfg.env.evaluator_env_num + env_fn, _, evaluator_env_cfg = get_vec_env_setting(cfg.env) + env = env_fn(cfg=evaluator_env_cfg[0]) + evaluator_env = create_env_manager(cfg.env.manager, [partial(env_fn, cfg=c) for c in evaluator_env_cfg]) + if seed is not None: + evaluator_env.seed(cfg.seed, dynamic_seed=False) + set_pkg_seed(cfg.seed, use_cuda=cfg.policy.cuda) + + if args.policy_type == 'fix': + policy = FixedPolicy(evaluator_env.action_space) + else: + policy = create_policy(cfg.policy, enable_field=['eval']).eval_mode + if args.ckpt_path is not None: + state_dict = torch.load(args.ckpt_path, map_location='cpu') + policy.load_state_dict(state_dict) + + evaluator = InteractionSerialEvaluator( + cfg.policy.eval.evaluator, + evaluator_env, + policy, + ) + _, eval_reward = evaluator.eval(None, -1, -1, cfg.env.n_evaluator_episode) + eval_reward = [r['final_eval_reward'].item() for r in eval_reward] + print('Eval is over! The performance is {}'.format(eval_reward)) + evaluator.close() + return eval_reward + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='DI-smartcross training script') + parser.add_argument('-d', '--ding-cfg', default=None, help='DI-engine configuration path') + parser.add_argument('-e', '--env-cfg', required=True, help='sumo environment configuration path') + parser.add_argument('-s', '--seed', default=None, type=int, help='random seed for sumo') + parser.add_argument( + '-p', '--policy-type', default='dqn', choices=['fix', 'dqn', 'ppo'], help='RL policy type' + ) + parser.add_argument('-n', '--env-num', type=int, default=1, help='sumo env num for evaluation') + parser.add_argument('-c', '--ckpt-path', type=str, default=None, help='model ckpt path') + + args = parser.parse_args() + main(args, args.seed) diff --git a/entry/cityflow_train b/entry/cityflow_train new file mode 100644 index 0000000..8861032 --- /dev/null +++ b/entry/cityflow_train @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +import os +import logging +import argparse +from functools import partial +from tensorboardX import SummaryWriter + +from ding.config import compile_config +from ding.policy import create_policy, PolicyFactory +from ding.envs import get_vec_env_setting, create_env_manager +from ding.worker import BaseLearner, InteractionSerialEvaluator, create_serial_collector, create_buffer +from ding.utils.default_helper import set_pkg_seed +from ding.utils import deep_merge_dicts +from ding.rl_utils import get_epsilon_greedy_fn +from smartcross.utils.config_utils import read_ding_config +from smartcross.policy.default_policy import get_random_sample_func + + +def main(args, seed=None): + ding_cfg = args.ding_cfg + main_config, create_config = read_ding_config(ding_cfg) + cityflow_env_config = {'config_path': args.env_cfg} + main_config.env = deep_merge_dicts(main_config.env, cityflow_env_config) + if args.collect_env_num > 0: + main_config.env.collector_env_num = args.collect_env_num + if args.evaluate_env_num > 0: + main_config.env.evaluator_env_num = args.evaluate_env_num + if args.exp_name is not None: + main_config.exp_name = args.exp_name + + cfg = compile_config(main_config, create_cfg=create_config, seed=seed, auto=True) + env_fn, collecotr_env_cfg, evaluator_env_cfg = get_vec_env_setting(cfg.env) + collector_env = create_env_manager(cfg.env.manager, [partial(env_fn, cfg=c) for c in collecotr_env_cfg]) + evaluator_env = create_env_manager(cfg.env.manager, [partial(env_fn, cfg=c) for c in evaluator_env_cfg]) + if seed is not None: + collector_env.seed(cfg.seed) + evaluator_env.seed(cfg.seed, dynamic_seed=False) + set_pkg_seed(cfg.seed, use_cuda=cfg.policy.cuda) + policy = create_policy(cfg.policy, enable_field=['learn', 'collect', 'eval']) + + tb_logger = SummaryWriter('./{}/tensorboard/'.format(cfg.exp_name)) + learner = BaseLearner(cfg.policy.learn.learner, policy.learn_mode, tb_logger, exp_name=cfg.exp_name) + collector = create_serial_collector( + cfg.policy.collect.collector, + env=collector_env, + policy=policy.collect_mode, + tb_logger=tb_logger, + exp_name=cfg.exp_name + ) + evaluator = InteractionSerialEvaluator( + cfg.policy.eval.evaluator, evaluator_env, policy.eval_mode, tb_logger, exp_name=cfg.exp_name + ) + if not cfg.policy.on_policy: + replay_buffer = create_buffer(cfg.policy.other.replay_buffer, tb_logger=tb_logger, exp_name=cfg.exp_name) + # ========== + # Main loop + # ========== + # Learner's before_run hook. + learner.call_hook('before_run') + eps_cfg = cfg.policy.other.get('eps', None) + if eps_cfg is not None: + epsilon_greedy = get_epsilon_greedy_fn(eps_cfg.start, eps_cfg.end, eps_cfg.decay, eps_cfg.type) + + # Accumulate plenty of data at the beginning of training. + if cfg.policy.get('random_collect_size', 0) > 0: + action_space = collector_env.action_space + random_sample_func = get_random_sample_func(action_space) + random_policy = PolicyFactory.get_random_policy(policy.collect_mode, forward_fn=random_sample_func) + collector.reset_policy(random_policy) + new_data = collector.collect(n_sample=cfg.policy.random_collect_size) + replay_buffer.push(new_data, cur_collector_envstep=0) + collector.reset_policy(policy.collect_mode) + + for _ in range(cfg.policy.learn.learner.train_iterations): + # Evaluate policy performance + if evaluator.should_eval(learner.train_iter): + stop, reward = evaluator.eval(learner.save_checkpoint, learner.train_iter, collector.envstep) + if stop: + break + # Collect data by default config n_sample/n_episode + if eps_cfg is not None: + collect_kwargs = {'eps': epsilon_greedy(collector.envstep)} + new_data = collector.collect( + cfg.policy.collect.n_sample, train_iter=learner.train_iter, policy_kwargs=collect_kwargs + ) + else: + new_data = collector.collect(cfg.policy.collect.n_sample, train_iter=learner.train_iter) + if cfg.policy.on_policy: + learner.train(new_data, collector.envstep) + else: + replay_buffer.push(new_data, cur_collector_envstep=collector.envstep) + # Learn policy from collected data + for i in range(cfg.policy.learn.update_per_collect): + # Learner will train ``update_per_collect`` times in one iteration. + train_data = replay_buffer.sample(cfg.policy.learn.batch_size, learner.train_iter) + if train_data is None: + # It is possible that replay buffer's data count is too few to train ``update_per_collect`` times + logging.warning( + "Replay buffer's data can only train for {} steps. ".format(i) + + "You can modify data collect config, e.g. increasing n_sample, n_episode." + ) + break + learner.train(train_data, collector.envstep) + if learner.policy.get_attribute('priority'): + replay_buffer.update(learner.priority_info) + + # Learner's after_run hook. + learner.call_hook('after_run') + + learner.close() + collector.close() + evaluator.close() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='DI-smartcross training script') + parser.add_argument('-d', '--ding-cfg', required=True, help='DI-engine configuration path') + parser.add_argument('-e', '--env-cfg', required=True, help='cityflow json configuration path') + parser.add_argument('-s', '--seed', default=None, type=int, help='random seed') + parser.add_argument('-cn', '--collect-env-num', type=int, default=1, help='collector env num for training') + parser.add_argument('-en', '--evaluate-env-num', type=int, default=1, help='evaluator env num for training') + parser.add_argument('--exp-name', type=str, default=None, help='experiment name to save log and ckpt') + + args = parser.parse_args() + main(args, args.seed) diff --git a/entry/config/sumo_arterial7_dqn_default_config.py b/entry/sumo_config/sumo_arterial7_dqn_default_config.py similarity index 100% rename from entry/config/sumo_arterial7_dqn_default_config.py rename to entry/sumo_config/sumo_arterial7_dqn_default_config.py diff --git a/entry/config/sumo_arterial7_mappo_default_config.py b/entry/sumo_config/sumo_arterial7_mappo_default_config.py similarity index 100% rename from entry/config/sumo_arterial7_mappo_default_config.py rename to entry/sumo_config/sumo_arterial7_mappo_default_config.py diff --git a/entry/config/sumo_arterial7_offppo_default_config.py b/entry/sumo_config/sumo_arterial7_offppo_default_config.py similarity index 100% rename from entry/config/sumo_arterial7_offppo_default_config.py rename to entry/sumo_config/sumo_arterial7_offppo_default_config.py diff --git a/entry/config/sumo_arterial7_ppo_default_config.py b/entry/sumo_config/sumo_arterial7_ppo_default_config.py similarity index 100% rename from entry/config/sumo_arterial7_ppo_default_config.py rename to entry/sumo_config/sumo_arterial7_ppo_default_config.py diff --git a/entry/config/sumo_eval_default_config.py b/entry/sumo_config/sumo_eval_default_config.py similarity index 100% rename from entry/config/sumo_eval_default_config.py rename to entry/sumo_config/sumo_eval_default_config.py diff --git a/entry/config/sumo_wj3_dqn_default_config.py b/entry/sumo_config/sumo_wj3_dqn_default_config.py similarity index 100% rename from entry/config/sumo_wj3_dqn_default_config.py rename to entry/sumo_config/sumo_wj3_dqn_default_config.py diff --git a/entry/config/sumo_wj3_mappo_default_config.py b/entry/sumo_config/sumo_wj3_mappo_default_config.py similarity index 100% rename from entry/config/sumo_wj3_mappo_default_config.py rename to entry/sumo_config/sumo_wj3_mappo_default_config.py diff --git a/entry/config/sumo_wj3_offppo_default_config.py b/entry/sumo_config/sumo_wj3_offppo_default_config.py similarity index 100% rename from entry/config/sumo_wj3_offppo_default_config.py rename to entry/sumo_config/sumo_wj3_offppo_default_config.py diff --git a/entry/config/sumo_wj3_ppo_default_config.py b/entry/sumo_config/sumo_wj3_ppo_default_config.py similarity index 100% rename from entry/config/sumo_wj3_ppo_default_config.py rename to entry/sumo_config/sumo_wj3_ppo_default_config.py diff --git a/entry/config/sumo_wj3_rainbow_default_config.py b/entry/sumo_config/sumo_wj3_rainbow_default_config.py similarity index 100% rename from entry/config/sumo_wj3_rainbow_default_config.py rename to entry/sumo_config/sumo_wj3_rainbow_default_config.py diff --git a/entry/sumo_eval b/entry/sumo_eval index b14dffb..dfa3f34 100644 --- a/entry/sumo_eval +++ b/entry/sumo_eval @@ -15,9 +15,9 @@ from smartcross.utils.config_utils import get_sumo_config from smartcross.policy import RandomPolicy, FixedPolicy -def main(args, seed=0): +def main(args, seed=None): if args.policy_type in ['random', 'fix']: - from entry.config.sumo_eval_default_config import main_config, create_config + from entry.sumo_config.sumo_eval_default_config import main_config, create_config with open(args.env_cfg, 'r') as f: sumoenv_cfg = yaml.safe_load(f) sumoenv_cfg = EasyDict(sumoenv_cfg) @@ -27,7 +27,7 @@ def main(args, seed=0): main_config, create_config = get_sumo_config(args) if args.gui: main_config.env.gui = True - cfg = compile_config(main_config, create_cfg=create_config, seed=seed, auto=True) + cfg = compile_config(main_config, create_cfg=create_config, seed=seed, auto=True, save_cfg=False) if args.env_num > 0: cfg.env.evaluator_env_num = args.env_num if cfg.env.n_evaluator_episode < args.env_num: @@ -39,9 +39,9 @@ def main(args, seed=0): set_pkg_seed(cfg.seed, use_cuda=cfg.policy.cuda) if args.policy_type == 'random': - policy = RandomPolicy(evaluator_env.env_info().act_space) + policy = RandomPolicy(evaluator_env.action_space) elif args.policy_type == 'fix': - policy = FixedPolicy(evaluator_env.env_info().act_space) + policy = FixedPolicy(evaluator_env.action_space) else: policy = create_policy(cfg.policy, enable_field=['eval']).eval_mode if args.ckpt_path is not None: @@ -54,6 +54,7 @@ def main(args, seed=0): policy, ) _, eval_reward = evaluator.eval(None, -1, -1, cfg.env.n_evaluator_episode) + eval_reward = [r['final_eval_reward'].item() for r in eval_reward] print('Eval is over! The performance is {}'.format(eval_reward)) evaluator.close() return eval_reward @@ -63,12 +64,12 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description='DI-smartcross training script') parser.add_argument('-d', '--ding-cfg', default=None, help='DI-engine configuration path') parser.add_argument('-e', '--env-cfg', required=True, help='sumo environment configuration path') - parser.add_argument('-s', '--seed', default=0, type=int, help='random seed for sumo') + parser.add_argument('-s', '--seed', default=None, type=int, help='random seed for sumo') parser.add_argument( '-p', '--policy-type', default='dqn', choices=['random', 'fix', 'dqn', 'rainbow', 'ppo'], help='RL policy type' ) parser.add_argument('--dynamic-flow', action='store_true', help="use dynamic route flow") - parser.add_argument('-n', '--env-num', type=int, default=-1, help='sumo env num for evaluation') + parser.add_argument('-n', '--env-num', type=int, default=1, help='sumo env num for evaluation') parser.add_argument('--gui', action='store_true', help="open gui for visualize") parser.add_argument('-c', '--ckpt-path', type=str, default=None, help='model ckpt path') diff --git a/entry/sumo_train b/entry/sumo_train index 5a787b8..b32eb96 100644 --- a/entry/sumo_train +++ b/entry/sumo_train @@ -12,6 +12,7 @@ from ding.worker import BaseLearner, InteractionSerialEvaluator, create_serial_c from ding.utils.default_helper import set_pkg_seed from ding.rl_utils import get_epsilon_greedy_fn from smartcross.utils.config_utils import get_sumo_config +from smartcross.policy.default_policy import get_random_sample_func def main(args, seed=None): @@ -59,13 +60,14 @@ def main(args, seed=None): # Accumulate plenty of data at the beginning of training. if cfg.policy.get('random_collect_size', 0) > 0: - action_space = collector_env.env_info().act_space - random_policy = PolicyFactory.get_random_policy(policy.collect_mode, action_space=action_space) + action_space = collector_env.action_space + random_sample_func = get_random_sample_func(action_space) + random_policy = PolicyFactory.get_random_policy(policy.collect_mode, forward_fn=random_sample_func) collector.reset_policy(random_policy) new_data = collector.collect(n_sample=cfg.policy.random_collect_size) replay_buffer.push(new_data, cur_collector_envstep=0) collector.reset_policy(policy.collect_mode) - + for _ in range(cfg.policy.learn.learner.train_iterations): # Evaluate policy performance if evaluator.should_eval(learner.train_iter): @@ -113,8 +115,8 @@ if __name__ == "__main__": parser.add_argument('-e', '--env-cfg', required=True, help='sumo environment configuration path') parser.add_argument('-s', '--seed', default=None, type=int, help='random seed for sumo') parser.add_argument('--dynamic-flow', action='store_true', help="use dynamic route flow") - parser.add_argument('-cn', '--collect-env-num', type=int, default=-1, help='collector sumo env num for training') - parser.add_argument('-en', '--evaluate-env-num', type=int, default=-1, help='evaluator sumo env num for training') + parser.add_argument('-cn', '--collect-env-num', type=int, default=1, help='collector sumo env num for training') + parser.add_argument('-en', '--evaluate-env-num', type=int, default=1, help='evaluator sumo env num for training') parser.add_argument('--exp-name', type=str, default=None, help='experiment name to save log and ckpt') args = parser.parse_args() diff --git a/setup.py b/setup.py index 862c575..c6e4fce 100644 --- a/setup.py +++ b/setup.py @@ -1,16 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS-IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Module setuptools script.""" + from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os from setuptools import setup, find_packages +here = os.path.abspath(os.path.dirname(__file__)) +meta = {} +with open(os.path.join(here, 'smartcross', '__init__.py'), 'r') as f: + exec(f.read(), meta) + description = """DI-smartcross: OpenDILab Decision Intelligence Traffic Crossing Signal Control Platform""" setup( - name='DI-smartcross', - version='0.1.0', - description='OpenDILab Decision Intelligence Traffic Crossing Signal Control Platform', + name=meta['__TITLE__'], + version=meta['__VERSION__'], + description=meta['__DESCRIPTION__'], long_description=description, - author='OpenDILab', - license='Apache 2.0', + author=meta['__AUTHOR__'], + license='Apache License, Version 2.0', keywords='Decision Intelligence, Reinforcement Learning, Traffic Signal Control', packages=[ *find_packages(include=('smartcross', 'smartcross.*')), @@ -18,10 +40,12 @@ scripts=[ 'entry/sumo_train', 'entry/sumo_eval', + 'entry/cityflow_train', + 'entry/cityflow_eval', ], install_requires=[ + "di-engine>=0.3", "torch>=1.4,<=1.8", - "di-engine>=0.2", "sumolib", "traci", "MarkupSafe<=2.0.1'", @@ -46,5 +70,16 @@ 'yapf==0.29.0', 'flake8', ], - } + }, + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Science/Research/Developers', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: POSIX :: Linux', + 'Operating System :: Microsoft :: Windows', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + ], ) diff --git a/smartcross/__init__.py b/smartcross/__init__.py new file mode 100644 index 0000000..36d8dc5 --- /dev/null +++ b/smartcross/__init__.py @@ -0,0 +1,10 @@ +import os + +__TITLE__ = 'DI-smartcross' +__VERSION__ = 'v0.1.0' +__DESCRIPTION__ = 'OpenDILab Decision Intelligence Traffic Crossing Signal Control Platform' +__AUTHOR__ = "OpenDILab Contributors" +__AUTHOR_EMAIL__ = "opendilab.contact@gmail.com" +__version__ = __VERSION__ + +SIMULATORS = ['sumo', 'cityflow'] diff --git a/smartcross/envs/__init__.py b/smartcross/envs/__init__.py index 29e5e6d..bdff0f9 100644 --- a/smartcross/envs/__init__.py +++ b/smartcross/envs/__init__.py @@ -1 +1,6 @@ -from .sumo_env import SumoEnv +import smartcross + +if 'sumo' in smartcross.SIMULATORS: + from .sumo_env import SumoEnv +if 'cityflow' in smartcross.SIMULATORS: + from .cityflow_env import CityflowEnv diff --git a/smartcross/envs/action/sumo_action.py b/smartcross/envs/action/sumo_action.py index 790d992..187e3e4 100644 --- a/smartcross/envs/action/sumo_action.py +++ b/smartcross/envs/action/sumo_action.py @@ -1,3 +1,4 @@ +import gym from typing import Dict from ding.envs import BaseEnv @@ -21,7 +22,7 @@ def _init(self, env: BaseEnv, cfg: Dict) -> None: Overview: init the sumo action environment with the given config file Arguments: - - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo/sumo_env_default_config.yaml` + - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo_wj3_default_config.yaml` """ self._env = env self._cfg = cfg @@ -37,6 +38,7 @@ def _init(self, env: BaseEnv, cfg: Dict) -> None: raise NotImplementedError if self._use_multi_discrete: self._shape = len(action_shape) + self._space = gym.spaces.MultiDiscrete(action_shape) else: # TODO: add naive discrete action raise NotImplementedError @@ -64,3 +66,7 @@ def _from_agent_processor(self, data: Dict) -> Dict: # override def _details(self): return 'action dim: {}'.format(self._shape) + + @property + def space(self): + return self._space diff --git a/smartcross/envs/action/sumo_action_runner.py b/smartcross/envs/action/sumo_action_runner.py index cc062ad..98ea53f 100644 --- a/smartcross/envs/action/sumo_action_runner.py +++ b/smartcross/envs/action/sumo_action_runner.py @@ -15,7 +15,7 @@ def _init(self, engine: BaseEnv, cfg: Dict) -> None: Overview: init the sumo observation helper with the given config file Arguments: - - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo/sumo_env_default_config.yaml` + - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo_wj3_default_config.yaml` """ # set self._core and other state variable self._engine = engine @@ -34,3 +34,7 @@ def get(self, raw_action: Any) -> Dict: def reset(self) -> None: self._last_action = None + + @property + def space(self): + return self._core.space diff --git a/smartcross/envs/cityflow_env.py b/smartcross/envs/cityflow_env.py new file mode 100644 index 0000000..f9a22ec --- /dev/null +++ b/smartcross/envs/cityflow_env.py @@ -0,0 +1,233 @@ +import os +import json +import gym +import numpy as np +from typing import Dict, Any, List, Tuple, Union + +import cityflow + +from ding.envs import BaseEnv, BaseEnvTimestep +from ding.utils import ENV_REGISTRY +from ding.torch_utils import to_ndarray +from smartcross.utils.env_utils import get_suffix_num, squeeze_obs, get_onehot_obs + + +@ENV_REGISTRY.register('cityflow_env') +class CityflowEnv(BaseEnv): + + def __init__(self, cfg: Dict) -> None: + self._cfg = cfg + self._config_path = cfg.config_path + self._obs_type = cfg.obs_type + self._max_episode_duration = cfg.max_episode_duration + self._green_duration = cfg.green_duration + self._yellow_duration = cfg.yellow_duration + self._red_duration = cfg.red_duration + self._eng = cityflow.Engine(self._config_path) + self._parse_config_file() + self._init_info() + + def _parse_config_file(self): + with open(self._config_path, 'r') as fc: + file_config = json.load(fc) + + self._no_actions = not file_config['rlTrafficLight'] + + roadnet_file = os.path.join(file_config['dir'], file_config['roadnetFile']) + with open(roadnet_file, 'r') as fr: + roadnet_config = json.load(fr) + + self._crossing_in_roads = {} + self._crossing_out_roads = {} + self._crossing_phases = {} + crossings_config = roadnet_config['intersections'] + for item in crossings_config: + if item['virtual']: + continue + crossing_id = item['id'] + self._crossing_in_roads[crossing_id] = [] + self._crossing_out_roads[crossing_id] = [] + crossing_id_num = get_suffix_num(crossing_id) + crossing_roads = item['roads'] + for road_id in crossing_roads: + road_id_num = get_suffix_num(road_id) + if road_id_num[0] == crossing_id_num[0] and road_id_num[1] == crossing_id_num[1]: + self._crossing_out_roads[crossing_id].append(road_id) + else: + self._crossing_in_roads[crossing_id].append(road_id) + self._crossing_phases[crossing_id] = {'G': [], 'Y': [], 'R': []} + light_phases = item['trafficLight']['lightphases'] + for id, it in enumerate(light_phases): + if len(it['availableRoadLinks']) > 4: + self._crossing_phases[crossing_id]['G'].append(id) + elif len(it['availableRoadLinks']) == 4: + self._crossing_phases[crossing_id]['Y'].append(id) + elif len(it['availableRoadLinks']) == 0: + self._crossing_phases[crossing_id]['R'].append(id) + else: + print("Unrecognized phase!") + + self._crossings = list(self._crossing_in_roads.keys()) + self._road_lanes = {} + all_lanes = list(self._eng.get_lane_vehicle_count().keys()) + + for road in roadnet_config['roads']: + road_id = road['id'] + self._road_lanes[road_id] = [] + + for lane in all_lanes: + self._road_lanes[lane[:-2]].append(lane) + + def _init_info(self): + obs_len = 0 + act_shape = [] + if 'phase' in self._obs_type: + for cross in self._crossing_phases: + obs_len += len(self._crossing_phases[cross]['G']) + if 'lane_vehicle_num' in self._obs_type: + for road in self._crossing_in_roads.values(): + for r in road: + obs_len += len(self._road_lanes[r]) + if 'lane_waiting_vehicle_num' in self._obs_type: + for road in self._crossing_in_roads.values(): + for r in road: + obs_len += len(self._road_lanes[r]) + for cross in self._crossings: + act_shape.append(len(self._crossing_phases[cross]['G'])) + self._observation_space = gym.spaces.Box(low=0, high=100, shape=(obs_len, ), dtype=np.float32) + self._action_space = gym.spaces.MultiDiscrete(act_shape) + self._reward_space = gym.spaces.Box(low=-float('inf'), high=0, shape=(1, ), dtype=np.float32) + + def _get_obs(self) -> Dict: + obs = {cross: [] for cross in self._crossings} + if 'phase' in self._obs_type: + for cross in self._crossing_phases: + onehot_phase = [0] * len(self._crossing_phases[cross]['G']) + ph = self._current_phases[cross] + onehot_phase[ph] = 1 + obs[cross] += onehot_phase + if 'lane_vehicle_num' in self._obs_type: + all_lane_vehicle_num = self._eng.get_lane_vehicle_count() + for cross, roads in self._crossing_in_roads.items(): + vehicle_nums = [] + for k, v in all_lane_vehicle_num.items(): + if k[:-2] in roads: + vehicle_nums.append(v) + obs[cross] += vehicle_nums + if 'lane_waiting_vehicle_num' in self._obs_type: + all_lane_waiting_vehicle = self._eng.get_lane_waiting_vehicle_count() + for cross, roads in self._crossing_in_roads.items(): + vehicle_nums = [] + for k, v in all_lane_waiting_vehicle.items(): + if k[:-2] in roads: + vehicle_nums.append(v) + obs[cross] += vehicle_nums + return obs + + def _get_reward(self): + reward = {cross: 0 for cross in self._crossings} + all_lane_waiting_vehicle = self._eng.get_lane_waiting_vehicle_count() + for cross in self._crossings: + cross_reward = 0 + for roads in self._crossing_in_roads[cross]: + for k, v in all_lane_waiting_vehicle.items(): + if k[:-2] in roads: + cross_reward += v + for roads in self._crossing_out_roads[cross]: + for k, v in all_lane_waiting_vehicle.items(): + if k[:-2] in roads: + cross_reward -= v + reward[cross] = -cross_reward + return reward + + def _simulate(self, action): + if self._no_actions: + for t in range(self._red_duration + self._yellow_duration + self._green_duration): + self._eng.next_step() + self._total_duration += self._red_duration + self._yellow_duration + self._green_duration + return + + changed_tl_id = {} + for act, (cross, cur_act) in zip(action, self._current_phases.items()): + if act == cur_act: + new_phase = self._crossing_phases[cross]['G'][act] + self._eng.set_tl_phase(cross, new_phase) + self._current_phases[cross] = int(act) + else: + changed_tl_id[cross] = (act, cur_act) + + if len(changed_tl_id) == 0: + for t in range(self._red_duration + self._yellow_duration + self._green_duration): + self._eng.next_step() + else: + if self._red_duration > 0: + for cross in changed_tl_id: + red_phase = self._crossing_phases[cross]['R'][0] + self._eng.set_tl_phase(cross, red_phase) + for t in range(self._red_duration): + self._eng.next_step() + if self._yellow_duration > 0: + for cross, (act, cur_act) in changed_tl_id.items(): + yellow_phase = self._crossing_phases[cross]['Y'][cur_act] + self._eng.set_tl_phase(cross, yellow_phase) + for t in range(self._yellow_duration): + self._eng.next_step() + for cross, (act, cur_act) in changed_tl_id.items(): + green_phase = self._crossing_phases[cross]['G'][act] + self._eng.set_tl_phase(cross, green_phase) + self._current_phases[cross] = int(act) + for t in range(self._green_duration): + self._eng.next_step() + + self._total_duration += self._red_duration + self._yellow_duration + self._green_duration + + def reset(self) -> Any: + self._eng.reset() + self._total_duration = 0 + self._total_reward = 0 + self._current_phases = {} + for cross in self._crossings: + if not self._no_actions: + phase = self._crossing_phases[cross]['G'][0] + self._eng.set_tl_phase(cross, phase) + self._current_phases[cross] = 0 + obs = self._get_obs() + return to_ndarray(squeeze_obs(obs), dtype=np.float32) + + def step(self, action: Any) -> 'BaseEnvTimestep': + action = np.squeeze(action) + self._simulate(action) + obs = self._get_obs() + obs = to_ndarray(squeeze_obs(obs), dtype=np.float32) + reward = self._get_reward() + reward = to_ndarray(sum(reward.values()), dtype=np.float32) + self._total_reward += reward + done = self._total_duration > self._max_episode_duration + info = {} + if done: + info['final_eval_reward'] = self._total_reward + self.close() + return BaseEnvTimestep(obs, reward, done, info) + + def close(self) -> None: + return + + def seed(self, seed: int, dynamic_seed: bool = True) -> None: + self._seed = seed + self._dynamic_seed = dynamic_seed + self._eng.set_random_seed(seed) + + @property + def observation_space(self) -> gym.spaces.Space: + return self._observation_space + + @property + def action_space(self) -> gym.spaces.Space: + return self._action_space + + @property + def reward_space(self) -> gym.spaces.Space: + return self._reward_space + + def __repr__(self) -> str: + return "CityFlowEnv" diff --git a/smartcross/envs/cityflow_grid/cityflow_auto_grid_config.json b/smartcross/envs/cityflow_grid/cityflow_auto_grid_config.json new file mode 100644 index 0000000..ad1edef --- /dev/null +++ b/smartcross/envs/cityflow_grid/cityflow_auto_grid_config.json @@ -0,0 +1,12 @@ +{ + "interval": 1.0, + "seed": 0, + "dir": "smartcross/envs/cityflow_grid/", + "roadnetFile": "roadnet_2_3.json", + "flowFile": "flow_2_3.json", + "rlTrafficLight": false, + "saveReplay": true, + "roadnetLogFile": "replay_auto_roadnet.json", + "replayLogFile": "replay_auto.txt", + "laneChange": true +} \ No newline at end of file diff --git a/smartcross/envs/cityflow_grid/cityflow_grid_config.json b/smartcross/envs/cityflow_grid/cityflow_grid_config.json new file mode 100644 index 0000000..e565c26 --- /dev/null +++ b/smartcross/envs/cityflow_grid/cityflow_grid_config.json @@ -0,0 +1,12 @@ +{ + "interval": 1.0, + "seed": 0, + "dir": "smartcross/envs/cityflow_grid/", + "roadnetFile": "roadnet_2_3.json", + "flowFile": "flow_2_3.json", + "rlTrafficLight": true, + "saveReplay": false, + "roadnetLogFile": "replay_roadnet.json", + "replayLogFile": "replay.txt", + "laneChange": true +} \ No newline at end of file diff --git a/smartcross/envs/cityflow_grid/flow_2_3.json b/smartcross/envs/cityflow_grid/flow_2_3.json new file mode 100644 index 0000000..0cf0645 --- /dev/null +++ b/smartcross/envs/cityflow_grid/flow_2_3.json @@ -0,0 +1,1602 @@ +[ + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_1_0", + "road_3_1_0" + ], + "interval": 25.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_1_0", + "road_3_1_0" + ], + "interval": 6.25, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_1_2", + "road_1_1_2" + ], + "interval": 25.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_1_2", + "road_1_1_2" + ], + "interval": 6.25, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_1_0", + "road_3_2_0" + ], + "interval": 38.762817436337976, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_1_0", + "road_3_2_0" + ], + "interval": 9.690704359084494, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_1_2", + "road_3_2_0" + ], + "interval": 44.82664675535357, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_1_2", + "road_3_2_0" + ], + "interval": 11.206661688838393, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_1_0", + "road_2_2_1" + ], + "interval": 42.5592527129307, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_1_0", + "road_2_2_1" + ], + "interval": 10.639813178232675, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_1_2", + "road_2_1_3" + ], + "interval": 44.73760272426931, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_1_2", + "road_2_1_3" + ], + "interval": 11.184400681067327, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_1_0", + "road_1_2_1" + ], + "interval": 35.43323961869715, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_1_0", + "road_1_2_1" + ], + "interval": 8.858309904674288, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_1_2", + "road_1_2_1" + ], + "interval": 43.403324879153594, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_1_2", + "road_1_2_1" + ], + "interval": 10.850831219788398, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_2_0", + "road_3_2_0" + ], + "interval": 25.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_2_0", + "road_3_2_0" + ], + "interval": 6.25, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_2_2", + "road_1_2_2" + ], + "interval": 25.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_2_2", + "road_1_2_2" + ], + "interval": 6.25, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_2_0", + "road_3_1_3" + ], + "interval": 40.29666141734653, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_2_0", + "road_3_1_3" + ], + "interval": 10.074165354336632, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_2_2", + "road_3_1_3" + ], + "interval": 38.790742642916186, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_2_2", + "road_3_1_3" + ], + "interval": 9.697685660729046, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_2_0", + "road_3_1_3" + ], + "interval": 39.67741336828556, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_2_0", + "road_3_1_3" + ], + "interval": 9.91935334207139, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_2_2", + "road_1_1_3" + ], + "interval": 40.41956043713023, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_2_2", + "road_1_1_3" + ], + "interval": 10.104890109282557, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_0_2_0", + "road_2_1_3" + ], + "interval": 49.502574412666156, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_0_2_0", + "road_2_1_3" + ], + "interval": 12.375643603166539, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_4_2_2", + "road_1_1_3" + ], + "interval": 30.026781075159725, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_4_2_2", + "road_1_1_3" + ], + "interval": 7.506695268789931, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_0_1", + "road_1_2_1" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_0_1", + "road_1_2_1" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_3_3", + "road_1_1_3" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_3_3", + "road_1_1_3" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_0_1", + "road_3_2_0" + ], + "interval": 72.23674669577058, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_0_1", + "road_3_2_0" + ], + "interval": 18.059186673942644, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_3_3", + "road_3_1_0" + ], + "interval": 61.50638160341691, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_3_3", + "road_3_1_0" + ], + "interval": 15.376595400854228, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_0_1", + "road_3_1_0" + ], + "interval": 67.02781317902827, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_0_1", + "road_3_1_0" + ], + "interval": 16.756953294757068, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_3_3", + "road_3_2_1" + ], + "interval": 58.96226522254158, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_3_3", + "road_3_2_1" + ], + "interval": 14.740566305635395, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_0_1", + "road_3_2_1" + ], + "interval": 44.65871402610205, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_0_1", + "road_3_2_1" + ], + "interval": 11.164678506525512, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_1_3_3", + "road_2_1_3" + ], + "interval": 51.41425494173674, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_1_3_3", + "road_2_1_3" + ], + "interval": 12.853563735434186, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_0_1", + "road_2_2_1" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_0_1", + "road_2_2_1" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_3_3", + "road_2_1_3" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_3_3", + "road_2_1_3" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_0_1", + "road_3_1_0" + ], + "interval": 58.73907992759081, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_0_1", + "road_3_1_0" + ], + "interval": 14.684769981897702, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_3_3", + "road_3_2_1" + ], + "interval": 71.15428468863556, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_3_3", + "road_3_2_1" + ], + "interval": 17.78857117215889, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_0_1", + "road_3_1_3" + ], + "interval": 49.40483911199813, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_0_1", + "road_3_1_3" + ], + "interval": 12.351209777999532, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_3_3", + "road_1_1_2" + ], + "interval": 53.43871377790503, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_3_3", + "road_1_1_2" + ], + "interval": 13.359678444476257, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_0_1", + "road_3_1_3" + ], + "interval": 57.73252317460592, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_0_1", + "road_3_1_3" + ], + "interval": 14.43313079365148, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_2_3_3", + "road_1_1_2" + ], + "interval": 67.70050930967362, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_2_3_3", + "road_1_1_2" + ], + "interval": 16.925127327418405, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_0_1", + "road_3_2_1" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_0_1", + "road_3_2_1" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_3_3", + "road_3_1_3" + ], + "interval": 50.0, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_3_3", + "road_3_1_3" + ], + "interval": 12.5, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_0_1", + "road_1_1_2" + ], + "interval": 41.30156693913602, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_0_1", + "road_1_1_2" + ], + "interval": 10.325391734784006, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_3_3", + "road_1_1_3" + ], + "interval": 66.55489809238179, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_3_3", + "road_1_1_3" + ], + "interval": 16.638724523095448, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_0_1", + "road_1_2_2" + ], + "interval": 44.433384602845486, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_0_1", + "road_1_2_2" + ], + "interval": 11.108346150711371, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_3_3", + "road_2_2_1" + ], + "interval": 72.57901855477017, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_3_3", + "road_2_2_1" + ], + "interval": 18.144754638692543, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_0_1", + "road_3_1_0" + ], + "interval": 53.58951809372816, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_0_1", + "road_3_1_0" + ], + "interval": 13.39737952343204, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 10, + "width": 3, + "maxPosAcc": 1.5, + "maxNegAcc": 3.5, + "usualPosAcc": 1.0, + "usualNegAcc": 3.5, + "minGap": 3, + "maxSpeed": 12, + "headwayTime": 2 + }, + "route": [ + "road_3_3_3", + "road_3_1_0" + ], + "interval": 67.69007419446481, + "startTime": 0, + "endTime": -1 + }, + { + "vehicle": { + "length": 5, + "width": 2, + "maxPosAcc": 2.0, + "maxNegAcc": 4.5, + "usualPosAcc": 2.0, + "usualNegAcc": 4.5, + "minGap": 2.5, + "maxSpeed": 16.67, + "headwayTime": 1.5 + }, + "route": [ + "road_3_3_3", + "road_3_1_0" + ], + "interval": 16.922518548616203, + "startTime": 0, + "endTime": -1 + } +] \ No newline at end of file diff --git a/smartcross/envs/cityflow_grid/roadnet_2_3.json b/smartcross/envs/cityflow_grid/roadnet_2_3.json new file mode 100644 index 0000000..db6d099 --- /dev/null +++ b/smartcross/envs/cityflow_grid/roadnet_2_3.json @@ -0,0 +1,35558 @@ +{ + "intersections": [ + { + "id": "intersection_1_0", + "point": { + "x": 0, + "y": -100 + }, + "width": 0, + "roads": [ + "road_1_1_3", + "road_1_0_1" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_2_0", + "point": { + "x": 300, + "y": -100 + }, + "width": 0, + "roads": [ + "road_2_1_3", + "road_2_0_1" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_3_0", + "point": { + "x": 600, + "y": -100 + }, + "width": 0, + "roads": [ + "road_3_1_3", + "road_3_0_1" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_0_1", + "point": { + "x": -200, + "y": 0 + }, + "width": 0, + "roads": [ + "road_1_1_2", + "road_0_1_0" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_1_1", + "point": { + "x": 0, + "y": 0 + }, + "width": 30, + "roads": [ + "road_0_1_0", + "road_1_0_1", + "road_2_1_2", + "road_1_2_3", + "road_1_1_0", + "road_1_1_1", + "road_1_1_2", + "road_1_1_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_0_1_0", + "endRoad": "road_1_1_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -9.775999999999998 + }, + { + "x": -20.88, + "y": -9.168000000000001 + }, + { + "x": -14.52, + "y": -8.272 + }, + { + "x": -7.439999999999998, + "y": -7.183999999999999 + }, + { + "x": 0.0, + "y": -6.0 + }, + { + "x": 7.440000000000009, + "y": -4.815999999999999 + }, + { + "x": 14.519999999999992, + "y": -3.7280000000000006 + }, + { + "x": 20.880000000000006, + "y": -2.831999999999999 + }, + { + "x": 26.16, + "y": -2.224 + }, + { + "x": 30.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -9.887999999999998 + }, + { + "x": -20.88, + "y": -9.584000000000001 + }, + { + "x": -14.52, + "y": -9.136 + }, + { + "x": -7.439999999999998, + "y": -8.591999999999999 + }, + { + "x": 0.0, + "y": -8.0 + }, + { + "x": 7.440000000000009, + "y": -7.4079999999999995 + }, + { + "x": 14.519999999999992, + "y": -6.864000000000001 + }, + { + "x": 20.880000000000006, + "y": -6.416 + }, + { + "x": 26.16, + "y": -6.112 + }, + { + "x": 30.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -9.999999999999998 + }, + { + "x": -20.88, + "y": -10.000000000000002 + }, + { + "x": -14.52, + "y": -10.0 + }, + { + "x": -7.439999999999998, + "y": -10.0 + }, + { + "x": 0.0, + "y": -10.0 + }, + { + "x": 7.440000000000009, + "y": -10.0 + }, + { + "x": 14.519999999999992, + "y": -10.0 + }, + { + "x": 20.880000000000006, + "y": -10.0 + }, + { + "x": 26.16, + "y": -10.0 + }, + { + "x": 30.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -10.111999999999998 + }, + { + "x": -20.88, + "y": -10.416 + }, + { + "x": -14.52, + "y": -10.864 + }, + { + "x": -7.439999999999998, + "y": -11.408 + }, + { + "x": 0.0, + "y": -12.0 + }, + { + "x": 7.440000000000009, + "y": -12.592000000000002 + }, + { + "x": 14.519999999999992, + "y": -13.136 + }, + { + "x": 20.880000000000006, + "y": -13.584000000000001 + }, + { + "x": 26.16, + "y": -13.888000000000002 + }, + { + "x": 30.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -10.223999999999998 + }, + { + "x": -20.88, + "y": -10.832 + }, + { + "x": -14.52, + "y": -11.728 + }, + { + "x": -7.439999999999998, + "y": -12.816 + }, + { + "x": 0.0, + "y": -14.0 + }, + { + "x": 7.440000000000009, + "y": -15.184000000000001 + }, + { + "x": 14.519999999999992, + "y": -16.272 + }, + { + "x": 20.880000000000006, + "y": -17.168000000000003 + }, + { + "x": 26.16, + "y": -17.776 + }, + { + "x": 30.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": -10.0 + }, + { + "x": -26.16, + "y": -10.335999999999999 + }, + { + "x": -20.88, + "y": -11.248000000000001 + }, + { + "x": -14.52, + "y": -12.592 + }, + { + "x": -7.439999999999998, + "y": -14.224 + }, + { + "x": 0.0, + "y": -16.0 + }, + { + "x": 7.440000000000009, + "y": -17.776000000000003 + }, + { + "x": 14.519999999999992, + "y": -19.407999999999998 + }, + { + "x": 20.880000000000006, + "y": -20.752000000000002 + }, + { + "x": 26.16, + "y": -21.664 + }, + { + "x": 30.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -13.664 + }, + { + "x": -20.88, + "y": -12.752 + }, + { + "x": -14.52, + "y": -11.408000000000001 + }, + { + "x": -7.439999999999998, + "y": -9.776 + }, + { + "x": 0.0, + "y": -8.0 + }, + { + "x": 7.440000000000009, + "y": -6.223999999999998 + }, + { + "x": 14.519999999999992, + "y": -4.5920000000000005 + }, + { + "x": 20.880000000000006, + "y": -3.2479999999999984 + }, + { + "x": 26.16, + "y": -2.3360000000000003 + }, + { + "x": 30.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -13.776 + }, + { + "x": -20.88, + "y": -13.168000000000001 + }, + { + "x": -14.52, + "y": -12.272000000000002 + }, + { + "x": -7.439999999999998, + "y": -11.184 + }, + { + "x": 0.0, + "y": -10.0 + }, + { + "x": 7.440000000000009, + "y": -8.815999999999999 + }, + { + "x": 14.519999999999992, + "y": -7.728000000000001 + }, + { + "x": 20.880000000000006, + "y": -6.831999999999999 + }, + { + "x": 26.16, + "y": -6.224 + }, + { + "x": 30.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -13.888 + }, + { + "x": -20.88, + "y": -13.584000000000001 + }, + { + "x": -14.52, + "y": -13.136000000000001 + }, + { + "x": -7.439999999999998, + "y": -12.592 + }, + { + "x": 0.0, + "y": -12.0 + }, + { + "x": 7.440000000000009, + "y": -11.408 + }, + { + "x": 14.519999999999992, + "y": -10.864 + }, + { + "x": 20.880000000000006, + "y": -10.415999999999999 + }, + { + "x": 26.16, + "y": -10.111999999999998 + }, + { + "x": 30.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -14.0 + }, + { + "x": -20.88, + "y": -14.0 + }, + { + "x": -14.52, + "y": -14.000000000000002 + }, + { + "x": -7.439999999999998, + "y": -14.0 + }, + { + "x": 0.0, + "y": -14.0 + }, + { + "x": 7.440000000000009, + "y": -14.0 + }, + { + "x": 14.519999999999992, + "y": -14.0 + }, + { + "x": 20.880000000000006, + "y": -14.0 + }, + { + "x": 26.16, + "y": -14.0 + }, + { + "x": 30.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -14.112 + }, + { + "x": -20.88, + "y": -14.416 + }, + { + "x": -14.52, + "y": -14.864 + }, + { + "x": -7.439999999999998, + "y": -15.408000000000001 + }, + { + "x": 0.0, + "y": -16.0 + }, + { + "x": 7.440000000000009, + "y": -16.592 + }, + { + "x": 14.519999999999992, + "y": -17.136 + }, + { + "x": 20.880000000000006, + "y": -17.584000000000003 + }, + { + "x": 26.16, + "y": -17.887999999999998 + }, + { + "x": 30.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": -14.0 + }, + { + "x": -26.16, + "y": -14.224 + }, + { + "x": -20.88, + "y": -14.832 + }, + { + "x": -14.52, + "y": -15.728000000000002 + }, + { + "x": -7.439999999999998, + "y": -16.816000000000003 + }, + { + "x": 0.0, + "y": -18.0 + }, + { + "x": 7.440000000000009, + "y": -19.184 + }, + { + "x": 14.519999999999992, + "y": -20.272 + }, + { + "x": 20.880000000000006, + "y": -21.168000000000003 + }, + { + "x": 26.16, + "y": -21.776 + }, + { + "x": 30.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -17.552 + }, + { + "x": -20.88, + "y": -16.336 + }, + { + "x": -14.52, + "y": -14.544 + }, + { + "x": -7.439999999999998, + "y": -12.367999999999999 + }, + { + "x": 0.0, + "y": -10.0 + }, + { + "x": 7.440000000000009, + "y": -7.631999999999998 + }, + { + "x": 14.519999999999992, + "y": -5.456000000000001 + }, + { + "x": 20.880000000000006, + "y": -3.663999999999998 + }, + { + "x": 26.16, + "y": -2.4480000000000004 + }, + { + "x": 30.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -17.663999999999998 + }, + { + "x": -20.88, + "y": -16.752 + }, + { + "x": -14.52, + "y": -15.408000000000001 + }, + { + "x": -7.439999999999998, + "y": -13.775999999999998 + }, + { + "x": 0.0, + "y": -12.0 + }, + { + "x": 7.440000000000009, + "y": -10.223999999999998 + }, + { + "x": 14.519999999999992, + "y": -8.592000000000002 + }, + { + "x": 20.880000000000006, + "y": -7.247999999999999 + }, + { + "x": 26.16, + "y": -6.336 + }, + { + "x": 30.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -17.776 + }, + { + "x": -20.88, + "y": -17.168 + }, + { + "x": -14.52, + "y": -16.272 + }, + { + "x": -7.439999999999998, + "y": -15.184 + }, + { + "x": 0.0, + "y": -14.0 + }, + { + "x": 7.440000000000009, + "y": -12.815999999999999 + }, + { + "x": 14.519999999999992, + "y": -11.728000000000002 + }, + { + "x": 20.880000000000006, + "y": -10.831999999999999 + }, + { + "x": 26.16, + "y": -10.224 + }, + { + "x": 30.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -17.887999999999998 + }, + { + "x": -20.88, + "y": -17.584 + }, + { + "x": -14.52, + "y": -17.136 + }, + { + "x": -7.439999999999998, + "y": -16.592 + }, + { + "x": 0.0, + "y": -16.0 + }, + { + "x": 7.440000000000009, + "y": -15.408000000000001 + }, + { + "x": 14.519999999999992, + "y": -14.864 + }, + { + "x": 20.880000000000006, + "y": -14.416 + }, + { + "x": 26.16, + "y": -14.112000000000002 + }, + { + "x": 30.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -18.0 + }, + { + "x": -20.88, + "y": -18.0 + }, + { + "x": -14.52, + "y": -18.0 + }, + { + "x": -7.439999999999998, + "y": -18.0 + }, + { + "x": 0.0, + "y": -18.0 + }, + { + "x": 7.440000000000009, + "y": -18.0 + }, + { + "x": 14.519999999999992, + "y": -18.0 + }, + { + "x": 20.880000000000006, + "y": -18.0 + }, + { + "x": 26.16, + "y": -18.0 + }, + { + "x": 30.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.16, + "y": -18.112 + }, + { + "x": -20.88, + "y": -18.416 + }, + { + "x": -14.52, + "y": -18.864 + }, + { + "x": -7.439999999999998, + "y": -19.408 + }, + { + "x": 0.0, + "y": -20.0 + }, + { + "x": 7.440000000000009, + "y": -20.592000000000002 + }, + { + "x": 14.519999999999992, + "y": -21.136 + }, + { + "x": 20.880000000000006, + "y": -21.584 + }, + { + "x": 26.16, + "y": -21.888 + }, + { + "x": 30.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_0_1_0", + "endRoad": "road_1_1_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -2.0 + }, + { + "x": -26.674, + "y": -1.3739999999999999 + }, + { + "x": -22.832, + "y": 0.3680000000000003 + }, + { + "x": -18.678, + "y": 3.0220000000000007 + }, + { + "x": -14.415999999999999, + "y": 6.384000000000002 + }, + { + "x": -10.25, + "y": 10.25 + }, + { + "x": -6.383999999999996, + "y": 14.416000000000004 + }, + { + "x": -3.022000000000004, + "y": 18.677999999999997 + }, + { + "x": -0.3679999999999981, + "y": 22.832000000000004 + }, + { + "x": 1.3739999999999994, + "y": 26.674 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -2.0 + }, + { + "x": -26.562, + "y": -1.3739999999999999 + }, + { + "x": -22.416, + "y": 0.3680000000000003 + }, + { + "x": -17.814, + "y": 3.0220000000000007 + }, + { + "x": -13.008, + "y": 6.384000000000002 + }, + { + "x": -8.25, + "y": 10.25 + }, + { + "x": -3.7919999999999954, + "y": 14.416000000000004 + }, + { + "x": 0.11399999999999633, + "y": 18.677999999999997 + }, + { + "x": 3.216000000000003, + "y": 22.832000000000004 + }, + { + "x": 5.262, + "y": 26.674 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -2.0 + }, + { + "x": -26.45, + "y": -1.3739999999999999 + }, + { + "x": -22.0, + "y": 0.3680000000000003 + }, + { + "x": -16.95, + "y": 3.0220000000000007 + }, + { + "x": -11.599999999999998, + "y": 6.384000000000002 + }, + { + "x": -6.25, + "y": 10.25 + }, + { + "x": -1.1999999999999948, + "y": 14.416000000000004 + }, + { + "x": 3.2499999999999956, + "y": 18.677999999999997 + }, + { + "x": 6.8000000000000025, + "y": 22.832000000000004 + }, + { + "x": 9.149999999999999, + "y": 26.674 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -2.0 + }, + { + "x": -26.338, + "y": -1.3739999999999999 + }, + { + "x": -21.584, + "y": 0.3680000000000003 + }, + { + "x": -16.086, + "y": 3.0220000000000007 + }, + { + "x": -10.191999999999998, + "y": 6.384000000000002 + }, + { + "x": -4.25, + "y": 10.25 + }, + { + "x": 1.3920000000000066, + "y": 14.416000000000004 + }, + { + "x": 6.385999999999996, + "y": 18.677999999999997 + }, + { + "x": 10.384000000000004, + "y": 22.832000000000004 + }, + { + "x": 13.038, + "y": 26.674 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -6.0 + }, + { + "x": -26.674, + "y": -5.2620000000000005 + }, + { + "x": -22.832, + "y": -3.216 + }, + { + "x": -18.678, + "y": -0.11400000000000032 + }, + { + "x": -14.415999999999999, + "y": 3.792000000000002 + }, + { + "x": -10.25, + "y": 8.25 + }, + { + "x": -6.383999999999996, + "y": 13.008000000000006 + }, + { + "x": -3.022000000000004, + "y": 17.813999999999997 + }, + { + "x": -0.3679999999999981, + "y": 22.416000000000004 + }, + { + "x": 1.3739999999999994, + "y": 26.562 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -6.0 + }, + { + "x": -26.562, + "y": -5.2620000000000005 + }, + { + "x": -22.416, + "y": -3.216 + }, + { + "x": -17.814, + "y": -0.11400000000000032 + }, + { + "x": -13.008, + "y": 3.792000000000002 + }, + { + "x": -8.25, + "y": 8.25 + }, + { + "x": -3.7919999999999954, + "y": 13.008000000000006 + }, + { + "x": 0.11399999999999633, + "y": 17.813999999999997 + }, + { + "x": 3.216000000000003, + "y": 22.416000000000004 + }, + { + "x": 5.262, + "y": 26.562 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -6.0 + }, + { + "x": -26.45, + "y": -5.2620000000000005 + }, + { + "x": -22.0, + "y": -3.216 + }, + { + "x": -16.95, + "y": -0.11400000000000032 + }, + { + "x": -11.599999999999998, + "y": 3.792000000000002 + }, + { + "x": -6.25, + "y": 8.25 + }, + { + "x": -1.1999999999999948, + "y": 13.008000000000006 + }, + { + "x": 3.2499999999999956, + "y": 17.813999999999997 + }, + { + "x": 6.8000000000000025, + "y": 22.416000000000004 + }, + { + "x": 9.149999999999999, + "y": 26.562 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -6.0 + }, + { + "x": -26.338, + "y": -5.2620000000000005 + }, + { + "x": -21.584, + "y": -3.216 + }, + { + "x": -16.086, + "y": -0.11400000000000032 + }, + { + "x": -10.191999999999998, + "y": 3.792000000000002 + }, + { + "x": -4.25, + "y": 8.25 + }, + { + "x": 1.3920000000000066, + "y": 13.008000000000006 + }, + { + "x": 6.385999999999996, + "y": 17.813999999999997 + }, + { + "x": 10.384000000000004, + "y": 22.416000000000004 + }, + { + "x": 13.038, + "y": 26.562 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_0_1_0", + "endRoad": "road_1_1_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.786, + "y": -18.066 + }, + { + "x": -23.247999999999998, + "y": -18.288 + }, + { + "x": -19.541999999999998, + "y": -18.701999999999998 + }, + { + "x": -15.824, + "y": -19.344 + }, + { + "x": -12.25, + "y": -20.25 + }, + { + "x": -8.975999999999996, + "y": -21.456000000000003 + }, + { + "x": -6.158000000000003, + "y": -22.997999999999998 + }, + { + "x": -3.9519999999999986, + "y": -24.912 + }, + { + "x": -2.5140000000000002, + "y": -27.234 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -26.898, + "y": -18.066 + }, + { + "x": -23.663999999999998, + "y": -18.288 + }, + { + "x": -20.406, + "y": -18.701999999999998 + }, + { + "x": -17.232, + "y": -19.344 + }, + { + "x": -14.25, + "y": -20.25 + }, + { + "x": -11.567999999999998, + "y": -21.456000000000003 + }, + { + "x": -9.294000000000004, + "y": -22.997999999999998 + }, + { + "x": -7.536, + "y": -24.912 + }, + { + "x": -6.402, + "y": -27.234 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -27.01, + "y": -18.066 + }, + { + "x": -24.08, + "y": -18.288 + }, + { + "x": -21.27, + "y": -18.701999999999998 + }, + { + "x": -18.64, + "y": -19.344 + }, + { + "x": -16.25, + "y": -20.25 + }, + { + "x": -14.159999999999997, + "y": -21.456000000000003 + }, + { + "x": -12.430000000000003, + "y": -22.997999999999998 + }, + { + "x": -11.12, + "y": -24.912 + }, + { + "x": -10.29, + "y": -27.234 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -18.0 + }, + { + "x": -27.122, + "y": -18.066 + }, + { + "x": -24.496, + "y": -18.288 + }, + { + "x": -22.134, + "y": -18.701999999999998 + }, + { + "x": -20.048000000000002, + "y": -19.344 + }, + { + "x": -18.25, + "y": -20.25 + }, + { + "x": -16.752, + "y": -21.456000000000003 + }, + { + "x": -15.566000000000003, + "y": -22.997999999999998 + }, + { + "x": -14.704, + "y": -24.912 + }, + { + "x": -14.178, + "y": -27.234 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": -22.0 + }, + { + "x": -26.786, + "y": -21.954 + }, + { + "x": -23.247999999999998, + "y": -21.872 + }, + { + "x": -19.541999999999998, + "y": -21.838 + }, + { + "x": -15.824, + "y": -21.936000000000003 + }, + { + "x": -12.25, + "y": -22.25 + }, + { + "x": -8.975999999999996, + "y": -22.864 + }, + { + "x": -6.158000000000003, + "y": -23.862 + }, + { + "x": -3.9519999999999986, + "y": -25.328 + }, + { + "x": -2.5140000000000002, + "y": -27.346 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": -22.0 + }, + { + "x": -26.898, + "y": -21.954 + }, + { + "x": -23.663999999999998, + "y": -21.872 + }, + { + "x": -20.406, + "y": -21.838 + }, + { + "x": -17.232, + "y": -21.936000000000003 + }, + { + "x": -14.25, + "y": -22.25 + }, + { + "x": -11.567999999999998, + "y": -22.864 + }, + { + "x": -9.294000000000004, + "y": -23.862 + }, + { + "x": -7.536, + "y": -25.328 + }, + { + "x": -6.402, + "y": -27.346 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": -22.0 + }, + { + "x": -27.01, + "y": -21.954 + }, + { + "x": -24.08, + "y": -21.872 + }, + { + "x": -21.27, + "y": -21.838 + }, + { + "x": -18.64, + "y": -21.936000000000003 + }, + { + "x": -16.25, + "y": -22.25 + }, + { + "x": -14.159999999999997, + "y": -22.864 + }, + { + "x": -12.430000000000003, + "y": -23.862 + }, + { + "x": -11.12, + "y": -25.328 + }, + { + "x": -10.29, + "y": -27.346 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": -22.0 + }, + { + "x": -27.122, + "y": -21.954 + }, + { + "x": -24.496, + "y": -21.872 + }, + { + "x": -22.134, + "y": -21.838 + }, + { + "x": -20.048000000000002, + "y": -21.936000000000003 + }, + { + "x": -18.25, + "y": -22.25 + }, + { + "x": -16.752, + "y": -22.864 + }, + { + "x": -15.566000000000003, + "y": -23.862 + }, + { + "x": -14.704, + "y": -25.328 + }, + { + "x": -14.178, + "y": -27.346 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_0_1", + "endRoad": "road_1_1_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -26.786 + }, + { + "x": 14.704, + "y": -23.247999999999998 + }, + { + "x": 15.566000000000003, + "y": -19.541999999999998 + }, + { + "x": 16.752000000000002, + "y": -15.824 + }, + { + "x": 18.25, + "y": -12.25 + }, + { + "x": 20.048000000000002, + "y": -8.975999999999996 + }, + { + "x": 22.133999999999997, + "y": -6.158000000000003 + }, + { + "x": 24.496000000000002, + "y": -3.9519999999999986 + }, + { + "x": 27.122, + "y": -2.5140000000000002 + }, + { + "x": 30.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -26.898 + }, + { + "x": 14.704, + "y": -23.663999999999998 + }, + { + "x": 15.566000000000003, + "y": -20.406 + }, + { + "x": 16.752000000000002, + "y": -17.232 + }, + { + "x": 18.25, + "y": -14.25 + }, + { + "x": 20.048000000000002, + "y": -11.567999999999998 + }, + { + "x": 22.133999999999997, + "y": -9.294000000000004 + }, + { + "x": 24.496000000000002, + "y": -7.536 + }, + { + "x": 27.122, + "y": -6.402 + }, + { + "x": 30.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -27.01 + }, + { + "x": 14.704, + "y": -24.08 + }, + { + "x": 15.566000000000003, + "y": -21.27 + }, + { + "x": 16.752000000000002, + "y": -18.64 + }, + { + "x": 18.25, + "y": -16.25 + }, + { + "x": 20.048000000000002, + "y": -14.159999999999997 + }, + { + "x": 22.133999999999997, + "y": -12.430000000000003 + }, + { + "x": 24.496000000000002, + "y": -11.12 + }, + { + "x": 27.122, + "y": -10.29 + }, + { + "x": 30.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -27.122 + }, + { + "x": 14.704, + "y": -24.496 + }, + { + "x": 15.566000000000003, + "y": -22.134 + }, + { + "x": 16.752000000000002, + "y": -20.048000000000002 + }, + { + "x": 18.25, + "y": -18.25 + }, + { + "x": 20.048000000000002, + "y": -16.752 + }, + { + "x": 22.133999999999997, + "y": -15.566000000000003 + }, + { + "x": 24.496000000000002, + "y": -14.704 + }, + { + "x": 27.122, + "y": -14.178 + }, + { + "x": 30.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -27.234 + }, + { + "x": 14.704, + "y": -24.912 + }, + { + "x": 15.566000000000003, + "y": -22.998 + }, + { + "x": 16.752000000000002, + "y": -21.456000000000003 + }, + { + "x": 18.25, + "y": -20.25 + }, + { + "x": 20.048000000000002, + "y": -19.343999999999998 + }, + { + "x": 22.133999999999997, + "y": -18.702 + }, + { + "x": 24.496000000000002, + "y": -18.288000000000004 + }, + { + "x": 27.122, + "y": -18.066 + }, + { + "x": 30.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 14.0, + "y": -30.0 + }, + { + "x": 14.178, + "y": -27.346 + }, + { + "x": 14.704, + "y": -25.328 + }, + { + "x": 15.566000000000003, + "y": -23.862000000000002 + }, + { + "x": 16.752000000000002, + "y": -22.864 + }, + { + "x": 18.25, + "y": -22.25 + }, + { + "x": 20.048000000000002, + "y": -21.936 + }, + { + "x": 22.133999999999997, + "y": -21.838 + }, + { + "x": 24.496000000000002, + "y": -21.872 + }, + { + "x": 27.122, + "y": -21.954 + }, + { + "x": 30.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_1_0_1", + "endRoad": "road_1_1_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 6.0, + "y": -30.0 + }, + { + "x": 5.888, + "y": -26.16 + }, + { + "x": 5.5840000000000005, + "y": -20.88 + }, + { + "x": 5.136000000000001, + "y": -14.52 + }, + { + "x": 4.592, + "y": -7.439999999999998 + }, + { + "x": 4.0, + "y": 0.0 + }, + { + "x": 3.4079999999999995, + "y": 7.440000000000009 + }, + { + "x": 2.8640000000000003, + "y": 14.519999999999992 + }, + { + "x": 2.4159999999999995, + "y": 20.880000000000006 + }, + { + "x": 2.112, + "y": 26.16 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 6.0, + "y": -30.0 + }, + { + "x": 6.0, + "y": -26.16 + }, + { + "x": 6.0, + "y": -20.88 + }, + { + "x": 6.000000000000001, + "y": -14.52 + }, + { + "x": 6.0, + "y": -7.439999999999998 + }, + { + "x": 6.0, + "y": 0.0 + }, + { + "x": 6.0, + "y": 7.440000000000009 + }, + { + "x": 6.0, + "y": 14.519999999999992 + }, + { + "x": 6.0, + "y": 20.880000000000006 + }, + { + "x": 6.0, + "y": 26.16 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 6.0, + "y": -30.0 + }, + { + "x": 6.112, + "y": -26.16 + }, + { + "x": 6.416, + "y": -20.88 + }, + { + "x": 6.864000000000001, + "y": -14.52 + }, + { + "x": 7.408, + "y": -7.439999999999998 + }, + { + "x": 8.0, + "y": 0.0 + }, + { + "x": 8.592, + "y": 7.440000000000009 + }, + { + "x": 9.136, + "y": 14.519999999999992 + }, + { + "x": 9.584, + "y": 20.880000000000006 + }, + { + "x": 9.887999999999998, + "y": 26.16 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 6.0, + "y": -30.0 + }, + { + "x": 6.224, + "y": -26.16 + }, + { + "x": 6.832000000000001, + "y": -20.88 + }, + { + "x": 7.7280000000000015, + "y": -14.52 + }, + { + "x": 8.816, + "y": -7.439999999999998 + }, + { + "x": 10.0, + "y": 0.0 + }, + { + "x": 11.184000000000001, + "y": 7.440000000000009 + }, + { + "x": 12.272, + "y": 14.519999999999992 + }, + { + "x": 13.168000000000001, + "y": 20.880000000000006 + }, + { + "x": 13.776, + "y": 26.16 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 10.0, + "y": -30.0 + }, + { + "x": 9.775999999999998, + "y": -26.16 + }, + { + "x": 9.168000000000001, + "y": -20.88 + }, + { + "x": 8.272, + "y": -14.52 + }, + { + "x": 7.183999999999999, + "y": -7.439999999999998 + }, + { + "x": 6.0, + "y": 0.0 + }, + { + "x": 4.815999999999999, + "y": 7.440000000000009 + }, + { + "x": 3.7280000000000006, + "y": 14.519999999999992 + }, + { + "x": 2.831999999999999, + "y": 20.880000000000006 + }, + { + "x": 2.224, + "y": 26.16 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 10.0, + "y": -30.0 + }, + { + "x": 9.887999999999998, + "y": -26.16 + }, + { + "x": 9.584000000000001, + "y": -20.88 + }, + { + "x": 9.136, + "y": -14.52 + }, + { + "x": 8.591999999999999, + "y": -7.439999999999998 + }, + { + "x": 8.0, + "y": 0.0 + }, + { + "x": 7.4079999999999995, + "y": 7.440000000000009 + }, + { + "x": 6.864000000000001, + "y": 14.519999999999992 + }, + { + "x": 6.416, + "y": 20.880000000000006 + }, + { + "x": 6.112, + "y": 26.16 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 10.0, + "y": -30.0 + }, + { + "x": 9.999999999999998, + "y": -26.16 + }, + { + "x": 10.000000000000002, + "y": -20.88 + }, + { + "x": 10.0, + "y": -14.52 + }, + { + "x": 10.0, + "y": -7.439999999999998 + }, + { + "x": 10.0, + "y": 0.0 + }, + { + "x": 10.0, + "y": 7.440000000000009 + }, + { + "x": 10.0, + "y": 14.519999999999992 + }, + { + "x": 10.0, + "y": 20.880000000000006 + }, + { + "x": 10.0, + "y": 26.16 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 10.0, + "y": -30.0 + }, + { + "x": 10.111999999999998, + "y": -26.16 + }, + { + "x": 10.416, + "y": -20.88 + }, + { + "x": 10.864, + "y": -14.52 + }, + { + "x": 11.408, + "y": -7.439999999999998 + }, + { + "x": 12.0, + "y": 0.0 + }, + { + "x": 12.592000000000002, + "y": 7.440000000000009 + }, + { + "x": 13.136, + "y": 14.519999999999992 + }, + { + "x": 13.584000000000001, + "y": 20.880000000000006 + }, + { + "x": 13.888000000000002, + "y": 26.16 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_0_1", + "endRoad": "road_1_1_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.674 + }, + { + "x": -0.3680000000000003, + "y": -22.832 + }, + { + "x": -3.0220000000000007, + "y": -18.678 + }, + { + "x": -6.384000000000002, + "y": -14.415999999999999 + }, + { + "x": -10.25, + "y": -10.25 + }, + { + "x": -14.416000000000004, + "y": -6.383999999999996 + }, + { + "x": -18.677999999999997, + "y": -3.022000000000004 + }, + { + "x": -22.832000000000004, + "y": -0.3679999999999981 + }, + { + "x": -26.674, + "y": 1.3739999999999994 + }, + { + "x": -30.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.562 + }, + { + "x": -0.3680000000000003, + "y": -22.416 + }, + { + "x": -3.0220000000000007, + "y": -17.814 + }, + { + "x": -6.384000000000002, + "y": -13.008 + }, + { + "x": -10.25, + "y": -8.25 + }, + { + "x": -14.416000000000004, + "y": -3.7919999999999954 + }, + { + "x": -18.677999999999997, + "y": 0.11399999999999633 + }, + { + "x": -22.832000000000004, + "y": 3.216000000000003 + }, + { + "x": -26.674, + "y": 5.262 + }, + { + "x": -30.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.45 + }, + { + "x": -0.3680000000000003, + "y": -22.0 + }, + { + "x": -3.0220000000000007, + "y": -16.95 + }, + { + "x": -6.384000000000002, + "y": -11.599999999999998 + }, + { + "x": -10.25, + "y": -6.25 + }, + { + "x": -14.416000000000004, + "y": -1.1999999999999948 + }, + { + "x": -18.677999999999997, + "y": 3.2499999999999956 + }, + { + "x": -22.832000000000004, + "y": 6.8000000000000025 + }, + { + "x": -26.674, + "y": 9.149999999999999 + }, + { + "x": -30.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.338 + }, + { + "x": -0.3680000000000003, + "y": -21.584 + }, + { + "x": -3.0220000000000007, + "y": -16.086 + }, + { + "x": -6.384000000000002, + "y": -10.191999999999998 + }, + { + "x": -10.25, + "y": -4.25 + }, + { + "x": -14.416000000000004, + "y": 1.3920000000000066 + }, + { + "x": -18.677999999999997, + "y": 6.385999999999996 + }, + { + "x": -22.832000000000004, + "y": 10.384000000000004 + }, + { + "x": -26.674, + "y": 13.038 + }, + { + "x": -30.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.226 + }, + { + "x": -0.3680000000000003, + "y": -21.168 + }, + { + "x": -3.0220000000000007, + "y": -15.222 + }, + { + "x": -6.384000000000002, + "y": -8.783999999999997 + }, + { + "x": -10.25, + "y": -2.25 + }, + { + "x": -14.416000000000004, + "y": 3.9840000000000053 + }, + { + "x": -18.677999999999997, + "y": 9.521999999999995 + }, + { + "x": -22.832000000000004, + "y": 13.968000000000005 + }, + { + "x": -26.674, + "y": 16.926 + }, + { + "x": -30.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 2.0, + "y": -30.0 + }, + { + "x": 1.3739999999999999, + "y": -26.114 + }, + { + "x": -0.3680000000000003, + "y": -20.752 + }, + { + "x": -3.0220000000000007, + "y": -14.357999999999999 + }, + { + "x": -6.384000000000002, + "y": -7.375999999999998 + }, + { + "x": -10.25, + "y": -0.25 + }, + { + "x": -14.416000000000004, + "y": 6.576000000000008 + }, + { + "x": -18.677999999999997, + "y": 12.657999999999994 + }, + { + "x": -22.832000000000004, + "y": 17.552000000000007 + }, + { + "x": -26.674, + "y": 20.814 + }, + { + "x": -30.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_1_2", + "endRoad": "road_1_1_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.786, + "y": 18.066 + }, + { + "x": 23.247999999999998, + "y": 18.288 + }, + { + "x": 19.541999999999998, + "y": 18.701999999999998 + }, + { + "x": 15.824, + "y": 19.344 + }, + { + "x": 12.25, + "y": 20.25 + }, + { + "x": 8.975999999999996, + "y": 21.456000000000003 + }, + { + "x": 6.158000000000003, + "y": 22.997999999999998 + }, + { + "x": 3.9519999999999986, + "y": 24.912 + }, + { + "x": 2.5140000000000002, + "y": 27.234 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.898, + "y": 18.066 + }, + { + "x": 23.663999999999998, + "y": 18.288 + }, + { + "x": 20.406, + "y": 18.701999999999998 + }, + { + "x": 17.232, + "y": 19.344 + }, + { + "x": 14.25, + "y": 20.25 + }, + { + "x": 11.567999999999998, + "y": 21.456000000000003 + }, + { + "x": 9.294000000000004, + "y": 22.997999999999998 + }, + { + "x": 7.536, + "y": 24.912 + }, + { + "x": 6.402, + "y": 27.234 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 27.01, + "y": 18.066 + }, + { + "x": 24.08, + "y": 18.288 + }, + { + "x": 21.27, + "y": 18.701999999999998 + }, + { + "x": 18.64, + "y": 19.344 + }, + { + "x": 16.25, + "y": 20.25 + }, + { + "x": 14.159999999999997, + "y": 21.456000000000003 + }, + { + "x": 12.430000000000003, + "y": 22.997999999999998 + }, + { + "x": 11.12, + "y": 24.912 + }, + { + "x": 10.29, + "y": 27.234 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 27.122, + "y": 18.066 + }, + { + "x": 24.496, + "y": 18.288 + }, + { + "x": 22.134, + "y": 18.701999999999998 + }, + { + "x": 20.048000000000002, + "y": 19.344 + }, + { + "x": 18.25, + "y": 20.25 + }, + { + "x": 16.752, + "y": 21.456000000000003 + }, + { + "x": 15.566000000000003, + "y": 22.997999999999998 + }, + { + "x": 14.704, + "y": 24.912 + }, + { + "x": 14.178, + "y": 27.234 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 22.0 + }, + { + "x": 26.786, + "y": 21.954 + }, + { + "x": 23.247999999999998, + "y": 21.872 + }, + { + "x": 19.541999999999998, + "y": 21.838 + }, + { + "x": 15.824, + "y": 21.936000000000003 + }, + { + "x": 12.25, + "y": 22.25 + }, + { + "x": 8.975999999999996, + "y": 22.864 + }, + { + "x": 6.158000000000003, + "y": 23.862 + }, + { + "x": 3.9519999999999986, + "y": 25.328 + }, + { + "x": 2.5140000000000002, + "y": 27.346 + }, + { + "x": 2.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 22.0 + }, + { + "x": 26.898, + "y": 21.954 + }, + { + "x": 23.663999999999998, + "y": 21.872 + }, + { + "x": 20.406, + "y": 21.838 + }, + { + "x": 17.232, + "y": 21.936000000000003 + }, + { + "x": 14.25, + "y": 22.25 + }, + { + "x": 11.567999999999998, + "y": 22.864 + }, + { + "x": 9.294000000000004, + "y": 23.862 + }, + { + "x": 7.536, + "y": 25.328 + }, + { + "x": 6.402, + "y": 27.346 + }, + { + "x": 6.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 22.0 + }, + { + "x": 27.01, + "y": 21.954 + }, + { + "x": 24.08, + "y": 21.872 + }, + { + "x": 21.27, + "y": 21.838 + }, + { + "x": 18.64, + "y": 21.936000000000003 + }, + { + "x": 16.25, + "y": 22.25 + }, + { + "x": 14.159999999999997, + "y": 22.864 + }, + { + "x": 12.430000000000003, + "y": 23.862 + }, + { + "x": 11.12, + "y": 25.328 + }, + { + "x": 10.29, + "y": 27.346 + }, + { + "x": 10.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 22.0 + }, + { + "x": 27.122, + "y": 21.954 + }, + { + "x": 24.496, + "y": 21.872 + }, + { + "x": 22.134, + "y": 21.838 + }, + { + "x": 20.048000000000002, + "y": 21.936000000000003 + }, + { + "x": 18.25, + "y": 22.25 + }, + { + "x": 16.752, + "y": 22.864 + }, + { + "x": 15.566000000000003, + "y": 23.862 + }, + { + "x": 14.704, + "y": 25.328 + }, + { + "x": 14.178, + "y": 27.346 + }, + { + "x": 14.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_1_2", + "endRoad": "road_1_1_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 9.775999999999998 + }, + { + "x": 20.88, + "y": 9.168000000000001 + }, + { + "x": 14.52, + "y": 8.272 + }, + { + "x": 7.439999999999998, + "y": 7.183999999999999 + }, + { + "x": 0.0, + "y": 6.0 + }, + { + "x": -7.440000000000009, + "y": 4.815999999999999 + }, + { + "x": -14.519999999999992, + "y": 3.7280000000000006 + }, + { + "x": -20.880000000000006, + "y": 2.831999999999999 + }, + { + "x": -26.16, + "y": 2.224 + }, + { + "x": -30.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 9.887999999999998 + }, + { + "x": 20.88, + "y": 9.584000000000001 + }, + { + "x": 14.52, + "y": 9.136 + }, + { + "x": 7.439999999999998, + "y": 8.591999999999999 + }, + { + "x": 0.0, + "y": 8.0 + }, + { + "x": -7.440000000000009, + "y": 7.4079999999999995 + }, + { + "x": -14.519999999999992, + "y": 6.864000000000001 + }, + { + "x": -20.880000000000006, + "y": 6.416 + }, + { + "x": -26.16, + "y": 6.112 + }, + { + "x": -30.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 9.999999999999998 + }, + { + "x": 20.88, + "y": 10.000000000000002 + }, + { + "x": 14.52, + "y": 10.0 + }, + { + "x": 7.439999999999998, + "y": 10.0 + }, + { + "x": 0.0, + "y": 10.0 + }, + { + "x": -7.440000000000009, + "y": 10.0 + }, + { + "x": -14.519999999999992, + "y": 10.0 + }, + { + "x": -20.880000000000006, + "y": 10.0 + }, + { + "x": -26.16, + "y": 10.0 + }, + { + "x": -30.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 10.111999999999998 + }, + { + "x": 20.88, + "y": 10.416 + }, + { + "x": 14.52, + "y": 10.864 + }, + { + "x": 7.439999999999998, + "y": 11.408 + }, + { + "x": 0.0, + "y": 12.0 + }, + { + "x": -7.440000000000009, + "y": 12.592000000000002 + }, + { + "x": -14.519999999999992, + "y": 13.136 + }, + { + "x": -20.880000000000006, + "y": 13.584000000000001 + }, + { + "x": -26.16, + "y": 13.888000000000002 + }, + { + "x": -30.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 10.223999999999998 + }, + { + "x": 20.88, + "y": 10.832 + }, + { + "x": 14.52, + "y": 11.728 + }, + { + "x": 7.439999999999998, + "y": 12.816 + }, + { + "x": 0.0, + "y": 14.0 + }, + { + "x": -7.440000000000009, + "y": 15.184000000000001 + }, + { + "x": -14.519999999999992, + "y": 16.272 + }, + { + "x": -20.880000000000006, + "y": 17.168000000000003 + }, + { + "x": -26.16, + "y": 17.776 + }, + { + "x": -30.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 10.0 + }, + { + "x": 26.16, + "y": 10.335999999999999 + }, + { + "x": 20.88, + "y": 11.248000000000001 + }, + { + "x": 14.52, + "y": 12.592 + }, + { + "x": 7.439999999999998, + "y": 14.224 + }, + { + "x": 0.0, + "y": 16.0 + }, + { + "x": -7.440000000000009, + "y": 17.776000000000003 + }, + { + "x": -14.519999999999992, + "y": 19.407999999999998 + }, + { + "x": -20.880000000000006, + "y": 20.752000000000002 + }, + { + "x": -26.16, + "y": 21.664 + }, + { + "x": -30.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 13.664 + }, + { + "x": 20.88, + "y": 12.752 + }, + { + "x": 14.52, + "y": 11.408000000000001 + }, + { + "x": 7.439999999999998, + "y": 9.776 + }, + { + "x": 0.0, + "y": 8.0 + }, + { + "x": -7.440000000000009, + "y": 6.223999999999998 + }, + { + "x": -14.519999999999992, + "y": 4.5920000000000005 + }, + { + "x": -20.880000000000006, + "y": 3.2479999999999984 + }, + { + "x": -26.16, + "y": 2.3360000000000003 + }, + { + "x": -30.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 13.776 + }, + { + "x": 20.88, + "y": 13.168000000000001 + }, + { + "x": 14.52, + "y": 12.272000000000002 + }, + { + "x": 7.439999999999998, + "y": 11.184 + }, + { + "x": 0.0, + "y": 10.0 + }, + { + "x": -7.440000000000009, + "y": 8.815999999999999 + }, + { + "x": -14.519999999999992, + "y": 7.728000000000001 + }, + { + "x": -20.880000000000006, + "y": 6.831999999999999 + }, + { + "x": -26.16, + "y": 6.224 + }, + { + "x": -30.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 13.888 + }, + { + "x": 20.88, + "y": 13.584000000000001 + }, + { + "x": 14.52, + "y": 13.136000000000001 + }, + { + "x": 7.439999999999998, + "y": 12.592 + }, + { + "x": 0.0, + "y": 12.0 + }, + { + "x": -7.440000000000009, + "y": 11.408 + }, + { + "x": -14.519999999999992, + "y": 10.864 + }, + { + "x": -20.880000000000006, + "y": 10.415999999999999 + }, + { + "x": -26.16, + "y": 10.111999999999998 + }, + { + "x": -30.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 14.0 + }, + { + "x": 20.88, + "y": 14.0 + }, + { + "x": 14.52, + "y": 14.000000000000002 + }, + { + "x": 7.439999999999998, + "y": 14.0 + }, + { + "x": 0.0, + "y": 14.0 + }, + { + "x": -7.440000000000009, + "y": 14.0 + }, + { + "x": -14.519999999999992, + "y": 14.0 + }, + { + "x": -20.880000000000006, + "y": 14.0 + }, + { + "x": -26.16, + "y": 14.0 + }, + { + "x": -30.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 14.112 + }, + { + "x": 20.88, + "y": 14.416 + }, + { + "x": 14.52, + "y": 14.864 + }, + { + "x": 7.439999999999998, + "y": 15.408000000000001 + }, + { + "x": 0.0, + "y": 16.0 + }, + { + "x": -7.440000000000009, + "y": 16.592 + }, + { + "x": -14.519999999999992, + "y": 17.136 + }, + { + "x": -20.880000000000006, + "y": 17.584000000000003 + }, + { + "x": -26.16, + "y": 17.887999999999998 + }, + { + "x": -30.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 14.0 + }, + { + "x": 26.16, + "y": 14.224 + }, + { + "x": 20.88, + "y": 14.832 + }, + { + "x": 14.52, + "y": 15.728000000000002 + }, + { + "x": 7.439999999999998, + "y": 16.816000000000003 + }, + { + "x": 0.0, + "y": 18.0 + }, + { + "x": -7.440000000000009, + "y": 19.184 + }, + { + "x": -14.519999999999992, + "y": 20.272 + }, + { + "x": -20.880000000000006, + "y": 21.168000000000003 + }, + { + "x": -26.16, + "y": 21.776 + }, + { + "x": -30.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 17.552 + }, + { + "x": 20.88, + "y": 16.336 + }, + { + "x": 14.52, + "y": 14.544 + }, + { + "x": 7.439999999999998, + "y": 12.367999999999999 + }, + { + "x": 0.0, + "y": 10.0 + }, + { + "x": -7.440000000000009, + "y": 7.631999999999998 + }, + { + "x": -14.519999999999992, + "y": 5.456000000000001 + }, + { + "x": -20.880000000000006, + "y": 3.663999999999998 + }, + { + "x": -26.16, + "y": 2.4480000000000004 + }, + { + "x": -30.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 17.663999999999998 + }, + { + "x": 20.88, + "y": 16.752 + }, + { + "x": 14.52, + "y": 15.408000000000001 + }, + { + "x": 7.439999999999998, + "y": 13.775999999999998 + }, + { + "x": 0.0, + "y": 12.0 + }, + { + "x": -7.440000000000009, + "y": 10.223999999999998 + }, + { + "x": -14.519999999999992, + "y": 8.592000000000002 + }, + { + "x": -20.880000000000006, + "y": 7.247999999999999 + }, + { + "x": -26.16, + "y": 6.336 + }, + { + "x": -30.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 17.776 + }, + { + "x": 20.88, + "y": 17.168 + }, + { + "x": 14.52, + "y": 16.272 + }, + { + "x": 7.439999999999998, + "y": 15.184 + }, + { + "x": 0.0, + "y": 14.0 + }, + { + "x": -7.440000000000009, + "y": 12.815999999999999 + }, + { + "x": -14.519999999999992, + "y": 11.728000000000002 + }, + { + "x": -20.880000000000006, + "y": 10.831999999999999 + }, + { + "x": -26.16, + "y": 10.224 + }, + { + "x": -30.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 17.887999999999998 + }, + { + "x": 20.88, + "y": 17.584 + }, + { + "x": 14.52, + "y": 17.136 + }, + { + "x": 7.439999999999998, + "y": 16.592 + }, + { + "x": 0.0, + "y": 16.0 + }, + { + "x": -7.440000000000009, + "y": 15.408000000000001 + }, + { + "x": -14.519999999999992, + "y": 14.864 + }, + { + "x": -20.880000000000006, + "y": 14.416 + }, + { + "x": -26.16, + "y": 14.112000000000002 + }, + { + "x": -30.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 18.0 + }, + { + "x": 20.88, + "y": 18.0 + }, + { + "x": 14.52, + "y": 18.0 + }, + { + "x": 7.439999999999998, + "y": 18.0 + }, + { + "x": 0.0, + "y": 18.0 + }, + { + "x": -7.440000000000009, + "y": 18.0 + }, + { + "x": -14.519999999999992, + "y": 18.0 + }, + { + "x": -20.880000000000006, + "y": 18.0 + }, + { + "x": -26.16, + "y": 18.0 + }, + { + "x": -30.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 18.0 + }, + { + "x": 26.16, + "y": 18.112 + }, + { + "x": 20.88, + "y": 18.416 + }, + { + "x": 14.52, + "y": 18.864 + }, + { + "x": 7.439999999999998, + "y": 19.408 + }, + { + "x": 0.0, + "y": 20.0 + }, + { + "x": -7.440000000000009, + "y": 20.592000000000002 + }, + { + "x": -14.519999999999992, + "y": 21.136 + }, + { + "x": -20.880000000000006, + "y": 21.584 + }, + { + "x": -26.16, + "y": 21.888 + }, + { + "x": -30.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_1_2", + "endRoad": "road_1_1_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 2.0 + }, + { + "x": 26.674, + "y": 1.3739999999999999 + }, + { + "x": 22.832, + "y": -0.3680000000000003 + }, + { + "x": 18.678, + "y": -3.0220000000000007 + }, + { + "x": 14.415999999999999, + "y": -6.384000000000002 + }, + { + "x": 10.25, + "y": -10.25 + }, + { + "x": 6.383999999999996, + "y": -14.416000000000004 + }, + { + "x": 3.022000000000004, + "y": -18.677999999999997 + }, + { + "x": 0.3679999999999981, + "y": -22.832000000000004 + }, + { + "x": -1.3739999999999994, + "y": -26.674 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 2.0 + }, + { + "x": 26.562, + "y": 1.3739999999999999 + }, + { + "x": 22.416, + "y": -0.3680000000000003 + }, + { + "x": 17.814, + "y": -3.0220000000000007 + }, + { + "x": 13.008, + "y": -6.384000000000002 + }, + { + "x": 8.25, + "y": -10.25 + }, + { + "x": 3.7919999999999954, + "y": -14.416000000000004 + }, + { + "x": -0.11399999999999633, + "y": -18.677999999999997 + }, + { + "x": -3.216000000000003, + "y": -22.832000000000004 + }, + { + "x": -5.262, + "y": -26.674 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 2.0 + }, + { + "x": 26.45, + "y": 1.3739999999999999 + }, + { + "x": 22.0, + "y": -0.3680000000000003 + }, + { + "x": 16.95, + "y": -3.0220000000000007 + }, + { + "x": 11.599999999999998, + "y": -6.384000000000002 + }, + { + "x": 6.25, + "y": -10.25 + }, + { + "x": 1.1999999999999948, + "y": -14.416000000000004 + }, + { + "x": -3.2499999999999956, + "y": -18.677999999999997 + }, + { + "x": -6.8000000000000025, + "y": -22.832000000000004 + }, + { + "x": -9.149999999999999, + "y": -26.674 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 2.0 + }, + { + "x": 26.338, + "y": 1.3739999999999999 + }, + { + "x": 21.584, + "y": -0.3680000000000003 + }, + { + "x": 16.086, + "y": -3.0220000000000007 + }, + { + "x": 10.191999999999998, + "y": -6.384000000000002 + }, + { + "x": 4.25, + "y": -10.25 + }, + { + "x": -1.3920000000000066, + "y": -14.416000000000004 + }, + { + "x": -6.385999999999996, + "y": -18.677999999999997 + }, + { + "x": -10.384000000000004, + "y": -22.832000000000004 + }, + { + "x": -13.038, + "y": -26.674 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 6.0 + }, + { + "x": 26.674, + "y": 5.2620000000000005 + }, + { + "x": 22.832, + "y": 3.216 + }, + { + "x": 18.678, + "y": 0.11400000000000032 + }, + { + "x": 14.415999999999999, + "y": -3.792000000000002 + }, + { + "x": 10.25, + "y": -8.25 + }, + { + "x": 6.383999999999996, + "y": -13.008000000000006 + }, + { + "x": 3.022000000000004, + "y": -17.813999999999997 + }, + { + "x": 0.3679999999999981, + "y": -22.416000000000004 + }, + { + "x": -1.3739999999999994, + "y": -26.562 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 6.0 + }, + { + "x": 26.562, + "y": 5.2620000000000005 + }, + { + "x": 22.416, + "y": 3.216 + }, + { + "x": 17.814, + "y": 0.11400000000000032 + }, + { + "x": 13.008, + "y": -3.792000000000002 + }, + { + "x": 8.25, + "y": -8.25 + }, + { + "x": 3.7919999999999954, + "y": -13.008000000000006 + }, + { + "x": -0.11399999999999633, + "y": -17.813999999999997 + }, + { + "x": -3.216000000000003, + "y": -22.416000000000004 + }, + { + "x": -5.262, + "y": -26.562 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 6.0 + }, + { + "x": 26.45, + "y": 5.2620000000000005 + }, + { + "x": 22.0, + "y": 3.216 + }, + { + "x": 16.95, + "y": 0.11400000000000032 + }, + { + "x": 11.599999999999998, + "y": -3.792000000000002 + }, + { + "x": 6.25, + "y": -8.25 + }, + { + "x": 1.1999999999999948, + "y": -13.008000000000006 + }, + { + "x": -3.2499999999999956, + "y": -17.813999999999997 + }, + { + "x": -6.8000000000000025, + "y": -22.416000000000004 + }, + { + "x": -9.149999999999999, + "y": -26.562 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 6.0 + }, + { + "x": 26.338, + "y": 5.2620000000000005 + }, + { + "x": 21.584, + "y": 3.216 + }, + { + "x": 16.086, + "y": 0.11400000000000032 + }, + { + "x": 10.191999999999998, + "y": -3.792000000000002 + }, + { + "x": 4.25, + "y": -8.25 + }, + { + "x": -1.3920000000000066, + "y": -13.008000000000006 + }, + { + "x": -6.385999999999996, + "y": -17.813999999999997 + }, + { + "x": -10.384000000000004, + "y": -22.416000000000004 + }, + { + "x": -13.038, + "y": -26.562 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_2_3", + "endRoad": "road_1_1_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.674 + }, + { + "x": 0.3680000000000003, + "y": 22.832 + }, + { + "x": 3.0220000000000007, + "y": 18.678 + }, + { + "x": 6.384000000000002, + "y": 14.415999999999999 + }, + { + "x": 10.25, + "y": 10.25 + }, + { + "x": 14.416000000000004, + "y": 6.383999999999996 + }, + { + "x": 18.677999999999997, + "y": 3.022000000000004 + }, + { + "x": 22.832000000000004, + "y": 0.3679999999999981 + }, + { + "x": 26.674, + "y": -1.3739999999999994 + }, + { + "x": 30.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.562 + }, + { + "x": 0.3680000000000003, + "y": 22.416 + }, + { + "x": 3.0220000000000007, + "y": 17.814 + }, + { + "x": 6.384000000000002, + "y": 13.008 + }, + { + "x": 10.25, + "y": 8.25 + }, + { + "x": 14.416000000000004, + "y": 3.7919999999999954 + }, + { + "x": 18.677999999999997, + "y": -0.11399999999999633 + }, + { + "x": 22.832000000000004, + "y": -3.216000000000003 + }, + { + "x": 26.674, + "y": -5.262 + }, + { + "x": 30.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.45 + }, + { + "x": 0.3680000000000003, + "y": 22.0 + }, + { + "x": 3.0220000000000007, + "y": 16.95 + }, + { + "x": 6.384000000000002, + "y": 11.599999999999998 + }, + { + "x": 10.25, + "y": 6.25 + }, + { + "x": 14.416000000000004, + "y": 1.1999999999999948 + }, + { + "x": 18.677999999999997, + "y": -3.2499999999999956 + }, + { + "x": 22.832000000000004, + "y": -6.8000000000000025 + }, + { + "x": 26.674, + "y": -9.149999999999999 + }, + { + "x": 30.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.338 + }, + { + "x": 0.3680000000000003, + "y": 21.584 + }, + { + "x": 3.0220000000000007, + "y": 16.086 + }, + { + "x": 6.384000000000002, + "y": 10.191999999999998 + }, + { + "x": 10.25, + "y": 4.25 + }, + { + "x": 14.416000000000004, + "y": -1.3920000000000066 + }, + { + "x": 18.677999999999997, + "y": -6.385999999999996 + }, + { + "x": 22.832000000000004, + "y": -10.384000000000004 + }, + { + "x": 26.674, + "y": -13.038 + }, + { + "x": 30.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.226 + }, + { + "x": 0.3680000000000003, + "y": 21.168 + }, + { + "x": 3.0220000000000007, + "y": 15.222 + }, + { + "x": 6.384000000000002, + "y": 8.783999999999997 + }, + { + "x": 10.25, + "y": 2.25 + }, + { + "x": 14.416000000000004, + "y": -3.9840000000000053 + }, + { + "x": 18.677999999999997, + "y": -9.521999999999995 + }, + { + "x": 22.832000000000004, + "y": -13.968000000000005 + }, + { + "x": 26.674, + "y": -16.926 + }, + { + "x": 30.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": -2.0, + "y": 30.0 + }, + { + "x": -1.3739999999999999, + "y": 26.114 + }, + { + "x": 0.3680000000000003, + "y": 20.752 + }, + { + "x": 3.0220000000000007, + "y": 14.357999999999999 + }, + { + "x": 6.384000000000002, + "y": 7.375999999999998 + }, + { + "x": 10.25, + "y": 0.25 + }, + { + "x": 14.416000000000004, + "y": -6.576000000000008 + }, + { + "x": 18.677999999999997, + "y": -12.657999999999994 + }, + { + "x": 22.832000000000004, + "y": -17.552000000000007 + }, + { + "x": 26.674, + "y": -20.814 + }, + { + "x": 30.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_2_3", + "endRoad": "road_1_1_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 26.786 + }, + { + "x": -14.704, + "y": 23.247999999999998 + }, + { + "x": -15.566000000000003, + "y": 19.541999999999998 + }, + { + "x": -16.752000000000002, + "y": 15.824 + }, + { + "x": -18.25, + "y": 12.25 + }, + { + "x": -20.048000000000002, + "y": 8.975999999999996 + }, + { + "x": -22.133999999999997, + "y": 6.158000000000003 + }, + { + "x": -24.496000000000002, + "y": 3.9519999999999986 + }, + { + "x": -27.122, + "y": 2.5140000000000002 + }, + { + "x": -30.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 26.898 + }, + { + "x": -14.704, + "y": 23.663999999999998 + }, + { + "x": -15.566000000000003, + "y": 20.406 + }, + { + "x": -16.752000000000002, + "y": 17.232 + }, + { + "x": -18.25, + "y": 14.25 + }, + { + "x": -20.048000000000002, + "y": 11.567999999999998 + }, + { + "x": -22.133999999999997, + "y": 9.294000000000004 + }, + { + "x": -24.496000000000002, + "y": 7.536 + }, + { + "x": -27.122, + "y": 6.402 + }, + { + "x": -30.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 27.01 + }, + { + "x": -14.704, + "y": 24.08 + }, + { + "x": -15.566000000000003, + "y": 21.27 + }, + { + "x": -16.752000000000002, + "y": 18.64 + }, + { + "x": -18.25, + "y": 16.25 + }, + { + "x": -20.048000000000002, + "y": 14.159999999999997 + }, + { + "x": -22.133999999999997, + "y": 12.430000000000003 + }, + { + "x": -24.496000000000002, + "y": 11.12 + }, + { + "x": -27.122, + "y": 10.29 + }, + { + "x": -30.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 27.122 + }, + { + "x": -14.704, + "y": 24.496 + }, + { + "x": -15.566000000000003, + "y": 22.134 + }, + { + "x": -16.752000000000002, + "y": 20.048000000000002 + }, + { + "x": -18.25, + "y": 18.25 + }, + { + "x": -20.048000000000002, + "y": 16.752 + }, + { + "x": -22.133999999999997, + "y": 15.566000000000003 + }, + { + "x": -24.496000000000002, + "y": 14.704 + }, + { + "x": -27.122, + "y": 14.178 + }, + { + "x": -30.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 27.234 + }, + { + "x": -14.704, + "y": 24.912 + }, + { + "x": -15.566000000000003, + "y": 22.998 + }, + { + "x": -16.752000000000002, + "y": 21.456000000000003 + }, + { + "x": -18.25, + "y": 20.25 + }, + { + "x": -20.048000000000002, + "y": 19.343999999999998 + }, + { + "x": -22.133999999999997, + "y": 18.702 + }, + { + "x": -24.496000000000002, + "y": 18.288000000000004 + }, + { + "x": -27.122, + "y": 18.066 + }, + { + "x": -30.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": -14.0, + "y": 30.0 + }, + { + "x": -14.178, + "y": 27.346 + }, + { + "x": -14.704, + "y": 25.328 + }, + { + "x": -15.566000000000003, + "y": 23.862000000000002 + }, + { + "x": -16.752000000000002, + "y": 22.864 + }, + { + "x": -18.25, + "y": 22.25 + }, + { + "x": -20.048000000000002, + "y": 21.936 + }, + { + "x": -22.133999999999997, + "y": 21.838 + }, + { + "x": -24.496000000000002, + "y": 21.872 + }, + { + "x": -27.122, + "y": 21.954 + }, + { + "x": -30.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_1_2_3", + "endRoad": "road_1_1_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": -6.0, + "y": 30.0 + }, + { + "x": -5.888, + "y": 26.16 + }, + { + "x": -5.5840000000000005, + "y": 20.88 + }, + { + "x": -5.136000000000001, + "y": 14.52 + }, + { + "x": -4.592, + "y": 7.439999999999998 + }, + { + "x": -4.0, + "y": 0.0 + }, + { + "x": -3.4079999999999995, + "y": -7.440000000000009 + }, + { + "x": -2.8640000000000003, + "y": -14.519999999999992 + }, + { + "x": -2.4159999999999995, + "y": -20.880000000000006 + }, + { + "x": -2.112, + "y": -26.16 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": -6.0, + "y": 30.0 + }, + { + "x": -6.0, + "y": 26.16 + }, + { + "x": -6.0, + "y": 20.88 + }, + { + "x": -6.000000000000001, + "y": 14.52 + }, + { + "x": -6.0, + "y": 7.439999999999998 + }, + { + "x": -6.0, + "y": 0.0 + }, + { + "x": -6.0, + "y": -7.440000000000009 + }, + { + "x": -6.0, + "y": -14.519999999999992 + }, + { + "x": -6.0, + "y": -20.880000000000006 + }, + { + "x": -6.0, + "y": -26.16 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": -6.0, + "y": 30.0 + }, + { + "x": -6.112, + "y": 26.16 + }, + { + "x": -6.416, + "y": 20.88 + }, + { + "x": -6.864000000000001, + "y": 14.52 + }, + { + "x": -7.408, + "y": 7.439999999999998 + }, + { + "x": -8.0, + "y": 0.0 + }, + { + "x": -8.592, + "y": -7.440000000000009 + }, + { + "x": -9.136, + "y": -14.519999999999992 + }, + { + "x": -9.584, + "y": -20.880000000000006 + }, + { + "x": -9.887999999999998, + "y": -26.16 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": -6.0, + "y": 30.0 + }, + { + "x": -6.224, + "y": 26.16 + }, + { + "x": -6.832000000000001, + "y": 20.88 + }, + { + "x": -7.7280000000000015, + "y": 14.52 + }, + { + "x": -8.816, + "y": 7.439999999999998 + }, + { + "x": -10.0, + "y": 0.0 + }, + { + "x": -11.184000000000001, + "y": -7.440000000000009 + }, + { + "x": -12.272, + "y": -14.519999999999992 + }, + { + "x": -13.168000000000001, + "y": -20.880000000000006 + }, + { + "x": -13.776, + "y": -26.16 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": -10.0, + "y": 30.0 + }, + { + "x": -9.775999999999998, + "y": 26.16 + }, + { + "x": -9.168000000000001, + "y": 20.88 + }, + { + "x": -8.272, + "y": 14.52 + }, + { + "x": -7.183999999999999, + "y": 7.439999999999998 + }, + { + "x": -6.0, + "y": 0.0 + }, + { + "x": -4.815999999999999, + "y": -7.440000000000009 + }, + { + "x": -3.7280000000000006, + "y": -14.519999999999992 + }, + { + "x": -2.831999999999999, + "y": -20.880000000000006 + }, + { + "x": -2.224, + "y": -26.16 + }, + { + "x": -2.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": -10.0, + "y": 30.0 + }, + { + "x": -9.887999999999998, + "y": 26.16 + }, + { + "x": -9.584000000000001, + "y": 20.88 + }, + { + "x": -9.136, + "y": 14.52 + }, + { + "x": -8.591999999999999, + "y": 7.439999999999998 + }, + { + "x": -8.0, + "y": 0.0 + }, + { + "x": -7.4079999999999995, + "y": -7.440000000000009 + }, + { + "x": -6.864000000000001, + "y": -14.519999999999992 + }, + { + "x": -6.416, + "y": -20.880000000000006 + }, + { + "x": -6.112, + "y": -26.16 + }, + { + "x": -6.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": -10.0, + "y": 30.0 + }, + { + "x": -9.999999999999998, + "y": 26.16 + }, + { + "x": -10.000000000000002, + "y": 20.88 + }, + { + "x": -10.0, + "y": 14.52 + }, + { + "x": -10.0, + "y": 7.439999999999998 + }, + { + "x": -10.0, + "y": 0.0 + }, + { + "x": -10.0, + "y": -7.440000000000009 + }, + { + "x": -10.0, + "y": -14.519999999999992 + }, + { + "x": -10.0, + "y": -20.880000000000006 + }, + { + "x": -10.0, + "y": -26.16 + }, + { + "x": -10.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": -10.0, + "y": 30.0 + }, + { + "x": -10.111999999999998, + "y": 26.16 + }, + { + "x": -10.416, + "y": 20.88 + }, + { + "x": -10.864, + "y": 14.52 + }, + { + "x": -11.408, + "y": 7.439999999999998 + }, + { + "x": -12.0, + "y": 0.0 + }, + { + "x": -12.592000000000002, + "y": -7.440000000000009 + }, + { + "x": -13.136, + "y": -14.519999999999992 + }, + { + "x": -13.584000000000001, + "y": -20.880000000000006 + }, + { + "x": -13.888000000000002, + "y": -26.16 + }, + { + "x": -14.0, + "y": -30.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_2_1", + "point": { + "x": 300, + "y": 0 + }, + "width": 30, + "roads": [ + "road_1_1_0", + "road_2_0_1", + "road_3_1_2", + "road_2_2_3", + "road_2_1_0", + "road_2_1_1", + "road_2_1_2", + "road_2_1_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_1_1_0", + "endRoad": "road_2_1_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -9.775999999999998 + }, + { + "x": 279.12000000000006, + "y": -9.168000000000001 + }, + { + "x": 285.48, + "y": -8.272 + }, + { + "x": 292.56, + "y": -7.183999999999999 + }, + { + "x": 300.0, + "y": -6.0 + }, + { + "x": 307.44, + "y": -4.815999999999999 + }, + { + "x": 314.52, + "y": -3.7280000000000006 + }, + { + "x": 320.88000000000005, + "y": -2.831999999999999 + }, + { + "x": 326.15999999999997, + "y": -2.224 + }, + { + "x": 330.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -9.887999999999998 + }, + { + "x": 279.12000000000006, + "y": -9.584000000000001 + }, + { + "x": 285.48, + "y": -9.136 + }, + { + "x": 292.56, + "y": -8.591999999999999 + }, + { + "x": 300.0, + "y": -8.0 + }, + { + "x": 307.44, + "y": -7.4079999999999995 + }, + { + "x": 314.52, + "y": -6.864000000000001 + }, + { + "x": 320.88000000000005, + "y": -6.416 + }, + { + "x": 326.15999999999997, + "y": -6.112 + }, + { + "x": 330.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -9.999999999999998 + }, + { + "x": 279.12000000000006, + "y": -10.000000000000002 + }, + { + "x": 285.48, + "y": -10.0 + }, + { + "x": 292.56, + "y": -10.0 + }, + { + "x": 300.0, + "y": -10.0 + }, + { + "x": 307.44, + "y": -10.0 + }, + { + "x": 314.52, + "y": -10.0 + }, + { + "x": 320.88000000000005, + "y": -10.0 + }, + { + "x": 326.15999999999997, + "y": -10.0 + }, + { + "x": 330.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -10.111999999999998 + }, + { + "x": 279.12000000000006, + "y": -10.416 + }, + { + "x": 285.48, + "y": -10.864 + }, + { + "x": 292.56, + "y": -11.408 + }, + { + "x": 300.0, + "y": -12.0 + }, + { + "x": 307.44, + "y": -12.592000000000002 + }, + { + "x": 314.52, + "y": -13.136 + }, + { + "x": 320.88000000000005, + "y": -13.584000000000001 + }, + { + "x": 326.15999999999997, + "y": -13.888000000000002 + }, + { + "x": 330.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -10.223999999999998 + }, + { + "x": 279.12000000000006, + "y": -10.832 + }, + { + "x": 285.48, + "y": -11.728 + }, + { + "x": 292.56, + "y": -12.816 + }, + { + "x": 300.0, + "y": -14.0 + }, + { + "x": 307.44, + "y": -15.184000000000001 + }, + { + "x": 314.52, + "y": -16.272 + }, + { + "x": 320.88000000000005, + "y": -17.168000000000003 + }, + { + "x": 326.15999999999997, + "y": -17.776 + }, + { + "x": 330.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": -10.0 + }, + { + "x": 273.84000000000003, + "y": -10.335999999999999 + }, + { + "x": 279.12000000000006, + "y": -11.248000000000001 + }, + { + "x": 285.48, + "y": -12.592 + }, + { + "x": 292.56, + "y": -14.224 + }, + { + "x": 300.0, + "y": -16.0 + }, + { + "x": 307.44, + "y": -17.776000000000003 + }, + { + "x": 314.52, + "y": -19.407999999999998 + }, + { + "x": 320.88000000000005, + "y": -20.752000000000002 + }, + { + "x": 326.15999999999997, + "y": -21.664 + }, + { + "x": 330.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -13.664 + }, + { + "x": 279.12000000000006, + "y": -12.752 + }, + { + "x": 285.48, + "y": -11.408000000000001 + }, + { + "x": 292.56, + "y": -9.776 + }, + { + "x": 300.0, + "y": -8.0 + }, + { + "x": 307.44, + "y": -6.223999999999998 + }, + { + "x": 314.52, + "y": -4.5920000000000005 + }, + { + "x": 320.88000000000005, + "y": -3.2479999999999984 + }, + { + "x": 326.15999999999997, + "y": -2.3360000000000003 + }, + { + "x": 330.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -13.776 + }, + { + "x": 279.12000000000006, + "y": -13.168000000000001 + }, + { + "x": 285.48, + "y": -12.272000000000002 + }, + { + "x": 292.56, + "y": -11.184 + }, + { + "x": 300.0, + "y": -10.0 + }, + { + "x": 307.44, + "y": -8.815999999999999 + }, + { + "x": 314.52, + "y": -7.728000000000001 + }, + { + "x": 320.88000000000005, + "y": -6.831999999999999 + }, + { + "x": 326.15999999999997, + "y": -6.224 + }, + { + "x": 330.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -13.888 + }, + { + "x": 279.12000000000006, + "y": -13.584000000000001 + }, + { + "x": 285.48, + "y": -13.136000000000001 + }, + { + "x": 292.56, + "y": -12.592 + }, + { + "x": 300.0, + "y": -12.0 + }, + { + "x": 307.44, + "y": -11.408 + }, + { + "x": 314.52, + "y": -10.864 + }, + { + "x": 320.88000000000005, + "y": -10.415999999999999 + }, + { + "x": 326.15999999999997, + "y": -10.111999999999998 + }, + { + "x": 330.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -14.0 + }, + { + "x": 279.12000000000006, + "y": -14.0 + }, + { + "x": 285.48, + "y": -14.000000000000002 + }, + { + "x": 292.56, + "y": -14.0 + }, + { + "x": 300.0, + "y": -14.0 + }, + { + "x": 307.44, + "y": -14.0 + }, + { + "x": 314.52, + "y": -14.0 + }, + { + "x": 320.88000000000005, + "y": -14.0 + }, + { + "x": 326.15999999999997, + "y": -14.0 + }, + { + "x": 330.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -14.112 + }, + { + "x": 279.12000000000006, + "y": -14.416 + }, + { + "x": 285.48, + "y": -14.864 + }, + { + "x": 292.56, + "y": -15.408000000000001 + }, + { + "x": 300.0, + "y": -16.0 + }, + { + "x": 307.44, + "y": -16.592 + }, + { + "x": 314.52, + "y": -17.136 + }, + { + "x": 320.88000000000005, + "y": -17.584000000000003 + }, + { + "x": 326.15999999999997, + "y": -17.887999999999998 + }, + { + "x": 330.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": -14.0 + }, + { + "x": 273.84000000000003, + "y": -14.224 + }, + { + "x": 279.12000000000006, + "y": -14.832 + }, + { + "x": 285.48, + "y": -15.728000000000002 + }, + { + "x": 292.56, + "y": -16.816000000000003 + }, + { + "x": 300.0, + "y": -18.0 + }, + { + "x": 307.44, + "y": -19.184 + }, + { + "x": 314.52, + "y": -20.272 + }, + { + "x": 320.88000000000005, + "y": -21.168000000000003 + }, + { + "x": 326.15999999999997, + "y": -21.776 + }, + { + "x": 330.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -17.552 + }, + { + "x": 279.12000000000006, + "y": -16.336 + }, + { + "x": 285.48, + "y": -14.544 + }, + { + "x": 292.56, + "y": -12.367999999999999 + }, + { + "x": 300.0, + "y": -10.0 + }, + { + "x": 307.44, + "y": -7.631999999999998 + }, + { + "x": 314.52, + "y": -5.456000000000001 + }, + { + "x": 320.88000000000005, + "y": -3.663999999999998 + }, + { + "x": 326.15999999999997, + "y": -2.4480000000000004 + }, + { + "x": 330.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -17.663999999999998 + }, + { + "x": 279.12000000000006, + "y": -16.752 + }, + { + "x": 285.48, + "y": -15.408000000000001 + }, + { + "x": 292.56, + "y": -13.775999999999998 + }, + { + "x": 300.0, + "y": -12.0 + }, + { + "x": 307.44, + "y": -10.223999999999998 + }, + { + "x": 314.52, + "y": -8.592000000000002 + }, + { + "x": 320.88000000000005, + "y": -7.247999999999999 + }, + { + "x": 326.15999999999997, + "y": -6.336 + }, + { + "x": 330.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -17.776 + }, + { + "x": 279.12000000000006, + "y": -17.168 + }, + { + "x": 285.48, + "y": -16.272 + }, + { + "x": 292.56, + "y": -15.184 + }, + { + "x": 300.0, + "y": -14.0 + }, + { + "x": 307.44, + "y": -12.815999999999999 + }, + { + "x": 314.52, + "y": -11.728000000000002 + }, + { + "x": 320.88000000000005, + "y": -10.831999999999999 + }, + { + "x": 326.15999999999997, + "y": -10.224 + }, + { + "x": 330.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -17.887999999999998 + }, + { + "x": 279.12000000000006, + "y": -17.584 + }, + { + "x": 285.48, + "y": -17.136 + }, + { + "x": 292.56, + "y": -16.592 + }, + { + "x": 300.0, + "y": -16.0 + }, + { + "x": 307.44, + "y": -15.408000000000001 + }, + { + "x": 314.52, + "y": -14.864 + }, + { + "x": 320.88000000000005, + "y": -14.416 + }, + { + "x": 326.15999999999997, + "y": -14.112000000000002 + }, + { + "x": 330.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -18.0 + }, + { + "x": 279.12000000000006, + "y": -18.0 + }, + { + "x": 285.48, + "y": -18.0 + }, + { + "x": 292.56, + "y": -18.0 + }, + { + "x": 300.0, + "y": -18.0 + }, + { + "x": 307.44, + "y": -18.0 + }, + { + "x": 314.52, + "y": -18.0 + }, + { + "x": 320.88000000000005, + "y": -18.0 + }, + { + "x": 326.15999999999997, + "y": -18.0 + }, + { + "x": 330.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.84000000000003, + "y": -18.112 + }, + { + "x": 279.12000000000006, + "y": -18.416 + }, + { + "x": 285.48, + "y": -18.864 + }, + { + "x": 292.56, + "y": -19.408 + }, + { + "x": 300.0, + "y": -20.0 + }, + { + "x": 307.44, + "y": -20.592000000000002 + }, + { + "x": 314.52, + "y": -21.136 + }, + { + "x": 320.88000000000005, + "y": -21.584 + }, + { + "x": 326.15999999999997, + "y": -21.888 + }, + { + "x": 330.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_1_0", + "endRoad": "road_2_1_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -2.0 + }, + { + "x": 273.326, + "y": -1.3739999999999999 + }, + { + "x": 277.168, + "y": 0.3680000000000003 + }, + { + "x": 281.322, + "y": 3.0220000000000007 + }, + { + "x": 285.584, + "y": 6.384000000000002 + }, + { + "x": 289.75, + "y": 10.25 + }, + { + "x": 293.616, + "y": 14.416000000000004 + }, + { + "x": 296.978, + "y": 18.677999999999997 + }, + { + "x": 299.632, + "y": 22.832000000000004 + }, + { + "x": 301.37399999999997, + "y": 26.674 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -2.0 + }, + { + "x": 273.438, + "y": -1.3739999999999999 + }, + { + "x": 277.584, + "y": 0.3680000000000003 + }, + { + "x": 282.18600000000004, + "y": 3.0220000000000007 + }, + { + "x": 286.992, + "y": 6.384000000000002 + }, + { + "x": 291.75, + "y": 10.25 + }, + { + "x": 296.20799999999997, + "y": 14.416000000000004 + }, + { + "x": 300.114, + "y": 18.677999999999997 + }, + { + "x": 303.216, + "y": 22.832000000000004 + }, + { + "x": 305.262, + "y": 26.674 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -2.0 + }, + { + "x": 273.55, + "y": -1.3739999999999999 + }, + { + "x": 278.0, + "y": 0.3680000000000003 + }, + { + "x": 283.05, + "y": 3.0220000000000007 + }, + { + "x": 288.4, + "y": 6.384000000000002 + }, + { + "x": 293.75, + "y": 10.25 + }, + { + "x": 298.8, + "y": 14.416000000000004 + }, + { + "x": 303.25, + "y": 18.677999999999997 + }, + { + "x": 306.8, + "y": 22.832000000000004 + }, + { + "x": 309.15, + "y": 26.674 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -2.0 + }, + { + "x": 273.66200000000003, + "y": -1.3739999999999999 + }, + { + "x": 278.41600000000005, + "y": 0.3680000000000003 + }, + { + "x": 283.914, + "y": 3.0220000000000007 + }, + { + "x": 289.808, + "y": 6.384000000000002 + }, + { + "x": 295.75, + "y": 10.25 + }, + { + "x": 301.392, + "y": 14.416000000000004 + }, + { + "x": 306.386, + "y": 18.677999999999997 + }, + { + "x": 310.384, + "y": 22.832000000000004 + }, + { + "x": 313.03799999999995, + "y": 26.674 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -6.0 + }, + { + "x": 273.326, + "y": -5.2620000000000005 + }, + { + "x": 277.168, + "y": -3.216 + }, + { + "x": 281.322, + "y": -0.11400000000000032 + }, + { + "x": 285.584, + "y": 3.792000000000002 + }, + { + "x": 289.75, + "y": 8.25 + }, + { + "x": 293.616, + "y": 13.008000000000006 + }, + { + "x": 296.978, + "y": 17.813999999999997 + }, + { + "x": 299.632, + "y": 22.416000000000004 + }, + { + "x": 301.37399999999997, + "y": 26.562 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -6.0 + }, + { + "x": 273.438, + "y": -5.2620000000000005 + }, + { + "x": 277.584, + "y": -3.216 + }, + { + "x": 282.18600000000004, + "y": -0.11400000000000032 + }, + { + "x": 286.992, + "y": 3.792000000000002 + }, + { + "x": 291.75, + "y": 8.25 + }, + { + "x": 296.20799999999997, + "y": 13.008000000000006 + }, + { + "x": 300.114, + "y": 17.813999999999997 + }, + { + "x": 303.216, + "y": 22.416000000000004 + }, + { + "x": 305.262, + "y": 26.562 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -6.0 + }, + { + "x": 273.55, + "y": -5.2620000000000005 + }, + { + "x": 278.0, + "y": -3.216 + }, + { + "x": 283.05, + "y": -0.11400000000000032 + }, + { + "x": 288.4, + "y": 3.792000000000002 + }, + { + "x": 293.75, + "y": 8.25 + }, + { + "x": 298.8, + "y": 13.008000000000006 + }, + { + "x": 303.25, + "y": 17.813999999999997 + }, + { + "x": 306.8, + "y": 22.416000000000004 + }, + { + "x": 309.15, + "y": 26.562 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -6.0 + }, + { + "x": 273.66200000000003, + "y": -5.2620000000000005 + }, + { + "x": 278.41600000000005, + "y": -3.216 + }, + { + "x": 283.914, + "y": -0.11400000000000032 + }, + { + "x": 289.808, + "y": 3.792000000000002 + }, + { + "x": 295.75, + "y": 8.25 + }, + { + "x": 301.392, + "y": 13.008000000000006 + }, + { + "x": 306.386, + "y": 17.813999999999997 + }, + { + "x": 310.384, + "y": 22.416000000000004 + }, + { + "x": 313.03799999999995, + "y": 26.562 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_1_0", + "endRoad": "road_2_1_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.214, + "y": -18.066 + }, + { + "x": 276.752, + "y": -18.288 + }, + { + "x": 280.458, + "y": -18.701999999999998 + }, + { + "x": 284.176, + "y": -19.344 + }, + { + "x": 287.75, + "y": -20.25 + }, + { + "x": 291.024, + "y": -21.456000000000003 + }, + { + "x": 293.842, + "y": -22.997999999999998 + }, + { + "x": 296.048, + "y": -24.912 + }, + { + "x": 297.486, + "y": -27.234 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 273.10200000000003, + "y": -18.066 + }, + { + "x": 276.336, + "y": -18.288 + }, + { + "x": 279.594, + "y": -18.701999999999998 + }, + { + "x": 282.76800000000003, + "y": -19.344 + }, + { + "x": 285.75, + "y": -20.25 + }, + { + "x": 288.432, + "y": -21.456000000000003 + }, + { + "x": 290.706, + "y": -22.997999999999998 + }, + { + "x": 292.464, + "y": -24.912 + }, + { + "x": 293.59799999999996, + "y": -27.234 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 272.99, + "y": -18.066 + }, + { + "x": 275.92, + "y": -18.288 + }, + { + "x": 278.73, + "y": -18.701999999999998 + }, + { + "x": 281.36, + "y": -19.344 + }, + { + "x": 283.75, + "y": -20.25 + }, + { + "x": 285.84000000000003, + "y": -21.456000000000003 + }, + { + "x": 287.57, + "y": -22.997999999999998 + }, + { + "x": 288.88, + "y": -24.912 + }, + { + "x": 289.71, + "y": -27.234 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -18.0 + }, + { + "x": 272.878, + "y": -18.066 + }, + { + "x": 275.504, + "y": -18.288 + }, + { + "x": 277.866, + "y": -18.701999999999998 + }, + { + "x": 279.952, + "y": -19.344 + }, + { + "x": 281.75, + "y": -20.25 + }, + { + "x": 283.248, + "y": -21.456000000000003 + }, + { + "x": 284.434, + "y": -22.997999999999998 + }, + { + "x": 285.296, + "y": -24.912 + }, + { + "x": 285.822, + "y": -27.234 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": -22.0 + }, + { + "x": 273.214, + "y": -21.954 + }, + { + "x": 276.752, + "y": -21.872 + }, + { + "x": 280.458, + "y": -21.838 + }, + { + "x": 284.176, + "y": -21.936000000000003 + }, + { + "x": 287.75, + "y": -22.25 + }, + { + "x": 291.024, + "y": -22.864 + }, + { + "x": 293.842, + "y": -23.862 + }, + { + "x": 296.048, + "y": -25.328 + }, + { + "x": 297.486, + "y": -27.346 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": -22.0 + }, + { + "x": 273.10200000000003, + "y": -21.954 + }, + { + "x": 276.336, + "y": -21.872 + }, + { + "x": 279.594, + "y": -21.838 + }, + { + "x": 282.76800000000003, + "y": -21.936000000000003 + }, + { + "x": 285.75, + "y": -22.25 + }, + { + "x": 288.432, + "y": -22.864 + }, + { + "x": 290.706, + "y": -23.862 + }, + { + "x": 292.464, + "y": -25.328 + }, + { + "x": 293.59799999999996, + "y": -27.346 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": -22.0 + }, + { + "x": 272.99, + "y": -21.954 + }, + { + "x": 275.92, + "y": -21.872 + }, + { + "x": 278.73, + "y": -21.838 + }, + { + "x": 281.36, + "y": -21.936000000000003 + }, + { + "x": 283.75, + "y": -22.25 + }, + { + "x": 285.84000000000003, + "y": -22.864 + }, + { + "x": 287.57, + "y": -23.862 + }, + { + "x": 288.88, + "y": -25.328 + }, + { + "x": 289.71, + "y": -27.346 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": -22.0 + }, + { + "x": 272.878, + "y": -21.954 + }, + { + "x": 275.504, + "y": -21.872 + }, + { + "x": 277.866, + "y": -21.838 + }, + { + "x": 279.952, + "y": -21.936000000000003 + }, + { + "x": 281.75, + "y": -22.25 + }, + { + "x": 283.248, + "y": -22.864 + }, + { + "x": 284.434, + "y": -23.862 + }, + { + "x": 285.296, + "y": -25.328 + }, + { + "x": 285.822, + "y": -27.346 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_0_1", + "endRoad": "road_2_1_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -26.786 + }, + { + "x": 314.704, + "y": -23.247999999999998 + }, + { + "x": 315.56600000000003, + "y": -19.541999999999998 + }, + { + "x": 316.752, + "y": -15.824 + }, + { + "x": 318.25, + "y": -12.25 + }, + { + "x": 320.048, + "y": -8.975999999999996 + }, + { + "x": 322.13399999999996, + "y": -6.158000000000003 + }, + { + "x": 324.49600000000004, + "y": -3.9519999999999986 + }, + { + "x": 327.122, + "y": -2.5140000000000002 + }, + { + "x": 330.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -26.898 + }, + { + "x": 314.704, + "y": -23.663999999999998 + }, + { + "x": 315.56600000000003, + "y": -20.406 + }, + { + "x": 316.752, + "y": -17.232 + }, + { + "x": 318.25, + "y": -14.25 + }, + { + "x": 320.048, + "y": -11.567999999999998 + }, + { + "x": 322.13399999999996, + "y": -9.294000000000004 + }, + { + "x": 324.49600000000004, + "y": -7.536 + }, + { + "x": 327.122, + "y": -6.402 + }, + { + "x": 330.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -27.01 + }, + { + "x": 314.704, + "y": -24.08 + }, + { + "x": 315.56600000000003, + "y": -21.27 + }, + { + "x": 316.752, + "y": -18.64 + }, + { + "x": 318.25, + "y": -16.25 + }, + { + "x": 320.048, + "y": -14.159999999999997 + }, + { + "x": 322.13399999999996, + "y": -12.430000000000003 + }, + { + "x": 324.49600000000004, + "y": -11.12 + }, + { + "x": 327.122, + "y": -10.29 + }, + { + "x": 330.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -27.122 + }, + { + "x": 314.704, + "y": -24.496 + }, + { + "x": 315.56600000000003, + "y": -22.134 + }, + { + "x": 316.752, + "y": -20.048000000000002 + }, + { + "x": 318.25, + "y": -18.25 + }, + { + "x": 320.048, + "y": -16.752 + }, + { + "x": 322.13399999999996, + "y": -15.566000000000003 + }, + { + "x": 324.49600000000004, + "y": -14.704 + }, + { + "x": 327.122, + "y": -14.178 + }, + { + "x": 330.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -27.234 + }, + { + "x": 314.704, + "y": -24.912 + }, + { + "x": 315.56600000000003, + "y": -22.998 + }, + { + "x": 316.752, + "y": -21.456000000000003 + }, + { + "x": 318.25, + "y": -20.25 + }, + { + "x": 320.048, + "y": -19.343999999999998 + }, + { + "x": 322.13399999999996, + "y": -18.702 + }, + { + "x": 324.49600000000004, + "y": -18.288000000000004 + }, + { + "x": 327.122, + "y": -18.066 + }, + { + "x": 330.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 314.0, + "y": -30.0 + }, + { + "x": 314.178, + "y": -27.346 + }, + { + "x": 314.704, + "y": -25.328 + }, + { + "x": 315.56600000000003, + "y": -23.862000000000002 + }, + { + "x": 316.752, + "y": -22.864 + }, + { + "x": 318.25, + "y": -22.25 + }, + { + "x": 320.048, + "y": -21.936 + }, + { + "x": 322.13399999999996, + "y": -21.838 + }, + { + "x": 324.49600000000004, + "y": -21.872 + }, + { + "x": 327.122, + "y": -21.954 + }, + { + "x": 330.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_0_1", + "endRoad": "road_2_1_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 306.0, + "y": -30.0 + }, + { + "x": 305.88800000000003, + "y": -26.16 + }, + { + "x": 305.584, + "y": -20.88 + }, + { + "x": 305.136, + "y": -14.52 + }, + { + "x": 304.592, + "y": -7.439999999999998 + }, + { + "x": 304.0, + "y": 0.0 + }, + { + "x": 303.408, + "y": 7.440000000000009 + }, + { + "x": 302.864, + "y": 14.519999999999992 + }, + { + "x": 302.416, + "y": 20.880000000000006 + }, + { + "x": 302.11199999999997, + "y": 26.16 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 306.0, + "y": -30.0 + }, + { + "x": 306.0, + "y": -26.16 + }, + { + "x": 306.0, + "y": -20.88 + }, + { + "x": 306.0, + "y": -14.52 + }, + { + "x": 306.0, + "y": -7.439999999999998 + }, + { + "x": 306.0, + "y": 0.0 + }, + { + "x": 306.0, + "y": 7.440000000000009 + }, + { + "x": 306.0, + "y": 14.519999999999992 + }, + { + "x": 306.0, + "y": 20.880000000000006 + }, + { + "x": 306.0, + "y": 26.16 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 306.0, + "y": -30.0 + }, + { + "x": 306.112, + "y": -26.16 + }, + { + "x": 306.416, + "y": -20.88 + }, + { + "x": 306.86400000000003, + "y": -14.52 + }, + { + "x": 307.408, + "y": -7.439999999999998 + }, + { + "x": 308.0, + "y": 0.0 + }, + { + "x": 308.592, + "y": 7.440000000000009 + }, + { + "x": 309.13599999999997, + "y": 14.519999999999992 + }, + { + "x": 309.584, + "y": 20.880000000000006 + }, + { + "x": 309.888, + "y": 26.16 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 306.0, + "y": -30.0 + }, + { + "x": 306.22400000000005, + "y": -26.16 + }, + { + "x": 306.832, + "y": -20.88 + }, + { + "x": 307.728, + "y": -14.52 + }, + { + "x": 308.81600000000003, + "y": -7.439999999999998 + }, + { + "x": 310.0, + "y": 0.0 + }, + { + "x": 311.18399999999997, + "y": 7.440000000000009 + }, + { + "x": 312.272, + "y": 14.519999999999992 + }, + { + "x": 313.168, + "y": 20.880000000000006 + }, + { + "x": 313.77599999999995, + "y": 26.16 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 310.0, + "y": -30.0 + }, + { + "x": 309.776, + "y": -26.16 + }, + { + "x": 309.168, + "y": -20.88 + }, + { + "x": 308.27200000000005, + "y": -14.52 + }, + { + "x": 307.18399999999997, + "y": -7.439999999999998 + }, + { + "x": 306.0, + "y": 0.0 + }, + { + "x": 304.816, + "y": 7.440000000000009 + }, + { + "x": 303.728, + "y": 14.519999999999992 + }, + { + "x": 302.832, + "y": 20.880000000000006 + }, + { + "x": 302.224, + "y": 26.16 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 310.0, + "y": -30.0 + }, + { + "x": 309.888, + "y": -26.16 + }, + { + "x": 309.584, + "y": -20.88 + }, + { + "x": 309.136, + "y": -14.52 + }, + { + "x": 308.592, + "y": -7.439999999999998 + }, + { + "x": 308.0, + "y": 0.0 + }, + { + "x": 307.408, + "y": 7.440000000000009 + }, + { + "x": 306.864, + "y": 14.519999999999992 + }, + { + "x": 306.416, + "y": 20.880000000000006 + }, + { + "x": 306.112, + "y": 26.16 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 310.0, + "y": -30.0 + }, + { + "x": 310.0, + "y": -26.16 + }, + { + "x": 310.0, + "y": -20.88 + }, + { + "x": 310.0, + "y": -14.52 + }, + { + "x": 310.0, + "y": -7.439999999999998 + }, + { + "x": 310.0, + "y": 0.0 + }, + { + "x": 310.0, + "y": 7.440000000000009 + }, + { + "x": 310.0, + "y": 14.519999999999992 + }, + { + "x": 310.0, + "y": 20.880000000000006 + }, + { + "x": 310.0, + "y": 26.16 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 310.0, + "y": -30.0 + }, + { + "x": 310.11199999999997, + "y": -26.16 + }, + { + "x": 310.416, + "y": -20.88 + }, + { + "x": 310.86400000000003, + "y": -14.52 + }, + { + "x": 311.408, + "y": -7.439999999999998 + }, + { + "x": 312.0, + "y": 0.0 + }, + { + "x": 312.592, + "y": 7.440000000000009 + }, + { + "x": 313.136, + "y": 14.519999999999992 + }, + { + "x": 313.584, + "y": 20.880000000000006 + }, + { + "x": 313.888, + "y": 26.16 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_0_1", + "endRoad": "road_2_1_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.674 + }, + { + "x": 299.63199999999995, + "y": -22.832 + }, + { + "x": 296.978, + "y": -18.678 + }, + { + "x": 293.616, + "y": -14.415999999999999 + }, + { + "x": 289.75, + "y": -10.25 + }, + { + "x": 285.584, + "y": -6.383999999999996 + }, + { + "x": 281.32200000000006, + "y": -3.022000000000004 + }, + { + "x": 277.168, + "y": -0.3679999999999981 + }, + { + "x": 273.326, + "y": 1.3739999999999994 + }, + { + "x": 270.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.562 + }, + { + "x": 299.63199999999995, + "y": -22.416 + }, + { + "x": 296.978, + "y": -17.814 + }, + { + "x": 293.616, + "y": -13.008 + }, + { + "x": 289.75, + "y": -8.25 + }, + { + "x": 285.584, + "y": -3.7919999999999954 + }, + { + "x": 281.32200000000006, + "y": 0.11399999999999633 + }, + { + "x": 277.168, + "y": 3.216000000000003 + }, + { + "x": 273.326, + "y": 5.262 + }, + { + "x": 270.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.45 + }, + { + "x": 299.63199999999995, + "y": -22.0 + }, + { + "x": 296.978, + "y": -16.95 + }, + { + "x": 293.616, + "y": -11.599999999999998 + }, + { + "x": 289.75, + "y": -6.25 + }, + { + "x": 285.584, + "y": -1.1999999999999948 + }, + { + "x": 281.32200000000006, + "y": 3.2499999999999956 + }, + { + "x": 277.168, + "y": 6.8000000000000025 + }, + { + "x": 273.326, + "y": 9.149999999999999 + }, + { + "x": 270.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.338 + }, + { + "x": 299.63199999999995, + "y": -21.584 + }, + { + "x": 296.978, + "y": -16.086 + }, + { + "x": 293.616, + "y": -10.191999999999998 + }, + { + "x": 289.75, + "y": -4.25 + }, + { + "x": 285.584, + "y": 1.3920000000000066 + }, + { + "x": 281.32200000000006, + "y": 6.385999999999996 + }, + { + "x": 277.168, + "y": 10.384000000000004 + }, + { + "x": 273.326, + "y": 13.038 + }, + { + "x": 270.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.226 + }, + { + "x": 299.63199999999995, + "y": -21.168 + }, + { + "x": 296.978, + "y": -15.222 + }, + { + "x": 293.616, + "y": -8.783999999999997 + }, + { + "x": 289.75, + "y": -2.25 + }, + { + "x": 285.584, + "y": 3.9840000000000053 + }, + { + "x": 281.32200000000006, + "y": 9.521999999999995 + }, + { + "x": 277.168, + "y": 13.968000000000005 + }, + { + "x": 273.326, + "y": 16.926 + }, + { + "x": 270.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 302.0, + "y": -30.0 + }, + { + "x": 301.37399999999997, + "y": -26.114 + }, + { + "x": 299.63199999999995, + "y": -20.752 + }, + { + "x": 296.978, + "y": -14.357999999999999 + }, + { + "x": 293.616, + "y": -7.375999999999998 + }, + { + "x": 289.75, + "y": -0.25 + }, + { + "x": 285.584, + "y": 6.576000000000008 + }, + { + "x": 281.32200000000006, + "y": 12.657999999999994 + }, + { + "x": 277.168, + "y": 17.552000000000007 + }, + { + "x": 273.326, + "y": 20.814 + }, + { + "x": 270.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_1_2", + "endRoad": "road_2_1_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.786, + "y": 18.066 + }, + { + "x": 323.24800000000005, + "y": 18.288 + }, + { + "x": 319.54200000000003, + "y": 18.701999999999998 + }, + { + "x": 315.824, + "y": 19.344 + }, + { + "x": 312.25, + "y": 20.25 + }, + { + "x": 308.976, + "y": 21.456000000000003 + }, + { + "x": 306.158, + "y": 22.997999999999998 + }, + { + "x": 303.952, + "y": 24.912 + }, + { + "x": 302.514, + "y": 27.234 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.89799999999997, + "y": 18.066 + }, + { + "x": 323.66400000000004, + "y": 18.288 + }, + { + "x": 320.40600000000006, + "y": 18.701999999999998 + }, + { + "x": 317.232, + "y": 19.344 + }, + { + "x": 314.25, + "y": 20.25 + }, + { + "x": 311.568, + "y": 21.456000000000003 + }, + { + "x": 309.294, + "y": 22.997999999999998 + }, + { + "x": 307.536, + "y": 24.912 + }, + { + "x": 306.40200000000004, + "y": 27.234 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 327.01, + "y": 18.066 + }, + { + "x": 324.08000000000004, + "y": 18.288 + }, + { + "x": 321.27000000000004, + "y": 18.701999999999998 + }, + { + "x": 318.64, + "y": 19.344 + }, + { + "x": 316.25, + "y": 20.25 + }, + { + "x": 314.16, + "y": 21.456000000000003 + }, + { + "x": 312.43, + "y": 22.997999999999998 + }, + { + "x": 311.12, + "y": 24.912 + }, + { + "x": 310.29, + "y": 27.234 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 327.12199999999996, + "y": 18.066 + }, + { + "x": 324.49600000000004, + "y": 18.288 + }, + { + "x": 322.134, + "y": 18.701999999999998 + }, + { + "x": 320.048, + "y": 19.344 + }, + { + "x": 318.25, + "y": 20.25 + }, + { + "x": 316.752, + "y": 21.456000000000003 + }, + { + "x": 315.56600000000003, + "y": 22.997999999999998 + }, + { + "x": 314.704, + "y": 24.912 + }, + { + "x": 314.178, + "y": 27.234 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 22.0 + }, + { + "x": 326.786, + "y": 21.954 + }, + { + "x": 323.24800000000005, + "y": 21.872 + }, + { + "x": 319.54200000000003, + "y": 21.838 + }, + { + "x": 315.824, + "y": 21.936000000000003 + }, + { + "x": 312.25, + "y": 22.25 + }, + { + "x": 308.976, + "y": 22.864 + }, + { + "x": 306.158, + "y": 23.862 + }, + { + "x": 303.952, + "y": 25.328 + }, + { + "x": 302.514, + "y": 27.346 + }, + { + "x": 302.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 22.0 + }, + { + "x": 326.89799999999997, + "y": 21.954 + }, + { + "x": 323.66400000000004, + "y": 21.872 + }, + { + "x": 320.40600000000006, + "y": 21.838 + }, + { + "x": 317.232, + "y": 21.936000000000003 + }, + { + "x": 314.25, + "y": 22.25 + }, + { + "x": 311.568, + "y": 22.864 + }, + { + "x": 309.294, + "y": 23.862 + }, + { + "x": 307.536, + "y": 25.328 + }, + { + "x": 306.40200000000004, + "y": 27.346 + }, + { + "x": 306.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 22.0 + }, + { + "x": 327.01, + "y": 21.954 + }, + { + "x": 324.08000000000004, + "y": 21.872 + }, + { + "x": 321.27000000000004, + "y": 21.838 + }, + { + "x": 318.64, + "y": 21.936000000000003 + }, + { + "x": 316.25, + "y": 22.25 + }, + { + "x": 314.16, + "y": 22.864 + }, + { + "x": 312.43, + "y": 23.862 + }, + { + "x": 311.12, + "y": 25.328 + }, + { + "x": 310.29, + "y": 27.346 + }, + { + "x": 310.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 22.0 + }, + { + "x": 327.12199999999996, + "y": 21.954 + }, + { + "x": 324.49600000000004, + "y": 21.872 + }, + { + "x": 322.134, + "y": 21.838 + }, + { + "x": 320.048, + "y": 21.936000000000003 + }, + { + "x": 318.25, + "y": 22.25 + }, + { + "x": 316.752, + "y": 22.864 + }, + { + "x": 315.56600000000003, + "y": 23.862 + }, + { + "x": 314.704, + "y": 25.328 + }, + { + "x": 314.178, + "y": 27.346 + }, + { + "x": 314.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_1_2", + "endRoad": "road_2_1_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 9.775999999999998 + }, + { + "x": 320.88, + "y": 9.168000000000001 + }, + { + "x": 314.52000000000004, + "y": 8.272 + }, + { + "x": 307.44, + "y": 7.183999999999999 + }, + { + "x": 300.0, + "y": 6.0 + }, + { + "x": 292.56, + "y": 4.815999999999999 + }, + { + "x": 285.48, + "y": 3.7280000000000006 + }, + { + "x": 279.11999999999995, + "y": 2.831999999999999 + }, + { + "x": 273.84000000000003, + "y": 2.224 + }, + { + "x": 270.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 9.887999999999998 + }, + { + "x": 320.88, + "y": 9.584000000000001 + }, + { + "x": 314.52000000000004, + "y": 9.136 + }, + { + "x": 307.44, + "y": 8.591999999999999 + }, + { + "x": 300.0, + "y": 8.0 + }, + { + "x": 292.56, + "y": 7.4079999999999995 + }, + { + "x": 285.48, + "y": 6.864000000000001 + }, + { + "x": 279.11999999999995, + "y": 6.416 + }, + { + "x": 273.84000000000003, + "y": 6.112 + }, + { + "x": 270.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 9.999999999999998 + }, + { + "x": 320.88, + "y": 10.000000000000002 + }, + { + "x": 314.52000000000004, + "y": 10.0 + }, + { + "x": 307.44, + "y": 10.0 + }, + { + "x": 300.0, + "y": 10.0 + }, + { + "x": 292.56, + "y": 10.0 + }, + { + "x": 285.48, + "y": 10.0 + }, + { + "x": 279.11999999999995, + "y": 10.0 + }, + { + "x": 273.84000000000003, + "y": 10.0 + }, + { + "x": 270.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 10.111999999999998 + }, + { + "x": 320.88, + "y": 10.416 + }, + { + "x": 314.52000000000004, + "y": 10.864 + }, + { + "x": 307.44, + "y": 11.408 + }, + { + "x": 300.0, + "y": 12.0 + }, + { + "x": 292.56, + "y": 12.592000000000002 + }, + { + "x": 285.48, + "y": 13.136 + }, + { + "x": 279.11999999999995, + "y": 13.584000000000001 + }, + { + "x": 273.84000000000003, + "y": 13.888000000000002 + }, + { + "x": 270.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 10.223999999999998 + }, + { + "x": 320.88, + "y": 10.832 + }, + { + "x": 314.52000000000004, + "y": 11.728 + }, + { + "x": 307.44, + "y": 12.816 + }, + { + "x": 300.0, + "y": 14.0 + }, + { + "x": 292.56, + "y": 15.184000000000001 + }, + { + "x": 285.48, + "y": 16.272 + }, + { + "x": 279.11999999999995, + "y": 17.168000000000003 + }, + { + "x": 273.84000000000003, + "y": 17.776 + }, + { + "x": 270.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 10.0 + }, + { + "x": 326.15999999999997, + "y": 10.335999999999999 + }, + { + "x": 320.88, + "y": 11.248000000000001 + }, + { + "x": 314.52000000000004, + "y": 12.592 + }, + { + "x": 307.44, + "y": 14.224 + }, + { + "x": 300.0, + "y": 16.0 + }, + { + "x": 292.56, + "y": 17.776000000000003 + }, + { + "x": 285.48, + "y": 19.407999999999998 + }, + { + "x": 279.11999999999995, + "y": 20.752000000000002 + }, + { + "x": 273.84000000000003, + "y": 21.664 + }, + { + "x": 270.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 13.664 + }, + { + "x": 320.88, + "y": 12.752 + }, + { + "x": 314.52000000000004, + "y": 11.408000000000001 + }, + { + "x": 307.44, + "y": 9.776 + }, + { + "x": 300.0, + "y": 8.0 + }, + { + "x": 292.56, + "y": 6.223999999999998 + }, + { + "x": 285.48, + "y": 4.5920000000000005 + }, + { + "x": 279.11999999999995, + "y": 3.2479999999999984 + }, + { + "x": 273.84000000000003, + "y": 2.3360000000000003 + }, + { + "x": 270.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 13.776 + }, + { + "x": 320.88, + "y": 13.168000000000001 + }, + { + "x": 314.52000000000004, + "y": 12.272000000000002 + }, + { + "x": 307.44, + "y": 11.184 + }, + { + "x": 300.0, + "y": 10.0 + }, + { + "x": 292.56, + "y": 8.815999999999999 + }, + { + "x": 285.48, + "y": 7.728000000000001 + }, + { + "x": 279.11999999999995, + "y": 6.831999999999999 + }, + { + "x": 273.84000000000003, + "y": 6.224 + }, + { + "x": 270.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 13.888 + }, + { + "x": 320.88, + "y": 13.584000000000001 + }, + { + "x": 314.52000000000004, + "y": 13.136000000000001 + }, + { + "x": 307.44, + "y": 12.592 + }, + { + "x": 300.0, + "y": 12.0 + }, + { + "x": 292.56, + "y": 11.408 + }, + { + "x": 285.48, + "y": 10.864 + }, + { + "x": 279.11999999999995, + "y": 10.415999999999999 + }, + { + "x": 273.84000000000003, + "y": 10.111999999999998 + }, + { + "x": 270.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 14.0 + }, + { + "x": 320.88, + "y": 14.0 + }, + { + "x": 314.52000000000004, + "y": 14.000000000000002 + }, + { + "x": 307.44, + "y": 14.0 + }, + { + "x": 300.0, + "y": 14.0 + }, + { + "x": 292.56, + "y": 14.0 + }, + { + "x": 285.48, + "y": 14.0 + }, + { + "x": 279.11999999999995, + "y": 14.0 + }, + { + "x": 273.84000000000003, + "y": 14.0 + }, + { + "x": 270.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 14.112 + }, + { + "x": 320.88, + "y": 14.416 + }, + { + "x": 314.52000000000004, + "y": 14.864 + }, + { + "x": 307.44, + "y": 15.408000000000001 + }, + { + "x": 300.0, + "y": 16.0 + }, + { + "x": 292.56, + "y": 16.592 + }, + { + "x": 285.48, + "y": 17.136 + }, + { + "x": 279.11999999999995, + "y": 17.584000000000003 + }, + { + "x": 273.84000000000003, + "y": 17.887999999999998 + }, + { + "x": 270.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 14.0 + }, + { + "x": 326.15999999999997, + "y": 14.224 + }, + { + "x": 320.88, + "y": 14.832 + }, + { + "x": 314.52000000000004, + "y": 15.728000000000002 + }, + { + "x": 307.44, + "y": 16.816000000000003 + }, + { + "x": 300.0, + "y": 18.0 + }, + { + "x": 292.56, + "y": 19.184 + }, + { + "x": 285.48, + "y": 20.272 + }, + { + "x": 279.11999999999995, + "y": 21.168000000000003 + }, + { + "x": 273.84000000000003, + "y": 21.776 + }, + { + "x": 270.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 17.552 + }, + { + "x": 320.88, + "y": 16.336 + }, + { + "x": 314.52000000000004, + "y": 14.544 + }, + { + "x": 307.44, + "y": 12.367999999999999 + }, + { + "x": 300.0, + "y": 10.0 + }, + { + "x": 292.56, + "y": 7.631999999999998 + }, + { + "x": 285.48, + "y": 5.456000000000001 + }, + { + "x": 279.11999999999995, + "y": 3.663999999999998 + }, + { + "x": 273.84000000000003, + "y": 2.4480000000000004 + }, + { + "x": 270.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 17.663999999999998 + }, + { + "x": 320.88, + "y": 16.752 + }, + { + "x": 314.52000000000004, + "y": 15.408000000000001 + }, + { + "x": 307.44, + "y": 13.775999999999998 + }, + { + "x": 300.0, + "y": 12.0 + }, + { + "x": 292.56, + "y": 10.223999999999998 + }, + { + "x": 285.48, + "y": 8.592000000000002 + }, + { + "x": 279.11999999999995, + "y": 7.247999999999999 + }, + { + "x": 273.84000000000003, + "y": 6.336 + }, + { + "x": 270.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 17.776 + }, + { + "x": 320.88, + "y": 17.168 + }, + { + "x": 314.52000000000004, + "y": 16.272 + }, + { + "x": 307.44, + "y": 15.184 + }, + { + "x": 300.0, + "y": 14.0 + }, + { + "x": 292.56, + "y": 12.815999999999999 + }, + { + "x": 285.48, + "y": 11.728000000000002 + }, + { + "x": 279.11999999999995, + "y": 10.831999999999999 + }, + { + "x": 273.84000000000003, + "y": 10.224 + }, + { + "x": 270.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 17.887999999999998 + }, + { + "x": 320.88, + "y": 17.584 + }, + { + "x": 314.52000000000004, + "y": 17.136 + }, + { + "x": 307.44, + "y": 16.592 + }, + { + "x": 300.0, + "y": 16.0 + }, + { + "x": 292.56, + "y": 15.408000000000001 + }, + { + "x": 285.48, + "y": 14.864 + }, + { + "x": 279.11999999999995, + "y": 14.416 + }, + { + "x": 273.84000000000003, + "y": 14.112000000000002 + }, + { + "x": 270.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 18.0 + }, + { + "x": 320.88, + "y": 18.0 + }, + { + "x": 314.52000000000004, + "y": 18.0 + }, + { + "x": 307.44, + "y": 18.0 + }, + { + "x": 300.0, + "y": 18.0 + }, + { + "x": 292.56, + "y": 18.0 + }, + { + "x": 285.48, + "y": 18.0 + }, + { + "x": 279.11999999999995, + "y": 18.0 + }, + { + "x": 273.84000000000003, + "y": 18.0 + }, + { + "x": 270.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 18.0 + }, + { + "x": 326.15999999999997, + "y": 18.112 + }, + { + "x": 320.88, + "y": 18.416 + }, + { + "x": 314.52000000000004, + "y": 18.864 + }, + { + "x": 307.44, + "y": 19.408 + }, + { + "x": 300.0, + "y": 20.0 + }, + { + "x": 292.56, + "y": 20.592000000000002 + }, + { + "x": 285.48, + "y": 21.136 + }, + { + "x": 279.11999999999995, + "y": 21.584 + }, + { + "x": 273.84000000000003, + "y": 21.888 + }, + { + "x": 270.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_1_2", + "endRoad": "road_2_1_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 2.0 + }, + { + "x": 326.674, + "y": 1.3739999999999999 + }, + { + "x": 322.83200000000005, + "y": -0.3680000000000003 + }, + { + "x": 318.67800000000005, + "y": -3.0220000000000007 + }, + { + "x": 314.416, + "y": -6.384000000000002 + }, + { + "x": 310.25, + "y": -10.25 + }, + { + "x": 306.384, + "y": -14.416000000000004 + }, + { + "x": 303.022, + "y": -18.677999999999997 + }, + { + "x": 300.368, + "y": -22.832000000000004 + }, + { + "x": 298.62600000000003, + "y": -26.674 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 2.0 + }, + { + "x": 326.562, + "y": 1.3739999999999999 + }, + { + "x": 322.41600000000005, + "y": -0.3680000000000003 + }, + { + "x": 317.814, + "y": -3.0220000000000007 + }, + { + "x": 313.00800000000004, + "y": -6.384000000000002 + }, + { + "x": 308.25, + "y": -10.25 + }, + { + "x": 303.792, + "y": -14.416000000000004 + }, + { + "x": 299.886, + "y": -18.677999999999997 + }, + { + "x": 296.784, + "y": -22.832000000000004 + }, + { + "x": 294.738, + "y": -26.674 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 2.0 + }, + { + "x": 326.45, + "y": 1.3739999999999999 + }, + { + "x": 322.00000000000006, + "y": -0.3680000000000003 + }, + { + "x": 316.95000000000005, + "y": -3.0220000000000007 + }, + { + "x": 311.6, + "y": -6.384000000000002 + }, + { + "x": 306.25, + "y": -10.25 + }, + { + "x": 301.2, + "y": -14.416000000000004 + }, + { + "x": 296.75, + "y": -18.677999999999997 + }, + { + "x": 293.2, + "y": -22.832000000000004 + }, + { + "x": 290.85, + "y": -26.674 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 2.0 + }, + { + "x": 326.33799999999997, + "y": 1.3739999999999999 + }, + { + "x": 321.58400000000006, + "y": -0.3680000000000003 + }, + { + "x": 316.086, + "y": -3.0220000000000007 + }, + { + "x": 310.192, + "y": -6.384000000000002 + }, + { + "x": 304.25, + "y": -10.25 + }, + { + "x": 298.608, + "y": -14.416000000000004 + }, + { + "x": 293.61400000000003, + "y": -18.677999999999997 + }, + { + "x": 289.616, + "y": -22.832000000000004 + }, + { + "x": 286.96200000000005, + "y": -26.674 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 6.0 + }, + { + "x": 326.674, + "y": 5.2620000000000005 + }, + { + "x": 322.83200000000005, + "y": 3.216 + }, + { + "x": 318.67800000000005, + "y": 0.11400000000000032 + }, + { + "x": 314.416, + "y": -3.792000000000002 + }, + { + "x": 310.25, + "y": -8.25 + }, + { + "x": 306.384, + "y": -13.008000000000006 + }, + { + "x": 303.022, + "y": -17.813999999999997 + }, + { + "x": 300.368, + "y": -22.416000000000004 + }, + { + "x": 298.62600000000003, + "y": -26.562 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 6.0 + }, + { + "x": 326.562, + "y": 5.2620000000000005 + }, + { + "x": 322.41600000000005, + "y": 3.216 + }, + { + "x": 317.814, + "y": 0.11400000000000032 + }, + { + "x": 313.00800000000004, + "y": -3.792000000000002 + }, + { + "x": 308.25, + "y": -8.25 + }, + { + "x": 303.792, + "y": -13.008000000000006 + }, + { + "x": 299.886, + "y": -17.813999999999997 + }, + { + "x": 296.784, + "y": -22.416000000000004 + }, + { + "x": 294.738, + "y": -26.562 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 6.0 + }, + { + "x": 326.45, + "y": 5.2620000000000005 + }, + { + "x": 322.00000000000006, + "y": 3.216 + }, + { + "x": 316.95000000000005, + "y": 0.11400000000000032 + }, + { + "x": 311.6, + "y": -3.792000000000002 + }, + { + "x": 306.25, + "y": -8.25 + }, + { + "x": 301.2, + "y": -13.008000000000006 + }, + { + "x": 296.75, + "y": -17.813999999999997 + }, + { + "x": 293.2, + "y": -22.416000000000004 + }, + { + "x": 290.85, + "y": -26.562 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 6.0 + }, + { + "x": 326.33799999999997, + "y": 5.2620000000000005 + }, + { + "x": 321.58400000000006, + "y": 3.216 + }, + { + "x": 316.086, + "y": 0.11400000000000032 + }, + { + "x": 310.192, + "y": -3.792000000000002 + }, + { + "x": 304.25, + "y": -8.25 + }, + { + "x": 298.608, + "y": -13.008000000000006 + }, + { + "x": 293.61400000000003, + "y": -17.813999999999997 + }, + { + "x": 289.616, + "y": -22.416000000000004 + }, + { + "x": 286.96200000000005, + "y": -26.562 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_2_3", + "endRoad": "road_2_1_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.674 + }, + { + "x": 300.368, + "y": 22.832 + }, + { + "x": 303.02200000000005, + "y": 18.678 + }, + { + "x": 306.384, + "y": 14.415999999999999 + }, + { + "x": 310.25, + "y": 10.25 + }, + { + "x": 314.416, + "y": 6.383999999999996 + }, + { + "x": 318.67799999999994, + "y": 3.022000000000004 + }, + { + "x": 322.83200000000005, + "y": 0.3679999999999981 + }, + { + "x": 326.674, + "y": -1.3739999999999994 + }, + { + "x": 330.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.562 + }, + { + "x": 300.368, + "y": 22.416 + }, + { + "x": 303.02200000000005, + "y": 17.814 + }, + { + "x": 306.384, + "y": 13.008 + }, + { + "x": 310.25, + "y": 8.25 + }, + { + "x": 314.416, + "y": 3.7919999999999954 + }, + { + "x": 318.67799999999994, + "y": -0.11399999999999633 + }, + { + "x": 322.83200000000005, + "y": -3.216000000000003 + }, + { + "x": 326.674, + "y": -5.262 + }, + { + "x": 330.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.45 + }, + { + "x": 300.368, + "y": 22.0 + }, + { + "x": 303.02200000000005, + "y": 16.95 + }, + { + "x": 306.384, + "y": 11.599999999999998 + }, + { + "x": 310.25, + "y": 6.25 + }, + { + "x": 314.416, + "y": 1.1999999999999948 + }, + { + "x": 318.67799999999994, + "y": -3.2499999999999956 + }, + { + "x": 322.83200000000005, + "y": -6.8000000000000025 + }, + { + "x": 326.674, + "y": -9.149999999999999 + }, + { + "x": 330.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.338 + }, + { + "x": 300.368, + "y": 21.584 + }, + { + "x": 303.02200000000005, + "y": 16.086 + }, + { + "x": 306.384, + "y": 10.191999999999998 + }, + { + "x": 310.25, + "y": 4.25 + }, + { + "x": 314.416, + "y": -1.3920000000000066 + }, + { + "x": 318.67799999999994, + "y": -6.385999999999996 + }, + { + "x": 322.83200000000005, + "y": -10.384000000000004 + }, + { + "x": 326.674, + "y": -13.038 + }, + { + "x": 330.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.226 + }, + { + "x": 300.368, + "y": 21.168 + }, + { + "x": 303.02200000000005, + "y": 15.222 + }, + { + "x": 306.384, + "y": 8.783999999999997 + }, + { + "x": 310.25, + "y": 2.25 + }, + { + "x": 314.416, + "y": -3.9840000000000053 + }, + { + "x": 318.67799999999994, + "y": -9.521999999999995 + }, + { + "x": 322.83200000000005, + "y": -13.968000000000005 + }, + { + "x": 326.674, + "y": -16.926 + }, + { + "x": 330.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 298.0, + "y": 30.0 + }, + { + "x": 298.62600000000003, + "y": 26.114 + }, + { + "x": 300.368, + "y": 20.752 + }, + { + "x": 303.02200000000005, + "y": 14.357999999999999 + }, + { + "x": 306.384, + "y": 7.375999999999998 + }, + { + "x": 310.25, + "y": 0.25 + }, + { + "x": 314.416, + "y": -6.576000000000008 + }, + { + "x": 318.67799999999994, + "y": -12.657999999999994 + }, + { + "x": 322.83200000000005, + "y": -17.552000000000007 + }, + { + "x": 326.674, + "y": -20.814 + }, + { + "x": 330.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_2_3", + "endRoad": "road_2_1_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 26.786 + }, + { + "x": 285.296, + "y": 23.247999999999998 + }, + { + "x": 284.434, + "y": 19.541999999999998 + }, + { + "x": 283.248, + "y": 15.824 + }, + { + "x": 281.75, + "y": 12.25 + }, + { + "x": 279.952, + "y": 8.975999999999996 + }, + { + "x": 277.86600000000004, + "y": 6.158000000000003 + }, + { + "x": 275.50399999999996, + "y": 3.9519999999999986 + }, + { + "x": 272.878, + "y": 2.5140000000000002 + }, + { + "x": 270.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 26.898 + }, + { + "x": 285.296, + "y": 23.663999999999998 + }, + { + "x": 284.434, + "y": 20.406 + }, + { + "x": 283.248, + "y": 17.232 + }, + { + "x": 281.75, + "y": 14.25 + }, + { + "x": 279.952, + "y": 11.567999999999998 + }, + { + "x": 277.86600000000004, + "y": 9.294000000000004 + }, + { + "x": 275.50399999999996, + "y": 7.536 + }, + { + "x": 272.878, + "y": 6.402 + }, + { + "x": 270.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 27.01 + }, + { + "x": 285.296, + "y": 24.08 + }, + { + "x": 284.434, + "y": 21.27 + }, + { + "x": 283.248, + "y": 18.64 + }, + { + "x": 281.75, + "y": 16.25 + }, + { + "x": 279.952, + "y": 14.159999999999997 + }, + { + "x": 277.86600000000004, + "y": 12.430000000000003 + }, + { + "x": 275.50399999999996, + "y": 11.12 + }, + { + "x": 272.878, + "y": 10.29 + }, + { + "x": 270.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 27.122 + }, + { + "x": 285.296, + "y": 24.496 + }, + { + "x": 284.434, + "y": 22.134 + }, + { + "x": 283.248, + "y": 20.048000000000002 + }, + { + "x": 281.75, + "y": 18.25 + }, + { + "x": 279.952, + "y": 16.752 + }, + { + "x": 277.86600000000004, + "y": 15.566000000000003 + }, + { + "x": 275.50399999999996, + "y": 14.704 + }, + { + "x": 272.878, + "y": 14.178 + }, + { + "x": 270.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 27.234 + }, + { + "x": 285.296, + "y": 24.912 + }, + { + "x": 284.434, + "y": 22.998 + }, + { + "x": 283.248, + "y": 21.456000000000003 + }, + { + "x": 281.75, + "y": 20.25 + }, + { + "x": 279.952, + "y": 19.343999999999998 + }, + { + "x": 277.86600000000004, + "y": 18.702 + }, + { + "x": 275.50399999999996, + "y": 18.288000000000004 + }, + { + "x": 272.878, + "y": 18.066 + }, + { + "x": 270.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 286.0, + "y": 30.0 + }, + { + "x": 285.822, + "y": 27.346 + }, + { + "x": 285.296, + "y": 25.328 + }, + { + "x": 284.434, + "y": 23.862000000000002 + }, + { + "x": 283.248, + "y": 22.864 + }, + { + "x": 281.75, + "y": 22.25 + }, + { + "x": 279.952, + "y": 21.936 + }, + { + "x": 277.86600000000004, + "y": 21.838 + }, + { + "x": 275.50399999999996, + "y": 21.872 + }, + { + "x": 272.878, + "y": 21.954 + }, + { + "x": 270.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_2_3", + "endRoad": "road_2_1_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 294.0, + "y": 30.0 + }, + { + "x": 294.11199999999997, + "y": 26.16 + }, + { + "x": 294.416, + "y": 20.88 + }, + { + "x": 294.86400000000003, + "y": 14.52 + }, + { + "x": 295.408, + "y": 7.439999999999998 + }, + { + "x": 296.0, + "y": 0.0 + }, + { + "x": 296.592, + "y": -7.440000000000009 + }, + { + "x": 297.136, + "y": -14.519999999999992 + }, + { + "x": 297.584, + "y": -20.880000000000006 + }, + { + "x": 297.88800000000003, + "y": -26.16 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 294.0, + "y": 30.0 + }, + { + "x": 294.0, + "y": 26.16 + }, + { + "x": 294.0, + "y": 20.88 + }, + { + "x": 294.0, + "y": 14.52 + }, + { + "x": 294.0, + "y": 7.439999999999998 + }, + { + "x": 294.0, + "y": 0.0 + }, + { + "x": 294.0, + "y": -7.440000000000009 + }, + { + "x": 294.0, + "y": -14.519999999999992 + }, + { + "x": 294.0, + "y": -20.880000000000006 + }, + { + "x": 294.0, + "y": -26.16 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 294.0, + "y": 30.0 + }, + { + "x": 293.888, + "y": 26.16 + }, + { + "x": 293.584, + "y": 20.88 + }, + { + "x": 293.136, + "y": 14.52 + }, + { + "x": 292.592, + "y": 7.439999999999998 + }, + { + "x": 292.0, + "y": 0.0 + }, + { + "x": 291.408, + "y": -7.440000000000009 + }, + { + "x": 290.86400000000003, + "y": -14.519999999999992 + }, + { + "x": 290.416, + "y": -20.880000000000006 + }, + { + "x": 290.112, + "y": -26.16 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 294.0, + "y": 30.0 + }, + { + "x": 293.77599999999995, + "y": 26.16 + }, + { + "x": 293.168, + "y": 20.88 + }, + { + "x": 292.27200000000005, + "y": 14.52 + }, + { + "x": 291.18399999999997, + "y": 7.439999999999998 + }, + { + "x": 290.0, + "y": 0.0 + }, + { + "x": 288.816, + "y": -7.440000000000009 + }, + { + "x": 287.728, + "y": -14.519999999999992 + }, + { + "x": 286.832, + "y": -20.880000000000006 + }, + { + "x": 286.22400000000005, + "y": -26.16 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 290.0, + "y": 30.0 + }, + { + "x": 290.224, + "y": 26.16 + }, + { + "x": 290.83200000000005, + "y": 20.88 + }, + { + "x": 291.728, + "y": 14.52 + }, + { + "x": 292.81600000000003, + "y": 7.439999999999998 + }, + { + "x": 294.0, + "y": 0.0 + }, + { + "x": 295.18399999999997, + "y": -7.440000000000009 + }, + { + "x": 296.272, + "y": -14.519999999999992 + }, + { + "x": 297.168, + "y": -20.880000000000006 + }, + { + "x": 297.776, + "y": -26.16 + }, + { + "x": 298.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 290.0, + "y": 30.0 + }, + { + "x": 290.112, + "y": 26.16 + }, + { + "x": 290.41600000000005, + "y": 20.88 + }, + { + "x": 290.86400000000003, + "y": 14.52 + }, + { + "x": 291.408, + "y": 7.439999999999998 + }, + { + "x": 292.0, + "y": 0.0 + }, + { + "x": 292.592, + "y": -7.440000000000009 + }, + { + "x": 293.136, + "y": -14.519999999999992 + }, + { + "x": 293.584, + "y": -20.880000000000006 + }, + { + "x": 293.888, + "y": -26.16 + }, + { + "x": 294.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 290.0, + "y": 30.0 + }, + { + "x": 290.0, + "y": 26.16 + }, + { + "x": 290.00000000000006, + "y": 20.88 + }, + { + "x": 290.0, + "y": 14.52 + }, + { + "x": 290.0, + "y": 7.439999999999998 + }, + { + "x": 290.0, + "y": 0.0 + }, + { + "x": 290.0, + "y": -7.440000000000009 + }, + { + "x": 290.0, + "y": -14.519999999999992 + }, + { + "x": 290.0, + "y": -20.880000000000006 + }, + { + "x": 290.0, + "y": -26.16 + }, + { + "x": 290.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 290.0, + "y": 30.0 + }, + { + "x": 289.888, + "y": 26.16 + }, + { + "x": 289.58400000000006, + "y": 20.88 + }, + { + "x": 289.136, + "y": 14.52 + }, + { + "x": 288.592, + "y": 7.439999999999998 + }, + { + "x": 288.0, + "y": 0.0 + }, + { + "x": 287.408, + "y": -7.440000000000009 + }, + { + "x": 286.86400000000003, + "y": -14.519999999999992 + }, + { + "x": 286.416, + "y": -20.880000000000006 + }, + { + "x": 286.112, + "y": -26.16 + }, + { + "x": 286.0, + "y": -30.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_3_1", + "point": { + "x": 600, + "y": 0 + }, + "width": 30, + "roads": [ + "road_2_1_0", + "road_3_0_1", + "road_4_1_2", + "road_3_2_3", + "road_3_1_0", + "road_3_1_1", + "road_3_1_2", + "road_3_1_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_2_1_0", + "endRoad": "road_3_1_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -9.775999999999998 + }, + { + "x": 579.12, + "y": -9.168000000000001 + }, + { + "x": 585.48, + "y": -8.272 + }, + { + "x": 592.5600000000001, + "y": -7.183999999999999 + }, + { + "x": 600.0, + "y": -6.0 + }, + { + "x": 607.4399999999999, + "y": -4.815999999999999 + }, + { + "x": 614.5200000000001, + "y": -3.7280000000000006 + }, + { + "x": 620.88, + "y": -2.831999999999999 + }, + { + "x": 626.1600000000001, + "y": -2.224 + }, + { + "x": 630.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -9.887999999999998 + }, + { + "x": 579.12, + "y": -9.584000000000001 + }, + { + "x": 585.48, + "y": -9.136 + }, + { + "x": 592.5600000000001, + "y": -8.591999999999999 + }, + { + "x": 600.0, + "y": -8.0 + }, + { + "x": 607.4399999999999, + "y": -7.4079999999999995 + }, + { + "x": 614.5200000000001, + "y": -6.864000000000001 + }, + { + "x": 620.88, + "y": -6.416 + }, + { + "x": 626.1600000000001, + "y": -6.112 + }, + { + "x": 630.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -9.999999999999998 + }, + { + "x": 579.12, + "y": -10.000000000000002 + }, + { + "x": 585.48, + "y": -10.0 + }, + { + "x": 592.5600000000001, + "y": -10.0 + }, + { + "x": 600.0, + "y": -10.0 + }, + { + "x": 607.4399999999999, + "y": -10.0 + }, + { + "x": 614.5200000000001, + "y": -10.0 + }, + { + "x": 620.88, + "y": -10.0 + }, + { + "x": 626.1600000000001, + "y": -10.0 + }, + { + "x": 630.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -10.111999999999998 + }, + { + "x": 579.12, + "y": -10.416 + }, + { + "x": 585.48, + "y": -10.864 + }, + { + "x": 592.5600000000001, + "y": -11.408 + }, + { + "x": 600.0, + "y": -12.0 + }, + { + "x": 607.4399999999999, + "y": -12.592000000000002 + }, + { + "x": 614.5200000000001, + "y": -13.136 + }, + { + "x": 620.88, + "y": -13.584000000000001 + }, + { + "x": 626.1600000000001, + "y": -13.888000000000002 + }, + { + "x": 630.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -10.223999999999998 + }, + { + "x": 579.12, + "y": -10.832 + }, + { + "x": 585.48, + "y": -11.728 + }, + { + "x": 592.5600000000001, + "y": -12.816 + }, + { + "x": 600.0, + "y": -14.0 + }, + { + "x": 607.4399999999999, + "y": -15.184000000000001 + }, + { + "x": 614.5200000000001, + "y": -16.272 + }, + { + "x": 620.88, + "y": -17.168000000000003 + }, + { + "x": 626.1600000000001, + "y": -17.776 + }, + { + "x": 630.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": -10.0 + }, + { + "x": 573.8399999999999, + "y": -10.335999999999999 + }, + { + "x": 579.12, + "y": -11.248000000000001 + }, + { + "x": 585.48, + "y": -12.592 + }, + { + "x": 592.5600000000001, + "y": -14.224 + }, + { + "x": 600.0, + "y": -16.0 + }, + { + "x": 607.4399999999999, + "y": -17.776000000000003 + }, + { + "x": 614.5200000000001, + "y": -19.407999999999998 + }, + { + "x": 620.88, + "y": -20.752000000000002 + }, + { + "x": 626.1600000000001, + "y": -21.664 + }, + { + "x": 630.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -13.664 + }, + { + "x": 579.12, + "y": -12.752 + }, + { + "x": 585.48, + "y": -11.408000000000001 + }, + { + "x": 592.5600000000001, + "y": -9.776 + }, + { + "x": 600.0, + "y": -8.0 + }, + { + "x": 607.4399999999999, + "y": -6.223999999999998 + }, + { + "x": 614.5200000000001, + "y": -4.5920000000000005 + }, + { + "x": 620.88, + "y": -3.2479999999999984 + }, + { + "x": 626.1600000000001, + "y": -2.3360000000000003 + }, + { + "x": 630.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -13.776 + }, + { + "x": 579.12, + "y": -13.168000000000001 + }, + { + "x": 585.48, + "y": -12.272000000000002 + }, + { + "x": 592.5600000000001, + "y": -11.184 + }, + { + "x": 600.0, + "y": -10.0 + }, + { + "x": 607.4399999999999, + "y": -8.815999999999999 + }, + { + "x": 614.5200000000001, + "y": -7.728000000000001 + }, + { + "x": 620.88, + "y": -6.831999999999999 + }, + { + "x": 626.1600000000001, + "y": -6.224 + }, + { + "x": 630.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -13.888 + }, + { + "x": 579.12, + "y": -13.584000000000001 + }, + { + "x": 585.48, + "y": -13.136000000000001 + }, + { + "x": 592.5600000000001, + "y": -12.592 + }, + { + "x": 600.0, + "y": -12.0 + }, + { + "x": 607.4399999999999, + "y": -11.408 + }, + { + "x": 614.5200000000001, + "y": -10.864 + }, + { + "x": 620.88, + "y": -10.415999999999999 + }, + { + "x": 626.1600000000001, + "y": -10.111999999999998 + }, + { + "x": 630.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -14.0 + }, + { + "x": 579.12, + "y": -14.0 + }, + { + "x": 585.48, + "y": -14.000000000000002 + }, + { + "x": 592.5600000000001, + "y": -14.0 + }, + { + "x": 600.0, + "y": -14.0 + }, + { + "x": 607.4399999999999, + "y": -14.0 + }, + { + "x": 614.5200000000001, + "y": -14.0 + }, + { + "x": 620.88, + "y": -14.0 + }, + { + "x": 626.1600000000001, + "y": -14.0 + }, + { + "x": 630.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -14.112 + }, + { + "x": 579.12, + "y": -14.416 + }, + { + "x": 585.48, + "y": -14.864 + }, + { + "x": 592.5600000000001, + "y": -15.408000000000001 + }, + { + "x": 600.0, + "y": -16.0 + }, + { + "x": 607.4399999999999, + "y": -16.592 + }, + { + "x": 614.5200000000001, + "y": -17.136 + }, + { + "x": 620.88, + "y": -17.584000000000003 + }, + { + "x": 626.1600000000001, + "y": -17.887999999999998 + }, + { + "x": 630.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": -14.0 + }, + { + "x": 573.8399999999999, + "y": -14.224 + }, + { + "x": 579.12, + "y": -14.832 + }, + { + "x": 585.48, + "y": -15.728000000000002 + }, + { + "x": 592.5600000000001, + "y": -16.816000000000003 + }, + { + "x": 600.0, + "y": -18.0 + }, + { + "x": 607.4399999999999, + "y": -19.184 + }, + { + "x": 614.5200000000001, + "y": -20.272 + }, + { + "x": 620.88, + "y": -21.168000000000003 + }, + { + "x": 626.1600000000001, + "y": -21.776 + }, + { + "x": 630.0, + "y": -22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -17.552 + }, + { + "x": 579.12, + "y": -16.336 + }, + { + "x": 585.48, + "y": -14.544 + }, + { + "x": 592.5600000000001, + "y": -12.367999999999999 + }, + { + "x": 600.0, + "y": -10.0 + }, + { + "x": 607.4399999999999, + "y": -7.631999999999998 + }, + { + "x": 614.5200000000001, + "y": -5.456000000000001 + }, + { + "x": 620.88, + "y": -3.663999999999998 + }, + { + "x": 626.1600000000001, + "y": -2.4480000000000004 + }, + { + "x": 630.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -17.663999999999998 + }, + { + "x": 579.12, + "y": -16.752 + }, + { + "x": 585.48, + "y": -15.408000000000001 + }, + { + "x": 592.5600000000001, + "y": -13.775999999999998 + }, + { + "x": 600.0, + "y": -12.0 + }, + { + "x": 607.4399999999999, + "y": -10.223999999999998 + }, + { + "x": 614.5200000000001, + "y": -8.592000000000002 + }, + { + "x": 620.88, + "y": -7.247999999999999 + }, + { + "x": 626.1600000000001, + "y": -6.336 + }, + { + "x": 630.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -17.776 + }, + { + "x": 579.12, + "y": -17.168 + }, + { + "x": 585.48, + "y": -16.272 + }, + { + "x": 592.5600000000001, + "y": -15.184 + }, + { + "x": 600.0, + "y": -14.0 + }, + { + "x": 607.4399999999999, + "y": -12.815999999999999 + }, + { + "x": 614.5200000000001, + "y": -11.728000000000002 + }, + { + "x": 620.88, + "y": -10.831999999999999 + }, + { + "x": 626.1600000000001, + "y": -10.224 + }, + { + "x": 630.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -17.887999999999998 + }, + { + "x": 579.12, + "y": -17.584 + }, + { + "x": 585.48, + "y": -17.136 + }, + { + "x": 592.5600000000001, + "y": -16.592 + }, + { + "x": 600.0, + "y": -16.0 + }, + { + "x": 607.4399999999999, + "y": -15.408000000000001 + }, + { + "x": 614.5200000000001, + "y": -14.864 + }, + { + "x": 620.88, + "y": -14.416 + }, + { + "x": 626.1600000000001, + "y": -14.112000000000002 + }, + { + "x": 630.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -18.0 + }, + { + "x": 579.12, + "y": -18.0 + }, + { + "x": 585.48, + "y": -18.0 + }, + { + "x": 592.5600000000001, + "y": -18.0 + }, + { + "x": 600.0, + "y": -18.0 + }, + { + "x": 607.4399999999999, + "y": -18.0 + }, + { + "x": 614.5200000000001, + "y": -18.0 + }, + { + "x": 620.88, + "y": -18.0 + }, + { + "x": 626.1600000000001, + "y": -18.0 + }, + { + "x": 630.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.8399999999999, + "y": -18.112 + }, + { + "x": 579.12, + "y": -18.416 + }, + { + "x": 585.48, + "y": -18.864 + }, + { + "x": 592.5600000000001, + "y": -19.408 + }, + { + "x": 600.0, + "y": -20.0 + }, + { + "x": 607.4399999999999, + "y": -20.592000000000002 + }, + { + "x": 614.5200000000001, + "y": -21.136 + }, + { + "x": 620.88, + "y": -21.584 + }, + { + "x": 626.1600000000001, + "y": -21.888 + }, + { + "x": 630.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_1_0", + "endRoad": "road_3_1_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -2.0 + }, + { + "x": 573.3259999999999, + "y": -1.3739999999999999 + }, + { + "x": 577.1680000000001, + "y": 0.3680000000000003 + }, + { + "x": 581.322, + "y": 3.0220000000000007 + }, + { + "x": 585.5840000000001, + "y": 6.384000000000002 + }, + { + "x": 589.75, + "y": 10.25 + }, + { + "x": 593.616, + "y": 14.416000000000004 + }, + { + "x": 596.9780000000001, + "y": 18.677999999999997 + }, + { + "x": 599.632, + "y": 22.832000000000004 + }, + { + "x": 601.374, + "y": 26.674 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -2.0 + }, + { + "x": 573.4379999999999, + "y": -1.3739999999999999 + }, + { + "x": 577.5840000000001, + "y": 0.3680000000000003 + }, + { + "x": 582.186, + "y": 3.0220000000000007 + }, + { + "x": 586.992, + "y": 6.384000000000002 + }, + { + "x": 591.75, + "y": 10.25 + }, + { + "x": 596.2080000000001, + "y": 14.416000000000004 + }, + { + "x": 600.114, + "y": 18.677999999999997 + }, + { + "x": 603.216, + "y": 22.832000000000004 + }, + { + "x": 605.2620000000001, + "y": 26.674 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -2.0 + }, + { + "x": 573.55, + "y": -1.3739999999999999 + }, + { + "x": 578.0000000000001, + "y": 0.3680000000000003 + }, + { + "x": 583.0500000000001, + "y": 3.0220000000000007 + }, + { + "x": 588.4, + "y": 6.384000000000002 + }, + { + "x": 593.75, + "y": 10.25 + }, + { + "x": 598.8, + "y": 14.416000000000004 + }, + { + "x": 603.25, + "y": 18.677999999999997 + }, + { + "x": 606.8, + "y": 22.832000000000004 + }, + { + "x": 609.15, + "y": 26.674 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -2.0 + }, + { + "x": 573.6619999999999, + "y": -1.3739999999999999 + }, + { + "x": 578.416, + "y": 0.3680000000000003 + }, + { + "x": 583.914, + "y": 3.0220000000000007 + }, + { + "x": 589.808, + "y": 6.384000000000002 + }, + { + "x": 595.75, + "y": 10.25 + }, + { + "x": 601.392, + "y": 14.416000000000004 + }, + { + "x": 606.386, + "y": 18.677999999999997 + }, + { + "x": 610.384, + "y": 22.832000000000004 + }, + { + "x": 613.038, + "y": 26.674 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -6.0 + }, + { + "x": 573.3259999999999, + "y": -5.2620000000000005 + }, + { + "x": 577.1680000000001, + "y": -3.216 + }, + { + "x": 581.322, + "y": -0.11400000000000032 + }, + { + "x": 585.5840000000001, + "y": 3.792000000000002 + }, + { + "x": 589.75, + "y": 8.25 + }, + { + "x": 593.616, + "y": 13.008000000000006 + }, + { + "x": 596.9780000000001, + "y": 17.813999999999997 + }, + { + "x": 599.632, + "y": 22.416000000000004 + }, + { + "x": 601.374, + "y": 26.562 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -6.0 + }, + { + "x": 573.4379999999999, + "y": -5.2620000000000005 + }, + { + "x": 577.5840000000001, + "y": -3.216 + }, + { + "x": 582.186, + "y": -0.11400000000000032 + }, + { + "x": 586.992, + "y": 3.792000000000002 + }, + { + "x": 591.75, + "y": 8.25 + }, + { + "x": 596.2080000000001, + "y": 13.008000000000006 + }, + { + "x": 600.114, + "y": 17.813999999999997 + }, + { + "x": 603.216, + "y": 22.416000000000004 + }, + { + "x": 605.2620000000001, + "y": 26.562 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -6.0 + }, + { + "x": 573.55, + "y": -5.2620000000000005 + }, + { + "x": 578.0000000000001, + "y": -3.216 + }, + { + "x": 583.0500000000001, + "y": -0.11400000000000032 + }, + { + "x": 588.4, + "y": 3.792000000000002 + }, + { + "x": 593.75, + "y": 8.25 + }, + { + "x": 598.8, + "y": 13.008000000000006 + }, + { + "x": 603.25, + "y": 17.813999999999997 + }, + { + "x": 606.8, + "y": 22.416000000000004 + }, + { + "x": 609.15, + "y": 26.562 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -6.0 + }, + { + "x": 573.6619999999999, + "y": -5.2620000000000005 + }, + { + "x": 578.416, + "y": -3.216 + }, + { + "x": 583.914, + "y": -0.11400000000000032 + }, + { + "x": 589.808, + "y": 3.792000000000002 + }, + { + "x": 595.75, + "y": 8.25 + }, + { + "x": 601.392, + "y": 13.008000000000006 + }, + { + "x": 606.386, + "y": 17.813999999999997 + }, + { + "x": 610.384, + "y": 22.416000000000004 + }, + { + "x": 613.038, + "y": 26.562 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_1_0", + "endRoad": "road_3_1_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.2139999999999, + "y": -18.066 + }, + { + "x": 576.7520000000001, + "y": -18.288 + }, + { + "x": 580.4580000000001, + "y": -18.701999999999998 + }, + { + "x": 584.176, + "y": -19.344 + }, + { + "x": 587.75, + "y": -20.25 + }, + { + "x": 591.024, + "y": -21.456000000000003 + }, + { + "x": 593.842, + "y": -22.997999999999998 + }, + { + "x": 596.048, + "y": -24.912 + }, + { + "x": 597.486, + "y": -27.234 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 573.1019999999999, + "y": -18.066 + }, + { + "x": 576.336, + "y": -18.288 + }, + { + "x": 579.594, + "y": -18.701999999999998 + }, + { + "x": 582.768, + "y": -19.344 + }, + { + "x": 585.75, + "y": -20.25 + }, + { + "x": 588.432, + "y": -21.456000000000003 + }, + { + "x": 590.706, + "y": -22.997999999999998 + }, + { + "x": 592.4639999999999, + "y": -24.912 + }, + { + "x": 593.598, + "y": -27.234 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 572.9899999999999, + "y": -18.066 + }, + { + "x": 575.9200000000001, + "y": -18.288 + }, + { + "x": 578.73, + "y": -18.701999999999998 + }, + { + "x": 581.36, + "y": -19.344 + }, + { + "x": 583.75, + "y": -20.25 + }, + { + "x": 585.8399999999999, + "y": -21.456000000000003 + }, + { + "x": 587.5699999999999, + "y": -22.997999999999998 + }, + { + "x": 588.88, + "y": -24.912 + }, + { + "x": 589.71, + "y": -27.234 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -18.0 + }, + { + "x": 572.8779999999999, + "y": -18.066 + }, + { + "x": 575.5040000000001, + "y": -18.288 + }, + { + "x": 577.866, + "y": -18.701999999999998 + }, + { + "x": 579.952, + "y": -19.344 + }, + { + "x": 581.75, + "y": -20.25 + }, + { + "x": 583.248, + "y": -21.456000000000003 + }, + { + "x": 584.434, + "y": -22.997999999999998 + }, + { + "x": 585.2959999999999, + "y": -24.912 + }, + { + "x": 585.822, + "y": -27.234 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": -22.0 + }, + { + "x": 573.2139999999999, + "y": -21.954 + }, + { + "x": 576.7520000000001, + "y": -21.872 + }, + { + "x": 580.4580000000001, + "y": -21.838 + }, + { + "x": 584.176, + "y": -21.936000000000003 + }, + { + "x": 587.75, + "y": -22.25 + }, + { + "x": 591.024, + "y": -22.864 + }, + { + "x": 593.842, + "y": -23.862 + }, + { + "x": 596.048, + "y": -25.328 + }, + { + "x": 597.486, + "y": -27.346 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": -22.0 + }, + { + "x": 573.1019999999999, + "y": -21.954 + }, + { + "x": 576.336, + "y": -21.872 + }, + { + "x": 579.594, + "y": -21.838 + }, + { + "x": 582.768, + "y": -21.936000000000003 + }, + { + "x": 585.75, + "y": -22.25 + }, + { + "x": 588.432, + "y": -22.864 + }, + { + "x": 590.706, + "y": -23.862 + }, + { + "x": 592.4639999999999, + "y": -25.328 + }, + { + "x": 593.598, + "y": -27.346 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": -22.0 + }, + { + "x": 572.9899999999999, + "y": -21.954 + }, + { + "x": 575.9200000000001, + "y": -21.872 + }, + { + "x": 578.73, + "y": -21.838 + }, + { + "x": 581.36, + "y": -21.936000000000003 + }, + { + "x": 583.75, + "y": -22.25 + }, + { + "x": 585.8399999999999, + "y": -22.864 + }, + { + "x": 587.5699999999999, + "y": -23.862 + }, + { + "x": 588.88, + "y": -25.328 + }, + { + "x": 589.71, + "y": -27.346 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": -22.0 + }, + { + "x": 572.8779999999999, + "y": -21.954 + }, + { + "x": 575.5040000000001, + "y": -21.872 + }, + { + "x": 577.866, + "y": -21.838 + }, + { + "x": 579.952, + "y": -21.936000000000003 + }, + { + "x": 581.75, + "y": -22.25 + }, + { + "x": 583.248, + "y": -22.864 + }, + { + "x": 584.434, + "y": -23.862 + }, + { + "x": 585.2959999999999, + "y": -25.328 + }, + { + "x": 585.822, + "y": -27.346 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_0_1", + "endRoad": "road_3_1_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -26.786 + }, + { + "x": 614.704, + "y": -23.247999999999998 + }, + { + "x": 615.566, + "y": -19.541999999999998 + }, + { + "x": 616.7520000000001, + "y": -15.824 + }, + { + "x": 618.25, + "y": -12.25 + }, + { + "x": 620.0479999999999, + "y": -8.975999999999996 + }, + { + "x": 622.134, + "y": -6.158000000000003 + }, + { + "x": 624.496, + "y": -3.9519999999999986 + }, + { + "x": 627.1220000000001, + "y": -2.5140000000000002 + }, + { + "x": 630.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -26.898 + }, + { + "x": 614.704, + "y": -23.663999999999998 + }, + { + "x": 615.566, + "y": -20.406 + }, + { + "x": 616.7520000000001, + "y": -17.232 + }, + { + "x": 618.25, + "y": -14.25 + }, + { + "x": 620.0479999999999, + "y": -11.567999999999998 + }, + { + "x": 622.134, + "y": -9.294000000000004 + }, + { + "x": 624.496, + "y": -7.536 + }, + { + "x": 627.1220000000001, + "y": -6.402 + }, + { + "x": 630.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -27.01 + }, + { + "x": 614.704, + "y": -24.08 + }, + { + "x": 615.566, + "y": -21.27 + }, + { + "x": 616.7520000000001, + "y": -18.64 + }, + { + "x": 618.25, + "y": -16.25 + }, + { + "x": 620.0479999999999, + "y": -14.159999999999997 + }, + { + "x": 622.134, + "y": -12.430000000000003 + }, + { + "x": 624.496, + "y": -11.12 + }, + { + "x": 627.1220000000001, + "y": -10.29 + }, + { + "x": 630.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -27.122 + }, + { + "x": 614.704, + "y": -24.496 + }, + { + "x": 615.566, + "y": -22.134 + }, + { + "x": 616.7520000000001, + "y": -20.048000000000002 + }, + { + "x": 618.25, + "y": -18.25 + }, + { + "x": 620.0479999999999, + "y": -16.752 + }, + { + "x": 622.134, + "y": -15.566000000000003 + }, + { + "x": 624.496, + "y": -14.704 + }, + { + "x": 627.1220000000001, + "y": -14.178 + }, + { + "x": 630.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -27.234 + }, + { + "x": 614.704, + "y": -24.912 + }, + { + "x": 615.566, + "y": -22.998 + }, + { + "x": 616.7520000000001, + "y": -21.456000000000003 + }, + { + "x": 618.25, + "y": -20.25 + }, + { + "x": 620.0479999999999, + "y": -19.343999999999998 + }, + { + "x": 622.134, + "y": -18.702 + }, + { + "x": 624.496, + "y": -18.288000000000004 + }, + { + "x": 627.1220000000001, + "y": -18.066 + }, + { + "x": 630.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 614.0, + "y": -30.0 + }, + { + "x": 614.178, + "y": -27.346 + }, + { + "x": 614.704, + "y": -25.328 + }, + { + "x": 615.566, + "y": -23.862000000000002 + }, + { + "x": 616.7520000000001, + "y": -22.864 + }, + { + "x": 618.25, + "y": -22.25 + }, + { + "x": 620.0479999999999, + "y": -21.936 + }, + { + "x": 622.134, + "y": -21.838 + }, + { + "x": 624.496, + "y": -21.872 + }, + { + "x": 627.1220000000001, + "y": -21.954 + }, + { + "x": 630.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_0_1", + "endRoad": "road_3_1_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 606.0, + "y": -30.0 + }, + { + "x": 605.888, + "y": -26.16 + }, + { + "x": 605.5840000000001, + "y": -20.88 + }, + { + "x": 605.1360000000001, + "y": -14.52 + }, + { + "x": 604.592, + "y": -7.439999999999998 + }, + { + "x": 604.0, + "y": 0.0 + }, + { + "x": 603.408, + "y": 7.440000000000009 + }, + { + "x": 602.864, + "y": 14.519999999999992 + }, + { + "x": 602.4159999999999, + "y": 20.880000000000006 + }, + { + "x": 602.112, + "y": 26.16 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 606.0, + "y": -30.0 + }, + { + "x": 606.0, + "y": -26.16 + }, + { + "x": 606.0, + "y": -20.88 + }, + { + "x": 606.0, + "y": -14.52 + }, + { + "x": 606.0, + "y": -7.439999999999998 + }, + { + "x": 606.0, + "y": 0.0 + }, + { + "x": 606.0, + "y": 7.440000000000009 + }, + { + "x": 606.0, + "y": 14.519999999999992 + }, + { + "x": 606.0, + "y": 20.880000000000006 + }, + { + "x": 606.0, + "y": 26.16 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 606.0, + "y": -30.0 + }, + { + "x": 606.1120000000001, + "y": -26.16 + }, + { + "x": 606.416, + "y": -20.88 + }, + { + "x": 606.864, + "y": -14.52 + }, + { + "x": 607.408, + "y": -7.439999999999998 + }, + { + "x": 608.0, + "y": 0.0 + }, + { + "x": 608.592, + "y": 7.440000000000009 + }, + { + "x": 609.136, + "y": 14.519999999999992 + }, + { + "x": 609.584, + "y": 20.880000000000006 + }, + { + "x": 609.8879999999999, + "y": 26.16 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 606.0, + "y": -30.0 + }, + { + "x": 606.224, + "y": -26.16 + }, + { + "x": 606.832, + "y": -20.88 + }, + { + "x": 607.7280000000001, + "y": -14.52 + }, + { + "x": 608.816, + "y": -7.439999999999998 + }, + { + "x": 610.0, + "y": 0.0 + }, + { + "x": 611.184, + "y": 7.440000000000009 + }, + { + "x": 612.272, + "y": 14.519999999999992 + }, + { + "x": 613.168, + "y": 20.880000000000006 + }, + { + "x": 613.776, + "y": 26.16 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 610.0, + "y": -30.0 + }, + { + "x": 609.776, + "y": -26.16 + }, + { + "x": 609.1680000000001, + "y": -20.88 + }, + { + "x": 608.272, + "y": -14.52 + }, + { + "x": 607.184, + "y": -7.439999999999998 + }, + { + "x": 606.0, + "y": 0.0 + }, + { + "x": 604.816, + "y": 7.440000000000009 + }, + { + "x": 603.7280000000001, + "y": 14.519999999999992 + }, + { + "x": 602.832, + "y": 20.880000000000006 + }, + { + "x": 602.224, + "y": 26.16 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 610.0, + "y": -30.0 + }, + { + "x": 609.8879999999999, + "y": -26.16 + }, + { + "x": 609.5840000000001, + "y": -20.88 + }, + { + "x": 609.136, + "y": -14.52 + }, + { + "x": 608.5920000000001, + "y": -7.439999999999998 + }, + { + "x": 608.0, + "y": 0.0 + }, + { + "x": 607.408, + "y": 7.440000000000009 + }, + { + "x": 606.864, + "y": 14.519999999999992 + }, + { + "x": 606.416, + "y": 20.880000000000006 + }, + { + "x": 606.1120000000001, + "y": 26.16 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 610.0, + "y": -30.0 + }, + { + "x": 610.0, + "y": -26.16 + }, + { + "x": 610.0000000000001, + "y": -20.88 + }, + { + "x": 610.0, + "y": -14.52 + }, + { + "x": 610.0, + "y": -7.439999999999998 + }, + { + "x": 610.0, + "y": 0.0 + }, + { + "x": 610.0, + "y": 7.440000000000009 + }, + { + "x": 610.0, + "y": 14.519999999999992 + }, + { + "x": 610.0, + "y": 20.880000000000006 + }, + { + "x": 610.0, + "y": 26.16 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 610.0, + "y": -30.0 + }, + { + "x": 610.112, + "y": -26.16 + }, + { + "x": 610.416, + "y": -20.88 + }, + { + "x": 610.864, + "y": -14.52 + }, + { + "x": 611.408, + "y": -7.439999999999998 + }, + { + "x": 612.0, + "y": 0.0 + }, + { + "x": 612.592, + "y": 7.440000000000009 + }, + { + "x": 613.136, + "y": 14.519999999999992 + }, + { + "x": 613.5840000000001, + "y": 20.880000000000006 + }, + { + "x": 613.888, + "y": 26.16 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_0_1", + "endRoad": "road_3_1_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.674 + }, + { + "x": 599.6320000000001, + "y": -22.832 + }, + { + "x": 596.9780000000001, + "y": -18.678 + }, + { + "x": 593.616, + "y": -14.415999999999999 + }, + { + "x": 589.75, + "y": -10.25 + }, + { + "x": 585.5840000000001, + "y": -6.383999999999996 + }, + { + "x": 581.322, + "y": -3.022000000000004 + }, + { + "x": 577.168, + "y": -0.3679999999999981 + }, + { + "x": 573.3259999999999, + "y": 1.3739999999999994 + }, + { + "x": 570.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.562 + }, + { + "x": 599.6320000000001, + "y": -22.416 + }, + { + "x": 596.9780000000001, + "y": -17.814 + }, + { + "x": 593.616, + "y": -13.008 + }, + { + "x": 589.75, + "y": -8.25 + }, + { + "x": 585.5840000000001, + "y": -3.7919999999999954 + }, + { + "x": 581.322, + "y": 0.11399999999999633 + }, + { + "x": 577.168, + "y": 3.216000000000003 + }, + { + "x": 573.3259999999999, + "y": 5.262 + }, + { + "x": 570.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.45 + }, + { + "x": 599.6320000000001, + "y": -22.0 + }, + { + "x": 596.9780000000001, + "y": -16.95 + }, + { + "x": 593.616, + "y": -11.599999999999998 + }, + { + "x": 589.75, + "y": -6.25 + }, + { + "x": 585.5840000000001, + "y": -1.1999999999999948 + }, + { + "x": 581.322, + "y": 3.2499999999999956 + }, + { + "x": 577.168, + "y": 6.8000000000000025 + }, + { + "x": 573.3259999999999, + "y": 9.149999999999999 + }, + { + "x": 570.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.338 + }, + { + "x": 599.6320000000001, + "y": -21.584 + }, + { + "x": 596.9780000000001, + "y": -16.086 + }, + { + "x": 593.616, + "y": -10.191999999999998 + }, + { + "x": 589.75, + "y": -4.25 + }, + { + "x": 585.5840000000001, + "y": 1.3920000000000066 + }, + { + "x": 581.322, + "y": 6.385999999999996 + }, + { + "x": 577.168, + "y": 10.384000000000004 + }, + { + "x": 573.3259999999999, + "y": 13.038 + }, + { + "x": 570.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.226 + }, + { + "x": 599.6320000000001, + "y": -21.168 + }, + { + "x": 596.9780000000001, + "y": -15.222 + }, + { + "x": 593.616, + "y": -8.783999999999997 + }, + { + "x": 589.75, + "y": -2.25 + }, + { + "x": 585.5840000000001, + "y": 3.9840000000000053 + }, + { + "x": 581.322, + "y": 9.521999999999995 + }, + { + "x": 577.168, + "y": 13.968000000000005 + }, + { + "x": 573.3259999999999, + "y": 16.926 + }, + { + "x": 570.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 602.0, + "y": -30.0 + }, + { + "x": 601.374, + "y": -26.114 + }, + { + "x": 599.6320000000001, + "y": -20.752 + }, + { + "x": 596.9780000000001, + "y": -14.357999999999999 + }, + { + "x": 593.616, + "y": -7.375999999999998 + }, + { + "x": 589.75, + "y": -0.25 + }, + { + "x": 585.5840000000001, + "y": 6.576000000000008 + }, + { + "x": 581.322, + "y": 12.657999999999994 + }, + { + "x": 577.168, + "y": 17.552000000000007 + }, + { + "x": 573.3259999999999, + "y": 20.814 + }, + { + "x": 570.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_4_1_2", + "endRoad": "road_3_1_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.7860000000001, + "y": 18.066 + }, + { + "x": 623.248, + "y": 18.288 + }, + { + "x": 619.542, + "y": 18.701999999999998 + }, + { + "x": 615.8240000000001, + "y": 19.344 + }, + { + "x": 612.25, + "y": 20.25 + }, + { + "x": 608.976, + "y": 21.456000000000003 + }, + { + "x": 606.158, + "y": 22.997999999999998 + }, + { + "x": 603.952, + "y": 24.912 + }, + { + "x": 602.514, + "y": 27.234 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.898, + "y": 18.066 + }, + { + "x": 623.664, + "y": 18.288 + }, + { + "x": 620.406, + "y": 18.701999999999998 + }, + { + "x": 617.232, + "y": 19.344 + }, + { + "x": 614.25, + "y": 20.25 + }, + { + "x": 611.568, + "y": 21.456000000000003 + }, + { + "x": 609.294, + "y": 22.997999999999998 + }, + { + "x": 607.5360000000001, + "y": 24.912 + }, + { + "x": 606.402, + "y": 27.234 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 627.0100000000001, + "y": 18.066 + }, + { + "x": 624.08, + "y": 18.288 + }, + { + "x": 621.27, + "y": 18.701999999999998 + }, + { + "x": 618.64, + "y": 19.344 + }, + { + "x": 616.25, + "y": 20.25 + }, + { + "x": 614.16, + "y": 21.456000000000003 + }, + { + "x": 612.4300000000001, + "y": 22.997999999999998 + }, + { + "x": 611.12, + "y": 24.912 + }, + { + "x": 610.29, + "y": 27.234 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 627.1220000000001, + "y": 18.066 + }, + { + "x": 624.496, + "y": 18.288 + }, + { + "x": 622.134, + "y": 18.701999999999998 + }, + { + "x": 620.048, + "y": 19.344 + }, + { + "x": 618.25, + "y": 20.25 + }, + { + "x": 616.752, + "y": 21.456000000000003 + }, + { + "x": 615.566, + "y": 22.997999999999998 + }, + { + "x": 614.7040000000001, + "y": 24.912 + }, + { + "x": 614.178, + "y": 27.234 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 22.0 + }, + { + "x": 626.7860000000001, + "y": 21.954 + }, + { + "x": 623.248, + "y": 21.872 + }, + { + "x": 619.542, + "y": 21.838 + }, + { + "x": 615.8240000000001, + "y": 21.936000000000003 + }, + { + "x": 612.25, + "y": 22.25 + }, + { + "x": 608.976, + "y": 22.864 + }, + { + "x": 606.158, + "y": 23.862 + }, + { + "x": 603.952, + "y": 25.328 + }, + { + "x": 602.514, + "y": 27.346 + }, + { + "x": 602.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 22.0 + }, + { + "x": 626.898, + "y": 21.954 + }, + { + "x": 623.664, + "y": 21.872 + }, + { + "x": 620.406, + "y": 21.838 + }, + { + "x": 617.232, + "y": 21.936000000000003 + }, + { + "x": 614.25, + "y": 22.25 + }, + { + "x": 611.568, + "y": 22.864 + }, + { + "x": 609.294, + "y": 23.862 + }, + { + "x": 607.5360000000001, + "y": 25.328 + }, + { + "x": 606.402, + "y": 27.346 + }, + { + "x": 606.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 22.0 + }, + { + "x": 627.0100000000001, + "y": 21.954 + }, + { + "x": 624.08, + "y": 21.872 + }, + { + "x": 621.27, + "y": 21.838 + }, + { + "x": 618.64, + "y": 21.936000000000003 + }, + { + "x": 616.25, + "y": 22.25 + }, + { + "x": 614.16, + "y": 22.864 + }, + { + "x": 612.4300000000001, + "y": 23.862 + }, + { + "x": 611.12, + "y": 25.328 + }, + { + "x": 610.29, + "y": 27.346 + }, + { + "x": 610.0, + "y": 30.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 22.0 + }, + { + "x": 627.1220000000001, + "y": 21.954 + }, + { + "x": 624.496, + "y": 21.872 + }, + { + "x": 622.134, + "y": 21.838 + }, + { + "x": 620.048, + "y": 21.936000000000003 + }, + { + "x": 618.25, + "y": 22.25 + }, + { + "x": 616.752, + "y": 22.864 + }, + { + "x": 615.566, + "y": 23.862 + }, + { + "x": 614.7040000000001, + "y": 25.328 + }, + { + "x": 614.178, + "y": 27.346 + }, + { + "x": 614.0, + "y": 30.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_4_1_2", + "endRoad": "road_3_1_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 9.775999999999998 + }, + { + "x": 620.88, + "y": 9.168000000000001 + }, + { + "x": 614.52, + "y": 8.272 + }, + { + "x": 607.4399999999999, + "y": 7.183999999999999 + }, + { + "x": 600.0, + "y": 6.0 + }, + { + "x": 592.5600000000001, + "y": 4.815999999999999 + }, + { + "x": 585.4799999999999, + "y": 3.7280000000000006 + }, + { + "x": 579.12, + "y": 2.831999999999999 + }, + { + "x": 573.8399999999999, + "y": 2.224 + }, + { + "x": 570.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 9.887999999999998 + }, + { + "x": 620.88, + "y": 9.584000000000001 + }, + { + "x": 614.52, + "y": 9.136 + }, + { + "x": 607.4399999999999, + "y": 8.591999999999999 + }, + { + "x": 600.0, + "y": 8.0 + }, + { + "x": 592.5600000000001, + "y": 7.4079999999999995 + }, + { + "x": 585.4799999999999, + "y": 6.864000000000001 + }, + { + "x": 579.12, + "y": 6.416 + }, + { + "x": 573.8399999999999, + "y": 6.112 + }, + { + "x": 570.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 9.999999999999998 + }, + { + "x": 620.88, + "y": 10.000000000000002 + }, + { + "x": 614.52, + "y": 10.0 + }, + { + "x": 607.4399999999999, + "y": 10.0 + }, + { + "x": 600.0, + "y": 10.0 + }, + { + "x": 592.5600000000001, + "y": 10.0 + }, + { + "x": 585.4799999999999, + "y": 10.0 + }, + { + "x": 579.12, + "y": 10.0 + }, + { + "x": 573.8399999999999, + "y": 10.0 + }, + { + "x": 570.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 10.111999999999998 + }, + { + "x": 620.88, + "y": 10.416 + }, + { + "x": 614.52, + "y": 10.864 + }, + { + "x": 607.4399999999999, + "y": 11.408 + }, + { + "x": 600.0, + "y": 12.0 + }, + { + "x": 592.5600000000001, + "y": 12.592000000000002 + }, + { + "x": 585.4799999999999, + "y": 13.136 + }, + { + "x": 579.12, + "y": 13.584000000000001 + }, + { + "x": 573.8399999999999, + "y": 13.888000000000002 + }, + { + "x": 570.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 10.223999999999998 + }, + { + "x": 620.88, + "y": 10.832 + }, + { + "x": 614.52, + "y": 11.728 + }, + { + "x": 607.4399999999999, + "y": 12.816 + }, + { + "x": 600.0, + "y": 14.0 + }, + { + "x": 592.5600000000001, + "y": 15.184000000000001 + }, + { + "x": 585.4799999999999, + "y": 16.272 + }, + { + "x": 579.12, + "y": 17.168000000000003 + }, + { + "x": 573.8399999999999, + "y": 17.776 + }, + { + "x": 570.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 10.0 + }, + { + "x": 626.1600000000001, + "y": 10.335999999999999 + }, + { + "x": 620.88, + "y": 11.248000000000001 + }, + { + "x": 614.52, + "y": 12.592 + }, + { + "x": 607.4399999999999, + "y": 14.224 + }, + { + "x": 600.0, + "y": 16.0 + }, + { + "x": 592.5600000000001, + "y": 17.776000000000003 + }, + { + "x": 585.4799999999999, + "y": 19.407999999999998 + }, + { + "x": 579.12, + "y": 20.752000000000002 + }, + { + "x": 573.8399999999999, + "y": 21.664 + }, + { + "x": 570.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 13.664 + }, + { + "x": 620.88, + "y": 12.752 + }, + { + "x": 614.52, + "y": 11.408000000000001 + }, + { + "x": 607.4399999999999, + "y": 9.776 + }, + { + "x": 600.0, + "y": 8.0 + }, + { + "x": 592.5600000000001, + "y": 6.223999999999998 + }, + { + "x": 585.4799999999999, + "y": 4.5920000000000005 + }, + { + "x": 579.12, + "y": 3.2479999999999984 + }, + { + "x": 573.8399999999999, + "y": 2.3360000000000003 + }, + { + "x": 570.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 13.776 + }, + { + "x": 620.88, + "y": 13.168000000000001 + }, + { + "x": 614.52, + "y": 12.272000000000002 + }, + { + "x": 607.4399999999999, + "y": 11.184 + }, + { + "x": 600.0, + "y": 10.0 + }, + { + "x": 592.5600000000001, + "y": 8.815999999999999 + }, + { + "x": 585.4799999999999, + "y": 7.728000000000001 + }, + { + "x": 579.12, + "y": 6.831999999999999 + }, + { + "x": 573.8399999999999, + "y": 6.224 + }, + { + "x": 570.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 13.888 + }, + { + "x": 620.88, + "y": 13.584000000000001 + }, + { + "x": 614.52, + "y": 13.136000000000001 + }, + { + "x": 607.4399999999999, + "y": 12.592 + }, + { + "x": 600.0, + "y": 12.0 + }, + { + "x": 592.5600000000001, + "y": 11.408 + }, + { + "x": 585.4799999999999, + "y": 10.864 + }, + { + "x": 579.12, + "y": 10.415999999999999 + }, + { + "x": 573.8399999999999, + "y": 10.111999999999998 + }, + { + "x": 570.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 14.0 + }, + { + "x": 620.88, + "y": 14.0 + }, + { + "x": 614.52, + "y": 14.000000000000002 + }, + { + "x": 607.4399999999999, + "y": 14.0 + }, + { + "x": 600.0, + "y": 14.0 + }, + { + "x": 592.5600000000001, + "y": 14.0 + }, + { + "x": 585.4799999999999, + "y": 14.0 + }, + { + "x": 579.12, + "y": 14.0 + }, + { + "x": 573.8399999999999, + "y": 14.0 + }, + { + "x": 570.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 14.112 + }, + { + "x": 620.88, + "y": 14.416 + }, + { + "x": 614.52, + "y": 14.864 + }, + { + "x": 607.4399999999999, + "y": 15.408000000000001 + }, + { + "x": 600.0, + "y": 16.0 + }, + { + "x": 592.5600000000001, + "y": 16.592 + }, + { + "x": 585.4799999999999, + "y": 17.136 + }, + { + "x": 579.12, + "y": 17.584000000000003 + }, + { + "x": 573.8399999999999, + "y": 17.887999999999998 + }, + { + "x": 570.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 14.0 + }, + { + "x": 626.1600000000001, + "y": 14.224 + }, + { + "x": 620.88, + "y": 14.832 + }, + { + "x": 614.52, + "y": 15.728000000000002 + }, + { + "x": 607.4399999999999, + "y": 16.816000000000003 + }, + { + "x": 600.0, + "y": 18.0 + }, + { + "x": 592.5600000000001, + "y": 19.184 + }, + { + "x": 585.4799999999999, + "y": 20.272 + }, + { + "x": 579.12, + "y": 21.168000000000003 + }, + { + "x": 573.8399999999999, + "y": 21.776 + }, + { + "x": 570.0, + "y": 22.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 17.552 + }, + { + "x": 620.88, + "y": 16.336 + }, + { + "x": 614.52, + "y": 14.544 + }, + { + "x": 607.4399999999999, + "y": 12.367999999999999 + }, + { + "x": 600.0, + "y": 10.0 + }, + { + "x": 592.5600000000001, + "y": 7.631999999999998 + }, + { + "x": 585.4799999999999, + "y": 5.456000000000001 + }, + { + "x": 579.12, + "y": 3.663999999999998 + }, + { + "x": 573.8399999999999, + "y": 2.4480000000000004 + }, + { + "x": 570.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 17.663999999999998 + }, + { + "x": 620.88, + "y": 16.752 + }, + { + "x": 614.52, + "y": 15.408000000000001 + }, + { + "x": 607.4399999999999, + "y": 13.775999999999998 + }, + { + "x": 600.0, + "y": 12.0 + }, + { + "x": 592.5600000000001, + "y": 10.223999999999998 + }, + { + "x": 585.4799999999999, + "y": 8.592000000000002 + }, + { + "x": 579.12, + "y": 7.247999999999999 + }, + { + "x": 573.8399999999999, + "y": 6.336 + }, + { + "x": 570.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 17.776 + }, + { + "x": 620.88, + "y": 17.168 + }, + { + "x": 614.52, + "y": 16.272 + }, + { + "x": 607.4399999999999, + "y": 15.184 + }, + { + "x": 600.0, + "y": 14.0 + }, + { + "x": 592.5600000000001, + "y": 12.815999999999999 + }, + { + "x": 585.4799999999999, + "y": 11.728000000000002 + }, + { + "x": 579.12, + "y": 10.831999999999999 + }, + { + "x": 573.8399999999999, + "y": 10.224 + }, + { + "x": 570.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 17.887999999999998 + }, + { + "x": 620.88, + "y": 17.584 + }, + { + "x": 614.52, + "y": 17.136 + }, + { + "x": 607.4399999999999, + "y": 16.592 + }, + { + "x": 600.0, + "y": 16.0 + }, + { + "x": 592.5600000000001, + "y": 15.408000000000001 + }, + { + "x": 585.4799999999999, + "y": 14.864 + }, + { + "x": 579.12, + "y": 14.416 + }, + { + "x": 573.8399999999999, + "y": 14.112000000000002 + }, + { + "x": 570.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 18.0 + }, + { + "x": 620.88, + "y": 18.0 + }, + { + "x": 614.52, + "y": 18.0 + }, + { + "x": 607.4399999999999, + "y": 18.0 + }, + { + "x": 600.0, + "y": 18.0 + }, + { + "x": 592.5600000000001, + "y": 18.0 + }, + { + "x": 585.4799999999999, + "y": 18.0 + }, + { + "x": 579.12, + "y": 18.0 + }, + { + "x": 573.8399999999999, + "y": 18.0 + }, + { + "x": 570.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 18.0 + }, + { + "x": 626.1600000000001, + "y": 18.112 + }, + { + "x": 620.88, + "y": 18.416 + }, + { + "x": 614.52, + "y": 18.864 + }, + { + "x": 607.4399999999999, + "y": 19.408 + }, + { + "x": 600.0, + "y": 20.0 + }, + { + "x": 592.5600000000001, + "y": 20.592000000000002 + }, + { + "x": 585.4799999999999, + "y": 21.136 + }, + { + "x": 579.12, + "y": 21.584 + }, + { + "x": 573.8399999999999, + "y": 21.888 + }, + { + "x": 570.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_4_1_2", + "endRoad": "road_3_1_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 2.0 + }, + { + "x": 626.6740000000001, + "y": 1.3739999999999999 + }, + { + "x": 622.832, + "y": -0.3680000000000003 + }, + { + "x": 618.678, + "y": -3.0220000000000007 + }, + { + "x": 614.416, + "y": -6.384000000000002 + }, + { + "x": 610.25, + "y": -10.25 + }, + { + "x": 606.384, + "y": -14.416000000000004 + }, + { + "x": 603.0219999999999, + "y": -18.677999999999997 + }, + { + "x": 600.368, + "y": -22.832000000000004 + }, + { + "x": 598.626, + "y": -26.674 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 2.0 + }, + { + "x": 626.562, + "y": 1.3739999999999999 + }, + { + "x": 622.4159999999999, + "y": -0.3680000000000003 + }, + { + "x": 617.814, + "y": -3.0220000000000007 + }, + { + "x": 613.008, + "y": -6.384000000000002 + }, + { + "x": 608.25, + "y": -10.25 + }, + { + "x": 603.792, + "y": -14.416000000000004 + }, + { + "x": 599.886, + "y": -18.677999999999997 + }, + { + "x": 596.784, + "y": -22.832000000000004 + }, + { + "x": 594.7379999999999, + "y": -26.674 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 2.0 + }, + { + "x": 626.45, + "y": 1.3739999999999999 + }, + { + "x": 622.0, + "y": -0.3680000000000003 + }, + { + "x": 616.95, + "y": -3.0220000000000007 + }, + { + "x": 611.6, + "y": -6.384000000000002 + }, + { + "x": 606.25, + "y": -10.25 + }, + { + "x": 601.1999999999999, + "y": -14.416000000000004 + }, + { + "x": 596.75, + "y": -18.677999999999997 + }, + { + "x": 593.2, + "y": -22.832000000000004 + }, + { + "x": 590.85, + "y": -26.674 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 2.0 + }, + { + "x": 626.3380000000001, + "y": 1.3739999999999999 + }, + { + "x": 621.5840000000001, + "y": -0.3680000000000003 + }, + { + "x": 616.086, + "y": -3.0220000000000007 + }, + { + "x": 610.192, + "y": -6.384000000000002 + }, + { + "x": 604.25, + "y": -10.25 + }, + { + "x": 598.608, + "y": -14.416000000000004 + }, + { + "x": 593.614, + "y": -18.677999999999997 + }, + { + "x": 589.616, + "y": -22.832000000000004 + }, + { + "x": 586.962, + "y": -26.674 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 6.0 + }, + { + "x": 626.6740000000001, + "y": 5.2620000000000005 + }, + { + "x": 622.832, + "y": 3.216 + }, + { + "x": 618.678, + "y": 0.11400000000000032 + }, + { + "x": 614.416, + "y": -3.792000000000002 + }, + { + "x": 610.25, + "y": -8.25 + }, + { + "x": 606.384, + "y": -13.008000000000006 + }, + { + "x": 603.0219999999999, + "y": -17.813999999999997 + }, + { + "x": 600.368, + "y": -22.416000000000004 + }, + { + "x": 598.626, + "y": -26.562 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 6.0 + }, + { + "x": 626.562, + "y": 5.2620000000000005 + }, + { + "x": 622.4159999999999, + "y": 3.216 + }, + { + "x": 617.814, + "y": 0.11400000000000032 + }, + { + "x": 613.008, + "y": -3.792000000000002 + }, + { + "x": 608.25, + "y": -8.25 + }, + { + "x": 603.792, + "y": -13.008000000000006 + }, + { + "x": 599.886, + "y": -17.813999999999997 + }, + { + "x": 596.784, + "y": -22.416000000000004 + }, + { + "x": 594.7379999999999, + "y": -26.562 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 6.0 + }, + { + "x": 626.45, + "y": 5.2620000000000005 + }, + { + "x": 622.0, + "y": 3.216 + }, + { + "x": 616.95, + "y": 0.11400000000000032 + }, + { + "x": 611.6, + "y": -3.792000000000002 + }, + { + "x": 606.25, + "y": -8.25 + }, + { + "x": 601.1999999999999, + "y": -13.008000000000006 + }, + { + "x": 596.75, + "y": -17.813999999999997 + }, + { + "x": 593.2, + "y": -22.416000000000004 + }, + { + "x": 590.85, + "y": -26.562 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 6.0 + }, + { + "x": 626.3380000000001, + "y": 5.2620000000000005 + }, + { + "x": 621.5840000000001, + "y": 3.216 + }, + { + "x": 616.086, + "y": 0.11400000000000032 + }, + { + "x": 610.192, + "y": -3.792000000000002 + }, + { + "x": 604.25, + "y": -8.25 + }, + { + "x": 598.608, + "y": -13.008000000000006 + }, + { + "x": 593.614, + "y": -17.813999999999997 + }, + { + "x": 589.616, + "y": -22.416000000000004 + }, + { + "x": 586.962, + "y": -26.562 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_2_3", + "endRoad": "road_3_1_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.674 + }, + { + "x": 600.3679999999999, + "y": 22.832 + }, + { + "x": 603.022, + "y": 18.678 + }, + { + "x": 606.384, + "y": 14.415999999999999 + }, + { + "x": 610.25, + "y": 10.25 + }, + { + "x": 614.4159999999999, + "y": 6.383999999999996 + }, + { + "x": 618.678, + "y": 3.022000000000004 + }, + { + "x": 622.832, + "y": 0.3679999999999981 + }, + { + "x": 626.6740000000001, + "y": -1.3739999999999994 + }, + { + "x": 630.0, + "y": -2.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.562 + }, + { + "x": 600.3679999999999, + "y": 22.416 + }, + { + "x": 603.022, + "y": 17.814 + }, + { + "x": 606.384, + "y": 13.008 + }, + { + "x": 610.25, + "y": 8.25 + }, + { + "x": 614.4159999999999, + "y": 3.7919999999999954 + }, + { + "x": 618.678, + "y": -0.11399999999999633 + }, + { + "x": 622.832, + "y": -3.216000000000003 + }, + { + "x": 626.6740000000001, + "y": -5.262 + }, + { + "x": 630.0, + "y": -6.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.45 + }, + { + "x": 600.3679999999999, + "y": 22.0 + }, + { + "x": 603.022, + "y": 16.95 + }, + { + "x": 606.384, + "y": 11.599999999999998 + }, + { + "x": 610.25, + "y": 6.25 + }, + { + "x": 614.4159999999999, + "y": 1.1999999999999948 + }, + { + "x": 618.678, + "y": -3.2499999999999956 + }, + { + "x": 622.832, + "y": -6.8000000000000025 + }, + { + "x": 626.6740000000001, + "y": -9.149999999999999 + }, + { + "x": 630.0, + "y": -10.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.338 + }, + { + "x": 600.3679999999999, + "y": 21.584 + }, + { + "x": 603.022, + "y": 16.086 + }, + { + "x": 606.384, + "y": 10.191999999999998 + }, + { + "x": 610.25, + "y": 4.25 + }, + { + "x": 614.4159999999999, + "y": -1.3920000000000066 + }, + { + "x": 618.678, + "y": -6.385999999999996 + }, + { + "x": 622.832, + "y": -10.384000000000004 + }, + { + "x": 626.6740000000001, + "y": -13.038 + }, + { + "x": 630.0, + "y": -14.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.226 + }, + { + "x": 600.3679999999999, + "y": 21.168 + }, + { + "x": 603.022, + "y": 15.222 + }, + { + "x": 606.384, + "y": 8.783999999999997 + }, + { + "x": 610.25, + "y": 2.25 + }, + { + "x": 614.4159999999999, + "y": -3.9840000000000053 + }, + { + "x": 618.678, + "y": -9.521999999999995 + }, + { + "x": 622.832, + "y": -13.968000000000005 + }, + { + "x": 626.6740000000001, + "y": -16.926 + }, + { + "x": 630.0, + "y": -18.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 598.0, + "y": 30.0 + }, + { + "x": 598.626, + "y": 26.114 + }, + { + "x": 600.3679999999999, + "y": 20.752 + }, + { + "x": 603.022, + "y": 14.357999999999999 + }, + { + "x": 606.384, + "y": 7.375999999999998 + }, + { + "x": 610.25, + "y": 0.25 + }, + { + "x": 614.4159999999999, + "y": -6.576000000000008 + }, + { + "x": 618.678, + "y": -12.657999999999994 + }, + { + "x": 622.832, + "y": -17.552000000000007 + }, + { + "x": 626.6740000000001, + "y": -20.814 + }, + { + "x": 630.0, + "y": -22.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_2_3", + "endRoad": "road_3_1_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 26.786 + }, + { + "x": 585.296, + "y": 23.247999999999998 + }, + { + "x": 584.4340000000001, + "y": 19.541999999999998 + }, + { + "x": 583.2479999999999, + "y": 15.824 + }, + { + "x": 581.75, + "y": 12.25 + }, + { + "x": 579.9520000000001, + "y": 8.975999999999996 + }, + { + "x": 577.866, + "y": 6.158000000000003 + }, + { + "x": 575.504, + "y": 3.9519999999999986 + }, + { + "x": 572.8779999999999, + "y": 2.5140000000000002 + }, + { + "x": 570.0, + "y": 2.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 26.898 + }, + { + "x": 585.296, + "y": 23.663999999999998 + }, + { + "x": 584.4340000000001, + "y": 20.406 + }, + { + "x": 583.2479999999999, + "y": 17.232 + }, + { + "x": 581.75, + "y": 14.25 + }, + { + "x": 579.9520000000001, + "y": 11.567999999999998 + }, + { + "x": 577.866, + "y": 9.294000000000004 + }, + { + "x": 575.504, + "y": 7.536 + }, + { + "x": 572.8779999999999, + "y": 6.402 + }, + { + "x": 570.0, + "y": 6.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 27.01 + }, + { + "x": 585.296, + "y": 24.08 + }, + { + "x": 584.4340000000001, + "y": 21.27 + }, + { + "x": 583.2479999999999, + "y": 18.64 + }, + { + "x": 581.75, + "y": 16.25 + }, + { + "x": 579.9520000000001, + "y": 14.159999999999997 + }, + { + "x": 577.866, + "y": 12.430000000000003 + }, + { + "x": 575.504, + "y": 11.12 + }, + { + "x": 572.8779999999999, + "y": 10.29 + }, + { + "x": 570.0, + "y": 10.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 27.122 + }, + { + "x": 585.296, + "y": 24.496 + }, + { + "x": 584.4340000000001, + "y": 22.134 + }, + { + "x": 583.2479999999999, + "y": 20.048000000000002 + }, + { + "x": 581.75, + "y": 18.25 + }, + { + "x": 579.9520000000001, + "y": 16.752 + }, + { + "x": 577.866, + "y": 15.566000000000003 + }, + { + "x": 575.504, + "y": 14.704 + }, + { + "x": 572.8779999999999, + "y": 14.178 + }, + { + "x": 570.0, + "y": 14.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 27.234 + }, + { + "x": 585.296, + "y": 24.912 + }, + { + "x": 584.4340000000001, + "y": 22.998 + }, + { + "x": 583.2479999999999, + "y": 21.456000000000003 + }, + { + "x": 581.75, + "y": 20.25 + }, + { + "x": 579.9520000000001, + "y": 19.343999999999998 + }, + { + "x": 577.866, + "y": 18.702 + }, + { + "x": 575.504, + "y": 18.288000000000004 + }, + { + "x": 572.8779999999999, + "y": 18.066 + }, + { + "x": 570.0, + "y": 18.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 586.0, + "y": 30.0 + }, + { + "x": 585.822, + "y": 27.346 + }, + { + "x": 585.296, + "y": 25.328 + }, + { + "x": 584.4340000000001, + "y": 23.862000000000002 + }, + { + "x": 583.2479999999999, + "y": 22.864 + }, + { + "x": 581.75, + "y": 22.25 + }, + { + "x": 579.9520000000001, + "y": 21.936 + }, + { + "x": 577.866, + "y": 21.838 + }, + { + "x": 575.504, + "y": 21.872 + }, + { + "x": 572.8779999999999, + "y": 21.954 + }, + { + "x": 570.0, + "y": 22.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_2_3", + "endRoad": "road_3_1_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 594.0, + "y": 30.0 + }, + { + "x": 594.112, + "y": 26.16 + }, + { + "x": 594.416, + "y": 20.88 + }, + { + "x": 594.864, + "y": 14.52 + }, + { + "x": 595.408, + "y": 7.439999999999998 + }, + { + "x": 596.0, + "y": 0.0 + }, + { + "x": 596.592, + "y": -7.440000000000009 + }, + { + "x": 597.136, + "y": -14.519999999999992 + }, + { + "x": 597.5840000000001, + "y": -20.880000000000006 + }, + { + "x": 597.888, + "y": -26.16 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 594.0, + "y": 30.0 + }, + { + "x": 593.9999999999999, + "y": 26.16 + }, + { + "x": 594.0, + "y": 20.88 + }, + { + "x": 594.0, + "y": 14.52 + }, + { + "x": 594.0, + "y": 7.439999999999998 + }, + { + "x": 594.0, + "y": 0.0 + }, + { + "x": 594.0, + "y": -7.440000000000009 + }, + { + "x": 594.0, + "y": -14.519999999999992 + }, + { + "x": 594.0, + "y": -20.880000000000006 + }, + { + "x": 594.0, + "y": -26.16 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 594.0, + "y": 30.0 + }, + { + "x": 593.8879999999999, + "y": 26.16 + }, + { + "x": 593.5840000000001, + "y": 20.88 + }, + { + "x": 593.1360000000001, + "y": 14.52 + }, + { + "x": 592.592, + "y": 7.439999999999998 + }, + { + "x": 592.0, + "y": 0.0 + }, + { + "x": 591.4079999999999, + "y": -7.440000000000009 + }, + { + "x": 590.864, + "y": -14.519999999999992 + }, + { + "x": 590.416, + "y": -20.880000000000006 + }, + { + "x": 590.1120000000001, + "y": -26.16 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 594.0, + "y": 30.0 + }, + { + "x": 593.776, + "y": 26.16 + }, + { + "x": 593.1680000000001, + "y": 20.88 + }, + { + "x": 592.272, + "y": 14.52 + }, + { + "x": 591.184, + "y": 7.439999999999998 + }, + { + "x": 590.0, + "y": 0.0 + }, + { + "x": 588.816, + "y": -7.440000000000009 + }, + { + "x": 587.7280000000001, + "y": -14.519999999999992 + }, + { + "x": 586.832, + "y": -20.880000000000006 + }, + { + "x": 586.224, + "y": -26.16 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 590.0, + "y": 30.0 + }, + { + "x": 590.224, + "y": 26.16 + }, + { + "x": 590.832, + "y": 20.88 + }, + { + "x": 591.7280000000001, + "y": 14.52 + }, + { + "x": 592.816, + "y": 7.439999999999998 + }, + { + "x": 594.0, + "y": 0.0 + }, + { + "x": 595.184, + "y": -7.440000000000009 + }, + { + "x": 596.2719999999999, + "y": -14.519999999999992 + }, + { + "x": 597.168, + "y": -20.880000000000006 + }, + { + "x": 597.776, + "y": -26.16 + }, + { + "x": 598.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 590.0, + "y": 30.0 + }, + { + "x": 590.112, + "y": 26.16 + }, + { + "x": 590.4159999999999, + "y": 20.88 + }, + { + "x": 590.864, + "y": 14.52 + }, + { + "x": 591.408, + "y": 7.439999999999998 + }, + { + "x": 592.0, + "y": 0.0 + }, + { + "x": 592.592, + "y": -7.440000000000009 + }, + { + "x": 593.136, + "y": -14.519999999999992 + }, + { + "x": 593.584, + "y": -20.880000000000006 + }, + { + "x": 593.8879999999999, + "y": -26.16 + }, + { + "x": 594.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 590.0, + "y": 30.0 + }, + { + "x": 590.0, + "y": 26.16 + }, + { + "x": 590.0, + "y": 20.88 + }, + { + "x": 590.0, + "y": 14.52 + }, + { + "x": 590.0, + "y": 7.439999999999998 + }, + { + "x": 590.0, + "y": 0.0 + }, + { + "x": 590.0, + "y": -7.440000000000009 + }, + { + "x": 590.0, + "y": -14.519999999999992 + }, + { + "x": 590.0, + "y": -20.880000000000006 + }, + { + "x": 590.0, + "y": -26.16 + }, + { + "x": 590.0, + "y": -30.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 590.0, + "y": 30.0 + }, + { + "x": 589.888, + "y": 26.16 + }, + { + "x": 589.5840000000001, + "y": 20.88 + }, + { + "x": 589.136, + "y": 14.52 + }, + { + "x": 588.592, + "y": 7.439999999999998 + }, + { + "x": 588.0, + "y": 0.0 + }, + { + "x": 587.408, + "y": -7.440000000000009 + }, + { + "x": 586.864, + "y": -14.519999999999992 + }, + { + "x": 586.4159999999999, + "y": -20.880000000000006 + }, + { + "x": 586.112, + "y": -26.16 + }, + { + "x": 586.0, + "y": -30.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_4_1", + "point": { + "x": 800, + "y": 0 + }, + "width": 0, + "roads": [ + "road_3_1_0", + "road_4_1_2" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_0_2", + "point": { + "x": -200, + "y": 200 + }, + "width": 0, + "roads": [ + "road_1_2_2", + "road_0_2_0" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_1_2", + "point": { + "x": 0, + "y": 200 + }, + "width": 30, + "roads": [ + "road_0_2_0", + "road_1_1_1", + "road_2_2_2", + "road_1_3_3", + "road_1_2_0", + "road_1_2_1", + "road_1_2_2", + "road_1_2_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_0_2_0", + "endRoad": "road_1_2_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 190.22400000000002 + }, + { + "x": -20.88, + "y": 190.83200000000002 + }, + { + "x": -14.52, + "y": 191.728 + }, + { + "x": -7.439999999999998, + "y": 192.81599999999997 + }, + { + "x": 0.0, + "y": 194.0 + }, + { + "x": 7.440000000000009, + "y": 195.18400000000003 + }, + { + "x": 14.519999999999992, + "y": 196.272 + }, + { + "x": 20.880000000000006, + "y": 197.168 + }, + { + "x": 26.16, + "y": 197.77599999999998 + }, + { + "x": 30.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 190.112 + }, + { + "x": -20.88, + "y": 190.41600000000003 + }, + { + "x": -14.52, + "y": 190.864 + }, + { + "x": -7.439999999999998, + "y": 191.408 + }, + { + "x": 0.0, + "y": 192.0 + }, + { + "x": 7.440000000000009, + "y": 192.592 + }, + { + "x": 14.519999999999992, + "y": 193.136 + }, + { + "x": 20.880000000000006, + "y": 193.584 + }, + { + "x": 26.16, + "y": 193.88799999999998 + }, + { + "x": 30.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 190.0 + }, + { + "x": -20.88, + "y": 190.0 + }, + { + "x": -14.52, + "y": 190.0 + }, + { + "x": -7.439999999999998, + "y": 190.0 + }, + { + "x": 0.0, + "y": 190.0 + }, + { + "x": 7.440000000000009, + "y": 190.0 + }, + { + "x": 14.519999999999992, + "y": 190.0 + }, + { + "x": 20.880000000000006, + "y": 190.0 + }, + { + "x": 26.16, + "y": 190.0 + }, + { + "x": 30.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 189.888 + }, + { + "x": -20.88, + "y": 189.584 + }, + { + "x": -14.52, + "y": 189.13600000000002 + }, + { + "x": -7.439999999999998, + "y": 188.59199999999998 + }, + { + "x": 0.0, + "y": 188.0 + }, + { + "x": 7.440000000000009, + "y": 187.40800000000002 + }, + { + "x": 14.519999999999992, + "y": 186.864 + }, + { + "x": 20.880000000000006, + "y": 186.416 + }, + { + "x": 26.16, + "y": 186.112 + }, + { + "x": 30.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 189.776 + }, + { + "x": -20.88, + "y": 189.168 + }, + { + "x": -14.52, + "y": 188.27200000000002 + }, + { + "x": -7.439999999999998, + "y": 187.184 + }, + { + "x": 0.0, + "y": 186.0 + }, + { + "x": 7.440000000000009, + "y": 184.816 + }, + { + "x": 14.519999999999992, + "y": 183.728 + }, + { + "x": 20.880000000000006, + "y": 182.832 + }, + { + "x": 26.16, + "y": 182.224 + }, + { + "x": 30.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": 190.0 + }, + { + "x": -26.16, + "y": 189.66400000000002 + }, + { + "x": -20.88, + "y": 188.752 + }, + { + "x": -14.52, + "y": 187.40800000000002 + }, + { + "x": -7.439999999999998, + "y": 185.77599999999998 + }, + { + "x": 0.0, + "y": 184.0 + }, + { + "x": 7.440000000000009, + "y": 182.224 + }, + { + "x": 14.519999999999992, + "y": 180.592 + }, + { + "x": 20.880000000000006, + "y": 179.248 + }, + { + "x": 26.16, + "y": 178.33599999999998 + }, + { + "x": 30.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 186.336 + }, + { + "x": -20.88, + "y": 187.24800000000002 + }, + { + "x": -14.52, + "y": 188.592 + }, + { + "x": -7.439999999999998, + "y": 190.224 + }, + { + "x": 0.0, + "y": 192.0 + }, + { + "x": 7.440000000000009, + "y": 193.776 + }, + { + "x": 14.519999999999992, + "y": 195.408 + }, + { + "x": 20.880000000000006, + "y": 196.75199999999998 + }, + { + "x": 26.16, + "y": 197.664 + }, + { + "x": 30.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 186.224 + }, + { + "x": -20.88, + "y": 186.83200000000002 + }, + { + "x": -14.52, + "y": 187.728 + }, + { + "x": -7.439999999999998, + "y": 188.81599999999997 + }, + { + "x": 0.0, + "y": 190.0 + }, + { + "x": 7.440000000000009, + "y": 191.18400000000003 + }, + { + "x": 14.519999999999992, + "y": 192.272 + }, + { + "x": 20.880000000000006, + "y": 193.16799999999998 + }, + { + "x": 26.16, + "y": 193.77599999999998 + }, + { + "x": 30.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 186.112 + }, + { + "x": -20.88, + "y": 186.416 + }, + { + "x": -14.52, + "y": 186.86400000000003 + }, + { + "x": -7.439999999999998, + "y": 187.40800000000002 + }, + { + "x": 0.0, + "y": 188.0 + }, + { + "x": 7.440000000000009, + "y": 188.59199999999998 + }, + { + "x": 14.519999999999992, + "y": 189.136 + }, + { + "x": 20.880000000000006, + "y": 189.584 + }, + { + "x": 26.16, + "y": 189.888 + }, + { + "x": 30.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 186.0 + }, + { + "x": -20.88, + "y": 186.0 + }, + { + "x": -14.52, + "y": 186.0 + }, + { + "x": -7.439999999999998, + "y": 186.0 + }, + { + "x": 0.0, + "y": 186.0 + }, + { + "x": 7.440000000000009, + "y": 186.0 + }, + { + "x": 14.519999999999992, + "y": 186.0 + }, + { + "x": 20.880000000000006, + "y": 186.0 + }, + { + "x": 26.16, + "y": 186.0 + }, + { + "x": 30.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 185.888 + }, + { + "x": -20.88, + "y": 185.584 + }, + { + "x": -14.52, + "y": 185.13600000000002 + }, + { + "x": -7.439999999999998, + "y": 184.59199999999998 + }, + { + "x": 0.0, + "y": 184.0 + }, + { + "x": 7.440000000000009, + "y": 183.40800000000002 + }, + { + "x": 14.519999999999992, + "y": 182.864 + }, + { + "x": 20.880000000000006, + "y": 182.416 + }, + { + "x": 26.16, + "y": 182.112 + }, + { + "x": 30.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": 186.0 + }, + { + "x": -26.16, + "y": 185.776 + }, + { + "x": -20.88, + "y": 185.168 + }, + { + "x": -14.52, + "y": 184.27200000000002 + }, + { + "x": -7.439999999999998, + "y": 183.184 + }, + { + "x": 0.0, + "y": 182.0 + }, + { + "x": 7.440000000000009, + "y": 180.816 + }, + { + "x": 14.519999999999992, + "y": 179.728 + }, + { + "x": 20.880000000000006, + "y": 178.832 + }, + { + "x": 26.16, + "y": 178.224 + }, + { + "x": 30.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 182.448 + }, + { + "x": -20.88, + "y": 183.66400000000002 + }, + { + "x": -14.52, + "y": 185.45600000000002 + }, + { + "x": -7.439999999999998, + "y": 187.632 + }, + { + "x": 0.0, + "y": 190.0 + }, + { + "x": 7.440000000000009, + "y": 192.368 + }, + { + "x": 14.519999999999992, + "y": 194.54399999999998 + }, + { + "x": 20.880000000000006, + "y": 196.33599999999998 + }, + { + "x": 26.16, + "y": 197.552 + }, + { + "x": 30.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 182.33599999999998 + }, + { + "x": -20.88, + "y": 183.24800000000002 + }, + { + "x": -14.52, + "y": 184.592 + }, + { + "x": -7.439999999999998, + "y": 186.224 + }, + { + "x": 0.0, + "y": 188.0 + }, + { + "x": 7.440000000000009, + "y": 189.776 + }, + { + "x": 14.519999999999992, + "y": 191.408 + }, + { + "x": 20.880000000000006, + "y": 192.75199999999998 + }, + { + "x": 26.16, + "y": 193.664 + }, + { + "x": 30.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 182.224 + }, + { + "x": -20.88, + "y": 182.832 + }, + { + "x": -14.52, + "y": 183.728 + }, + { + "x": -7.439999999999998, + "y": 184.816 + }, + { + "x": 0.0, + "y": 186.0 + }, + { + "x": 7.440000000000009, + "y": 187.184 + }, + { + "x": 14.519999999999992, + "y": 188.272 + }, + { + "x": 20.880000000000006, + "y": 189.168 + }, + { + "x": 26.16, + "y": 189.776 + }, + { + "x": 30.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 182.112 + }, + { + "x": -20.88, + "y": 182.416 + }, + { + "x": -14.52, + "y": 182.86400000000003 + }, + { + "x": -7.439999999999998, + "y": 183.40800000000002 + }, + { + "x": 0.0, + "y": 184.0 + }, + { + "x": 7.440000000000009, + "y": 184.59199999999998 + }, + { + "x": 14.519999999999992, + "y": 185.136 + }, + { + "x": 20.880000000000006, + "y": 185.584 + }, + { + "x": 26.16, + "y": 185.888 + }, + { + "x": 30.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 182.0 + }, + { + "x": -20.88, + "y": 182.0 + }, + { + "x": -14.52, + "y": 182.00000000000003 + }, + { + "x": -7.439999999999998, + "y": 182.0 + }, + { + "x": 0.0, + "y": 182.0 + }, + { + "x": 7.440000000000009, + "y": 182.0 + }, + { + "x": 14.519999999999992, + "y": 182.0 + }, + { + "x": 20.880000000000006, + "y": 182.0 + }, + { + "x": 26.16, + "y": 182.0 + }, + { + "x": 30.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.16, + "y": 181.888 + }, + { + "x": -20.88, + "y": 181.584 + }, + { + "x": -14.52, + "y": 181.13600000000002 + }, + { + "x": -7.439999999999998, + "y": 180.59199999999998 + }, + { + "x": 0.0, + "y": 180.0 + }, + { + "x": 7.440000000000009, + "y": 179.40800000000002 + }, + { + "x": 14.519999999999992, + "y": 178.864 + }, + { + "x": 20.880000000000006, + "y": 178.416 + }, + { + "x": 26.16, + "y": 178.112 + }, + { + "x": 30.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_0_2_0", + "endRoad": "road_1_2_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 198.0 + }, + { + "x": -26.674, + "y": 198.62599999999998 + }, + { + "x": -22.832, + "y": 200.36800000000002 + }, + { + "x": -18.678, + "y": 203.02200000000002 + }, + { + "x": -14.415999999999999, + "y": 206.38400000000001 + }, + { + "x": -10.25, + "y": 210.25 + }, + { + "x": -6.383999999999996, + "y": 214.416 + }, + { + "x": -3.022000000000004, + "y": 218.67800000000003 + }, + { + "x": -0.3679999999999981, + "y": 222.83200000000002 + }, + { + "x": 1.3739999999999994, + "y": 226.674 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 198.0 + }, + { + "x": -26.562, + "y": 198.62599999999998 + }, + { + "x": -22.416, + "y": 200.36800000000002 + }, + { + "x": -17.814, + "y": 203.02200000000002 + }, + { + "x": -13.008, + "y": 206.38400000000001 + }, + { + "x": -8.25, + "y": 210.25 + }, + { + "x": -3.7919999999999954, + "y": 214.416 + }, + { + "x": 0.11399999999999633, + "y": 218.67800000000003 + }, + { + "x": 3.216000000000003, + "y": 222.83200000000002 + }, + { + "x": 5.262, + "y": 226.674 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 198.0 + }, + { + "x": -26.45, + "y": 198.62599999999998 + }, + { + "x": -22.0, + "y": 200.36800000000002 + }, + { + "x": -16.95, + "y": 203.02200000000002 + }, + { + "x": -11.599999999999998, + "y": 206.38400000000001 + }, + { + "x": -6.25, + "y": 210.25 + }, + { + "x": -1.1999999999999948, + "y": 214.416 + }, + { + "x": 3.2499999999999956, + "y": 218.67800000000003 + }, + { + "x": 6.8000000000000025, + "y": 222.83200000000002 + }, + { + "x": 9.149999999999999, + "y": 226.674 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 198.0 + }, + { + "x": -26.338, + "y": 198.62599999999998 + }, + { + "x": -21.584, + "y": 200.36800000000002 + }, + { + "x": -16.086, + "y": 203.02200000000002 + }, + { + "x": -10.191999999999998, + "y": 206.38400000000001 + }, + { + "x": -4.25, + "y": 210.25 + }, + { + "x": 1.3920000000000066, + "y": 214.416 + }, + { + "x": 6.385999999999996, + "y": 218.67800000000003 + }, + { + "x": 10.384000000000004, + "y": 222.83200000000002 + }, + { + "x": 13.038, + "y": 226.674 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 194.0 + }, + { + "x": -26.674, + "y": 194.73799999999997 + }, + { + "x": -22.832, + "y": 196.78400000000002 + }, + { + "x": -18.678, + "y": 199.88600000000002 + }, + { + "x": -14.415999999999999, + "y": 203.79200000000003 + }, + { + "x": -10.25, + "y": 208.25 + }, + { + "x": -6.383999999999996, + "y": 213.00799999999998 + }, + { + "x": -3.022000000000004, + "y": 217.81400000000002 + }, + { + "x": -0.3679999999999981, + "y": 222.41600000000003 + }, + { + "x": 1.3739999999999994, + "y": 226.562 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 194.0 + }, + { + "x": -26.562, + "y": 194.73799999999997 + }, + { + "x": -22.416, + "y": 196.78400000000002 + }, + { + "x": -17.814, + "y": 199.88600000000002 + }, + { + "x": -13.008, + "y": 203.79200000000003 + }, + { + "x": -8.25, + "y": 208.25 + }, + { + "x": -3.7919999999999954, + "y": 213.00799999999998 + }, + { + "x": 0.11399999999999633, + "y": 217.81400000000002 + }, + { + "x": 3.216000000000003, + "y": 222.41600000000003 + }, + { + "x": 5.262, + "y": 226.562 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 194.0 + }, + { + "x": -26.45, + "y": 194.73799999999997 + }, + { + "x": -22.0, + "y": 196.78400000000002 + }, + { + "x": -16.95, + "y": 199.88600000000002 + }, + { + "x": -11.599999999999998, + "y": 203.79200000000003 + }, + { + "x": -6.25, + "y": 208.25 + }, + { + "x": -1.1999999999999948, + "y": 213.00799999999998 + }, + { + "x": 3.2499999999999956, + "y": 217.81400000000002 + }, + { + "x": 6.8000000000000025, + "y": 222.41600000000003 + }, + { + "x": 9.149999999999999, + "y": 226.562 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 194.0 + }, + { + "x": -26.338, + "y": 194.73799999999997 + }, + { + "x": -21.584, + "y": 196.78400000000002 + }, + { + "x": -16.086, + "y": 199.88600000000002 + }, + { + "x": -10.191999999999998, + "y": 203.79200000000003 + }, + { + "x": -4.25, + "y": 208.25 + }, + { + "x": 1.3920000000000066, + "y": 213.00799999999998 + }, + { + "x": 6.385999999999996, + "y": 217.81400000000002 + }, + { + "x": 10.384000000000004, + "y": 222.41600000000003 + }, + { + "x": 13.038, + "y": 226.562 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_0_2_0", + "endRoad": "road_1_2_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.786, + "y": 181.934 + }, + { + "x": -23.247999999999998, + "y": 181.71200000000002 + }, + { + "x": -19.541999999999998, + "y": 181.298 + }, + { + "x": -15.824, + "y": 180.656 + }, + { + "x": -12.25, + "y": 179.75 + }, + { + "x": -8.975999999999996, + "y": 178.54399999999998 + }, + { + "x": -6.158000000000003, + "y": 177.00199999999998 + }, + { + "x": -3.9519999999999986, + "y": 175.088 + }, + { + "x": -2.5140000000000002, + "y": 172.76600000000002 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -26.898, + "y": 181.934 + }, + { + "x": -23.663999999999998, + "y": 181.71200000000002 + }, + { + "x": -20.406, + "y": 181.298 + }, + { + "x": -17.232, + "y": 180.656 + }, + { + "x": -14.25, + "y": 179.75 + }, + { + "x": -11.567999999999998, + "y": 178.54399999999998 + }, + { + "x": -9.294000000000004, + "y": 177.00199999999998 + }, + { + "x": -7.536, + "y": 175.088 + }, + { + "x": -6.402, + "y": 172.76600000000002 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -27.01, + "y": 181.934 + }, + { + "x": -24.08, + "y": 181.71200000000002 + }, + { + "x": -21.27, + "y": 181.298 + }, + { + "x": -18.64, + "y": 180.656 + }, + { + "x": -16.25, + "y": 179.75 + }, + { + "x": -14.159999999999997, + "y": 178.54399999999998 + }, + { + "x": -12.430000000000003, + "y": 177.00199999999998 + }, + { + "x": -11.12, + "y": 175.088 + }, + { + "x": -10.29, + "y": 172.76600000000002 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 182.0 + }, + { + "x": -27.122, + "y": 181.934 + }, + { + "x": -24.496, + "y": 181.71200000000002 + }, + { + "x": -22.134, + "y": 181.298 + }, + { + "x": -20.048000000000002, + "y": 180.656 + }, + { + "x": -18.25, + "y": 179.75 + }, + { + "x": -16.752, + "y": 178.54399999999998 + }, + { + "x": -15.566000000000003, + "y": 177.00199999999998 + }, + { + "x": -14.704, + "y": 175.088 + }, + { + "x": -14.178, + "y": 172.76600000000002 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": -30.0, + "y": 178.0 + }, + { + "x": -26.786, + "y": 178.046 + }, + { + "x": -23.247999999999998, + "y": 178.12800000000001 + }, + { + "x": -19.541999999999998, + "y": 178.16199999999998 + }, + { + "x": -15.824, + "y": 178.064 + }, + { + "x": -12.25, + "y": 177.75 + }, + { + "x": -8.975999999999996, + "y": 177.136 + }, + { + "x": -6.158000000000003, + "y": 176.13799999999998 + }, + { + "x": -3.9519999999999986, + "y": 174.672 + }, + { + "x": -2.5140000000000002, + "y": 172.65400000000002 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": -30.0, + "y": 178.0 + }, + { + "x": -26.898, + "y": 178.046 + }, + { + "x": -23.663999999999998, + "y": 178.12800000000001 + }, + { + "x": -20.406, + "y": 178.16199999999998 + }, + { + "x": -17.232, + "y": 178.064 + }, + { + "x": -14.25, + "y": 177.75 + }, + { + "x": -11.567999999999998, + "y": 177.136 + }, + { + "x": -9.294000000000004, + "y": 176.13799999999998 + }, + { + "x": -7.536, + "y": 174.672 + }, + { + "x": -6.402, + "y": 172.65400000000002 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": -30.0, + "y": 178.0 + }, + { + "x": -27.01, + "y": 178.046 + }, + { + "x": -24.08, + "y": 178.12800000000001 + }, + { + "x": -21.27, + "y": 178.16199999999998 + }, + { + "x": -18.64, + "y": 178.064 + }, + { + "x": -16.25, + "y": 177.75 + }, + { + "x": -14.159999999999997, + "y": 177.136 + }, + { + "x": -12.430000000000003, + "y": 176.13799999999998 + }, + { + "x": -11.12, + "y": 174.672 + }, + { + "x": -10.29, + "y": 172.65400000000002 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": -30.0, + "y": 178.0 + }, + { + "x": -27.122, + "y": 178.046 + }, + { + "x": -24.496, + "y": 178.12800000000001 + }, + { + "x": -22.134, + "y": 178.16199999999998 + }, + { + "x": -20.048000000000002, + "y": 178.064 + }, + { + "x": -18.25, + "y": 177.75 + }, + { + "x": -16.752, + "y": 177.136 + }, + { + "x": -15.566000000000003, + "y": 176.13799999999998 + }, + { + "x": -14.704, + "y": 174.672 + }, + { + "x": -14.178, + "y": 172.65400000000002 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_1_1", + "endRoad": "road_1_2_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 173.21400000000003 + }, + { + "x": 14.704, + "y": 176.752 + }, + { + "x": 15.566000000000003, + "y": 180.458 + }, + { + "x": 16.752000000000002, + "y": 184.176 + }, + { + "x": 18.25, + "y": 187.75 + }, + { + "x": 20.048000000000002, + "y": 191.024 + }, + { + "x": 22.133999999999997, + "y": 193.84199999999998 + }, + { + "x": 24.496000000000002, + "y": 196.048 + }, + { + "x": 27.122, + "y": 197.486 + }, + { + "x": 30.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 173.102 + }, + { + "x": 14.704, + "y": 176.336 + }, + { + "x": 15.566000000000003, + "y": 179.594 + }, + { + "x": 16.752000000000002, + "y": 182.76799999999997 + }, + { + "x": 18.25, + "y": 185.75 + }, + { + "x": 20.048000000000002, + "y": 188.43200000000002 + }, + { + "x": 22.133999999999997, + "y": 190.706 + }, + { + "x": 24.496000000000002, + "y": 192.464 + }, + { + "x": 27.122, + "y": 193.59799999999998 + }, + { + "x": 30.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 172.99 + }, + { + "x": 14.704, + "y": 175.92000000000002 + }, + { + "x": 15.566000000000003, + "y": 178.73000000000002 + }, + { + "x": 16.752000000000002, + "y": 181.36 + }, + { + "x": 18.25, + "y": 183.75 + }, + { + "x": 20.048000000000002, + "y": 185.83999999999997 + }, + { + "x": 22.133999999999997, + "y": 187.57 + }, + { + "x": 24.496000000000002, + "y": 188.88000000000002 + }, + { + "x": 27.122, + "y": 189.71 + }, + { + "x": 30.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 172.87800000000001 + }, + { + "x": 14.704, + "y": 175.504 + }, + { + "x": 15.566000000000003, + "y": 177.86599999999999 + }, + { + "x": 16.752000000000002, + "y": 179.952 + }, + { + "x": 18.25, + "y": 181.75 + }, + { + "x": 20.048000000000002, + "y": 183.248 + }, + { + "x": 22.133999999999997, + "y": 184.434 + }, + { + "x": 24.496000000000002, + "y": 185.29600000000002 + }, + { + "x": 27.122, + "y": 185.822 + }, + { + "x": 30.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 172.76600000000002 + }, + { + "x": 14.704, + "y": 175.088 + }, + { + "x": 15.566000000000003, + "y": 177.002 + }, + { + "x": 16.752000000000002, + "y": 178.54399999999998 + }, + { + "x": 18.25, + "y": 179.75 + }, + { + "x": 20.048000000000002, + "y": 180.656 + }, + { + "x": 22.133999999999997, + "y": 181.298 + }, + { + "x": 24.496000000000002, + "y": 181.71200000000002 + }, + { + "x": 27.122, + "y": 181.934 + }, + { + "x": 30.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 14.0, + "y": 170.0 + }, + { + "x": 14.178, + "y": 172.65400000000002 + }, + { + "x": 14.704, + "y": 174.672 + }, + { + "x": 15.566000000000003, + "y": 176.138 + }, + { + "x": 16.752000000000002, + "y": 177.136 + }, + { + "x": 18.25, + "y": 177.75 + }, + { + "x": 20.048000000000002, + "y": 178.064 + }, + { + "x": 22.133999999999997, + "y": 178.162 + }, + { + "x": 24.496000000000002, + "y": 178.12800000000001 + }, + { + "x": 27.122, + "y": 178.046 + }, + { + "x": 30.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_1_1_1", + "endRoad": "road_1_2_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 6.0, + "y": 170.0 + }, + { + "x": 5.888, + "y": 173.84 + }, + { + "x": 5.5840000000000005, + "y": 179.12 + }, + { + "x": 5.136000000000001, + "y": 185.48000000000002 + }, + { + "x": 4.592, + "y": 192.56 + }, + { + "x": 4.0, + "y": 200.0 + }, + { + "x": 3.4079999999999995, + "y": 207.44 + }, + { + "x": 2.8640000000000003, + "y": 214.52 + }, + { + "x": 2.4159999999999995, + "y": 220.88000000000002 + }, + { + "x": 2.112, + "y": 226.16 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 6.0, + "y": 170.0 + }, + { + "x": 6.0, + "y": 173.84 + }, + { + "x": 6.0, + "y": 179.12 + }, + { + "x": 6.000000000000001, + "y": 185.48000000000002 + }, + { + "x": 6.0, + "y": 192.56 + }, + { + "x": 6.0, + "y": 200.0 + }, + { + "x": 6.0, + "y": 207.44 + }, + { + "x": 6.0, + "y": 214.52 + }, + { + "x": 6.0, + "y": 220.88000000000002 + }, + { + "x": 6.0, + "y": 226.16 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 6.0, + "y": 170.0 + }, + { + "x": 6.112, + "y": 173.84 + }, + { + "x": 6.416, + "y": 179.12 + }, + { + "x": 6.864000000000001, + "y": 185.48000000000002 + }, + { + "x": 7.408, + "y": 192.56 + }, + { + "x": 8.0, + "y": 200.0 + }, + { + "x": 8.592, + "y": 207.44 + }, + { + "x": 9.136, + "y": 214.52 + }, + { + "x": 9.584, + "y": 220.88000000000002 + }, + { + "x": 9.887999999999998, + "y": 226.16 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 6.0, + "y": 170.0 + }, + { + "x": 6.224, + "y": 173.84 + }, + { + "x": 6.832000000000001, + "y": 179.12 + }, + { + "x": 7.7280000000000015, + "y": 185.48000000000002 + }, + { + "x": 8.816, + "y": 192.56 + }, + { + "x": 10.0, + "y": 200.0 + }, + { + "x": 11.184000000000001, + "y": 207.44 + }, + { + "x": 12.272, + "y": 214.52 + }, + { + "x": 13.168000000000001, + "y": 220.88000000000002 + }, + { + "x": 13.776, + "y": 226.16 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 10.0, + "y": 170.0 + }, + { + "x": 9.775999999999998, + "y": 173.84 + }, + { + "x": 9.168000000000001, + "y": 179.12 + }, + { + "x": 8.272, + "y": 185.48000000000002 + }, + { + "x": 7.183999999999999, + "y": 192.56 + }, + { + "x": 6.0, + "y": 200.0 + }, + { + "x": 4.815999999999999, + "y": 207.44 + }, + { + "x": 3.7280000000000006, + "y": 214.52 + }, + { + "x": 2.831999999999999, + "y": 220.88000000000002 + }, + { + "x": 2.224, + "y": 226.16 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 10.0, + "y": 170.0 + }, + { + "x": 9.887999999999998, + "y": 173.84 + }, + { + "x": 9.584000000000001, + "y": 179.12 + }, + { + "x": 9.136, + "y": 185.48000000000002 + }, + { + "x": 8.591999999999999, + "y": 192.56 + }, + { + "x": 8.0, + "y": 200.0 + }, + { + "x": 7.4079999999999995, + "y": 207.44 + }, + { + "x": 6.864000000000001, + "y": 214.52 + }, + { + "x": 6.416, + "y": 220.88000000000002 + }, + { + "x": 6.112, + "y": 226.16 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 10.0, + "y": 170.0 + }, + { + "x": 9.999999999999998, + "y": 173.84 + }, + { + "x": 10.000000000000002, + "y": 179.12 + }, + { + "x": 10.0, + "y": 185.48000000000002 + }, + { + "x": 10.0, + "y": 192.56 + }, + { + "x": 10.0, + "y": 200.0 + }, + { + "x": 10.0, + "y": 207.44 + }, + { + "x": 10.0, + "y": 214.52 + }, + { + "x": 10.0, + "y": 220.88000000000002 + }, + { + "x": 10.0, + "y": 226.16 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 10.0, + "y": 170.0 + }, + { + "x": 10.111999999999998, + "y": 173.84 + }, + { + "x": 10.416, + "y": 179.12 + }, + { + "x": 10.864, + "y": 185.48000000000002 + }, + { + "x": 11.408, + "y": 192.56 + }, + { + "x": 12.0, + "y": 200.0 + }, + { + "x": 12.592000000000002, + "y": 207.44 + }, + { + "x": 13.136, + "y": 214.52 + }, + { + "x": 13.584000000000001, + "y": 220.88000000000002 + }, + { + "x": 13.888000000000002, + "y": 226.16 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_1_1", + "endRoad": "road_1_2_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.32600000000002 + }, + { + "x": -0.3680000000000003, + "y": 177.168 + }, + { + "x": -3.0220000000000007, + "y": 181.322 + }, + { + "x": -6.384000000000002, + "y": 185.584 + }, + { + "x": -10.25, + "y": 189.75 + }, + { + "x": -14.416000000000004, + "y": 193.61599999999999 + }, + { + "x": -18.677999999999997, + "y": 196.978 + }, + { + "x": -22.832000000000004, + "y": 199.632 + }, + { + "x": -26.674, + "y": 201.374 + }, + { + "x": -30.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.43800000000002 + }, + { + "x": -0.3680000000000003, + "y": 177.584 + }, + { + "x": -3.0220000000000007, + "y": 182.186 + }, + { + "x": -6.384000000000002, + "y": 186.992 + }, + { + "x": -10.25, + "y": 191.75 + }, + { + "x": -14.416000000000004, + "y": 196.208 + }, + { + "x": -18.677999999999997, + "y": 200.114 + }, + { + "x": -22.832000000000004, + "y": 203.216 + }, + { + "x": -26.674, + "y": 205.262 + }, + { + "x": -30.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.55 + }, + { + "x": -0.3680000000000003, + "y": 178.0 + }, + { + "x": -3.0220000000000007, + "y": 183.05 + }, + { + "x": -6.384000000000002, + "y": 188.39999999999998 + }, + { + "x": -10.25, + "y": 193.75 + }, + { + "x": -14.416000000000004, + "y": 198.8 + }, + { + "x": -18.677999999999997, + "y": 203.25 + }, + { + "x": -22.832000000000004, + "y": 206.8 + }, + { + "x": -26.674, + "y": 209.15 + }, + { + "x": -30.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.662 + }, + { + "x": -0.3680000000000003, + "y": 178.416 + }, + { + "x": -3.0220000000000007, + "y": 183.914 + }, + { + "x": -6.384000000000002, + "y": 189.808 + }, + { + "x": -10.25, + "y": 195.75 + }, + { + "x": -14.416000000000004, + "y": 201.392 + }, + { + "x": -18.677999999999997, + "y": 206.386 + }, + { + "x": -22.832000000000004, + "y": 210.38400000000001 + }, + { + "x": -26.674, + "y": 213.03799999999998 + }, + { + "x": -30.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.77400000000003 + }, + { + "x": -0.3680000000000003, + "y": 178.832 + }, + { + "x": -3.0220000000000007, + "y": 184.77800000000002 + }, + { + "x": -6.384000000000002, + "y": 191.216 + }, + { + "x": -10.25, + "y": 197.75 + }, + { + "x": -14.416000000000004, + "y": 203.984 + }, + { + "x": -18.677999999999997, + "y": 209.522 + }, + { + "x": -22.832000000000004, + "y": 213.96800000000002 + }, + { + "x": -26.674, + "y": 216.926 + }, + { + "x": -30.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 2.0, + "y": 170.0 + }, + { + "x": 1.3739999999999999, + "y": 173.88600000000002 + }, + { + "x": -0.3680000000000003, + "y": 179.248 + }, + { + "x": -3.0220000000000007, + "y": 185.642 + }, + { + "x": -6.384000000000002, + "y": 192.624 + }, + { + "x": -10.25, + "y": 199.75 + }, + { + "x": -14.416000000000004, + "y": 206.576 + }, + { + "x": -18.677999999999997, + "y": 212.658 + }, + { + "x": -22.832000000000004, + "y": 217.55200000000002 + }, + { + "x": -26.674, + "y": 220.814 + }, + { + "x": -30.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_2_2", + "endRoad": "road_1_2_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.786, + "y": 218.06599999999997 + }, + { + "x": 23.247999999999998, + "y": 218.288 + }, + { + "x": 19.541999999999998, + "y": 218.70200000000003 + }, + { + "x": 15.824, + "y": 219.344 + }, + { + "x": 12.25, + "y": 220.25 + }, + { + "x": 8.975999999999996, + "y": 221.45600000000002 + }, + { + "x": 6.158000000000003, + "y": 222.99800000000002 + }, + { + "x": 3.9519999999999986, + "y": 224.912 + }, + { + "x": 2.5140000000000002, + "y": 227.234 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.898, + "y": 218.06599999999997 + }, + { + "x": 23.663999999999998, + "y": 218.288 + }, + { + "x": 20.406, + "y": 218.70200000000003 + }, + { + "x": 17.232, + "y": 219.344 + }, + { + "x": 14.25, + "y": 220.25 + }, + { + "x": 11.567999999999998, + "y": 221.45600000000002 + }, + { + "x": 9.294000000000004, + "y": 222.99800000000002 + }, + { + "x": 7.536, + "y": 224.912 + }, + { + "x": 6.402, + "y": 227.234 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 27.01, + "y": 218.06599999999997 + }, + { + "x": 24.08, + "y": 218.288 + }, + { + "x": 21.27, + "y": 218.70200000000003 + }, + { + "x": 18.64, + "y": 219.344 + }, + { + "x": 16.25, + "y": 220.25 + }, + { + "x": 14.159999999999997, + "y": 221.45600000000002 + }, + { + "x": 12.430000000000003, + "y": 222.99800000000002 + }, + { + "x": 11.12, + "y": 224.912 + }, + { + "x": 10.29, + "y": 227.234 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 27.122, + "y": 218.06599999999997 + }, + { + "x": 24.496, + "y": 218.288 + }, + { + "x": 22.134, + "y": 218.70200000000003 + }, + { + "x": 20.048000000000002, + "y": 219.344 + }, + { + "x": 18.25, + "y": 220.25 + }, + { + "x": 16.752, + "y": 221.45600000000002 + }, + { + "x": 15.566000000000003, + "y": 222.99800000000002 + }, + { + "x": 14.704, + "y": 224.912 + }, + { + "x": 14.178, + "y": 227.234 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 222.0 + }, + { + "x": 26.786, + "y": 221.95399999999998 + }, + { + "x": 23.247999999999998, + "y": 221.872 + }, + { + "x": 19.541999999999998, + "y": 221.83800000000002 + }, + { + "x": 15.824, + "y": 221.93599999999998 + }, + { + "x": 12.25, + "y": 222.25 + }, + { + "x": 8.975999999999996, + "y": 222.864 + }, + { + "x": 6.158000000000003, + "y": 223.86200000000002 + }, + { + "x": 3.9519999999999986, + "y": 225.328 + }, + { + "x": 2.5140000000000002, + "y": 227.346 + }, + { + "x": 2.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 222.0 + }, + { + "x": 26.898, + "y": 221.95399999999998 + }, + { + "x": 23.663999999999998, + "y": 221.872 + }, + { + "x": 20.406, + "y": 221.83800000000002 + }, + { + "x": 17.232, + "y": 221.93599999999998 + }, + { + "x": 14.25, + "y": 222.25 + }, + { + "x": 11.567999999999998, + "y": 222.864 + }, + { + "x": 9.294000000000004, + "y": 223.86200000000002 + }, + { + "x": 7.536, + "y": 225.328 + }, + { + "x": 6.402, + "y": 227.346 + }, + { + "x": 6.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 222.0 + }, + { + "x": 27.01, + "y": 221.95399999999998 + }, + { + "x": 24.08, + "y": 221.872 + }, + { + "x": 21.27, + "y": 221.83800000000002 + }, + { + "x": 18.64, + "y": 221.93599999999998 + }, + { + "x": 16.25, + "y": 222.25 + }, + { + "x": 14.159999999999997, + "y": 222.864 + }, + { + "x": 12.430000000000003, + "y": 223.86200000000002 + }, + { + "x": 11.12, + "y": 225.328 + }, + { + "x": 10.29, + "y": 227.346 + }, + { + "x": 10.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 222.0 + }, + { + "x": 27.122, + "y": 221.95399999999998 + }, + { + "x": 24.496, + "y": 221.872 + }, + { + "x": 22.134, + "y": 221.83800000000002 + }, + { + "x": 20.048000000000002, + "y": 221.93599999999998 + }, + { + "x": 18.25, + "y": 222.25 + }, + { + "x": 16.752, + "y": 222.864 + }, + { + "x": 15.566000000000003, + "y": 223.86200000000002 + }, + { + "x": 14.704, + "y": 225.328 + }, + { + "x": 14.178, + "y": 227.346 + }, + { + "x": 14.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_2_2", + "endRoad": "road_1_2_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 209.776 + }, + { + "x": 20.88, + "y": 209.168 + }, + { + "x": 14.52, + "y": 208.27200000000002 + }, + { + "x": 7.439999999999998, + "y": 207.184 + }, + { + "x": 0.0, + "y": 206.0 + }, + { + "x": -7.440000000000009, + "y": 204.81599999999997 + }, + { + "x": -14.519999999999992, + "y": 203.728 + }, + { + "x": -20.880000000000006, + "y": 202.832 + }, + { + "x": -26.16, + "y": 202.224 + }, + { + "x": -30.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 209.888 + }, + { + "x": 20.88, + "y": 209.584 + }, + { + "x": 14.52, + "y": 209.13600000000002 + }, + { + "x": 7.439999999999998, + "y": 208.59199999999998 + }, + { + "x": 0.0, + "y": 208.0 + }, + { + "x": -7.440000000000009, + "y": 207.40800000000002 + }, + { + "x": -14.519999999999992, + "y": 206.864 + }, + { + "x": -20.880000000000006, + "y": 206.416 + }, + { + "x": -26.16, + "y": 206.112 + }, + { + "x": -30.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 210.0 + }, + { + "x": 20.88, + "y": 210.0 + }, + { + "x": 14.52, + "y": 210.00000000000003 + }, + { + "x": 7.439999999999998, + "y": 210.0 + }, + { + "x": 0.0, + "y": 210.0 + }, + { + "x": -7.440000000000009, + "y": 210.0 + }, + { + "x": -14.519999999999992, + "y": 210.0 + }, + { + "x": -20.880000000000006, + "y": 210.0 + }, + { + "x": -26.16, + "y": 210.0 + }, + { + "x": -30.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 210.112 + }, + { + "x": 20.88, + "y": 210.416 + }, + { + "x": 14.52, + "y": 210.86400000000003 + }, + { + "x": 7.439999999999998, + "y": 211.40800000000002 + }, + { + "x": 0.0, + "y": 212.0 + }, + { + "x": -7.440000000000009, + "y": 212.59199999999998 + }, + { + "x": -14.519999999999992, + "y": 213.136 + }, + { + "x": -20.880000000000006, + "y": 213.584 + }, + { + "x": -26.16, + "y": 213.88799999999998 + }, + { + "x": -30.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 210.22400000000002 + }, + { + "x": 20.88, + "y": 210.832 + }, + { + "x": 14.52, + "y": 211.728 + }, + { + "x": 7.439999999999998, + "y": 212.816 + }, + { + "x": 0.0, + "y": 214.0 + }, + { + "x": -7.440000000000009, + "y": 215.18400000000003 + }, + { + "x": -14.519999999999992, + "y": 216.272 + }, + { + "x": -20.880000000000006, + "y": 217.168 + }, + { + "x": -26.16, + "y": 217.77599999999998 + }, + { + "x": -30.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 210.0 + }, + { + "x": 26.16, + "y": 210.336 + }, + { + "x": 20.88, + "y": 211.248 + }, + { + "x": 14.52, + "y": 212.592 + }, + { + "x": 7.439999999999998, + "y": 214.224 + }, + { + "x": 0.0, + "y": 216.0 + }, + { + "x": -7.440000000000009, + "y": 217.776 + }, + { + "x": -14.519999999999992, + "y": 219.408 + }, + { + "x": -20.880000000000006, + "y": 220.752 + }, + { + "x": -26.16, + "y": 221.664 + }, + { + "x": -30.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 213.664 + }, + { + "x": 20.88, + "y": 212.752 + }, + { + "x": 14.52, + "y": 211.40800000000002 + }, + { + "x": 7.439999999999998, + "y": 209.77599999999998 + }, + { + "x": 0.0, + "y": 208.0 + }, + { + "x": -7.440000000000009, + "y": 206.224 + }, + { + "x": -14.519999999999992, + "y": 204.592 + }, + { + "x": -20.880000000000006, + "y": 203.248 + }, + { + "x": -26.16, + "y": 202.336 + }, + { + "x": -30.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 213.77599999999998 + }, + { + "x": 20.88, + "y": 213.168 + }, + { + "x": 14.52, + "y": 212.27200000000002 + }, + { + "x": 7.439999999999998, + "y": 211.18399999999997 + }, + { + "x": 0.0, + "y": 210.0 + }, + { + "x": -7.440000000000009, + "y": 208.816 + }, + { + "x": -14.519999999999992, + "y": 207.728 + }, + { + "x": -20.880000000000006, + "y": 206.832 + }, + { + "x": -26.16, + "y": 206.22400000000002 + }, + { + "x": -30.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 213.88799999999998 + }, + { + "x": 20.88, + "y": 213.584 + }, + { + "x": 14.52, + "y": 213.13600000000002 + }, + { + "x": 7.439999999999998, + "y": 212.59199999999998 + }, + { + "x": 0.0, + "y": 212.0 + }, + { + "x": -7.440000000000009, + "y": 211.40800000000002 + }, + { + "x": -14.519999999999992, + "y": 210.864 + }, + { + "x": -20.880000000000006, + "y": 210.416 + }, + { + "x": -26.16, + "y": 210.11200000000002 + }, + { + "x": -30.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 213.99999999999997 + }, + { + "x": 20.88, + "y": 214.0 + }, + { + "x": 14.52, + "y": 214.0 + }, + { + "x": 7.439999999999998, + "y": 214.0 + }, + { + "x": 0.0, + "y": 214.0 + }, + { + "x": -7.440000000000009, + "y": 214.0 + }, + { + "x": -14.519999999999992, + "y": 214.0 + }, + { + "x": -20.880000000000006, + "y": 214.0 + }, + { + "x": -26.16, + "y": 214.0 + }, + { + "x": -30.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 214.112 + }, + { + "x": 20.88, + "y": 214.416 + }, + { + "x": 14.52, + "y": 214.86400000000003 + }, + { + "x": 7.439999999999998, + "y": 215.408 + }, + { + "x": 0.0, + "y": 216.0 + }, + { + "x": -7.440000000000009, + "y": 216.592 + }, + { + "x": -14.519999999999992, + "y": 217.136 + }, + { + "x": -20.880000000000006, + "y": 217.584 + }, + { + "x": -26.16, + "y": 217.888 + }, + { + "x": -30.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 214.0 + }, + { + "x": 26.16, + "y": 214.224 + }, + { + "x": 20.88, + "y": 214.832 + }, + { + "x": 14.52, + "y": 215.728 + }, + { + "x": 7.439999999999998, + "y": 216.81599999999997 + }, + { + "x": 0.0, + "y": 218.0 + }, + { + "x": -7.440000000000009, + "y": 219.184 + }, + { + "x": -14.519999999999992, + "y": 220.272 + }, + { + "x": -20.880000000000006, + "y": 221.168 + }, + { + "x": -26.16, + "y": 221.776 + }, + { + "x": -30.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 217.552 + }, + { + "x": 20.88, + "y": 216.336 + }, + { + "x": 14.52, + "y": 214.544 + }, + { + "x": 7.439999999999998, + "y": 212.368 + }, + { + "x": 0.0, + "y": 210.0 + }, + { + "x": -7.440000000000009, + "y": 207.632 + }, + { + "x": -14.519999999999992, + "y": 205.45600000000002 + }, + { + "x": -20.880000000000006, + "y": 203.664 + }, + { + "x": -26.16, + "y": 202.448 + }, + { + "x": -30.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 217.664 + }, + { + "x": 20.88, + "y": 216.752 + }, + { + "x": 14.52, + "y": 215.40800000000002 + }, + { + "x": 7.439999999999998, + "y": 213.776 + }, + { + "x": 0.0, + "y": 212.0 + }, + { + "x": -7.440000000000009, + "y": 210.224 + }, + { + "x": -14.519999999999992, + "y": 208.592 + }, + { + "x": -20.880000000000006, + "y": 207.248 + }, + { + "x": -26.16, + "y": 206.336 + }, + { + "x": -30.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 217.77599999999998 + }, + { + "x": 20.88, + "y": 217.168 + }, + { + "x": 14.52, + "y": 216.27200000000002 + }, + { + "x": 7.439999999999998, + "y": 215.184 + }, + { + "x": 0.0, + "y": 214.0 + }, + { + "x": -7.440000000000009, + "y": 212.81600000000003 + }, + { + "x": -14.519999999999992, + "y": 211.728 + }, + { + "x": -20.880000000000006, + "y": 210.832 + }, + { + "x": -26.16, + "y": 210.22400000000002 + }, + { + "x": -30.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 217.88799999999998 + }, + { + "x": 20.88, + "y": 217.584 + }, + { + "x": 14.52, + "y": 217.13600000000002 + }, + { + "x": 7.439999999999998, + "y": 216.59199999999998 + }, + { + "x": 0.0, + "y": 216.0 + }, + { + "x": -7.440000000000009, + "y": 215.40800000000002 + }, + { + "x": -14.519999999999992, + "y": 214.864 + }, + { + "x": -20.880000000000006, + "y": 214.416 + }, + { + "x": -26.16, + "y": 214.112 + }, + { + "x": -30.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 218.0 + }, + { + "x": 20.88, + "y": 218.0 + }, + { + "x": 14.52, + "y": 218.0 + }, + { + "x": 7.439999999999998, + "y": 218.0 + }, + { + "x": 0.0, + "y": 218.0 + }, + { + "x": -7.440000000000009, + "y": 218.0 + }, + { + "x": -14.519999999999992, + "y": 218.0 + }, + { + "x": -20.880000000000006, + "y": 218.0 + }, + { + "x": -26.16, + "y": 218.0 + }, + { + "x": -30.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 30.0, + "y": 218.0 + }, + { + "x": 26.16, + "y": 218.112 + }, + { + "x": 20.88, + "y": 218.416 + }, + { + "x": 14.52, + "y": 218.864 + }, + { + "x": 7.439999999999998, + "y": 219.40800000000002 + }, + { + "x": 0.0, + "y": 220.0 + }, + { + "x": -7.440000000000009, + "y": 220.59199999999998 + }, + { + "x": -14.519999999999992, + "y": 221.136 + }, + { + "x": -20.880000000000006, + "y": 221.584 + }, + { + "x": -26.16, + "y": 221.888 + }, + { + "x": -30.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_2_2", + "endRoad": "road_1_2_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 202.0 + }, + { + "x": 26.674, + "y": 201.374 + }, + { + "x": 22.832, + "y": 199.632 + }, + { + "x": 18.678, + "y": 196.97799999999998 + }, + { + "x": 14.415999999999999, + "y": 193.61599999999999 + }, + { + "x": 10.25, + "y": 189.75 + }, + { + "x": 6.383999999999996, + "y": 185.584 + }, + { + "x": 3.022000000000004, + "y": 181.32199999999997 + }, + { + "x": 0.3679999999999981, + "y": 177.168 + }, + { + "x": -1.3739999999999994, + "y": 173.32600000000002 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 202.0 + }, + { + "x": 26.562, + "y": 201.374 + }, + { + "x": 22.416, + "y": 199.632 + }, + { + "x": 17.814, + "y": 196.97799999999998 + }, + { + "x": 13.008, + "y": 193.61599999999999 + }, + { + "x": 8.25, + "y": 189.75 + }, + { + "x": 3.7919999999999954, + "y": 185.584 + }, + { + "x": -0.11399999999999633, + "y": 181.32199999999997 + }, + { + "x": -3.216000000000003, + "y": 177.168 + }, + { + "x": -5.262, + "y": 173.32600000000002 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 202.0 + }, + { + "x": 26.45, + "y": 201.374 + }, + { + "x": 22.0, + "y": 199.632 + }, + { + "x": 16.95, + "y": 196.97799999999998 + }, + { + "x": 11.599999999999998, + "y": 193.61599999999999 + }, + { + "x": 6.25, + "y": 189.75 + }, + { + "x": 1.1999999999999948, + "y": 185.584 + }, + { + "x": -3.2499999999999956, + "y": 181.32199999999997 + }, + { + "x": -6.8000000000000025, + "y": 177.168 + }, + { + "x": -9.149999999999999, + "y": 173.32600000000002 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 202.0 + }, + { + "x": 26.338, + "y": 201.374 + }, + { + "x": 21.584, + "y": 199.632 + }, + { + "x": 16.086, + "y": 196.97799999999998 + }, + { + "x": 10.191999999999998, + "y": 193.61599999999999 + }, + { + "x": 4.25, + "y": 189.75 + }, + { + "x": -1.3920000000000066, + "y": 185.584 + }, + { + "x": -6.385999999999996, + "y": 181.32199999999997 + }, + { + "x": -10.384000000000004, + "y": 177.168 + }, + { + "x": -13.038, + "y": 173.32600000000002 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 30.0, + "y": 206.0 + }, + { + "x": 26.674, + "y": 205.262 + }, + { + "x": 22.832, + "y": 203.216 + }, + { + "x": 18.678, + "y": 200.114 + }, + { + "x": 14.415999999999999, + "y": 196.20799999999997 + }, + { + "x": 10.25, + "y": 191.75 + }, + { + "x": 6.383999999999996, + "y": 186.992 + }, + { + "x": 3.022000000000004, + "y": 182.18599999999998 + }, + { + "x": 0.3679999999999981, + "y": 177.584 + }, + { + "x": -1.3739999999999994, + "y": 173.43800000000002 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 30.0, + "y": 206.0 + }, + { + "x": 26.562, + "y": 205.262 + }, + { + "x": 22.416, + "y": 203.216 + }, + { + "x": 17.814, + "y": 200.114 + }, + { + "x": 13.008, + "y": 196.20799999999997 + }, + { + "x": 8.25, + "y": 191.75 + }, + { + "x": 3.7919999999999954, + "y": 186.992 + }, + { + "x": -0.11399999999999633, + "y": 182.18599999999998 + }, + { + "x": -3.216000000000003, + "y": 177.584 + }, + { + "x": -5.262, + "y": 173.43800000000002 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 30.0, + "y": 206.0 + }, + { + "x": 26.45, + "y": 205.262 + }, + { + "x": 22.0, + "y": 203.216 + }, + { + "x": 16.95, + "y": 200.114 + }, + { + "x": 11.599999999999998, + "y": 196.20799999999997 + }, + { + "x": 6.25, + "y": 191.75 + }, + { + "x": 1.1999999999999948, + "y": 186.992 + }, + { + "x": -3.2499999999999956, + "y": 182.18599999999998 + }, + { + "x": -6.8000000000000025, + "y": 177.584 + }, + { + "x": -9.149999999999999, + "y": 173.43800000000002 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 30.0, + "y": 206.0 + }, + { + "x": 26.338, + "y": 205.262 + }, + { + "x": 21.584, + "y": 203.216 + }, + { + "x": 16.086, + "y": 200.114 + }, + { + "x": 10.191999999999998, + "y": 196.20799999999997 + }, + { + "x": 4.25, + "y": 191.75 + }, + { + "x": -1.3920000000000066, + "y": 186.992 + }, + { + "x": -6.385999999999996, + "y": 182.18599999999998 + }, + { + "x": -10.384000000000004, + "y": 177.584 + }, + { + "x": -13.038, + "y": 173.43800000000002 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_3_3", + "endRoad": "road_1_2_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.674 + }, + { + "x": 0.3680000000000003, + "y": 222.83200000000002 + }, + { + "x": 3.0220000000000007, + "y": 218.678 + }, + { + "x": 6.384000000000002, + "y": 214.416 + }, + { + "x": 10.25, + "y": 210.25 + }, + { + "x": 14.416000000000004, + "y": 206.38400000000001 + }, + { + "x": 18.677999999999997, + "y": 203.022 + }, + { + "x": 22.832000000000004, + "y": 200.368 + }, + { + "x": 26.674, + "y": 198.626 + }, + { + "x": 30.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.56199999999998 + }, + { + "x": 0.3680000000000003, + "y": 222.41600000000003 + }, + { + "x": 3.0220000000000007, + "y": 217.814 + }, + { + "x": 6.384000000000002, + "y": 213.008 + }, + { + "x": 10.25, + "y": 208.25 + }, + { + "x": 14.416000000000004, + "y": 203.792 + }, + { + "x": 18.677999999999997, + "y": 199.886 + }, + { + "x": 22.832000000000004, + "y": 196.784 + }, + { + "x": 26.674, + "y": 194.738 + }, + { + "x": 30.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.45 + }, + { + "x": 0.3680000000000003, + "y": 222.0 + }, + { + "x": 3.0220000000000007, + "y": 216.95 + }, + { + "x": 6.384000000000002, + "y": 211.60000000000002 + }, + { + "x": 10.25, + "y": 206.25 + }, + { + "x": 14.416000000000004, + "y": 201.2 + }, + { + "x": 18.677999999999997, + "y": 196.75 + }, + { + "x": 22.832000000000004, + "y": 193.20000000000002 + }, + { + "x": 26.674, + "y": 190.85000000000002 + }, + { + "x": 30.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.338 + }, + { + "x": 0.3680000000000003, + "y": 221.584 + }, + { + "x": 3.0220000000000007, + "y": 216.086 + }, + { + "x": 6.384000000000002, + "y": 210.192 + }, + { + "x": 10.25, + "y": 204.25 + }, + { + "x": 14.416000000000004, + "y": 198.608 + }, + { + "x": 18.677999999999997, + "y": 193.614 + }, + { + "x": 22.832000000000004, + "y": 189.616 + }, + { + "x": 26.674, + "y": 186.96200000000002 + }, + { + "x": 30.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.226 + }, + { + "x": 0.3680000000000003, + "y": 221.168 + }, + { + "x": 3.0220000000000007, + "y": 215.222 + }, + { + "x": 6.384000000000002, + "y": 208.78400000000002 + }, + { + "x": 10.25, + "y": 202.25 + }, + { + "x": 14.416000000000004, + "y": 196.016 + }, + { + "x": 18.677999999999997, + "y": 190.478 + }, + { + "x": 22.832000000000004, + "y": 186.032 + }, + { + "x": 26.674, + "y": 183.074 + }, + { + "x": 30.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": -2.0, + "y": 230.0 + }, + { + "x": -1.3739999999999999, + "y": 226.114 + }, + { + "x": 0.3680000000000003, + "y": 220.752 + }, + { + "x": 3.0220000000000007, + "y": 214.358 + }, + { + "x": 6.384000000000002, + "y": 207.376 + }, + { + "x": 10.25, + "y": 200.25 + }, + { + "x": 14.416000000000004, + "y": 193.42399999999998 + }, + { + "x": 18.677999999999997, + "y": 187.342 + }, + { + "x": 22.832000000000004, + "y": 182.448 + }, + { + "x": 26.674, + "y": 179.186 + }, + { + "x": 30.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_3_3", + "endRoad": "road_1_2_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 226.786 + }, + { + "x": -14.704, + "y": 223.24800000000002 + }, + { + "x": -15.566000000000003, + "y": 219.542 + }, + { + "x": -16.752000000000002, + "y": 215.824 + }, + { + "x": -18.25, + "y": 212.25 + }, + { + "x": -20.048000000000002, + "y": 208.976 + }, + { + "x": -22.133999999999997, + "y": 206.15800000000002 + }, + { + "x": -24.496000000000002, + "y": 203.952 + }, + { + "x": -27.122, + "y": 202.514 + }, + { + "x": -30.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 226.898 + }, + { + "x": -14.704, + "y": 223.66400000000002 + }, + { + "x": -15.566000000000003, + "y": 220.406 + }, + { + "x": -16.752000000000002, + "y": 217.23200000000003 + }, + { + "x": -18.25, + "y": 214.25 + }, + { + "x": -20.048000000000002, + "y": 211.56799999999998 + }, + { + "x": -22.133999999999997, + "y": 209.294 + }, + { + "x": -24.496000000000002, + "y": 207.536 + }, + { + "x": -27.122, + "y": 206.40200000000002 + }, + { + "x": -30.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 227.01 + }, + { + "x": -14.704, + "y": 224.08 + }, + { + "x": -15.566000000000003, + "y": 221.27 + }, + { + "x": -16.752000000000002, + "y": 218.64000000000001 + }, + { + "x": -18.25, + "y": 216.25 + }, + { + "x": -20.048000000000002, + "y": 214.16000000000003 + }, + { + "x": -22.133999999999997, + "y": 212.43 + }, + { + "x": -24.496000000000002, + "y": 211.12 + }, + { + "x": -27.122, + "y": 210.29000000000002 + }, + { + "x": -30.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 227.12199999999999 + }, + { + "x": -14.704, + "y": 224.496 + }, + { + "x": -15.566000000000003, + "y": 222.13400000000001 + }, + { + "x": -16.752000000000002, + "y": 220.048 + }, + { + "x": -18.25, + "y": 218.25 + }, + { + "x": -20.048000000000002, + "y": 216.752 + }, + { + "x": -22.133999999999997, + "y": 215.566 + }, + { + "x": -24.496000000000002, + "y": 214.704 + }, + { + "x": -27.122, + "y": 214.178 + }, + { + "x": -30.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 227.234 + }, + { + "x": -14.704, + "y": 224.912 + }, + { + "x": -15.566000000000003, + "y": 222.998 + }, + { + "x": -16.752000000000002, + "y": 221.45600000000002 + }, + { + "x": -18.25, + "y": 220.25 + }, + { + "x": -20.048000000000002, + "y": 219.344 + }, + { + "x": -22.133999999999997, + "y": 218.702 + }, + { + "x": -24.496000000000002, + "y": 218.288 + }, + { + "x": -27.122, + "y": 218.066 + }, + { + "x": -30.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": -14.0, + "y": 230.0 + }, + { + "x": -14.178, + "y": 227.346 + }, + { + "x": -14.704, + "y": 225.328 + }, + { + "x": -15.566000000000003, + "y": 223.862 + }, + { + "x": -16.752000000000002, + "y": 222.86400000000003 + }, + { + "x": -18.25, + "y": 222.25 + }, + { + "x": -20.048000000000002, + "y": 221.93599999999998 + }, + { + "x": -22.133999999999997, + "y": 221.838 + }, + { + "x": -24.496000000000002, + "y": 221.872 + }, + { + "x": -27.122, + "y": 221.954 + }, + { + "x": -30.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_1_3_3", + "endRoad": "road_1_2_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": -6.0, + "y": 230.0 + }, + { + "x": -5.888, + "y": 226.16 + }, + { + "x": -5.5840000000000005, + "y": 220.88000000000002 + }, + { + "x": -5.136000000000001, + "y": 214.51999999999998 + }, + { + "x": -4.592, + "y": 207.44 + }, + { + "x": -4.0, + "y": 200.0 + }, + { + "x": -3.4079999999999995, + "y": 192.56 + }, + { + "x": -2.8640000000000003, + "y": 185.48 + }, + { + "x": -2.4159999999999995, + "y": 179.12 + }, + { + "x": -2.112, + "y": 173.84000000000003 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": -6.0, + "y": 230.0 + }, + { + "x": -6.0, + "y": 226.16 + }, + { + "x": -6.0, + "y": 220.88000000000002 + }, + { + "x": -6.000000000000001, + "y": 214.51999999999998 + }, + { + "x": -6.0, + "y": 207.44 + }, + { + "x": -6.0, + "y": 200.0 + }, + { + "x": -6.0, + "y": 192.56 + }, + { + "x": -6.0, + "y": 185.48 + }, + { + "x": -6.0, + "y": 179.12 + }, + { + "x": -6.0, + "y": 173.84000000000003 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": -6.0, + "y": 230.0 + }, + { + "x": -6.112, + "y": 226.16 + }, + { + "x": -6.416, + "y": 220.88000000000002 + }, + { + "x": -6.864000000000001, + "y": 214.51999999999998 + }, + { + "x": -7.408, + "y": 207.44 + }, + { + "x": -8.0, + "y": 200.0 + }, + { + "x": -8.592, + "y": 192.56 + }, + { + "x": -9.136, + "y": 185.48 + }, + { + "x": -9.584, + "y": 179.12 + }, + { + "x": -9.887999999999998, + "y": 173.84000000000003 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": -6.0, + "y": 230.0 + }, + { + "x": -6.224, + "y": 226.16 + }, + { + "x": -6.832000000000001, + "y": 220.88000000000002 + }, + { + "x": -7.7280000000000015, + "y": 214.51999999999998 + }, + { + "x": -8.816, + "y": 207.44 + }, + { + "x": -10.0, + "y": 200.0 + }, + { + "x": -11.184000000000001, + "y": 192.56 + }, + { + "x": -12.272, + "y": 185.48 + }, + { + "x": -13.168000000000001, + "y": 179.12 + }, + { + "x": -13.776, + "y": 173.84000000000003 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": -10.0, + "y": 230.0 + }, + { + "x": -9.775999999999998, + "y": 226.16 + }, + { + "x": -9.168000000000001, + "y": 220.88000000000002 + }, + { + "x": -8.272, + "y": 214.51999999999998 + }, + { + "x": -7.183999999999999, + "y": 207.44 + }, + { + "x": -6.0, + "y": 200.0 + }, + { + "x": -4.815999999999999, + "y": 192.56 + }, + { + "x": -3.7280000000000006, + "y": 185.48 + }, + { + "x": -2.831999999999999, + "y": 179.12 + }, + { + "x": -2.224, + "y": 173.84000000000003 + }, + { + "x": -2.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": -10.0, + "y": 230.0 + }, + { + "x": -9.887999999999998, + "y": 226.16 + }, + { + "x": -9.584000000000001, + "y": 220.88000000000002 + }, + { + "x": -9.136, + "y": 214.51999999999998 + }, + { + "x": -8.591999999999999, + "y": 207.44 + }, + { + "x": -8.0, + "y": 200.0 + }, + { + "x": -7.4079999999999995, + "y": 192.56 + }, + { + "x": -6.864000000000001, + "y": 185.48 + }, + { + "x": -6.416, + "y": 179.12 + }, + { + "x": -6.112, + "y": 173.84000000000003 + }, + { + "x": -6.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": -10.0, + "y": 230.0 + }, + { + "x": -9.999999999999998, + "y": 226.16 + }, + { + "x": -10.000000000000002, + "y": 220.88000000000002 + }, + { + "x": -10.0, + "y": 214.51999999999998 + }, + { + "x": -10.0, + "y": 207.44 + }, + { + "x": -10.0, + "y": 200.0 + }, + { + "x": -10.0, + "y": 192.56 + }, + { + "x": -10.0, + "y": 185.48 + }, + { + "x": -10.0, + "y": 179.12 + }, + { + "x": -10.0, + "y": 173.84000000000003 + }, + { + "x": -10.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": -10.0, + "y": 230.0 + }, + { + "x": -10.111999999999998, + "y": 226.16 + }, + { + "x": -10.416, + "y": 220.88000000000002 + }, + { + "x": -10.864, + "y": 214.51999999999998 + }, + { + "x": -11.408, + "y": 207.44 + }, + { + "x": -12.0, + "y": 200.0 + }, + { + "x": -12.592000000000002, + "y": 192.56 + }, + { + "x": -13.136, + "y": 185.48 + }, + { + "x": -13.584000000000001, + "y": 179.12 + }, + { + "x": -13.888000000000002, + "y": 173.84000000000003 + }, + { + "x": -14.0, + "y": 170.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_2_2", + "point": { + "x": 300, + "y": 200 + }, + "width": 30, + "roads": [ + "road_1_2_0", + "road_2_1_1", + "road_3_2_2", + "road_2_3_3", + "road_2_2_0", + "road_2_2_1", + "road_2_2_2", + "road_2_2_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_1_2_0", + "endRoad": "road_2_2_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 190.22400000000002 + }, + { + "x": 279.12000000000006, + "y": 190.83200000000002 + }, + { + "x": 285.48, + "y": 191.728 + }, + { + "x": 292.56, + "y": 192.81599999999997 + }, + { + "x": 300.0, + "y": 194.0 + }, + { + "x": 307.44, + "y": 195.18400000000003 + }, + { + "x": 314.52, + "y": 196.272 + }, + { + "x": 320.88000000000005, + "y": 197.168 + }, + { + "x": 326.15999999999997, + "y": 197.77599999999998 + }, + { + "x": 330.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 190.112 + }, + { + "x": 279.12000000000006, + "y": 190.41600000000003 + }, + { + "x": 285.48, + "y": 190.864 + }, + { + "x": 292.56, + "y": 191.408 + }, + { + "x": 300.0, + "y": 192.0 + }, + { + "x": 307.44, + "y": 192.592 + }, + { + "x": 314.52, + "y": 193.136 + }, + { + "x": 320.88000000000005, + "y": 193.584 + }, + { + "x": 326.15999999999997, + "y": 193.88799999999998 + }, + { + "x": 330.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 190.0 + }, + { + "x": 279.12000000000006, + "y": 190.0 + }, + { + "x": 285.48, + "y": 190.0 + }, + { + "x": 292.56, + "y": 190.0 + }, + { + "x": 300.0, + "y": 190.0 + }, + { + "x": 307.44, + "y": 190.0 + }, + { + "x": 314.52, + "y": 190.0 + }, + { + "x": 320.88000000000005, + "y": 190.0 + }, + { + "x": 326.15999999999997, + "y": 190.0 + }, + { + "x": 330.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 189.888 + }, + { + "x": 279.12000000000006, + "y": 189.584 + }, + { + "x": 285.48, + "y": 189.13600000000002 + }, + { + "x": 292.56, + "y": 188.59199999999998 + }, + { + "x": 300.0, + "y": 188.0 + }, + { + "x": 307.44, + "y": 187.40800000000002 + }, + { + "x": 314.52, + "y": 186.864 + }, + { + "x": 320.88000000000005, + "y": 186.416 + }, + { + "x": 326.15999999999997, + "y": 186.112 + }, + { + "x": 330.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 189.776 + }, + { + "x": 279.12000000000006, + "y": 189.168 + }, + { + "x": 285.48, + "y": 188.27200000000002 + }, + { + "x": 292.56, + "y": 187.184 + }, + { + "x": 300.0, + "y": 186.0 + }, + { + "x": 307.44, + "y": 184.816 + }, + { + "x": 314.52, + "y": 183.728 + }, + { + "x": 320.88000000000005, + "y": 182.832 + }, + { + "x": 326.15999999999997, + "y": 182.224 + }, + { + "x": 330.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": 190.0 + }, + { + "x": 273.84000000000003, + "y": 189.66400000000002 + }, + { + "x": 279.12000000000006, + "y": 188.752 + }, + { + "x": 285.48, + "y": 187.40800000000002 + }, + { + "x": 292.56, + "y": 185.77599999999998 + }, + { + "x": 300.0, + "y": 184.0 + }, + { + "x": 307.44, + "y": 182.224 + }, + { + "x": 314.52, + "y": 180.592 + }, + { + "x": 320.88000000000005, + "y": 179.248 + }, + { + "x": 326.15999999999997, + "y": 178.33599999999998 + }, + { + "x": 330.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 186.336 + }, + { + "x": 279.12000000000006, + "y": 187.24800000000002 + }, + { + "x": 285.48, + "y": 188.592 + }, + { + "x": 292.56, + "y": 190.224 + }, + { + "x": 300.0, + "y": 192.0 + }, + { + "x": 307.44, + "y": 193.776 + }, + { + "x": 314.52, + "y": 195.408 + }, + { + "x": 320.88000000000005, + "y": 196.75199999999998 + }, + { + "x": 326.15999999999997, + "y": 197.664 + }, + { + "x": 330.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 186.224 + }, + { + "x": 279.12000000000006, + "y": 186.83200000000002 + }, + { + "x": 285.48, + "y": 187.728 + }, + { + "x": 292.56, + "y": 188.81599999999997 + }, + { + "x": 300.0, + "y": 190.0 + }, + { + "x": 307.44, + "y": 191.18400000000003 + }, + { + "x": 314.52, + "y": 192.272 + }, + { + "x": 320.88000000000005, + "y": 193.16799999999998 + }, + { + "x": 326.15999999999997, + "y": 193.77599999999998 + }, + { + "x": 330.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 186.112 + }, + { + "x": 279.12000000000006, + "y": 186.416 + }, + { + "x": 285.48, + "y": 186.86400000000003 + }, + { + "x": 292.56, + "y": 187.40800000000002 + }, + { + "x": 300.0, + "y": 188.0 + }, + { + "x": 307.44, + "y": 188.59199999999998 + }, + { + "x": 314.52, + "y": 189.136 + }, + { + "x": 320.88000000000005, + "y": 189.584 + }, + { + "x": 326.15999999999997, + "y": 189.888 + }, + { + "x": 330.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 186.0 + }, + { + "x": 279.12000000000006, + "y": 186.0 + }, + { + "x": 285.48, + "y": 186.0 + }, + { + "x": 292.56, + "y": 186.0 + }, + { + "x": 300.0, + "y": 186.0 + }, + { + "x": 307.44, + "y": 186.0 + }, + { + "x": 314.52, + "y": 186.0 + }, + { + "x": 320.88000000000005, + "y": 186.0 + }, + { + "x": 326.15999999999997, + "y": 186.0 + }, + { + "x": 330.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 185.888 + }, + { + "x": 279.12000000000006, + "y": 185.584 + }, + { + "x": 285.48, + "y": 185.13600000000002 + }, + { + "x": 292.56, + "y": 184.59199999999998 + }, + { + "x": 300.0, + "y": 184.0 + }, + { + "x": 307.44, + "y": 183.40800000000002 + }, + { + "x": 314.52, + "y": 182.864 + }, + { + "x": 320.88000000000005, + "y": 182.416 + }, + { + "x": 326.15999999999997, + "y": 182.112 + }, + { + "x": 330.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": 186.0 + }, + { + "x": 273.84000000000003, + "y": 185.776 + }, + { + "x": 279.12000000000006, + "y": 185.168 + }, + { + "x": 285.48, + "y": 184.27200000000002 + }, + { + "x": 292.56, + "y": 183.184 + }, + { + "x": 300.0, + "y": 182.0 + }, + { + "x": 307.44, + "y": 180.816 + }, + { + "x": 314.52, + "y": 179.728 + }, + { + "x": 320.88000000000005, + "y": 178.832 + }, + { + "x": 326.15999999999997, + "y": 178.224 + }, + { + "x": 330.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 182.448 + }, + { + "x": 279.12000000000006, + "y": 183.66400000000002 + }, + { + "x": 285.48, + "y": 185.45600000000002 + }, + { + "x": 292.56, + "y": 187.632 + }, + { + "x": 300.0, + "y": 190.0 + }, + { + "x": 307.44, + "y": 192.368 + }, + { + "x": 314.52, + "y": 194.54399999999998 + }, + { + "x": 320.88000000000005, + "y": 196.33599999999998 + }, + { + "x": 326.15999999999997, + "y": 197.552 + }, + { + "x": 330.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 182.33599999999998 + }, + { + "x": 279.12000000000006, + "y": 183.24800000000002 + }, + { + "x": 285.48, + "y": 184.592 + }, + { + "x": 292.56, + "y": 186.224 + }, + { + "x": 300.0, + "y": 188.0 + }, + { + "x": 307.44, + "y": 189.776 + }, + { + "x": 314.52, + "y": 191.408 + }, + { + "x": 320.88000000000005, + "y": 192.75199999999998 + }, + { + "x": 326.15999999999997, + "y": 193.664 + }, + { + "x": 330.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 182.224 + }, + { + "x": 279.12000000000006, + "y": 182.832 + }, + { + "x": 285.48, + "y": 183.728 + }, + { + "x": 292.56, + "y": 184.816 + }, + { + "x": 300.0, + "y": 186.0 + }, + { + "x": 307.44, + "y": 187.184 + }, + { + "x": 314.52, + "y": 188.272 + }, + { + "x": 320.88000000000005, + "y": 189.168 + }, + { + "x": 326.15999999999997, + "y": 189.776 + }, + { + "x": 330.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 182.112 + }, + { + "x": 279.12000000000006, + "y": 182.416 + }, + { + "x": 285.48, + "y": 182.86400000000003 + }, + { + "x": 292.56, + "y": 183.40800000000002 + }, + { + "x": 300.0, + "y": 184.0 + }, + { + "x": 307.44, + "y": 184.59199999999998 + }, + { + "x": 314.52, + "y": 185.136 + }, + { + "x": 320.88000000000005, + "y": 185.584 + }, + { + "x": 326.15999999999997, + "y": 185.888 + }, + { + "x": 330.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 182.0 + }, + { + "x": 279.12000000000006, + "y": 182.0 + }, + { + "x": 285.48, + "y": 182.00000000000003 + }, + { + "x": 292.56, + "y": 182.0 + }, + { + "x": 300.0, + "y": 182.0 + }, + { + "x": 307.44, + "y": 182.0 + }, + { + "x": 314.52, + "y": 182.0 + }, + { + "x": 320.88000000000005, + "y": 182.0 + }, + { + "x": 326.15999999999997, + "y": 182.0 + }, + { + "x": 330.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.84000000000003, + "y": 181.888 + }, + { + "x": 279.12000000000006, + "y": 181.584 + }, + { + "x": 285.48, + "y": 181.13600000000002 + }, + { + "x": 292.56, + "y": 180.59199999999998 + }, + { + "x": 300.0, + "y": 180.0 + }, + { + "x": 307.44, + "y": 179.40800000000002 + }, + { + "x": 314.52, + "y": 178.864 + }, + { + "x": 320.88000000000005, + "y": 178.416 + }, + { + "x": 326.15999999999997, + "y": 178.112 + }, + { + "x": 330.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_1_2_0", + "endRoad": "road_2_2_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 198.0 + }, + { + "x": 273.326, + "y": 198.62599999999998 + }, + { + "x": 277.168, + "y": 200.36800000000002 + }, + { + "x": 281.322, + "y": 203.02200000000002 + }, + { + "x": 285.584, + "y": 206.38400000000001 + }, + { + "x": 289.75, + "y": 210.25 + }, + { + "x": 293.616, + "y": 214.416 + }, + { + "x": 296.978, + "y": 218.67800000000003 + }, + { + "x": 299.632, + "y": 222.83200000000002 + }, + { + "x": 301.37399999999997, + "y": 226.674 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 198.0 + }, + { + "x": 273.438, + "y": 198.62599999999998 + }, + { + "x": 277.584, + "y": 200.36800000000002 + }, + { + "x": 282.18600000000004, + "y": 203.02200000000002 + }, + { + "x": 286.992, + "y": 206.38400000000001 + }, + { + "x": 291.75, + "y": 210.25 + }, + { + "x": 296.20799999999997, + "y": 214.416 + }, + { + "x": 300.114, + "y": 218.67800000000003 + }, + { + "x": 303.216, + "y": 222.83200000000002 + }, + { + "x": 305.262, + "y": 226.674 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 198.0 + }, + { + "x": 273.55, + "y": 198.62599999999998 + }, + { + "x": 278.0, + "y": 200.36800000000002 + }, + { + "x": 283.05, + "y": 203.02200000000002 + }, + { + "x": 288.4, + "y": 206.38400000000001 + }, + { + "x": 293.75, + "y": 210.25 + }, + { + "x": 298.8, + "y": 214.416 + }, + { + "x": 303.25, + "y": 218.67800000000003 + }, + { + "x": 306.8, + "y": 222.83200000000002 + }, + { + "x": 309.15, + "y": 226.674 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 198.0 + }, + { + "x": 273.66200000000003, + "y": 198.62599999999998 + }, + { + "x": 278.41600000000005, + "y": 200.36800000000002 + }, + { + "x": 283.914, + "y": 203.02200000000002 + }, + { + "x": 289.808, + "y": 206.38400000000001 + }, + { + "x": 295.75, + "y": 210.25 + }, + { + "x": 301.392, + "y": 214.416 + }, + { + "x": 306.386, + "y": 218.67800000000003 + }, + { + "x": 310.384, + "y": 222.83200000000002 + }, + { + "x": 313.03799999999995, + "y": 226.674 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 194.0 + }, + { + "x": 273.326, + "y": 194.73799999999997 + }, + { + "x": 277.168, + "y": 196.78400000000002 + }, + { + "x": 281.322, + "y": 199.88600000000002 + }, + { + "x": 285.584, + "y": 203.79200000000003 + }, + { + "x": 289.75, + "y": 208.25 + }, + { + "x": 293.616, + "y": 213.00799999999998 + }, + { + "x": 296.978, + "y": 217.81400000000002 + }, + { + "x": 299.632, + "y": 222.41600000000003 + }, + { + "x": 301.37399999999997, + "y": 226.562 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 194.0 + }, + { + "x": 273.438, + "y": 194.73799999999997 + }, + { + "x": 277.584, + "y": 196.78400000000002 + }, + { + "x": 282.18600000000004, + "y": 199.88600000000002 + }, + { + "x": 286.992, + "y": 203.79200000000003 + }, + { + "x": 291.75, + "y": 208.25 + }, + { + "x": 296.20799999999997, + "y": 213.00799999999998 + }, + { + "x": 300.114, + "y": 217.81400000000002 + }, + { + "x": 303.216, + "y": 222.41600000000003 + }, + { + "x": 305.262, + "y": 226.562 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 194.0 + }, + { + "x": 273.55, + "y": 194.73799999999997 + }, + { + "x": 278.0, + "y": 196.78400000000002 + }, + { + "x": 283.05, + "y": 199.88600000000002 + }, + { + "x": 288.4, + "y": 203.79200000000003 + }, + { + "x": 293.75, + "y": 208.25 + }, + { + "x": 298.8, + "y": 213.00799999999998 + }, + { + "x": 303.25, + "y": 217.81400000000002 + }, + { + "x": 306.8, + "y": 222.41600000000003 + }, + { + "x": 309.15, + "y": 226.562 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 194.0 + }, + { + "x": 273.66200000000003, + "y": 194.73799999999997 + }, + { + "x": 278.41600000000005, + "y": 196.78400000000002 + }, + { + "x": 283.914, + "y": 199.88600000000002 + }, + { + "x": 289.808, + "y": 203.79200000000003 + }, + { + "x": 295.75, + "y": 208.25 + }, + { + "x": 301.392, + "y": 213.00799999999998 + }, + { + "x": 306.386, + "y": 217.81400000000002 + }, + { + "x": 310.384, + "y": 222.41600000000003 + }, + { + "x": 313.03799999999995, + "y": 226.562 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_1_2_0", + "endRoad": "road_2_2_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.214, + "y": 181.934 + }, + { + "x": 276.752, + "y": 181.71200000000002 + }, + { + "x": 280.458, + "y": 181.298 + }, + { + "x": 284.176, + "y": 180.656 + }, + { + "x": 287.75, + "y": 179.75 + }, + { + "x": 291.024, + "y": 178.54399999999998 + }, + { + "x": 293.842, + "y": 177.00199999999998 + }, + { + "x": 296.048, + "y": 175.088 + }, + { + "x": 297.486, + "y": 172.76600000000002 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 273.10200000000003, + "y": 181.934 + }, + { + "x": 276.336, + "y": 181.71200000000002 + }, + { + "x": 279.594, + "y": 181.298 + }, + { + "x": 282.76800000000003, + "y": 180.656 + }, + { + "x": 285.75, + "y": 179.75 + }, + { + "x": 288.432, + "y": 178.54399999999998 + }, + { + "x": 290.706, + "y": 177.00199999999998 + }, + { + "x": 292.464, + "y": 175.088 + }, + { + "x": 293.59799999999996, + "y": 172.76600000000002 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 272.99, + "y": 181.934 + }, + { + "x": 275.92, + "y": 181.71200000000002 + }, + { + "x": 278.73, + "y": 181.298 + }, + { + "x": 281.36, + "y": 180.656 + }, + { + "x": 283.75, + "y": 179.75 + }, + { + "x": 285.84000000000003, + "y": 178.54399999999998 + }, + { + "x": 287.57, + "y": 177.00199999999998 + }, + { + "x": 288.88, + "y": 175.088 + }, + { + "x": 289.71, + "y": 172.76600000000002 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 182.0 + }, + { + "x": 272.878, + "y": 181.934 + }, + { + "x": 275.504, + "y": 181.71200000000002 + }, + { + "x": 277.866, + "y": 181.298 + }, + { + "x": 279.952, + "y": 180.656 + }, + { + "x": 281.75, + "y": 179.75 + }, + { + "x": 283.248, + "y": 178.54399999999998 + }, + { + "x": 284.434, + "y": 177.00199999999998 + }, + { + "x": 285.296, + "y": 175.088 + }, + { + "x": 285.822, + "y": 172.76600000000002 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 270.0, + "y": 178.0 + }, + { + "x": 273.214, + "y": 178.046 + }, + { + "x": 276.752, + "y": 178.12800000000001 + }, + { + "x": 280.458, + "y": 178.16199999999998 + }, + { + "x": 284.176, + "y": 178.064 + }, + { + "x": 287.75, + "y": 177.75 + }, + { + "x": 291.024, + "y": 177.136 + }, + { + "x": 293.842, + "y": 176.13799999999998 + }, + { + "x": 296.048, + "y": 174.672 + }, + { + "x": 297.486, + "y": 172.65400000000002 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 270.0, + "y": 178.0 + }, + { + "x": 273.10200000000003, + "y": 178.046 + }, + { + "x": 276.336, + "y": 178.12800000000001 + }, + { + "x": 279.594, + "y": 178.16199999999998 + }, + { + "x": 282.76800000000003, + "y": 178.064 + }, + { + "x": 285.75, + "y": 177.75 + }, + { + "x": 288.432, + "y": 177.136 + }, + { + "x": 290.706, + "y": 176.13799999999998 + }, + { + "x": 292.464, + "y": 174.672 + }, + { + "x": 293.59799999999996, + "y": 172.65400000000002 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 270.0, + "y": 178.0 + }, + { + "x": 272.99, + "y": 178.046 + }, + { + "x": 275.92, + "y": 178.12800000000001 + }, + { + "x": 278.73, + "y": 178.16199999999998 + }, + { + "x": 281.36, + "y": 178.064 + }, + { + "x": 283.75, + "y": 177.75 + }, + { + "x": 285.84000000000003, + "y": 177.136 + }, + { + "x": 287.57, + "y": 176.13799999999998 + }, + { + "x": 288.88, + "y": 174.672 + }, + { + "x": 289.71, + "y": 172.65400000000002 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 270.0, + "y": 178.0 + }, + { + "x": 272.878, + "y": 178.046 + }, + { + "x": 275.504, + "y": 178.12800000000001 + }, + { + "x": 277.866, + "y": 178.16199999999998 + }, + { + "x": 279.952, + "y": 178.064 + }, + { + "x": 281.75, + "y": 177.75 + }, + { + "x": 283.248, + "y": 177.136 + }, + { + "x": 284.434, + "y": 176.13799999999998 + }, + { + "x": 285.296, + "y": 174.672 + }, + { + "x": 285.822, + "y": 172.65400000000002 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_1_1", + "endRoad": "road_2_2_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 173.21400000000003 + }, + { + "x": 314.704, + "y": 176.752 + }, + { + "x": 315.56600000000003, + "y": 180.458 + }, + { + "x": 316.752, + "y": 184.176 + }, + { + "x": 318.25, + "y": 187.75 + }, + { + "x": 320.048, + "y": 191.024 + }, + { + "x": 322.13399999999996, + "y": 193.84199999999998 + }, + { + "x": 324.49600000000004, + "y": 196.048 + }, + { + "x": 327.122, + "y": 197.486 + }, + { + "x": 330.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 173.102 + }, + { + "x": 314.704, + "y": 176.336 + }, + { + "x": 315.56600000000003, + "y": 179.594 + }, + { + "x": 316.752, + "y": 182.76799999999997 + }, + { + "x": 318.25, + "y": 185.75 + }, + { + "x": 320.048, + "y": 188.43200000000002 + }, + { + "x": 322.13399999999996, + "y": 190.706 + }, + { + "x": 324.49600000000004, + "y": 192.464 + }, + { + "x": 327.122, + "y": 193.59799999999998 + }, + { + "x": 330.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 172.99 + }, + { + "x": 314.704, + "y": 175.92000000000002 + }, + { + "x": 315.56600000000003, + "y": 178.73000000000002 + }, + { + "x": 316.752, + "y": 181.36 + }, + { + "x": 318.25, + "y": 183.75 + }, + { + "x": 320.048, + "y": 185.83999999999997 + }, + { + "x": 322.13399999999996, + "y": 187.57 + }, + { + "x": 324.49600000000004, + "y": 188.88000000000002 + }, + { + "x": 327.122, + "y": 189.71 + }, + { + "x": 330.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 172.87800000000001 + }, + { + "x": 314.704, + "y": 175.504 + }, + { + "x": 315.56600000000003, + "y": 177.86599999999999 + }, + { + "x": 316.752, + "y": 179.952 + }, + { + "x": 318.25, + "y": 181.75 + }, + { + "x": 320.048, + "y": 183.248 + }, + { + "x": 322.13399999999996, + "y": 184.434 + }, + { + "x": 324.49600000000004, + "y": 185.29600000000002 + }, + { + "x": 327.122, + "y": 185.822 + }, + { + "x": 330.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 172.76600000000002 + }, + { + "x": 314.704, + "y": 175.088 + }, + { + "x": 315.56600000000003, + "y": 177.002 + }, + { + "x": 316.752, + "y": 178.54399999999998 + }, + { + "x": 318.25, + "y": 179.75 + }, + { + "x": 320.048, + "y": 180.656 + }, + { + "x": 322.13399999999996, + "y": 181.298 + }, + { + "x": 324.49600000000004, + "y": 181.71200000000002 + }, + { + "x": 327.122, + "y": 181.934 + }, + { + "x": 330.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 314.0, + "y": 170.0 + }, + { + "x": 314.178, + "y": 172.65400000000002 + }, + { + "x": 314.704, + "y": 174.672 + }, + { + "x": 315.56600000000003, + "y": 176.138 + }, + { + "x": 316.752, + "y": 177.136 + }, + { + "x": 318.25, + "y": 177.75 + }, + { + "x": 320.048, + "y": 178.064 + }, + { + "x": 322.13399999999996, + "y": 178.162 + }, + { + "x": 324.49600000000004, + "y": 178.12800000000001 + }, + { + "x": 327.122, + "y": 178.046 + }, + { + "x": 330.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_1_1", + "endRoad": "road_2_2_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 306.0, + "y": 170.0 + }, + { + "x": 305.88800000000003, + "y": 173.84 + }, + { + "x": 305.584, + "y": 179.12 + }, + { + "x": 305.136, + "y": 185.48000000000002 + }, + { + "x": 304.592, + "y": 192.56 + }, + { + "x": 304.0, + "y": 200.0 + }, + { + "x": 303.408, + "y": 207.44 + }, + { + "x": 302.864, + "y": 214.52 + }, + { + "x": 302.416, + "y": 220.88000000000002 + }, + { + "x": 302.11199999999997, + "y": 226.16 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 306.0, + "y": 170.0 + }, + { + "x": 306.0, + "y": 173.84 + }, + { + "x": 306.0, + "y": 179.12 + }, + { + "x": 306.0, + "y": 185.48000000000002 + }, + { + "x": 306.0, + "y": 192.56 + }, + { + "x": 306.0, + "y": 200.0 + }, + { + "x": 306.0, + "y": 207.44 + }, + { + "x": 306.0, + "y": 214.52 + }, + { + "x": 306.0, + "y": 220.88000000000002 + }, + { + "x": 306.0, + "y": 226.16 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 306.0, + "y": 170.0 + }, + { + "x": 306.112, + "y": 173.84 + }, + { + "x": 306.416, + "y": 179.12 + }, + { + "x": 306.86400000000003, + "y": 185.48000000000002 + }, + { + "x": 307.408, + "y": 192.56 + }, + { + "x": 308.0, + "y": 200.0 + }, + { + "x": 308.592, + "y": 207.44 + }, + { + "x": 309.13599999999997, + "y": 214.52 + }, + { + "x": 309.584, + "y": 220.88000000000002 + }, + { + "x": 309.888, + "y": 226.16 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 306.0, + "y": 170.0 + }, + { + "x": 306.22400000000005, + "y": 173.84 + }, + { + "x": 306.832, + "y": 179.12 + }, + { + "x": 307.728, + "y": 185.48000000000002 + }, + { + "x": 308.81600000000003, + "y": 192.56 + }, + { + "x": 310.0, + "y": 200.0 + }, + { + "x": 311.18399999999997, + "y": 207.44 + }, + { + "x": 312.272, + "y": 214.52 + }, + { + "x": 313.168, + "y": 220.88000000000002 + }, + { + "x": 313.77599999999995, + "y": 226.16 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 310.0, + "y": 170.0 + }, + { + "x": 309.776, + "y": 173.84 + }, + { + "x": 309.168, + "y": 179.12 + }, + { + "x": 308.27200000000005, + "y": 185.48000000000002 + }, + { + "x": 307.18399999999997, + "y": 192.56 + }, + { + "x": 306.0, + "y": 200.0 + }, + { + "x": 304.816, + "y": 207.44 + }, + { + "x": 303.728, + "y": 214.52 + }, + { + "x": 302.832, + "y": 220.88000000000002 + }, + { + "x": 302.224, + "y": 226.16 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 310.0, + "y": 170.0 + }, + { + "x": 309.888, + "y": 173.84 + }, + { + "x": 309.584, + "y": 179.12 + }, + { + "x": 309.136, + "y": 185.48000000000002 + }, + { + "x": 308.592, + "y": 192.56 + }, + { + "x": 308.0, + "y": 200.0 + }, + { + "x": 307.408, + "y": 207.44 + }, + { + "x": 306.864, + "y": 214.52 + }, + { + "x": 306.416, + "y": 220.88000000000002 + }, + { + "x": 306.112, + "y": 226.16 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 310.0, + "y": 170.0 + }, + { + "x": 310.0, + "y": 173.84 + }, + { + "x": 310.0, + "y": 179.12 + }, + { + "x": 310.0, + "y": 185.48000000000002 + }, + { + "x": 310.0, + "y": 192.56 + }, + { + "x": 310.0, + "y": 200.0 + }, + { + "x": 310.0, + "y": 207.44 + }, + { + "x": 310.0, + "y": 214.52 + }, + { + "x": 310.0, + "y": 220.88000000000002 + }, + { + "x": 310.0, + "y": 226.16 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 310.0, + "y": 170.0 + }, + { + "x": 310.11199999999997, + "y": 173.84 + }, + { + "x": 310.416, + "y": 179.12 + }, + { + "x": 310.86400000000003, + "y": 185.48000000000002 + }, + { + "x": 311.408, + "y": 192.56 + }, + { + "x": 312.0, + "y": 200.0 + }, + { + "x": 312.592, + "y": 207.44 + }, + { + "x": 313.136, + "y": 214.52 + }, + { + "x": 313.584, + "y": 220.88000000000002 + }, + { + "x": 313.888, + "y": 226.16 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_1_1", + "endRoad": "road_2_2_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.32600000000002 + }, + { + "x": 299.63199999999995, + "y": 177.168 + }, + { + "x": 296.978, + "y": 181.322 + }, + { + "x": 293.616, + "y": 185.584 + }, + { + "x": 289.75, + "y": 189.75 + }, + { + "x": 285.584, + "y": 193.61599999999999 + }, + { + "x": 281.32200000000006, + "y": 196.978 + }, + { + "x": 277.168, + "y": 199.632 + }, + { + "x": 273.326, + "y": 201.374 + }, + { + "x": 270.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.43800000000002 + }, + { + "x": 299.63199999999995, + "y": 177.584 + }, + { + "x": 296.978, + "y": 182.186 + }, + { + "x": 293.616, + "y": 186.992 + }, + { + "x": 289.75, + "y": 191.75 + }, + { + "x": 285.584, + "y": 196.208 + }, + { + "x": 281.32200000000006, + "y": 200.114 + }, + { + "x": 277.168, + "y": 203.216 + }, + { + "x": 273.326, + "y": 205.262 + }, + { + "x": 270.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.55 + }, + { + "x": 299.63199999999995, + "y": 178.0 + }, + { + "x": 296.978, + "y": 183.05 + }, + { + "x": 293.616, + "y": 188.39999999999998 + }, + { + "x": 289.75, + "y": 193.75 + }, + { + "x": 285.584, + "y": 198.8 + }, + { + "x": 281.32200000000006, + "y": 203.25 + }, + { + "x": 277.168, + "y": 206.8 + }, + { + "x": 273.326, + "y": 209.15 + }, + { + "x": 270.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.662 + }, + { + "x": 299.63199999999995, + "y": 178.416 + }, + { + "x": 296.978, + "y": 183.914 + }, + { + "x": 293.616, + "y": 189.808 + }, + { + "x": 289.75, + "y": 195.75 + }, + { + "x": 285.584, + "y": 201.392 + }, + { + "x": 281.32200000000006, + "y": 206.386 + }, + { + "x": 277.168, + "y": 210.38400000000001 + }, + { + "x": 273.326, + "y": 213.03799999999998 + }, + { + "x": 270.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.77400000000003 + }, + { + "x": 299.63199999999995, + "y": 178.832 + }, + { + "x": 296.978, + "y": 184.77800000000002 + }, + { + "x": 293.616, + "y": 191.216 + }, + { + "x": 289.75, + "y": 197.75 + }, + { + "x": 285.584, + "y": 203.984 + }, + { + "x": 281.32200000000006, + "y": 209.522 + }, + { + "x": 277.168, + "y": 213.96800000000002 + }, + { + "x": 273.326, + "y": 216.926 + }, + { + "x": 270.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 302.0, + "y": 170.0 + }, + { + "x": 301.37399999999997, + "y": 173.88600000000002 + }, + { + "x": 299.63199999999995, + "y": 179.248 + }, + { + "x": 296.978, + "y": 185.642 + }, + { + "x": 293.616, + "y": 192.624 + }, + { + "x": 289.75, + "y": 199.75 + }, + { + "x": 285.584, + "y": 206.576 + }, + { + "x": 281.32200000000006, + "y": 212.658 + }, + { + "x": 277.168, + "y": 217.55200000000002 + }, + { + "x": 273.326, + "y": 220.814 + }, + { + "x": 270.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_2_2", + "endRoad": "road_2_2_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.786, + "y": 218.06599999999997 + }, + { + "x": 323.24800000000005, + "y": 218.288 + }, + { + "x": 319.54200000000003, + "y": 218.70200000000003 + }, + { + "x": 315.824, + "y": 219.344 + }, + { + "x": 312.25, + "y": 220.25 + }, + { + "x": 308.976, + "y": 221.45600000000002 + }, + { + "x": 306.158, + "y": 222.99800000000002 + }, + { + "x": 303.952, + "y": 224.912 + }, + { + "x": 302.514, + "y": 227.234 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.89799999999997, + "y": 218.06599999999997 + }, + { + "x": 323.66400000000004, + "y": 218.288 + }, + { + "x": 320.40600000000006, + "y": 218.70200000000003 + }, + { + "x": 317.232, + "y": 219.344 + }, + { + "x": 314.25, + "y": 220.25 + }, + { + "x": 311.568, + "y": 221.45600000000002 + }, + { + "x": 309.294, + "y": 222.99800000000002 + }, + { + "x": 307.536, + "y": 224.912 + }, + { + "x": 306.40200000000004, + "y": 227.234 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 327.01, + "y": 218.06599999999997 + }, + { + "x": 324.08000000000004, + "y": 218.288 + }, + { + "x": 321.27000000000004, + "y": 218.70200000000003 + }, + { + "x": 318.64, + "y": 219.344 + }, + { + "x": 316.25, + "y": 220.25 + }, + { + "x": 314.16, + "y": 221.45600000000002 + }, + { + "x": 312.43, + "y": 222.99800000000002 + }, + { + "x": 311.12, + "y": 224.912 + }, + { + "x": 310.29, + "y": 227.234 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 327.12199999999996, + "y": 218.06599999999997 + }, + { + "x": 324.49600000000004, + "y": 218.288 + }, + { + "x": 322.134, + "y": 218.70200000000003 + }, + { + "x": 320.048, + "y": 219.344 + }, + { + "x": 318.25, + "y": 220.25 + }, + { + "x": 316.752, + "y": 221.45600000000002 + }, + { + "x": 315.56600000000003, + "y": 222.99800000000002 + }, + { + "x": 314.704, + "y": 224.912 + }, + { + "x": 314.178, + "y": 227.234 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 222.0 + }, + { + "x": 326.786, + "y": 221.95399999999998 + }, + { + "x": 323.24800000000005, + "y": 221.872 + }, + { + "x": 319.54200000000003, + "y": 221.83800000000002 + }, + { + "x": 315.824, + "y": 221.93599999999998 + }, + { + "x": 312.25, + "y": 222.25 + }, + { + "x": 308.976, + "y": 222.864 + }, + { + "x": 306.158, + "y": 223.86200000000002 + }, + { + "x": 303.952, + "y": 225.328 + }, + { + "x": 302.514, + "y": 227.346 + }, + { + "x": 302.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 222.0 + }, + { + "x": 326.89799999999997, + "y": 221.95399999999998 + }, + { + "x": 323.66400000000004, + "y": 221.872 + }, + { + "x": 320.40600000000006, + "y": 221.83800000000002 + }, + { + "x": 317.232, + "y": 221.93599999999998 + }, + { + "x": 314.25, + "y": 222.25 + }, + { + "x": 311.568, + "y": 222.864 + }, + { + "x": 309.294, + "y": 223.86200000000002 + }, + { + "x": 307.536, + "y": 225.328 + }, + { + "x": 306.40200000000004, + "y": 227.346 + }, + { + "x": 306.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 222.0 + }, + { + "x": 327.01, + "y": 221.95399999999998 + }, + { + "x": 324.08000000000004, + "y": 221.872 + }, + { + "x": 321.27000000000004, + "y": 221.83800000000002 + }, + { + "x": 318.64, + "y": 221.93599999999998 + }, + { + "x": 316.25, + "y": 222.25 + }, + { + "x": 314.16, + "y": 222.864 + }, + { + "x": 312.43, + "y": 223.86200000000002 + }, + { + "x": 311.12, + "y": 225.328 + }, + { + "x": 310.29, + "y": 227.346 + }, + { + "x": 310.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 222.0 + }, + { + "x": 327.12199999999996, + "y": 221.95399999999998 + }, + { + "x": 324.49600000000004, + "y": 221.872 + }, + { + "x": 322.134, + "y": 221.83800000000002 + }, + { + "x": 320.048, + "y": 221.93599999999998 + }, + { + "x": 318.25, + "y": 222.25 + }, + { + "x": 316.752, + "y": 222.864 + }, + { + "x": 315.56600000000003, + "y": 223.86200000000002 + }, + { + "x": 314.704, + "y": 225.328 + }, + { + "x": 314.178, + "y": 227.346 + }, + { + "x": 314.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_2_2", + "endRoad": "road_2_2_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 209.776 + }, + { + "x": 320.88, + "y": 209.168 + }, + { + "x": 314.52000000000004, + "y": 208.27200000000002 + }, + { + "x": 307.44, + "y": 207.184 + }, + { + "x": 300.0, + "y": 206.0 + }, + { + "x": 292.56, + "y": 204.81599999999997 + }, + { + "x": 285.48, + "y": 203.728 + }, + { + "x": 279.11999999999995, + "y": 202.832 + }, + { + "x": 273.84000000000003, + "y": 202.224 + }, + { + "x": 270.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 209.888 + }, + { + "x": 320.88, + "y": 209.584 + }, + { + "x": 314.52000000000004, + "y": 209.13600000000002 + }, + { + "x": 307.44, + "y": 208.59199999999998 + }, + { + "x": 300.0, + "y": 208.0 + }, + { + "x": 292.56, + "y": 207.40800000000002 + }, + { + "x": 285.48, + "y": 206.864 + }, + { + "x": 279.11999999999995, + "y": 206.416 + }, + { + "x": 273.84000000000003, + "y": 206.112 + }, + { + "x": 270.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 210.0 + }, + { + "x": 320.88, + "y": 210.0 + }, + { + "x": 314.52000000000004, + "y": 210.00000000000003 + }, + { + "x": 307.44, + "y": 210.0 + }, + { + "x": 300.0, + "y": 210.0 + }, + { + "x": 292.56, + "y": 210.0 + }, + { + "x": 285.48, + "y": 210.0 + }, + { + "x": 279.11999999999995, + "y": 210.0 + }, + { + "x": 273.84000000000003, + "y": 210.0 + }, + { + "x": 270.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 210.112 + }, + { + "x": 320.88, + "y": 210.416 + }, + { + "x": 314.52000000000004, + "y": 210.86400000000003 + }, + { + "x": 307.44, + "y": 211.40800000000002 + }, + { + "x": 300.0, + "y": 212.0 + }, + { + "x": 292.56, + "y": 212.59199999999998 + }, + { + "x": 285.48, + "y": 213.136 + }, + { + "x": 279.11999999999995, + "y": 213.584 + }, + { + "x": 273.84000000000003, + "y": 213.88799999999998 + }, + { + "x": 270.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 210.22400000000002 + }, + { + "x": 320.88, + "y": 210.832 + }, + { + "x": 314.52000000000004, + "y": 211.728 + }, + { + "x": 307.44, + "y": 212.816 + }, + { + "x": 300.0, + "y": 214.0 + }, + { + "x": 292.56, + "y": 215.18400000000003 + }, + { + "x": 285.48, + "y": 216.272 + }, + { + "x": 279.11999999999995, + "y": 217.168 + }, + { + "x": 273.84000000000003, + "y": 217.77599999999998 + }, + { + "x": 270.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 210.0 + }, + { + "x": 326.15999999999997, + "y": 210.336 + }, + { + "x": 320.88, + "y": 211.248 + }, + { + "x": 314.52000000000004, + "y": 212.592 + }, + { + "x": 307.44, + "y": 214.224 + }, + { + "x": 300.0, + "y": 216.0 + }, + { + "x": 292.56, + "y": 217.776 + }, + { + "x": 285.48, + "y": 219.408 + }, + { + "x": 279.11999999999995, + "y": 220.752 + }, + { + "x": 273.84000000000003, + "y": 221.664 + }, + { + "x": 270.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 213.664 + }, + { + "x": 320.88, + "y": 212.752 + }, + { + "x": 314.52000000000004, + "y": 211.40800000000002 + }, + { + "x": 307.44, + "y": 209.77599999999998 + }, + { + "x": 300.0, + "y": 208.0 + }, + { + "x": 292.56, + "y": 206.224 + }, + { + "x": 285.48, + "y": 204.592 + }, + { + "x": 279.11999999999995, + "y": 203.248 + }, + { + "x": 273.84000000000003, + "y": 202.336 + }, + { + "x": 270.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 213.77599999999998 + }, + { + "x": 320.88, + "y": 213.168 + }, + { + "x": 314.52000000000004, + "y": 212.27200000000002 + }, + { + "x": 307.44, + "y": 211.18399999999997 + }, + { + "x": 300.0, + "y": 210.0 + }, + { + "x": 292.56, + "y": 208.816 + }, + { + "x": 285.48, + "y": 207.728 + }, + { + "x": 279.11999999999995, + "y": 206.832 + }, + { + "x": 273.84000000000003, + "y": 206.22400000000002 + }, + { + "x": 270.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 213.88799999999998 + }, + { + "x": 320.88, + "y": 213.584 + }, + { + "x": 314.52000000000004, + "y": 213.13600000000002 + }, + { + "x": 307.44, + "y": 212.59199999999998 + }, + { + "x": 300.0, + "y": 212.0 + }, + { + "x": 292.56, + "y": 211.40800000000002 + }, + { + "x": 285.48, + "y": 210.864 + }, + { + "x": 279.11999999999995, + "y": 210.416 + }, + { + "x": 273.84000000000003, + "y": 210.11200000000002 + }, + { + "x": 270.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 213.99999999999997 + }, + { + "x": 320.88, + "y": 214.0 + }, + { + "x": 314.52000000000004, + "y": 214.0 + }, + { + "x": 307.44, + "y": 214.0 + }, + { + "x": 300.0, + "y": 214.0 + }, + { + "x": 292.56, + "y": 214.0 + }, + { + "x": 285.48, + "y": 214.0 + }, + { + "x": 279.11999999999995, + "y": 214.0 + }, + { + "x": 273.84000000000003, + "y": 214.0 + }, + { + "x": 270.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 214.112 + }, + { + "x": 320.88, + "y": 214.416 + }, + { + "x": 314.52000000000004, + "y": 214.86400000000003 + }, + { + "x": 307.44, + "y": 215.408 + }, + { + "x": 300.0, + "y": 216.0 + }, + { + "x": 292.56, + "y": 216.592 + }, + { + "x": 285.48, + "y": 217.136 + }, + { + "x": 279.11999999999995, + "y": 217.584 + }, + { + "x": 273.84000000000003, + "y": 217.888 + }, + { + "x": 270.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 214.0 + }, + { + "x": 326.15999999999997, + "y": 214.224 + }, + { + "x": 320.88, + "y": 214.832 + }, + { + "x": 314.52000000000004, + "y": 215.728 + }, + { + "x": 307.44, + "y": 216.81599999999997 + }, + { + "x": 300.0, + "y": 218.0 + }, + { + "x": 292.56, + "y": 219.184 + }, + { + "x": 285.48, + "y": 220.272 + }, + { + "x": 279.11999999999995, + "y": 221.168 + }, + { + "x": 273.84000000000003, + "y": 221.776 + }, + { + "x": 270.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 217.552 + }, + { + "x": 320.88, + "y": 216.336 + }, + { + "x": 314.52000000000004, + "y": 214.544 + }, + { + "x": 307.44, + "y": 212.368 + }, + { + "x": 300.0, + "y": 210.0 + }, + { + "x": 292.56, + "y": 207.632 + }, + { + "x": 285.48, + "y": 205.45600000000002 + }, + { + "x": 279.11999999999995, + "y": 203.664 + }, + { + "x": 273.84000000000003, + "y": 202.448 + }, + { + "x": 270.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 217.664 + }, + { + "x": 320.88, + "y": 216.752 + }, + { + "x": 314.52000000000004, + "y": 215.40800000000002 + }, + { + "x": 307.44, + "y": 213.776 + }, + { + "x": 300.0, + "y": 212.0 + }, + { + "x": 292.56, + "y": 210.224 + }, + { + "x": 285.48, + "y": 208.592 + }, + { + "x": 279.11999999999995, + "y": 207.248 + }, + { + "x": 273.84000000000003, + "y": 206.336 + }, + { + "x": 270.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 217.77599999999998 + }, + { + "x": 320.88, + "y": 217.168 + }, + { + "x": 314.52000000000004, + "y": 216.27200000000002 + }, + { + "x": 307.44, + "y": 215.184 + }, + { + "x": 300.0, + "y": 214.0 + }, + { + "x": 292.56, + "y": 212.81600000000003 + }, + { + "x": 285.48, + "y": 211.728 + }, + { + "x": 279.11999999999995, + "y": 210.832 + }, + { + "x": 273.84000000000003, + "y": 210.22400000000002 + }, + { + "x": 270.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 217.88799999999998 + }, + { + "x": 320.88, + "y": 217.584 + }, + { + "x": 314.52000000000004, + "y": 217.13600000000002 + }, + { + "x": 307.44, + "y": 216.59199999999998 + }, + { + "x": 300.0, + "y": 216.0 + }, + { + "x": 292.56, + "y": 215.40800000000002 + }, + { + "x": 285.48, + "y": 214.864 + }, + { + "x": 279.11999999999995, + "y": 214.416 + }, + { + "x": 273.84000000000003, + "y": 214.112 + }, + { + "x": 270.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 218.0 + }, + { + "x": 320.88, + "y": 218.0 + }, + { + "x": 314.52000000000004, + "y": 218.0 + }, + { + "x": 307.44, + "y": 218.0 + }, + { + "x": 300.0, + "y": 218.0 + }, + { + "x": 292.56, + "y": 218.0 + }, + { + "x": 285.48, + "y": 218.0 + }, + { + "x": 279.11999999999995, + "y": 218.0 + }, + { + "x": 273.84000000000003, + "y": 218.0 + }, + { + "x": 270.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 330.0, + "y": 218.0 + }, + { + "x": 326.15999999999997, + "y": 218.112 + }, + { + "x": 320.88, + "y": 218.416 + }, + { + "x": 314.52000000000004, + "y": 218.864 + }, + { + "x": 307.44, + "y": 219.40800000000002 + }, + { + "x": 300.0, + "y": 220.0 + }, + { + "x": 292.56, + "y": 220.59199999999998 + }, + { + "x": 285.48, + "y": 221.136 + }, + { + "x": 279.11999999999995, + "y": 221.584 + }, + { + "x": 273.84000000000003, + "y": 221.888 + }, + { + "x": 270.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_2_2", + "endRoad": "road_2_2_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 202.0 + }, + { + "x": 326.674, + "y": 201.374 + }, + { + "x": 322.83200000000005, + "y": 199.632 + }, + { + "x": 318.67800000000005, + "y": 196.97799999999998 + }, + { + "x": 314.416, + "y": 193.61599999999999 + }, + { + "x": 310.25, + "y": 189.75 + }, + { + "x": 306.384, + "y": 185.584 + }, + { + "x": 303.022, + "y": 181.32199999999997 + }, + { + "x": 300.368, + "y": 177.168 + }, + { + "x": 298.62600000000003, + "y": 173.32600000000002 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 202.0 + }, + { + "x": 326.562, + "y": 201.374 + }, + { + "x": 322.41600000000005, + "y": 199.632 + }, + { + "x": 317.814, + "y": 196.97799999999998 + }, + { + "x": 313.00800000000004, + "y": 193.61599999999999 + }, + { + "x": 308.25, + "y": 189.75 + }, + { + "x": 303.792, + "y": 185.584 + }, + { + "x": 299.886, + "y": 181.32199999999997 + }, + { + "x": 296.784, + "y": 177.168 + }, + { + "x": 294.738, + "y": 173.32600000000002 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 202.0 + }, + { + "x": 326.45, + "y": 201.374 + }, + { + "x": 322.00000000000006, + "y": 199.632 + }, + { + "x": 316.95000000000005, + "y": 196.97799999999998 + }, + { + "x": 311.6, + "y": 193.61599999999999 + }, + { + "x": 306.25, + "y": 189.75 + }, + { + "x": 301.2, + "y": 185.584 + }, + { + "x": 296.75, + "y": 181.32199999999997 + }, + { + "x": 293.2, + "y": 177.168 + }, + { + "x": 290.85, + "y": 173.32600000000002 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 202.0 + }, + { + "x": 326.33799999999997, + "y": 201.374 + }, + { + "x": 321.58400000000006, + "y": 199.632 + }, + { + "x": 316.086, + "y": 196.97799999999998 + }, + { + "x": 310.192, + "y": 193.61599999999999 + }, + { + "x": 304.25, + "y": 189.75 + }, + { + "x": 298.608, + "y": 185.584 + }, + { + "x": 293.61400000000003, + "y": 181.32199999999997 + }, + { + "x": 289.616, + "y": 177.168 + }, + { + "x": 286.96200000000005, + "y": 173.32600000000002 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 330.0, + "y": 206.0 + }, + { + "x": 326.674, + "y": 205.262 + }, + { + "x": 322.83200000000005, + "y": 203.216 + }, + { + "x": 318.67800000000005, + "y": 200.114 + }, + { + "x": 314.416, + "y": 196.20799999999997 + }, + { + "x": 310.25, + "y": 191.75 + }, + { + "x": 306.384, + "y": 186.992 + }, + { + "x": 303.022, + "y": 182.18599999999998 + }, + { + "x": 300.368, + "y": 177.584 + }, + { + "x": 298.62600000000003, + "y": 173.43800000000002 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 330.0, + "y": 206.0 + }, + { + "x": 326.562, + "y": 205.262 + }, + { + "x": 322.41600000000005, + "y": 203.216 + }, + { + "x": 317.814, + "y": 200.114 + }, + { + "x": 313.00800000000004, + "y": 196.20799999999997 + }, + { + "x": 308.25, + "y": 191.75 + }, + { + "x": 303.792, + "y": 186.992 + }, + { + "x": 299.886, + "y": 182.18599999999998 + }, + { + "x": 296.784, + "y": 177.584 + }, + { + "x": 294.738, + "y": 173.43800000000002 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 330.0, + "y": 206.0 + }, + { + "x": 326.45, + "y": 205.262 + }, + { + "x": 322.00000000000006, + "y": 203.216 + }, + { + "x": 316.95000000000005, + "y": 200.114 + }, + { + "x": 311.6, + "y": 196.20799999999997 + }, + { + "x": 306.25, + "y": 191.75 + }, + { + "x": 301.2, + "y": 186.992 + }, + { + "x": 296.75, + "y": 182.18599999999998 + }, + { + "x": 293.2, + "y": 177.584 + }, + { + "x": 290.85, + "y": 173.43800000000002 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 330.0, + "y": 206.0 + }, + { + "x": 326.33799999999997, + "y": 205.262 + }, + { + "x": 321.58400000000006, + "y": 203.216 + }, + { + "x": 316.086, + "y": 200.114 + }, + { + "x": 310.192, + "y": 196.20799999999997 + }, + { + "x": 304.25, + "y": 191.75 + }, + { + "x": 298.608, + "y": 186.992 + }, + { + "x": 293.61400000000003, + "y": 182.18599999999998 + }, + { + "x": 289.616, + "y": 177.584 + }, + { + "x": 286.96200000000005, + "y": 173.43800000000002 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_3_3", + "endRoad": "road_2_2_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.674 + }, + { + "x": 300.368, + "y": 222.83200000000002 + }, + { + "x": 303.02200000000005, + "y": 218.678 + }, + { + "x": 306.384, + "y": 214.416 + }, + { + "x": 310.25, + "y": 210.25 + }, + { + "x": 314.416, + "y": 206.38400000000001 + }, + { + "x": 318.67799999999994, + "y": 203.022 + }, + { + "x": 322.83200000000005, + "y": 200.368 + }, + { + "x": 326.674, + "y": 198.626 + }, + { + "x": 330.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.56199999999998 + }, + { + "x": 300.368, + "y": 222.41600000000003 + }, + { + "x": 303.02200000000005, + "y": 217.814 + }, + { + "x": 306.384, + "y": 213.008 + }, + { + "x": 310.25, + "y": 208.25 + }, + { + "x": 314.416, + "y": 203.792 + }, + { + "x": 318.67799999999994, + "y": 199.886 + }, + { + "x": 322.83200000000005, + "y": 196.784 + }, + { + "x": 326.674, + "y": 194.738 + }, + { + "x": 330.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.45 + }, + { + "x": 300.368, + "y": 222.0 + }, + { + "x": 303.02200000000005, + "y": 216.95 + }, + { + "x": 306.384, + "y": 211.60000000000002 + }, + { + "x": 310.25, + "y": 206.25 + }, + { + "x": 314.416, + "y": 201.2 + }, + { + "x": 318.67799999999994, + "y": 196.75 + }, + { + "x": 322.83200000000005, + "y": 193.20000000000002 + }, + { + "x": 326.674, + "y": 190.85000000000002 + }, + { + "x": 330.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.338 + }, + { + "x": 300.368, + "y": 221.584 + }, + { + "x": 303.02200000000005, + "y": 216.086 + }, + { + "x": 306.384, + "y": 210.192 + }, + { + "x": 310.25, + "y": 204.25 + }, + { + "x": 314.416, + "y": 198.608 + }, + { + "x": 318.67799999999994, + "y": 193.614 + }, + { + "x": 322.83200000000005, + "y": 189.616 + }, + { + "x": 326.674, + "y": 186.96200000000002 + }, + { + "x": 330.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.226 + }, + { + "x": 300.368, + "y": 221.168 + }, + { + "x": 303.02200000000005, + "y": 215.222 + }, + { + "x": 306.384, + "y": 208.78400000000002 + }, + { + "x": 310.25, + "y": 202.25 + }, + { + "x": 314.416, + "y": 196.016 + }, + { + "x": 318.67799999999994, + "y": 190.478 + }, + { + "x": 322.83200000000005, + "y": 186.032 + }, + { + "x": 326.674, + "y": 183.074 + }, + { + "x": 330.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 298.0, + "y": 230.0 + }, + { + "x": 298.62600000000003, + "y": 226.114 + }, + { + "x": 300.368, + "y": 220.752 + }, + { + "x": 303.02200000000005, + "y": 214.358 + }, + { + "x": 306.384, + "y": 207.376 + }, + { + "x": 310.25, + "y": 200.25 + }, + { + "x": 314.416, + "y": 193.42399999999998 + }, + { + "x": 318.67799999999994, + "y": 187.342 + }, + { + "x": 322.83200000000005, + "y": 182.448 + }, + { + "x": 326.674, + "y": 179.186 + }, + { + "x": 330.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_3_3", + "endRoad": "road_2_2_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 226.786 + }, + { + "x": 285.296, + "y": 223.24800000000002 + }, + { + "x": 284.434, + "y": 219.542 + }, + { + "x": 283.248, + "y": 215.824 + }, + { + "x": 281.75, + "y": 212.25 + }, + { + "x": 279.952, + "y": 208.976 + }, + { + "x": 277.86600000000004, + "y": 206.15800000000002 + }, + { + "x": 275.50399999999996, + "y": 203.952 + }, + { + "x": 272.878, + "y": 202.514 + }, + { + "x": 270.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 226.898 + }, + { + "x": 285.296, + "y": 223.66400000000002 + }, + { + "x": 284.434, + "y": 220.406 + }, + { + "x": 283.248, + "y": 217.23200000000003 + }, + { + "x": 281.75, + "y": 214.25 + }, + { + "x": 279.952, + "y": 211.56799999999998 + }, + { + "x": 277.86600000000004, + "y": 209.294 + }, + { + "x": 275.50399999999996, + "y": 207.536 + }, + { + "x": 272.878, + "y": 206.40200000000002 + }, + { + "x": 270.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 227.01 + }, + { + "x": 285.296, + "y": 224.08 + }, + { + "x": 284.434, + "y": 221.27 + }, + { + "x": 283.248, + "y": 218.64000000000001 + }, + { + "x": 281.75, + "y": 216.25 + }, + { + "x": 279.952, + "y": 214.16000000000003 + }, + { + "x": 277.86600000000004, + "y": 212.43 + }, + { + "x": 275.50399999999996, + "y": 211.12 + }, + { + "x": 272.878, + "y": 210.29000000000002 + }, + { + "x": 270.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 227.12199999999999 + }, + { + "x": 285.296, + "y": 224.496 + }, + { + "x": 284.434, + "y": 222.13400000000001 + }, + { + "x": 283.248, + "y": 220.048 + }, + { + "x": 281.75, + "y": 218.25 + }, + { + "x": 279.952, + "y": 216.752 + }, + { + "x": 277.86600000000004, + "y": 215.566 + }, + { + "x": 275.50399999999996, + "y": 214.704 + }, + { + "x": 272.878, + "y": 214.178 + }, + { + "x": 270.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 227.234 + }, + { + "x": 285.296, + "y": 224.912 + }, + { + "x": 284.434, + "y": 222.998 + }, + { + "x": 283.248, + "y": 221.45600000000002 + }, + { + "x": 281.75, + "y": 220.25 + }, + { + "x": 279.952, + "y": 219.344 + }, + { + "x": 277.86600000000004, + "y": 218.702 + }, + { + "x": 275.50399999999996, + "y": 218.288 + }, + { + "x": 272.878, + "y": 218.066 + }, + { + "x": 270.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 286.0, + "y": 230.0 + }, + { + "x": 285.822, + "y": 227.346 + }, + { + "x": 285.296, + "y": 225.328 + }, + { + "x": 284.434, + "y": 223.862 + }, + { + "x": 283.248, + "y": 222.86400000000003 + }, + { + "x": 281.75, + "y": 222.25 + }, + { + "x": 279.952, + "y": 221.93599999999998 + }, + { + "x": 277.86600000000004, + "y": 221.838 + }, + { + "x": 275.50399999999996, + "y": 221.872 + }, + { + "x": 272.878, + "y": 221.954 + }, + { + "x": 270.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_2_3_3", + "endRoad": "road_2_2_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 294.0, + "y": 230.0 + }, + { + "x": 294.11199999999997, + "y": 226.16 + }, + { + "x": 294.416, + "y": 220.88000000000002 + }, + { + "x": 294.86400000000003, + "y": 214.51999999999998 + }, + { + "x": 295.408, + "y": 207.44 + }, + { + "x": 296.0, + "y": 200.0 + }, + { + "x": 296.592, + "y": 192.56 + }, + { + "x": 297.136, + "y": 185.48 + }, + { + "x": 297.584, + "y": 179.12 + }, + { + "x": 297.88800000000003, + "y": 173.84000000000003 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 294.0, + "y": 230.0 + }, + { + "x": 294.0, + "y": 226.16 + }, + { + "x": 294.0, + "y": 220.88000000000002 + }, + { + "x": 294.0, + "y": 214.51999999999998 + }, + { + "x": 294.0, + "y": 207.44 + }, + { + "x": 294.0, + "y": 200.0 + }, + { + "x": 294.0, + "y": 192.56 + }, + { + "x": 294.0, + "y": 185.48 + }, + { + "x": 294.0, + "y": 179.12 + }, + { + "x": 294.0, + "y": 173.84000000000003 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 294.0, + "y": 230.0 + }, + { + "x": 293.888, + "y": 226.16 + }, + { + "x": 293.584, + "y": 220.88000000000002 + }, + { + "x": 293.136, + "y": 214.51999999999998 + }, + { + "x": 292.592, + "y": 207.44 + }, + { + "x": 292.0, + "y": 200.0 + }, + { + "x": 291.408, + "y": 192.56 + }, + { + "x": 290.86400000000003, + "y": 185.48 + }, + { + "x": 290.416, + "y": 179.12 + }, + { + "x": 290.112, + "y": 173.84000000000003 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 294.0, + "y": 230.0 + }, + { + "x": 293.77599999999995, + "y": 226.16 + }, + { + "x": 293.168, + "y": 220.88000000000002 + }, + { + "x": 292.27200000000005, + "y": 214.51999999999998 + }, + { + "x": 291.18399999999997, + "y": 207.44 + }, + { + "x": 290.0, + "y": 200.0 + }, + { + "x": 288.816, + "y": 192.56 + }, + { + "x": 287.728, + "y": 185.48 + }, + { + "x": 286.832, + "y": 179.12 + }, + { + "x": 286.22400000000005, + "y": 173.84000000000003 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 290.0, + "y": 230.0 + }, + { + "x": 290.224, + "y": 226.16 + }, + { + "x": 290.83200000000005, + "y": 220.88000000000002 + }, + { + "x": 291.728, + "y": 214.51999999999998 + }, + { + "x": 292.81600000000003, + "y": 207.44 + }, + { + "x": 294.0, + "y": 200.0 + }, + { + "x": 295.18399999999997, + "y": 192.56 + }, + { + "x": 296.272, + "y": 185.48 + }, + { + "x": 297.168, + "y": 179.12 + }, + { + "x": 297.776, + "y": 173.84000000000003 + }, + { + "x": 298.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 290.0, + "y": 230.0 + }, + { + "x": 290.112, + "y": 226.16 + }, + { + "x": 290.41600000000005, + "y": 220.88000000000002 + }, + { + "x": 290.86400000000003, + "y": 214.51999999999998 + }, + { + "x": 291.408, + "y": 207.44 + }, + { + "x": 292.0, + "y": 200.0 + }, + { + "x": 292.592, + "y": 192.56 + }, + { + "x": 293.136, + "y": 185.48 + }, + { + "x": 293.584, + "y": 179.12 + }, + { + "x": 293.888, + "y": 173.84000000000003 + }, + { + "x": 294.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 290.0, + "y": 230.0 + }, + { + "x": 290.0, + "y": 226.16 + }, + { + "x": 290.00000000000006, + "y": 220.88000000000002 + }, + { + "x": 290.0, + "y": 214.51999999999998 + }, + { + "x": 290.0, + "y": 207.44 + }, + { + "x": 290.0, + "y": 200.0 + }, + { + "x": 290.0, + "y": 192.56 + }, + { + "x": 290.0, + "y": 185.48 + }, + { + "x": 290.0, + "y": 179.12 + }, + { + "x": 290.0, + "y": 173.84000000000003 + }, + { + "x": 290.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 290.0, + "y": 230.0 + }, + { + "x": 289.888, + "y": 226.16 + }, + { + "x": 289.58400000000006, + "y": 220.88000000000002 + }, + { + "x": 289.136, + "y": 214.51999999999998 + }, + { + "x": 288.592, + "y": 207.44 + }, + { + "x": 288.0, + "y": 200.0 + }, + { + "x": 287.408, + "y": 192.56 + }, + { + "x": 286.86400000000003, + "y": 185.48 + }, + { + "x": 286.416, + "y": 179.12 + }, + { + "x": 286.112, + "y": 173.84000000000003 + }, + { + "x": 286.0, + "y": 170.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_3_2", + "point": { + "x": 600, + "y": 200 + }, + "width": 30, + "roads": [ + "road_2_2_0", + "road_3_1_1", + "road_4_2_2", + "road_3_3_3", + "road_3_2_0", + "road_3_2_1", + "road_3_2_2", + "road_3_2_3" + ], + "roadLinks": [ + { + "type": "go_straight", + "startRoad": "road_2_2_0", + "endRoad": "road_3_2_0", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 190.22400000000002 + }, + { + "x": 579.12, + "y": 190.83200000000002 + }, + { + "x": 585.48, + "y": 191.728 + }, + { + "x": 592.5600000000001, + "y": 192.81599999999997 + }, + { + "x": 600.0, + "y": 194.0 + }, + { + "x": 607.4399999999999, + "y": 195.18400000000003 + }, + { + "x": 614.5200000000001, + "y": 196.272 + }, + { + "x": 620.88, + "y": 197.168 + }, + { + "x": 626.1600000000001, + "y": 197.77599999999998 + }, + { + "x": 630.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 190.112 + }, + { + "x": 579.12, + "y": 190.41600000000003 + }, + { + "x": 585.48, + "y": 190.864 + }, + { + "x": 592.5600000000001, + "y": 191.408 + }, + { + "x": 600.0, + "y": 192.0 + }, + { + "x": 607.4399999999999, + "y": 192.592 + }, + { + "x": 614.5200000000001, + "y": 193.136 + }, + { + "x": 620.88, + "y": 193.584 + }, + { + "x": 626.1600000000001, + "y": 193.88799999999998 + }, + { + "x": 630.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 190.0 + }, + { + "x": 579.12, + "y": 190.0 + }, + { + "x": 585.48, + "y": 190.0 + }, + { + "x": 592.5600000000001, + "y": 190.0 + }, + { + "x": 600.0, + "y": 190.0 + }, + { + "x": 607.4399999999999, + "y": 190.0 + }, + { + "x": 614.5200000000001, + "y": 190.0 + }, + { + "x": 620.88, + "y": 190.0 + }, + { + "x": 626.1600000000001, + "y": 190.0 + }, + { + "x": 630.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 189.888 + }, + { + "x": 579.12, + "y": 189.584 + }, + { + "x": 585.48, + "y": 189.13600000000002 + }, + { + "x": 592.5600000000001, + "y": 188.59199999999998 + }, + { + "x": 600.0, + "y": 188.0 + }, + { + "x": 607.4399999999999, + "y": 187.40800000000002 + }, + { + "x": 614.5200000000001, + "y": 186.864 + }, + { + "x": 620.88, + "y": 186.416 + }, + { + "x": 626.1600000000001, + "y": 186.112 + }, + { + "x": 630.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 189.776 + }, + { + "x": 579.12, + "y": 189.168 + }, + { + "x": 585.48, + "y": 188.27200000000002 + }, + { + "x": 592.5600000000001, + "y": 187.184 + }, + { + "x": 600.0, + "y": 186.0 + }, + { + "x": 607.4399999999999, + "y": 184.816 + }, + { + "x": 614.5200000000001, + "y": 183.728 + }, + { + "x": 620.88, + "y": 182.832 + }, + { + "x": 626.1600000000001, + "y": 182.224 + }, + { + "x": 630.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": 190.0 + }, + { + "x": 573.8399999999999, + "y": 189.66400000000002 + }, + { + "x": 579.12, + "y": 188.752 + }, + { + "x": 585.48, + "y": 187.40800000000002 + }, + { + "x": 592.5600000000001, + "y": 185.77599999999998 + }, + { + "x": 600.0, + "y": 184.0 + }, + { + "x": 607.4399999999999, + "y": 182.224 + }, + { + "x": 614.5200000000001, + "y": 180.592 + }, + { + "x": 620.88, + "y": 179.248 + }, + { + "x": 626.1600000000001, + "y": 178.33599999999998 + }, + { + "x": 630.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 186.336 + }, + { + "x": 579.12, + "y": 187.24800000000002 + }, + { + "x": 585.48, + "y": 188.592 + }, + { + "x": 592.5600000000001, + "y": 190.224 + }, + { + "x": 600.0, + "y": 192.0 + }, + { + "x": 607.4399999999999, + "y": 193.776 + }, + { + "x": 614.5200000000001, + "y": 195.408 + }, + { + "x": 620.88, + "y": 196.75199999999998 + }, + { + "x": 626.1600000000001, + "y": 197.664 + }, + { + "x": 630.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 186.224 + }, + { + "x": 579.12, + "y": 186.83200000000002 + }, + { + "x": 585.48, + "y": 187.728 + }, + { + "x": 592.5600000000001, + "y": 188.81599999999997 + }, + { + "x": 600.0, + "y": 190.0 + }, + { + "x": 607.4399999999999, + "y": 191.18400000000003 + }, + { + "x": 614.5200000000001, + "y": 192.272 + }, + { + "x": 620.88, + "y": 193.16799999999998 + }, + { + "x": 626.1600000000001, + "y": 193.77599999999998 + }, + { + "x": 630.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 186.112 + }, + { + "x": 579.12, + "y": 186.416 + }, + { + "x": 585.48, + "y": 186.86400000000003 + }, + { + "x": 592.5600000000001, + "y": 187.40800000000002 + }, + { + "x": 600.0, + "y": 188.0 + }, + { + "x": 607.4399999999999, + "y": 188.59199999999998 + }, + { + "x": 614.5200000000001, + "y": 189.136 + }, + { + "x": 620.88, + "y": 189.584 + }, + { + "x": 626.1600000000001, + "y": 189.888 + }, + { + "x": 630.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 186.0 + }, + { + "x": 579.12, + "y": 186.0 + }, + { + "x": 585.48, + "y": 186.0 + }, + { + "x": 592.5600000000001, + "y": 186.0 + }, + { + "x": 600.0, + "y": 186.0 + }, + { + "x": 607.4399999999999, + "y": 186.0 + }, + { + "x": 614.5200000000001, + "y": 186.0 + }, + { + "x": 620.88, + "y": 186.0 + }, + { + "x": 626.1600000000001, + "y": 186.0 + }, + { + "x": 630.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 185.888 + }, + { + "x": 579.12, + "y": 185.584 + }, + { + "x": 585.48, + "y": 185.13600000000002 + }, + { + "x": 592.5600000000001, + "y": 184.59199999999998 + }, + { + "x": 600.0, + "y": 184.0 + }, + { + "x": 607.4399999999999, + "y": 183.40800000000002 + }, + { + "x": 614.5200000000001, + "y": 182.864 + }, + { + "x": 620.88, + "y": 182.416 + }, + { + "x": 626.1600000000001, + "y": 182.112 + }, + { + "x": 630.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": 186.0 + }, + { + "x": 573.8399999999999, + "y": 185.776 + }, + { + "x": 579.12, + "y": 185.168 + }, + { + "x": 585.48, + "y": 184.27200000000002 + }, + { + "x": 592.5600000000001, + "y": 183.184 + }, + { + "x": 600.0, + "y": 182.0 + }, + { + "x": 607.4399999999999, + "y": 180.816 + }, + { + "x": 614.5200000000001, + "y": 179.728 + }, + { + "x": 620.88, + "y": 178.832 + }, + { + "x": 626.1600000000001, + "y": 178.224 + }, + { + "x": 630.0, + "y": 178.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 182.448 + }, + { + "x": 579.12, + "y": 183.66400000000002 + }, + { + "x": 585.48, + "y": 185.45600000000002 + }, + { + "x": 592.5600000000001, + "y": 187.632 + }, + { + "x": 600.0, + "y": 190.0 + }, + { + "x": 607.4399999999999, + "y": 192.368 + }, + { + "x": 614.5200000000001, + "y": 194.54399999999998 + }, + { + "x": 620.88, + "y": 196.33599999999998 + }, + { + "x": 626.1600000000001, + "y": 197.552 + }, + { + "x": 630.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 182.33599999999998 + }, + { + "x": 579.12, + "y": 183.24800000000002 + }, + { + "x": 585.48, + "y": 184.592 + }, + { + "x": 592.5600000000001, + "y": 186.224 + }, + { + "x": 600.0, + "y": 188.0 + }, + { + "x": 607.4399999999999, + "y": 189.776 + }, + { + "x": 614.5200000000001, + "y": 191.408 + }, + { + "x": 620.88, + "y": 192.75199999999998 + }, + { + "x": 626.1600000000001, + "y": 193.664 + }, + { + "x": 630.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 182.224 + }, + { + "x": 579.12, + "y": 182.832 + }, + { + "x": 585.48, + "y": 183.728 + }, + { + "x": 592.5600000000001, + "y": 184.816 + }, + { + "x": 600.0, + "y": 186.0 + }, + { + "x": 607.4399999999999, + "y": 187.184 + }, + { + "x": 614.5200000000001, + "y": 188.272 + }, + { + "x": 620.88, + "y": 189.168 + }, + { + "x": 626.1600000000001, + "y": 189.776 + }, + { + "x": 630.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 182.112 + }, + { + "x": 579.12, + "y": 182.416 + }, + { + "x": 585.48, + "y": 182.86400000000003 + }, + { + "x": 592.5600000000001, + "y": 183.40800000000002 + }, + { + "x": 600.0, + "y": 184.0 + }, + { + "x": 607.4399999999999, + "y": 184.59199999999998 + }, + { + "x": 614.5200000000001, + "y": 185.136 + }, + { + "x": 620.88, + "y": 185.584 + }, + { + "x": 626.1600000000001, + "y": 185.888 + }, + { + "x": 630.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 182.0 + }, + { + "x": 579.12, + "y": 182.0 + }, + { + "x": 585.48, + "y": 182.00000000000003 + }, + { + "x": 592.5600000000001, + "y": 182.0 + }, + { + "x": 600.0, + "y": 182.0 + }, + { + "x": 607.4399999999999, + "y": 182.0 + }, + { + "x": 614.5200000000001, + "y": 182.0 + }, + { + "x": 620.88, + "y": 182.0 + }, + { + "x": 626.1600000000001, + "y": 182.0 + }, + { + "x": 630.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.8399999999999, + "y": 181.888 + }, + { + "x": 579.12, + "y": 181.584 + }, + { + "x": 585.48, + "y": 181.13600000000002 + }, + { + "x": 592.5600000000001, + "y": 180.59199999999998 + }, + { + "x": 600.0, + "y": 180.0 + }, + { + "x": 607.4399999999999, + "y": 179.40800000000002 + }, + { + "x": 614.5200000000001, + "y": 178.864 + }, + { + "x": 620.88, + "y": 178.416 + }, + { + "x": 626.1600000000001, + "y": 178.112 + }, + { + "x": 630.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_2_2_0", + "endRoad": "road_3_2_1", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 198.0 + }, + { + "x": 573.3259999999999, + "y": 198.62599999999998 + }, + { + "x": 577.1680000000001, + "y": 200.36800000000002 + }, + { + "x": 581.322, + "y": 203.02200000000002 + }, + { + "x": 585.5840000000001, + "y": 206.38400000000001 + }, + { + "x": 589.75, + "y": 210.25 + }, + { + "x": 593.616, + "y": 214.416 + }, + { + "x": 596.9780000000001, + "y": 218.67800000000003 + }, + { + "x": 599.632, + "y": 222.83200000000002 + }, + { + "x": 601.374, + "y": 226.674 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 198.0 + }, + { + "x": 573.4379999999999, + "y": 198.62599999999998 + }, + { + "x": 577.5840000000001, + "y": 200.36800000000002 + }, + { + "x": 582.186, + "y": 203.02200000000002 + }, + { + "x": 586.992, + "y": 206.38400000000001 + }, + { + "x": 591.75, + "y": 210.25 + }, + { + "x": 596.2080000000001, + "y": 214.416 + }, + { + "x": 600.114, + "y": 218.67800000000003 + }, + { + "x": 603.216, + "y": 222.83200000000002 + }, + { + "x": 605.2620000000001, + "y": 226.674 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 198.0 + }, + { + "x": 573.55, + "y": 198.62599999999998 + }, + { + "x": 578.0000000000001, + "y": 200.36800000000002 + }, + { + "x": 583.0500000000001, + "y": 203.02200000000002 + }, + { + "x": 588.4, + "y": 206.38400000000001 + }, + { + "x": 593.75, + "y": 210.25 + }, + { + "x": 598.8, + "y": 214.416 + }, + { + "x": 603.25, + "y": 218.67800000000003 + }, + { + "x": 606.8, + "y": 222.83200000000002 + }, + { + "x": 609.15, + "y": 226.674 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 198.0 + }, + { + "x": 573.6619999999999, + "y": 198.62599999999998 + }, + { + "x": 578.416, + "y": 200.36800000000002 + }, + { + "x": 583.914, + "y": 203.02200000000002 + }, + { + "x": 589.808, + "y": 206.38400000000001 + }, + { + "x": 595.75, + "y": 210.25 + }, + { + "x": 601.392, + "y": 214.416 + }, + { + "x": 606.386, + "y": 218.67800000000003 + }, + { + "x": 610.384, + "y": 222.83200000000002 + }, + { + "x": 613.038, + "y": 226.674 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 194.0 + }, + { + "x": 573.3259999999999, + "y": 194.73799999999997 + }, + { + "x": 577.1680000000001, + "y": 196.78400000000002 + }, + { + "x": 581.322, + "y": 199.88600000000002 + }, + { + "x": 585.5840000000001, + "y": 203.79200000000003 + }, + { + "x": 589.75, + "y": 208.25 + }, + { + "x": 593.616, + "y": 213.00799999999998 + }, + { + "x": 596.9780000000001, + "y": 217.81400000000002 + }, + { + "x": 599.632, + "y": 222.41600000000003 + }, + { + "x": 601.374, + "y": 226.562 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 194.0 + }, + { + "x": 573.4379999999999, + "y": 194.73799999999997 + }, + { + "x": 577.5840000000001, + "y": 196.78400000000002 + }, + { + "x": 582.186, + "y": 199.88600000000002 + }, + { + "x": 586.992, + "y": 203.79200000000003 + }, + { + "x": 591.75, + "y": 208.25 + }, + { + "x": 596.2080000000001, + "y": 213.00799999999998 + }, + { + "x": 600.114, + "y": 217.81400000000002 + }, + { + "x": 603.216, + "y": 222.41600000000003 + }, + { + "x": 605.2620000000001, + "y": 226.562 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 194.0 + }, + { + "x": 573.55, + "y": 194.73799999999997 + }, + { + "x": 578.0000000000001, + "y": 196.78400000000002 + }, + { + "x": 583.0500000000001, + "y": 199.88600000000002 + }, + { + "x": 588.4, + "y": 203.79200000000003 + }, + { + "x": 593.75, + "y": 208.25 + }, + { + "x": 598.8, + "y": 213.00799999999998 + }, + { + "x": 603.25, + "y": 217.81400000000002 + }, + { + "x": 606.8, + "y": 222.41600000000003 + }, + { + "x": 609.15, + "y": 226.562 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 194.0 + }, + { + "x": 573.6619999999999, + "y": 194.73799999999997 + }, + { + "x": 578.416, + "y": 196.78400000000002 + }, + { + "x": 583.914, + "y": 199.88600000000002 + }, + { + "x": 589.808, + "y": 203.79200000000003 + }, + { + "x": 595.75, + "y": 208.25 + }, + { + "x": 601.392, + "y": 213.00799999999998 + }, + { + "x": 606.386, + "y": 217.81400000000002 + }, + { + "x": 610.384, + "y": 222.41600000000003 + }, + { + "x": 613.038, + "y": 226.562 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_2_2_0", + "endRoad": "road_3_2_3", + "direction": 0, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.2139999999999, + "y": 181.934 + }, + { + "x": 576.7520000000001, + "y": 181.71200000000002 + }, + { + "x": 580.4580000000001, + "y": 181.298 + }, + { + "x": 584.176, + "y": 180.656 + }, + { + "x": 587.75, + "y": 179.75 + }, + { + "x": 591.024, + "y": 178.54399999999998 + }, + { + "x": 593.842, + "y": 177.00199999999998 + }, + { + "x": 596.048, + "y": 175.088 + }, + { + "x": 597.486, + "y": 172.76600000000002 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 573.1019999999999, + "y": 181.934 + }, + { + "x": 576.336, + "y": 181.71200000000002 + }, + { + "x": 579.594, + "y": 181.298 + }, + { + "x": 582.768, + "y": 180.656 + }, + { + "x": 585.75, + "y": 179.75 + }, + { + "x": 588.432, + "y": 178.54399999999998 + }, + { + "x": 590.706, + "y": 177.00199999999998 + }, + { + "x": 592.4639999999999, + "y": 175.088 + }, + { + "x": 593.598, + "y": 172.76600000000002 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 572.9899999999999, + "y": 181.934 + }, + { + "x": 575.9200000000001, + "y": 181.71200000000002 + }, + { + "x": 578.73, + "y": 181.298 + }, + { + "x": 581.36, + "y": 180.656 + }, + { + "x": 583.75, + "y": 179.75 + }, + { + "x": 585.8399999999999, + "y": 178.54399999999998 + }, + { + "x": 587.5699999999999, + "y": 177.00199999999998 + }, + { + "x": 588.88, + "y": 175.088 + }, + { + "x": 589.71, + "y": 172.76600000000002 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 182.0 + }, + { + "x": 572.8779999999999, + "y": 181.934 + }, + { + "x": 575.5040000000001, + "y": 181.71200000000002 + }, + { + "x": 577.866, + "y": 181.298 + }, + { + "x": 579.952, + "y": 180.656 + }, + { + "x": 581.75, + "y": 179.75 + }, + { + "x": 583.248, + "y": 178.54399999999998 + }, + { + "x": 584.434, + "y": 177.00199999999998 + }, + { + "x": 585.2959999999999, + "y": 175.088 + }, + { + "x": 585.822, + "y": 172.76600000000002 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 570.0, + "y": 178.0 + }, + { + "x": 573.2139999999999, + "y": 178.046 + }, + { + "x": 576.7520000000001, + "y": 178.12800000000001 + }, + { + "x": 580.4580000000001, + "y": 178.16199999999998 + }, + { + "x": 584.176, + "y": 178.064 + }, + { + "x": 587.75, + "y": 177.75 + }, + { + "x": 591.024, + "y": 177.136 + }, + { + "x": 593.842, + "y": 176.13799999999998 + }, + { + "x": 596.048, + "y": 174.672 + }, + { + "x": 597.486, + "y": 172.65400000000002 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 570.0, + "y": 178.0 + }, + { + "x": 573.1019999999999, + "y": 178.046 + }, + { + "x": 576.336, + "y": 178.12800000000001 + }, + { + "x": 579.594, + "y": 178.16199999999998 + }, + { + "x": 582.768, + "y": 178.064 + }, + { + "x": 585.75, + "y": 177.75 + }, + { + "x": 588.432, + "y": 177.136 + }, + { + "x": 590.706, + "y": 176.13799999999998 + }, + { + "x": 592.4639999999999, + "y": 174.672 + }, + { + "x": 593.598, + "y": 172.65400000000002 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 570.0, + "y": 178.0 + }, + { + "x": 572.9899999999999, + "y": 178.046 + }, + { + "x": 575.9200000000001, + "y": 178.12800000000001 + }, + { + "x": 578.73, + "y": 178.16199999999998 + }, + { + "x": 581.36, + "y": 178.064 + }, + { + "x": 583.75, + "y": 177.75 + }, + { + "x": 585.8399999999999, + "y": 177.136 + }, + { + "x": 587.5699999999999, + "y": 176.13799999999998 + }, + { + "x": 588.88, + "y": 174.672 + }, + { + "x": 589.71, + "y": 172.65400000000002 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 570.0, + "y": 178.0 + }, + { + "x": 572.8779999999999, + "y": 178.046 + }, + { + "x": 575.5040000000001, + "y": 178.12800000000001 + }, + { + "x": 577.866, + "y": 178.16199999999998 + }, + { + "x": 579.952, + "y": 178.064 + }, + { + "x": 581.75, + "y": 177.75 + }, + { + "x": 583.248, + "y": 177.136 + }, + { + "x": 584.434, + "y": 176.13799999999998 + }, + { + "x": 585.2959999999999, + "y": 174.672 + }, + { + "x": 585.822, + "y": 172.65400000000002 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_1_1", + "endRoad": "road_3_2_0", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 173.21400000000003 + }, + { + "x": 614.704, + "y": 176.752 + }, + { + "x": 615.566, + "y": 180.458 + }, + { + "x": 616.7520000000001, + "y": 184.176 + }, + { + "x": 618.25, + "y": 187.75 + }, + { + "x": 620.0479999999999, + "y": 191.024 + }, + { + "x": 622.134, + "y": 193.84199999999998 + }, + { + "x": 624.496, + "y": 196.048 + }, + { + "x": 627.1220000000001, + "y": 197.486 + }, + { + "x": 630.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 173.102 + }, + { + "x": 614.704, + "y": 176.336 + }, + { + "x": 615.566, + "y": 179.594 + }, + { + "x": 616.7520000000001, + "y": 182.76799999999997 + }, + { + "x": 618.25, + "y": 185.75 + }, + { + "x": 620.0479999999999, + "y": 188.43200000000002 + }, + { + "x": 622.134, + "y": 190.706 + }, + { + "x": 624.496, + "y": 192.464 + }, + { + "x": 627.1220000000001, + "y": 193.59799999999998 + }, + { + "x": 630.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 172.99 + }, + { + "x": 614.704, + "y": 175.92000000000002 + }, + { + "x": 615.566, + "y": 178.73000000000002 + }, + { + "x": 616.7520000000001, + "y": 181.36 + }, + { + "x": 618.25, + "y": 183.75 + }, + { + "x": 620.0479999999999, + "y": 185.83999999999997 + }, + { + "x": 622.134, + "y": 187.57 + }, + { + "x": 624.496, + "y": 188.88000000000002 + }, + { + "x": 627.1220000000001, + "y": 189.71 + }, + { + "x": 630.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 172.87800000000001 + }, + { + "x": 614.704, + "y": 175.504 + }, + { + "x": 615.566, + "y": 177.86599999999999 + }, + { + "x": 616.7520000000001, + "y": 179.952 + }, + { + "x": 618.25, + "y": 181.75 + }, + { + "x": 620.0479999999999, + "y": 183.248 + }, + { + "x": 622.134, + "y": 184.434 + }, + { + "x": 624.496, + "y": 185.29600000000002 + }, + { + "x": 627.1220000000001, + "y": 185.822 + }, + { + "x": 630.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 172.76600000000002 + }, + { + "x": 614.704, + "y": 175.088 + }, + { + "x": 615.566, + "y": 177.002 + }, + { + "x": 616.7520000000001, + "y": 178.54399999999998 + }, + { + "x": 618.25, + "y": 179.75 + }, + { + "x": 620.0479999999999, + "y": 180.656 + }, + { + "x": 622.134, + "y": 181.298 + }, + { + "x": 624.496, + "y": 181.71200000000002 + }, + { + "x": 627.1220000000001, + "y": 181.934 + }, + { + "x": 630.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 614.0, + "y": 170.0 + }, + { + "x": 614.178, + "y": 172.65400000000002 + }, + { + "x": 614.704, + "y": 174.672 + }, + { + "x": 615.566, + "y": 176.138 + }, + { + "x": 616.7520000000001, + "y": 177.136 + }, + { + "x": 618.25, + "y": 177.75 + }, + { + "x": 620.0479999999999, + "y": 178.064 + }, + { + "x": 622.134, + "y": 178.162 + }, + { + "x": 624.496, + "y": 178.12800000000001 + }, + { + "x": 627.1220000000001, + "y": 178.046 + }, + { + "x": 630.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_1_1", + "endRoad": "road_3_2_1", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 606.0, + "y": 170.0 + }, + { + "x": 605.888, + "y": 173.84 + }, + { + "x": 605.5840000000001, + "y": 179.12 + }, + { + "x": 605.1360000000001, + "y": 185.48000000000002 + }, + { + "x": 604.592, + "y": 192.56 + }, + { + "x": 604.0, + "y": 200.0 + }, + { + "x": 603.408, + "y": 207.44 + }, + { + "x": 602.864, + "y": 214.52 + }, + { + "x": 602.4159999999999, + "y": 220.88000000000002 + }, + { + "x": 602.112, + "y": 226.16 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 606.0, + "y": 170.0 + }, + { + "x": 606.0, + "y": 173.84 + }, + { + "x": 606.0, + "y": 179.12 + }, + { + "x": 606.0, + "y": 185.48000000000002 + }, + { + "x": 606.0, + "y": 192.56 + }, + { + "x": 606.0, + "y": 200.0 + }, + { + "x": 606.0, + "y": 207.44 + }, + { + "x": 606.0, + "y": 214.52 + }, + { + "x": 606.0, + "y": 220.88000000000002 + }, + { + "x": 606.0, + "y": 226.16 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 606.0, + "y": 170.0 + }, + { + "x": 606.1120000000001, + "y": 173.84 + }, + { + "x": 606.416, + "y": 179.12 + }, + { + "x": 606.864, + "y": 185.48000000000002 + }, + { + "x": 607.408, + "y": 192.56 + }, + { + "x": 608.0, + "y": 200.0 + }, + { + "x": 608.592, + "y": 207.44 + }, + { + "x": 609.136, + "y": 214.52 + }, + { + "x": 609.584, + "y": 220.88000000000002 + }, + { + "x": 609.8879999999999, + "y": 226.16 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 606.0, + "y": 170.0 + }, + { + "x": 606.224, + "y": 173.84 + }, + { + "x": 606.832, + "y": 179.12 + }, + { + "x": 607.7280000000001, + "y": 185.48000000000002 + }, + { + "x": 608.816, + "y": 192.56 + }, + { + "x": 610.0, + "y": 200.0 + }, + { + "x": 611.184, + "y": 207.44 + }, + { + "x": 612.272, + "y": 214.52 + }, + { + "x": 613.168, + "y": 220.88000000000002 + }, + { + "x": 613.776, + "y": 226.16 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 610.0, + "y": 170.0 + }, + { + "x": 609.776, + "y": 173.84 + }, + { + "x": 609.1680000000001, + "y": 179.12 + }, + { + "x": 608.272, + "y": 185.48000000000002 + }, + { + "x": 607.184, + "y": 192.56 + }, + { + "x": 606.0, + "y": 200.0 + }, + { + "x": 604.816, + "y": 207.44 + }, + { + "x": 603.7280000000001, + "y": 214.52 + }, + { + "x": 602.832, + "y": 220.88000000000002 + }, + { + "x": 602.224, + "y": 226.16 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 610.0, + "y": 170.0 + }, + { + "x": 609.8879999999999, + "y": 173.84 + }, + { + "x": 609.5840000000001, + "y": 179.12 + }, + { + "x": 609.136, + "y": 185.48000000000002 + }, + { + "x": 608.5920000000001, + "y": 192.56 + }, + { + "x": 608.0, + "y": 200.0 + }, + { + "x": 607.408, + "y": 207.44 + }, + { + "x": 606.864, + "y": 214.52 + }, + { + "x": 606.416, + "y": 220.88000000000002 + }, + { + "x": 606.1120000000001, + "y": 226.16 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 610.0, + "y": 170.0 + }, + { + "x": 610.0, + "y": 173.84 + }, + { + "x": 610.0000000000001, + "y": 179.12 + }, + { + "x": 610.0, + "y": 185.48000000000002 + }, + { + "x": 610.0, + "y": 192.56 + }, + { + "x": 610.0, + "y": 200.0 + }, + { + "x": 610.0, + "y": 207.44 + }, + { + "x": 610.0, + "y": 214.52 + }, + { + "x": 610.0, + "y": 220.88000000000002 + }, + { + "x": 610.0, + "y": 226.16 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 610.0, + "y": 170.0 + }, + { + "x": 610.112, + "y": 173.84 + }, + { + "x": 610.416, + "y": 179.12 + }, + { + "x": 610.864, + "y": 185.48000000000002 + }, + { + "x": 611.408, + "y": 192.56 + }, + { + "x": 612.0, + "y": 200.0 + }, + { + "x": 612.592, + "y": 207.44 + }, + { + "x": 613.136, + "y": 214.52 + }, + { + "x": 613.5840000000001, + "y": 220.88000000000002 + }, + { + "x": 613.888, + "y": 226.16 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_1_1", + "endRoad": "road_3_2_2", + "direction": 1, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.32600000000002 + }, + { + "x": 599.6320000000001, + "y": 177.168 + }, + { + "x": 596.9780000000001, + "y": 181.322 + }, + { + "x": 593.616, + "y": 185.584 + }, + { + "x": 589.75, + "y": 189.75 + }, + { + "x": 585.5840000000001, + "y": 193.61599999999999 + }, + { + "x": 581.322, + "y": 196.978 + }, + { + "x": 577.168, + "y": 199.632 + }, + { + "x": 573.3259999999999, + "y": 201.374 + }, + { + "x": 570.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.43800000000002 + }, + { + "x": 599.6320000000001, + "y": 177.584 + }, + { + "x": 596.9780000000001, + "y": 182.186 + }, + { + "x": 593.616, + "y": 186.992 + }, + { + "x": 589.75, + "y": 191.75 + }, + { + "x": 585.5840000000001, + "y": 196.208 + }, + { + "x": 581.322, + "y": 200.114 + }, + { + "x": 577.168, + "y": 203.216 + }, + { + "x": 573.3259999999999, + "y": 205.262 + }, + { + "x": 570.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.55 + }, + { + "x": 599.6320000000001, + "y": 178.0 + }, + { + "x": 596.9780000000001, + "y": 183.05 + }, + { + "x": 593.616, + "y": 188.39999999999998 + }, + { + "x": 589.75, + "y": 193.75 + }, + { + "x": 585.5840000000001, + "y": 198.8 + }, + { + "x": 581.322, + "y": 203.25 + }, + { + "x": 577.168, + "y": 206.8 + }, + { + "x": 573.3259999999999, + "y": 209.15 + }, + { + "x": 570.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.662 + }, + { + "x": 599.6320000000001, + "y": 178.416 + }, + { + "x": 596.9780000000001, + "y": 183.914 + }, + { + "x": 593.616, + "y": 189.808 + }, + { + "x": 589.75, + "y": 195.75 + }, + { + "x": 585.5840000000001, + "y": 201.392 + }, + { + "x": 581.322, + "y": 206.386 + }, + { + "x": 577.168, + "y": 210.38400000000001 + }, + { + "x": 573.3259999999999, + "y": 213.03799999999998 + }, + { + "x": 570.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.77400000000003 + }, + { + "x": 599.6320000000001, + "y": 178.832 + }, + { + "x": 596.9780000000001, + "y": 184.77800000000002 + }, + { + "x": 593.616, + "y": 191.216 + }, + { + "x": 589.75, + "y": 197.75 + }, + { + "x": 585.5840000000001, + "y": 203.984 + }, + { + "x": 581.322, + "y": 209.522 + }, + { + "x": 577.168, + "y": 213.96800000000002 + }, + { + "x": 573.3259999999999, + "y": 216.926 + }, + { + "x": 570.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 602.0, + "y": 170.0 + }, + { + "x": 601.374, + "y": 173.88600000000002 + }, + { + "x": 599.6320000000001, + "y": 179.248 + }, + { + "x": 596.9780000000001, + "y": 185.642 + }, + { + "x": 593.616, + "y": 192.624 + }, + { + "x": 589.75, + "y": 199.75 + }, + { + "x": 585.5840000000001, + "y": 206.576 + }, + { + "x": 581.322, + "y": 212.658 + }, + { + "x": 577.168, + "y": 217.55200000000002 + }, + { + "x": 573.3259999999999, + "y": 220.814 + }, + { + "x": 570.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_4_2_2", + "endRoad": "road_3_2_1", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.7860000000001, + "y": 218.06599999999997 + }, + { + "x": 623.248, + "y": 218.288 + }, + { + "x": 619.542, + "y": 218.70200000000003 + }, + { + "x": 615.8240000000001, + "y": 219.344 + }, + { + "x": 612.25, + "y": 220.25 + }, + { + "x": 608.976, + "y": 221.45600000000002 + }, + { + "x": 606.158, + "y": 222.99800000000002 + }, + { + "x": 603.952, + "y": 224.912 + }, + { + "x": 602.514, + "y": 227.234 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.898, + "y": 218.06599999999997 + }, + { + "x": 623.664, + "y": 218.288 + }, + { + "x": 620.406, + "y": 218.70200000000003 + }, + { + "x": 617.232, + "y": 219.344 + }, + { + "x": 614.25, + "y": 220.25 + }, + { + "x": 611.568, + "y": 221.45600000000002 + }, + { + "x": 609.294, + "y": 222.99800000000002 + }, + { + "x": 607.5360000000001, + "y": 224.912 + }, + { + "x": 606.402, + "y": 227.234 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 627.0100000000001, + "y": 218.06599999999997 + }, + { + "x": 624.08, + "y": 218.288 + }, + { + "x": 621.27, + "y": 218.70200000000003 + }, + { + "x": 618.64, + "y": 219.344 + }, + { + "x": 616.25, + "y": 220.25 + }, + { + "x": 614.16, + "y": 221.45600000000002 + }, + { + "x": 612.4300000000001, + "y": 222.99800000000002 + }, + { + "x": 611.12, + "y": 224.912 + }, + { + "x": 610.29, + "y": 227.234 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 627.1220000000001, + "y": 218.06599999999997 + }, + { + "x": 624.496, + "y": 218.288 + }, + { + "x": 622.134, + "y": 218.70200000000003 + }, + { + "x": 620.048, + "y": 219.344 + }, + { + "x": 618.25, + "y": 220.25 + }, + { + "x": 616.752, + "y": 221.45600000000002 + }, + { + "x": 615.566, + "y": 222.99800000000002 + }, + { + "x": 614.7040000000001, + "y": 224.912 + }, + { + "x": 614.178, + "y": 227.234 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 222.0 + }, + { + "x": 626.7860000000001, + "y": 221.95399999999998 + }, + { + "x": 623.248, + "y": 221.872 + }, + { + "x": 619.542, + "y": 221.83800000000002 + }, + { + "x": 615.8240000000001, + "y": 221.93599999999998 + }, + { + "x": 612.25, + "y": 222.25 + }, + { + "x": 608.976, + "y": 222.864 + }, + { + "x": 606.158, + "y": 223.86200000000002 + }, + { + "x": 603.952, + "y": 225.328 + }, + { + "x": 602.514, + "y": 227.346 + }, + { + "x": 602.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 222.0 + }, + { + "x": 626.898, + "y": 221.95399999999998 + }, + { + "x": 623.664, + "y": 221.872 + }, + { + "x": 620.406, + "y": 221.83800000000002 + }, + { + "x": 617.232, + "y": 221.93599999999998 + }, + { + "x": 614.25, + "y": 222.25 + }, + { + "x": 611.568, + "y": 222.864 + }, + { + "x": 609.294, + "y": 223.86200000000002 + }, + { + "x": 607.5360000000001, + "y": 225.328 + }, + { + "x": 606.402, + "y": 227.346 + }, + { + "x": 606.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 222.0 + }, + { + "x": 627.0100000000001, + "y": 221.95399999999998 + }, + { + "x": 624.08, + "y": 221.872 + }, + { + "x": 621.27, + "y": 221.83800000000002 + }, + { + "x": 618.64, + "y": 221.93599999999998 + }, + { + "x": 616.25, + "y": 222.25 + }, + { + "x": 614.16, + "y": 222.864 + }, + { + "x": 612.4300000000001, + "y": 223.86200000000002 + }, + { + "x": 611.12, + "y": 225.328 + }, + { + "x": 610.29, + "y": 227.346 + }, + { + "x": 610.0, + "y": 230.0 + } + ] + }, + { + "startLaneIndex": 5, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 222.0 + }, + { + "x": 627.1220000000001, + "y": 221.95399999999998 + }, + { + "x": 624.496, + "y": 221.872 + }, + { + "x": 622.134, + "y": 221.83800000000002 + }, + { + "x": 620.048, + "y": 221.93599999999998 + }, + { + "x": 618.25, + "y": 222.25 + }, + { + "x": 616.752, + "y": 222.864 + }, + { + "x": 615.566, + "y": 223.86200000000002 + }, + { + "x": 614.7040000000001, + "y": 225.328 + }, + { + "x": 614.178, + "y": 227.346 + }, + { + "x": 614.0, + "y": 230.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_4_2_2", + "endRoad": "road_3_2_2", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 209.776 + }, + { + "x": 620.88, + "y": 209.168 + }, + { + "x": 614.52, + "y": 208.27200000000002 + }, + { + "x": 607.4399999999999, + "y": 207.184 + }, + { + "x": 600.0, + "y": 206.0 + }, + { + "x": 592.5600000000001, + "y": 204.81599999999997 + }, + { + "x": 585.4799999999999, + "y": 203.728 + }, + { + "x": 579.12, + "y": 202.832 + }, + { + "x": 573.8399999999999, + "y": 202.224 + }, + { + "x": 570.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 209.888 + }, + { + "x": 620.88, + "y": 209.584 + }, + { + "x": 614.52, + "y": 209.13600000000002 + }, + { + "x": 607.4399999999999, + "y": 208.59199999999998 + }, + { + "x": 600.0, + "y": 208.0 + }, + { + "x": 592.5600000000001, + "y": 207.40800000000002 + }, + { + "x": 585.4799999999999, + "y": 206.864 + }, + { + "x": 579.12, + "y": 206.416 + }, + { + "x": 573.8399999999999, + "y": 206.112 + }, + { + "x": 570.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 210.0 + }, + { + "x": 620.88, + "y": 210.0 + }, + { + "x": 614.52, + "y": 210.00000000000003 + }, + { + "x": 607.4399999999999, + "y": 210.0 + }, + { + "x": 600.0, + "y": 210.0 + }, + { + "x": 592.5600000000001, + "y": 210.0 + }, + { + "x": 585.4799999999999, + "y": 210.0 + }, + { + "x": 579.12, + "y": 210.0 + }, + { + "x": 573.8399999999999, + "y": 210.0 + }, + { + "x": 570.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 210.112 + }, + { + "x": 620.88, + "y": 210.416 + }, + { + "x": 614.52, + "y": 210.86400000000003 + }, + { + "x": 607.4399999999999, + "y": 211.40800000000002 + }, + { + "x": 600.0, + "y": 212.0 + }, + { + "x": 592.5600000000001, + "y": 212.59199999999998 + }, + { + "x": 585.4799999999999, + "y": 213.136 + }, + { + "x": 579.12, + "y": 213.584 + }, + { + "x": 573.8399999999999, + "y": 213.88799999999998 + }, + { + "x": 570.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 210.22400000000002 + }, + { + "x": 620.88, + "y": 210.832 + }, + { + "x": 614.52, + "y": 211.728 + }, + { + "x": 607.4399999999999, + "y": 212.816 + }, + { + "x": 600.0, + "y": 214.0 + }, + { + "x": 592.5600000000001, + "y": 215.18400000000003 + }, + { + "x": 585.4799999999999, + "y": 216.272 + }, + { + "x": 579.12, + "y": 217.168 + }, + { + "x": 573.8399999999999, + "y": 217.77599999999998 + }, + { + "x": 570.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 210.0 + }, + { + "x": 626.1600000000001, + "y": 210.336 + }, + { + "x": 620.88, + "y": 211.248 + }, + { + "x": 614.52, + "y": 212.592 + }, + { + "x": 607.4399999999999, + "y": 214.224 + }, + { + "x": 600.0, + "y": 216.0 + }, + { + "x": 592.5600000000001, + "y": 217.776 + }, + { + "x": 585.4799999999999, + "y": 219.408 + }, + { + "x": 579.12, + "y": 220.752 + }, + { + "x": 573.8399999999999, + "y": 221.664 + }, + { + "x": 570.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 213.664 + }, + { + "x": 620.88, + "y": 212.752 + }, + { + "x": 614.52, + "y": 211.40800000000002 + }, + { + "x": 607.4399999999999, + "y": 209.77599999999998 + }, + { + "x": 600.0, + "y": 208.0 + }, + { + "x": 592.5600000000001, + "y": 206.224 + }, + { + "x": 585.4799999999999, + "y": 204.592 + }, + { + "x": 579.12, + "y": 203.248 + }, + { + "x": 573.8399999999999, + "y": 202.336 + }, + { + "x": 570.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 213.77599999999998 + }, + { + "x": 620.88, + "y": 213.168 + }, + { + "x": 614.52, + "y": 212.27200000000002 + }, + { + "x": 607.4399999999999, + "y": 211.18399999999997 + }, + { + "x": 600.0, + "y": 210.0 + }, + { + "x": 592.5600000000001, + "y": 208.816 + }, + { + "x": 585.4799999999999, + "y": 207.728 + }, + { + "x": 579.12, + "y": 206.832 + }, + { + "x": 573.8399999999999, + "y": 206.22400000000002 + }, + { + "x": 570.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 213.88799999999998 + }, + { + "x": 620.88, + "y": 213.584 + }, + { + "x": 614.52, + "y": 213.13600000000002 + }, + { + "x": 607.4399999999999, + "y": 212.59199999999998 + }, + { + "x": 600.0, + "y": 212.0 + }, + { + "x": 592.5600000000001, + "y": 211.40800000000002 + }, + { + "x": 585.4799999999999, + "y": 210.864 + }, + { + "x": 579.12, + "y": 210.416 + }, + { + "x": 573.8399999999999, + "y": 210.11200000000002 + }, + { + "x": 570.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 213.99999999999997 + }, + { + "x": 620.88, + "y": 214.0 + }, + { + "x": 614.52, + "y": 214.0 + }, + { + "x": 607.4399999999999, + "y": 214.0 + }, + { + "x": 600.0, + "y": 214.0 + }, + { + "x": 592.5600000000001, + "y": 214.0 + }, + { + "x": 585.4799999999999, + "y": 214.0 + }, + { + "x": 579.12, + "y": 214.0 + }, + { + "x": 573.8399999999999, + "y": 214.0 + }, + { + "x": 570.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 214.112 + }, + { + "x": 620.88, + "y": 214.416 + }, + { + "x": 614.52, + "y": 214.86400000000003 + }, + { + "x": 607.4399999999999, + "y": 215.408 + }, + { + "x": 600.0, + "y": 216.0 + }, + { + "x": 592.5600000000001, + "y": 216.592 + }, + { + "x": 585.4799999999999, + "y": 217.136 + }, + { + "x": 579.12, + "y": 217.584 + }, + { + "x": 573.8399999999999, + "y": 217.888 + }, + { + "x": 570.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 214.0 + }, + { + "x": 626.1600000000001, + "y": 214.224 + }, + { + "x": 620.88, + "y": 214.832 + }, + { + "x": 614.52, + "y": 215.728 + }, + { + "x": 607.4399999999999, + "y": 216.81599999999997 + }, + { + "x": 600.0, + "y": 218.0 + }, + { + "x": 592.5600000000001, + "y": 219.184 + }, + { + "x": 585.4799999999999, + "y": 220.272 + }, + { + "x": 579.12, + "y": 221.168 + }, + { + "x": 573.8399999999999, + "y": 221.776 + }, + { + "x": 570.0, + "y": 222.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 217.552 + }, + { + "x": 620.88, + "y": 216.336 + }, + { + "x": 614.52, + "y": 214.544 + }, + { + "x": 607.4399999999999, + "y": 212.368 + }, + { + "x": 600.0, + "y": 210.0 + }, + { + "x": 592.5600000000001, + "y": 207.632 + }, + { + "x": 585.4799999999999, + "y": 205.45600000000002 + }, + { + "x": 579.12, + "y": 203.664 + }, + { + "x": 573.8399999999999, + "y": 202.448 + }, + { + "x": 570.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 217.664 + }, + { + "x": 620.88, + "y": 216.752 + }, + { + "x": 614.52, + "y": 215.40800000000002 + }, + { + "x": 607.4399999999999, + "y": 213.776 + }, + { + "x": 600.0, + "y": 212.0 + }, + { + "x": 592.5600000000001, + "y": 210.224 + }, + { + "x": 585.4799999999999, + "y": 208.592 + }, + { + "x": 579.12, + "y": 207.248 + }, + { + "x": 573.8399999999999, + "y": 206.336 + }, + { + "x": 570.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 217.77599999999998 + }, + { + "x": 620.88, + "y": 217.168 + }, + { + "x": 614.52, + "y": 216.27200000000002 + }, + { + "x": 607.4399999999999, + "y": 215.184 + }, + { + "x": 600.0, + "y": 214.0 + }, + { + "x": 592.5600000000001, + "y": 212.81600000000003 + }, + { + "x": 585.4799999999999, + "y": 211.728 + }, + { + "x": 579.12, + "y": 210.832 + }, + { + "x": 573.8399999999999, + "y": 210.22400000000002 + }, + { + "x": 570.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 217.88799999999998 + }, + { + "x": 620.88, + "y": 217.584 + }, + { + "x": 614.52, + "y": 217.13600000000002 + }, + { + "x": 607.4399999999999, + "y": 216.59199999999998 + }, + { + "x": 600.0, + "y": 216.0 + }, + { + "x": 592.5600000000001, + "y": 215.40800000000002 + }, + { + "x": 585.4799999999999, + "y": 214.864 + }, + { + "x": 579.12, + "y": 214.416 + }, + { + "x": 573.8399999999999, + "y": 214.112 + }, + { + "x": 570.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 4, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 218.0 + }, + { + "x": 620.88, + "y": 218.0 + }, + { + "x": 614.52, + "y": 218.0 + }, + { + "x": 607.4399999999999, + "y": 218.0 + }, + { + "x": 600.0, + "y": 218.0 + }, + { + "x": 592.5600000000001, + "y": 218.0 + }, + { + "x": 585.4799999999999, + "y": 218.0 + }, + { + "x": 579.12, + "y": 218.0 + }, + { + "x": 573.8399999999999, + "y": 218.0 + }, + { + "x": 570.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 4, + "endLaneIndex": 5, + "points": [ + { + "x": 630.0, + "y": 218.0 + }, + { + "x": 626.1600000000001, + "y": 218.112 + }, + { + "x": 620.88, + "y": 218.416 + }, + { + "x": 614.52, + "y": 218.864 + }, + { + "x": 607.4399999999999, + "y": 219.40800000000002 + }, + { + "x": 600.0, + "y": 220.0 + }, + { + "x": 592.5600000000001, + "y": 220.59199999999998 + }, + { + "x": 585.4799999999999, + "y": 221.136 + }, + { + "x": 579.12, + "y": 221.584 + }, + { + "x": 573.8399999999999, + "y": 221.888 + }, + { + "x": 570.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_4_2_2", + "endRoad": "road_3_2_3", + "direction": 2, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 202.0 + }, + { + "x": 626.6740000000001, + "y": 201.374 + }, + { + "x": 622.832, + "y": 199.632 + }, + { + "x": 618.678, + "y": 196.97799999999998 + }, + { + "x": 614.416, + "y": 193.61599999999999 + }, + { + "x": 610.25, + "y": 189.75 + }, + { + "x": 606.384, + "y": 185.584 + }, + { + "x": 603.0219999999999, + "y": 181.32199999999997 + }, + { + "x": 600.368, + "y": 177.168 + }, + { + "x": 598.626, + "y": 173.32600000000002 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 202.0 + }, + { + "x": 626.562, + "y": 201.374 + }, + { + "x": 622.4159999999999, + "y": 199.632 + }, + { + "x": 617.814, + "y": 196.97799999999998 + }, + { + "x": 613.008, + "y": 193.61599999999999 + }, + { + "x": 608.25, + "y": 189.75 + }, + { + "x": 603.792, + "y": 185.584 + }, + { + "x": 599.886, + "y": 181.32199999999997 + }, + { + "x": 596.784, + "y": 177.168 + }, + { + "x": 594.7379999999999, + "y": 173.32600000000002 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 202.0 + }, + { + "x": 626.45, + "y": 201.374 + }, + { + "x": 622.0, + "y": 199.632 + }, + { + "x": 616.95, + "y": 196.97799999999998 + }, + { + "x": 611.6, + "y": 193.61599999999999 + }, + { + "x": 606.25, + "y": 189.75 + }, + { + "x": 601.1999999999999, + "y": 185.584 + }, + { + "x": 596.75, + "y": 181.32199999999997 + }, + { + "x": 593.2, + "y": 177.168 + }, + { + "x": 590.85, + "y": 173.32600000000002 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 202.0 + }, + { + "x": 626.3380000000001, + "y": 201.374 + }, + { + "x": 621.5840000000001, + "y": 199.632 + }, + { + "x": 616.086, + "y": 196.97799999999998 + }, + { + "x": 610.192, + "y": 193.61599999999999 + }, + { + "x": 604.25, + "y": 189.75 + }, + { + "x": 598.608, + "y": 185.584 + }, + { + "x": 593.614, + "y": 181.32199999999997 + }, + { + "x": 589.616, + "y": 177.168 + }, + { + "x": 586.962, + "y": 173.32600000000002 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 630.0, + "y": 206.0 + }, + { + "x": 626.6740000000001, + "y": 205.262 + }, + { + "x": 622.832, + "y": 203.216 + }, + { + "x": 618.678, + "y": 200.114 + }, + { + "x": 614.416, + "y": 196.20799999999997 + }, + { + "x": 610.25, + "y": 191.75 + }, + { + "x": 606.384, + "y": 186.992 + }, + { + "x": 603.0219999999999, + "y": 182.18599999999998 + }, + { + "x": 600.368, + "y": 177.584 + }, + { + "x": 598.626, + "y": 173.43800000000002 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 630.0, + "y": 206.0 + }, + { + "x": 626.562, + "y": 205.262 + }, + { + "x": 622.4159999999999, + "y": 203.216 + }, + { + "x": 617.814, + "y": 200.114 + }, + { + "x": 613.008, + "y": 196.20799999999997 + }, + { + "x": 608.25, + "y": 191.75 + }, + { + "x": 603.792, + "y": 186.992 + }, + { + "x": 599.886, + "y": 182.18599999999998 + }, + { + "x": 596.784, + "y": 177.584 + }, + { + "x": 594.7379999999999, + "y": 173.43800000000002 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 630.0, + "y": 206.0 + }, + { + "x": 626.45, + "y": 205.262 + }, + { + "x": 622.0, + "y": 203.216 + }, + { + "x": 616.95, + "y": 200.114 + }, + { + "x": 611.6, + "y": 196.20799999999997 + }, + { + "x": 606.25, + "y": 191.75 + }, + { + "x": 601.1999999999999, + "y": 186.992 + }, + { + "x": 596.75, + "y": 182.18599999999998 + }, + { + "x": 593.2, + "y": 177.584 + }, + { + "x": 590.85, + "y": 173.43800000000002 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 630.0, + "y": 206.0 + }, + { + "x": 626.3380000000001, + "y": 205.262 + }, + { + "x": 621.5840000000001, + "y": 203.216 + }, + { + "x": 616.086, + "y": 200.114 + }, + { + "x": 610.192, + "y": 196.20799999999997 + }, + { + "x": 604.25, + "y": 191.75 + }, + { + "x": 598.608, + "y": 186.992 + }, + { + "x": 593.614, + "y": 182.18599999999998 + }, + { + "x": 589.616, + "y": 177.584 + }, + { + "x": 586.962, + "y": 173.43800000000002 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + } + ] + }, + { + "type": "turn_left", + "startRoad": "road_3_3_3", + "endRoad": "road_3_2_0", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 0, + "endLaneIndex": 0, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.674 + }, + { + "x": 600.3679999999999, + "y": 222.83200000000002 + }, + { + "x": 603.022, + "y": 218.678 + }, + { + "x": 606.384, + "y": 214.416 + }, + { + "x": 610.25, + "y": 210.25 + }, + { + "x": 614.4159999999999, + "y": 206.38400000000001 + }, + { + "x": 618.678, + "y": 203.022 + }, + { + "x": 622.832, + "y": 200.368 + }, + { + "x": 626.6740000000001, + "y": 198.626 + }, + { + "x": 630.0, + "y": 198.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 1, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.56199999999998 + }, + { + "x": 600.3679999999999, + "y": 222.41600000000003 + }, + { + "x": 603.022, + "y": 217.814 + }, + { + "x": 606.384, + "y": 213.008 + }, + { + "x": 610.25, + "y": 208.25 + }, + { + "x": 614.4159999999999, + "y": 203.792 + }, + { + "x": 618.678, + "y": 199.886 + }, + { + "x": 622.832, + "y": 196.784 + }, + { + "x": 626.6740000000001, + "y": 194.738 + }, + { + "x": 630.0, + "y": 194.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 2, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.45 + }, + { + "x": 600.3679999999999, + "y": 222.0 + }, + { + "x": 603.022, + "y": 216.95 + }, + { + "x": 606.384, + "y": 211.60000000000002 + }, + { + "x": 610.25, + "y": 206.25 + }, + { + "x": 614.4159999999999, + "y": 201.2 + }, + { + "x": 618.678, + "y": 196.75 + }, + { + "x": 622.832, + "y": 193.20000000000002 + }, + { + "x": 626.6740000000001, + "y": 190.85000000000002 + }, + { + "x": 630.0, + "y": 190.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 3, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.338 + }, + { + "x": 600.3679999999999, + "y": 221.584 + }, + { + "x": 603.022, + "y": 216.086 + }, + { + "x": 606.384, + "y": 210.192 + }, + { + "x": 610.25, + "y": 204.25 + }, + { + "x": 614.4159999999999, + "y": 198.608 + }, + { + "x": 618.678, + "y": 193.614 + }, + { + "x": 622.832, + "y": 189.616 + }, + { + "x": 626.6740000000001, + "y": 186.96200000000002 + }, + { + "x": 630.0, + "y": 186.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 4, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.226 + }, + { + "x": 600.3679999999999, + "y": 221.168 + }, + { + "x": 603.022, + "y": 215.222 + }, + { + "x": 606.384, + "y": 208.78400000000002 + }, + { + "x": 610.25, + "y": 202.25 + }, + { + "x": 614.4159999999999, + "y": 196.016 + }, + { + "x": 618.678, + "y": 190.478 + }, + { + "x": 622.832, + "y": 186.032 + }, + { + "x": 626.6740000000001, + "y": 183.074 + }, + { + "x": 630.0, + "y": 182.0 + } + ] + }, + { + "startLaneIndex": 0, + "endLaneIndex": 5, + "points": [ + { + "x": 598.0, + "y": 230.0 + }, + { + "x": 598.626, + "y": 226.114 + }, + { + "x": 600.3679999999999, + "y": 220.752 + }, + { + "x": 603.022, + "y": 214.358 + }, + { + "x": 606.384, + "y": 207.376 + }, + { + "x": 610.25, + "y": 200.25 + }, + { + "x": 614.4159999999999, + "y": 193.42399999999998 + }, + { + "x": 618.678, + "y": 187.342 + }, + { + "x": 622.832, + "y": 182.448 + }, + { + "x": 626.6740000000001, + "y": 179.186 + }, + { + "x": 630.0, + "y": 178.0 + } + ] + } + ] + }, + { + "type": "turn_right", + "startRoad": "road_3_3_3", + "endRoad": "road_3_2_2", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 3, + "endLaneIndex": 0, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 226.786 + }, + { + "x": 585.296, + "y": 223.24800000000002 + }, + { + "x": 584.4340000000001, + "y": 219.542 + }, + { + "x": 583.2479999999999, + "y": 215.824 + }, + { + "x": 581.75, + "y": 212.25 + }, + { + "x": 579.9520000000001, + "y": 208.976 + }, + { + "x": 577.866, + "y": 206.15800000000002 + }, + { + "x": 575.504, + "y": 203.952 + }, + { + "x": 572.8779999999999, + "y": 202.514 + }, + { + "x": 570.0, + "y": 202.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 1, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 226.898 + }, + { + "x": 585.296, + "y": 223.66400000000002 + }, + { + "x": 584.4340000000001, + "y": 220.406 + }, + { + "x": 583.2479999999999, + "y": 217.23200000000003 + }, + { + "x": 581.75, + "y": 214.25 + }, + { + "x": 579.9520000000001, + "y": 211.56799999999998 + }, + { + "x": 577.866, + "y": 209.294 + }, + { + "x": 575.504, + "y": 207.536 + }, + { + "x": 572.8779999999999, + "y": 206.40200000000002 + }, + { + "x": 570.0, + "y": 206.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 2, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 227.01 + }, + { + "x": 585.296, + "y": 224.08 + }, + { + "x": 584.4340000000001, + "y": 221.27 + }, + { + "x": 583.2479999999999, + "y": 218.64000000000001 + }, + { + "x": 581.75, + "y": 216.25 + }, + { + "x": 579.9520000000001, + "y": 214.16000000000003 + }, + { + "x": 577.866, + "y": 212.43 + }, + { + "x": 575.504, + "y": 211.12 + }, + { + "x": 572.8779999999999, + "y": 210.29000000000002 + }, + { + "x": 570.0, + "y": 210.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 3, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 227.12199999999999 + }, + { + "x": 585.296, + "y": 224.496 + }, + { + "x": 584.4340000000001, + "y": 222.13400000000001 + }, + { + "x": 583.2479999999999, + "y": 220.048 + }, + { + "x": 581.75, + "y": 218.25 + }, + { + "x": 579.9520000000001, + "y": 216.752 + }, + { + "x": 577.866, + "y": 215.566 + }, + { + "x": 575.504, + "y": 214.704 + }, + { + "x": 572.8779999999999, + "y": 214.178 + }, + { + "x": 570.0, + "y": 214.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 4, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 227.234 + }, + { + "x": 585.296, + "y": 224.912 + }, + { + "x": 584.4340000000001, + "y": 222.998 + }, + { + "x": 583.2479999999999, + "y": 221.45600000000002 + }, + { + "x": 581.75, + "y": 220.25 + }, + { + "x": 579.9520000000001, + "y": 219.344 + }, + { + "x": 577.866, + "y": 218.702 + }, + { + "x": 575.504, + "y": 218.288 + }, + { + "x": 572.8779999999999, + "y": 218.066 + }, + { + "x": 570.0, + "y": 218.0 + } + ] + }, + { + "startLaneIndex": 3, + "endLaneIndex": 5, + "points": [ + { + "x": 586.0, + "y": 230.0 + }, + { + "x": 585.822, + "y": 227.346 + }, + { + "x": 585.296, + "y": 225.328 + }, + { + "x": 584.4340000000001, + "y": 223.862 + }, + { + "x": 583.2479999999999, + "y": 222.86400000000003 + }, + { + "x": 581.75, + "y": 222.25 + }, + { + "x": 579.9520000000001, + "y": 221.93599999999998 + }, + { + "x": 577.866, + "y": 221.838 + }, + { + "x": 575.504, + "y": 221.872 + }, + { + "x": 572.8779999999999, + "y": 221.954 + }, + { + "x": 570.0, + "y": 222.0 + } + ] + } + ] + }, + { + "type": "go_straight", + "startRoad": "road_3_3_3", + "endRoad": "road_3_2_3", + "direction": 3, + "laneLinks": [ + { + "startLaneIndex": 1, + "endLaneIndex": 0, + "points": [ + { + "x": 594.0, + "y": 230.0 + }, + { + "x": 594.112, + "y": 226.16 + }, + { + "x": 594.416, + "y": 220.88000000000002 + }, + { + "x": 594.864, + "y": 214.51999999999998 + }, + { + "x": 595.408, + "y": 207.44 + }, + { + "x": 596.0, + "y": 200.0 + }, + { + "x": 596.592, + "y": 192.56 + }, + { + "x": 597.136, + "y": 185.48 + }, + { + "x": 597.5840000000001, + "y": 179.12 + }, + { + "x": 597.888, + "y": 173.84000000000003 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 1, + "points": [ + { + "x": 594.0, + "y": 230.0 + }, + { + "x": 593.9999999999999, + "y": 226.16 + }, + { + "x": 594.0, + "y": 220.88000000000002 + }, + { + "x": 594.0, + "y": 214.51999999999998 + }, + { + "x": 594.0, + "y": 207.44 + }, + { + "x": 594.0, + "y": 200.0 + }, + { + "x": 594.0, + "y": 192.56 + }, + { + "x": 594.0, + "y": 185.48 + }, + { + "x": 594.0, + "y": 179.12 + }, + { + "x": 594.0, + "y": 173.84000000000003 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 2, + "points": [ + { + "x": 594.0, + "y": 230.0 + }, + { + "x": 593.8879999999999, + "y": 226.16 + }, + { + "x": 593.5840000000001, + "y": 220.88000000000002 + }, + { + "x": 593.1360000000001, + "y": 214.51999999999998 + }, + { + "x": 592.592, + "y": 207.44 + }, + { + "x": 592.0, + "y": 200.0 + }, + { + "x": 591.4079999999999, + "y": 192.56 + }, + { + "x": 590.864, + "y": 185.48 + }, + { + "x": 590.416, + "y": 179.12 + }, + { + "x": 590.1120000000001, + "y": 173.84000000000003 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 1, + "endLaneIndex": 3, + "points": [ + { + "x": 594.0, + "y": 230.0 + }, + { + "x": 593.776, + "y": 226.16 + }, + { + "x": 593.1680000000001, + "y": 220.88000000000002 + }, + { + "x": 592.272, + "y": 214.51999999999998 + }, + { + "x": 591.184, + "y": 207.44 + }, + { + "x": 590.0, + "y": 200.0 + }, + { + "x": 588.816, + "y": 192.56 + }, + { + "x": 587.7280000000001, + "y": 185.48 + }, + { + "x": 586.832, + "y": 179.12 + }, + { + "x": 586.224, + "y": 173.84000000000003 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 0, + "points": [ + { + "x": 590.0, + "y": 230.0 + }, + { + "x": 590.224, + "y": 226.16 + }, + { + "x": 590.832, + "y": 220.88000000000002 + }, + { + "x": 591.7280000000001, + "y": 214.51999999999998 + }, + { + "x": 592.816, + "y": 207.44 + }, + { + "x": 594.0, + "y": 200.0 + }, + { + "x": 595.184, + "y": 192.56 + }, + { + "x": 596.2719999999999, + "y": 185.48 + }, + { + "x": 597.168, + "y": 179.12 + }, + { + "x": 597.776, + "y": 173.84000000000003 + }, + { + "x": 598.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 1, + "points": [ + { + "x": 590.0, + "y": 230.0 + }, + { + "x": 590.112, + "y": 226.16 + }, + { + "x": 590.4159999999999, + "y": 220.88000000000002 + }, + { + "x": 590.864, + "y": 214.51999999999998 + }, + { + "x": 591.408, + "y": 207.44 + }, + { + "x": 592.0, + "y": 200.0 + }, + { + "x": 592.592, + "y": 192.56 + }, + { + "x": 593.136, + "y": 185.48 + }, + { + "x": 593.584, + "y": 179.12 + }, + { + "x": 593.8879999999999, + "y": 173.84000000000003 + }, + { + "x": 594.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 2, + "points": [ + { + "x": 590.0, + "y": 230.0 + }, + { + "x": 590.0, + "y": 226.16 + }, + { + "x": 590.0, + "y": 220.88000000000002 + }, + { + "x": 590.0, + "y": 214.51999999999998 + }, + { + "x": 590.0, + "y": 207.44 + }, + { + "x": 590.0, + "y": 200.0 + }, + { + "x": 590.0, + "y": 192.56 + }, + { + "x": 590.0, + "y": 185.48 + }, + { + "x": 590.0, + "y": 179.12 + }, + { + "x": 590.0, + "y": 173.84000000000003 + }, + { + "x": 590.0, + "y": 170.0 + } + ] + }, + { + "startLaneIndex": 2, + "endLaneIndex": 3, + "points": [ + { + "x": 590.0, + "y": 230.0 + }, + { + "x": 589.888, + "y": 226.16 + }, + { + "x": 589.5840000000001, + "y": 220.88000000000002 + }, + { + "x": 589.136, + "y": 214.51999999999998 + }, + { + "x": 588.592, + "y": 207.44 + }, + { + "x": 588.0, + "y": 200.0 + }, + { + "x": 587.408, + "y": 192.56 + }, + { + "x": 586.864, + "y": 185.48 + }, + { + "x": 586.4159999999999, + "y": 179.12 + }, + { + "x": 586.112, + "y": 173.84000000000003 + }, + { + "x": 586.0, + "y": 170.0 + } + ] + } + ] + } + ], + "trafficLight": { + "roadLinkIndices": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [ + 0, + 2, + 3, + 6, + 7, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 1, + 2, + 3, + 6, + 8, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 4, + 6, + 10, + 11 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + }, + { + "time": 30, + "availableRoadLinks": [ + 2, + 3, + 5, + 6, + 9, + 10 + ] + }, + { + "time": 5, + "availableRoadLinks": [ + 10, + 2, + 3, + 6 + ] + } + ] + }, + "virtual": false + }, + { + "id": "intersection_4_2", + "point": { + "x": 800, + "y": 200 + }, + "width": 0, + "roads": [ + "road_3_2_0", + "road_4_2_2" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_1_3", + "point": { + "x": 0, + "y": 300 + }, + "width": 0, + "roads": [ + "road_1_2_1", + "road_1_3_3" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_2_3", + "point": { + "x": 300, + "y": 300 + }, + "width": 0, + "roads": [ + "road_2_2_1", + "road_2_3_3" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + }, + { + "id": "intersection_3_3", + "point": { + "x": 600, + "y": 300 + }, + "width": 0, + "roads": [ + "road_3_2_1", + "road_3_3_3" + ], + "roadLinks": [], + "trafficLight": { + "roadLinkIndices": [], + "lightphases": [ + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + }, + { + "time": 30, + "availableRoadLinks": [] + }, + { + "time": 5, + "availableRoadLinks": [] + } + ] + }, + "virtual": true + } + ], + "roads": [ + { + "id": "road_1_0_1", + "points": [ + { + "x": 0, + "y": -100 + }, + { + "x": 0, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_0", + "endIntersection": "intersection_1_1" + }, + { + "id": "road_2_0_1", + "points": [ + { + "x": 300, + "y": -100 + }, + { + "x": 300, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_0", + "endIntersection": "intersection_2_1" + }, + { + "id": "road_3_0_1", + "points": [ + { + "x": 600, + "y": -100 + }, + { + "x": 600, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_0", + "endIntersection": "intersection_3_1" + }, + { + "id": "road_0_1_0", + "points": [ + { + "x": -200, + "y": 0 + }, + { + "x": 0, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_0_1", + "endIntersection": "intersection_1_1" + }, + { + "id": "road_1_1_0", + "points": [ + { + "x": 0, + "y": 0 + }, + { + "x": 300, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_1", + "endIntersection": "intersection_2_1" + }, + { + "id": "road_1_1_1", + "points": [ + { + "x": 0, + "y": 0 + }, + { + "x": 0, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_1", + "endIntersection": "intersection_1_2" + }, + { + "id": "road_1_1_2", + "points": [ + { + "x": 0, + "y": 0 + }, + { + "x": -200, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_1", + "endIntersection": "intersection_0_1" + }, + { + "id": "road_1_1_3", + "points": [ + { + "x": 0, + "y": 0 + }, + { + "x": 0, + "y": -100 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_1", + "endIntersection": "intersection_1_0" + }, + { + "id": "road_2_1_0", + "points": [ + { + "x": 300, + "y": 0 + }, + { + "x": 600, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_1", + "endIntersection": "intersection_3_1" + }, + { + "id": "road_2_1_1", + "points": [ + { + "x": 300, + "y": 0 + }, + { + "x": 300, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_1", + "endIntersection": "intersection_2_2" + }, + { + "id": "road_2_1_2", + "points": [ + { + "x": 300, + "y": 0 + }, + { + "x": 0, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_1", + "endIntersection": "intersection_1_1" + }, + { + "id": "road_2_1_3", + "points": [ + { + "x": 300, + "y": 0 + }, + { + "x": 300, + "y": -100 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_1", + "endIntersection": "intersection_2_0" + }, + { + "id": "road_3_1_0", + "points": [ + { + "x": 600, + "y": 0 + }, + { + "x": 800, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_1", + "endIntersection": "intersection_4_1" + }, + { + "id": "road_3_1_1", + "points": [ + { + "x": 600, + "y": 0 + }, + { + "x": 600, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_1", + "endIntersection": "intersection_3_2" + }, + { + "id": "road_3_1_2", + "points": [ + { + "x": 600, + "y": 0 + }, + { + "x": 300, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_1", + "endIntersection": "intersection_2_1" + }, + { + "id": "road_3_1_3", + "points": [ + { + "x": 600, + "y": 0 + }, + { + "x": 600, + "y": -100 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_1", + "endIntersection": "intersection_3_0" + }, + { + "id": "road_4_1_2", + "points": [ + { + "x": 800, + "y": 0 + }, + { + "x": 600, + "y": 0 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_4_1", + "endIntersection": "intersection_3_1" + }, + { + "id": "road_0_2_0", + "points": [ + { + "x": -200, + "y": 200 + }, + { + "x": 0, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_0_2", + "endIntersection": "intersection_1_2" + }, + { + "id": "road_1_2_0", + "points": [ + { + "x": 0, + "y": 200 + }, + { + "x": 300, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_2", + "endIntersection": "intersection_2_2" + }, + { + "id": "road_1_2_1", + "points": [ + { + "x": 0, + "y": 200 + }, + { + "x": 0, + "y": 300 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_2", + "endIntersection": "intersection_1_3" + }, + { + "id": "road_1_2_2", + "points": [ + { + "x": 0, + "y": 200 + }, + { + "x": -200, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_2", + "endIntersection": "intersection_0_2" + }, + { + "id": "road_1_2_3", + "points": [ + { + "x": 0, + "y": 200 + }, + { + "x": 0, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_2", + "endIntersection": "intersection_1_1" + }, + { + "id": "road_2_2_0", + "points": [ + { + "x": 300, + "y": 200 + }, + { + "x": 600, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_2", + "endIntersection": "intersection_3_2" + }, + { + "id": "road_2_2_1", + "points": [ + { + "x": 300, + "y": 200 + }, + { + "x": 300, + "y": 300 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_2", + "endIntersection": "intersection_2_3" + }, + { + "id": "road_2_2_2", + "points": [ + { + "x": 300, + "y": 200 + }, + { + "x": 0, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_2", + "endIntersection": "intersection_1_2" + }, + { + "id": "road_2_2_3", + "points": [ + { + "x": 300, + "y": 200 + }, + { + "x": 300, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_2", + "endIntersection": "intersection_2_1" + }, + { + "id": "road_3_2_0", + "points": [ + { + "x": 600, + "y": 200 + }, + { + "x": 800, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_2", + "endIntersection": "intersection_4_2" + }, + { + "id": "road_3_2_1", + "points": [ + { + "x": 600, + "y": 200 + }, + { + "x": 600, + "y": 300 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_2", + "endIntersection": "intersection_3_3" + }, + { + "id": "road_3_2_2", + "points": [ + { + "x": 600, + "y": 200 + }, + { + "x": 300, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_2", + "endIntersection": "intersection_2_2" + }, + { + "id": "road_3_2_3", + "points": [ + { + "x": 600, + "y": 200 + }, + { + "x": 600, + "y": 0 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_2", + "endIntersection": "intersection_3_1" + }, + { + "id": "road_4_2_2", + "points": [ + { + "x": 800, + "y": 200 + }, + { + "x": 600, + "y": 200 + } + ], + "num_left_lanes": 2, + "num_straight_lanes": 3, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_4_2", + "endIntersection": "intersection_3_2" + }, + { + "id": "road_1_3_3", + "points": [ + { + "x": 0, + "y": 300 + }, + { + "x": 0, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_1_3", + "endIntersection": "intersection_1_2" + }, + { + "id": "road_2_3_3", + "points": [ + { + "x": 300, + "y": 300 + }, + { + "x": 300, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_2_3", + "endIntersection": "intersection_2_2" + }, + { + "id": "road_3_3_3", + "points": [ + { + "x": 600, + "y": 300 + }, + { + "x": 600, + "y": 200 + } + ], + "num_left_lanes": 1, + "num_straight_lanes": 2, + "num_right_lanes": 1, + "lanes": [ + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + }, + { + "width": 4, + "maxSpeed": 16.67 + } + ], + "startIntersection": "intersection_3_3", + "endIntersection": "intersection_3_2" + } + ] +} \ No newline at end of file diff --git a/smartcross/envs/crossing.py b/smartcross/envs/crossing.py index 6367ac8..d0e4346 100644 --- a/smartcross/envs/crossing.py +++ b/smartcross/envs/crossing.py @@ -17,7 +17,7 @@ def __init__(self, tls_id: str, env: 'BaseEnv') -> None: self._lane_vehicle_dict = {} self._previous_lane_vehicle_dict = {} - signal_definition = traci.trafficlight.getCompleteRedYellowGreenDefinition(self._id)[0] + signal_definition = traci.trafficlight.getAllProgramLogics(self._id)[0] self._green_phases = [] self._yellow_phases = [] for idx, phase in enumerate(signal_definition.phases): @@ -140,9 +140,9 @@ def get_lane_delay_time(self): def get_pressure(self): pressure = 0 for lane in self._incoming_lanes: - pressure += traci.lane.getLastStepVehicleNumber(lane) + pressure += traci.lane.getLastStepHaltingNumber(lane) for lane in self._outgoing_lanes: - pressure -= traci.lane.getLastStepVehicleNumber(lane) + pressure -= traci.lane.getLastStepHaltingNumber(lane) return abs(pressure) @property diff --git a/smartcross/envs/obs/sumo_obs.py b/smartcross/envs/obs/sumo_obs.py index 3fd9aac..e824473 100644 --- a/smartcross/envs/obs/sumo_obs.py +++ b/smartcross/envs/obs/sumo_obs.py @@ -1,10 +1,13 @@ from typing import Dict, List import numpy as np +import gym from ding.envs import BaseEnv from ding.envs.common.env_element import EnvElementInfo from ding.envs.common import EnvElement +from smartcross.utils.env_utils import squeeze_obs + ALL_OBS_TPYE = set(['phase', 'lane_pos_vec', 'traffic_volumn', 'queue_len']) @@ -51,6 +54,7 @@ def _init(self, env: BaseEnv, cfg: Dict) -> None: if self._use_centralized_obs: self._shape = sum(obs_shape) + self._space = gym.spaces.Box(low=0, high=1, shape=(self._shape, ), dtype=np.float32) else: global_state_shape = sum(obs_shape) if self._padding: @@ -63,10 +67,17 @@ def _init(self, env: BaseEnv, cfg: Dict) -> None: 'global_state': global_state_shape, 'action_mask': self._tl_num } + self._space = gym.spaces.Dict( + { + 'agent_state': gym.spaces.Box(low=0, high=1, shape=(agent_state_shape, )), + 'global_state': gym.spaces.Box(low=0, high=1, shape=(global_state_shape, )), + 'action_mask': gym.spaces.Box(low=0, high=1, shape=(self._tl_num, )), + } + ) self._value = { 'min': 0, 'max': 1, - 'dtype': float, + 'dtype': np.float32, } def _get_tls_feature(self, tl_id: int) -> Dict: @@ -100,7 +111,7 @@ def _to_agent_processor(self) -> Dict: tl_obs = padding_obs_by_fearure(tl_obs, self._tl_feature_shape) tl_obs = [element for lis in tl_obs.values() for element in lis] agent_obs.append(tl_obs) - action_num = self._core.info().act_space.value['max'] + action_num = np.max(self._core.action_space.nvec) action_mask = [1] * action_num return { 'global_state': np.array([global_obs] * tl_num), @@ -114,6 +125,10 @@ def __repr__(self) -> str: def _details(self) -> str: return '{}'.format(self._shape) + @property + def space(self): + return self._space + def max_dict(dict1: Dict, dict2: Dict) -> Dict: assert len(dict1) == len(dict2) @@ -131,15 +146,3 @@ def padding_obs_by_fearure(tl_obs: Dict, tl_feature_shape: Dict) -> Dict: if len(tl_obs[feature]) < tl_feature_shape[feature]: tl_obs[feature] += [0] * (tl_feature_shape[feature] - len(tl_obs[feature])) return tl_obs - - -def squeeze_obs(obs: Dict) -> List: - assert obs is not None - if isinstance(obs, dict): - return [value for key in sorted(obs) for value in squeeze_obs(obs[key])] - elif isinstance(obs, (tuple, list, set)): - return [value for item in obs for value in squeeze_obs(item)] - elif isinstance(obs, (int, float, str)): - return (obs, ) - else: - raise ValueError('Cannot process type: {}, {}'.format(type(obs), obs)) diff --git a/smartcross/envs/obs/sumo_obs_runner.py b/smartcross/envs/obs/sumo_obs_runner.py index e67f41f..4b077a0 100644 --- a/smartcross/envs/obs/sumo_obs_runner.py +++ b/smartcross/envs/obs/sumo_obs_runner.py @@ -20,7 +20,7 @@ def _init(self, engine: BaseEnv, cfg: dict) -> None: Overview: init the sumo observation helper with the given config file Arguments: - - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo/sumo_env_default_config.yaml` + - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo_wj3_default_config.yaml` """ # set self._core and other state variable self._engine = engine @@ -45,3 +45,7 @@ def reset(self) -> None: reset obs runner, and return the initial obs """ return to_ndarray(self._obs, dtype=np.float32) + + @property + def space(self): + return self._core.space diff --git a/smartcross/envs/reward/sumo_reward.py b/smartcross/envs/reward/sumo_reward.py index 82fa44e..a38c4ac 100644 --- a/smartcross/envs/reward/sumo_reward.py +++ b/smartcross/envs/reward/sumo_reward.py @@ -22,7 +22,7 @@ def _init(self, env: BaseEnv, cfg: Dict) -> None: Overview: init the sumo reward environment with the given config file Arguments: - - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo/sumo_env_default_config.yaml` + - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo_wj3_default_config.yaml` """ self._env = env self._cfg = cfg diff --git a/smartcross/envs/reward/sumo_reward_runner.py b/smartcross/envs/reward/sumo_reward_runner.py index bbce310..914bac6 100644 --- a/smartcross/envs/reward/sumo_reward_runner.py +++ b/smartcross/envs/reward/sumo_reward_runner.py @@ -21,7 +21,7 @@ def _init(self, engine: BaseEnv, cfg: dict) -> None: Overview: init the sumo reward environment with the given config file Arguments: - - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo/sumo_env_default_config.yaml` + - cfg(:obj:`EasyDict`): config, you can refer to `envs/sumo_wj3_default_config.yaml` """ self._engine = engine self._core = SumoReward(engine, cfg) diff --git a/smartcross/envs/rl_arterial_7roads/route/1100/2_eg.rou.xml b/smartcross/envs/rl_arterial_7roads/route/1100/2_eg.rou.xml deleted file mode 100644 index 03f41df..0000000 --- a/smartcross/envs/rl_arterial_7roads/route/1100/2_eg.rou.xml +++ /dev/null @@ -1,14490 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartcross/envs/sumo_rl_arterial_7roads_default_config.yaml b/smartcross/envs/sumo_arterial7_default_config.yaml similarity index 85% rename from smartcross/envs/sumo_rl_arterial_7roads_default_config.yaml rename to smartcross/envs/sumo_arterial7_default_config.yaml index b9395bf..fe493b2 100644 --- a/smartcross/envs/sumo_rl_arterial_7roads_default_config.yaml +++ b/smartcross/envs/sumo_arterial7_default_config.yaml @@ -1,5 +1,5 @@ env: - sumocfg_path: 'rl_arterial_7roads/standard.sumocfg' + sumocfg_path: 'sumo_arterial_7roads/standard.sumocfg' gui: False inference: False dynamic_flow: False @@ -19,4 +19,4 @@ env: reward: use_centralized_reward: True reward_type: - pressure: 0.1 \ No newline at end of file + pressure: 1.0 \ No newline at end of file diff --git a/smartcross/envs/sumo_arterial7_multi_agent_config.yaml b/smartcross/envs/sumo_arterial7_multi_agent_config.yaml new file mode 100644 index 0000000..4a49cf1 --- /dev/null +++ b/smartcross/envs/sumo_arterial7_multi_agent_config.yaml @@ -0,0 +1,22 @@ +env: + sumocfg_path: 'sumo_arterial_7roads/standard.sumocfg' + gui: False + inference: False + dynamic_flow: True + flow_range: [900, 1900, 100] + max_episode_steps: 1600 + green_duration: 10 + yellow_duration: 3 + tls: ['1', '3', '4', '5', '7', '6', '2'] + obs: + obs_type: [phase, traffic_volumn, queue_len] + queue_len_ratio: 7.5 + use_centralized_obs: False + padding: True + action: + action_type: change + use_multi_discrete: True + reward: + use_centralized_reward: True + reward_type: + pressure: 0.1 \ No newline at end of file diff --git a/smartcross/envs/rl_arterial_7roads/standard.net.xml b/smartcross/envs/sumo_arterial_7roads/standard.net.xml similarity index 100% rename from smartcross/envs/rl_arterial_7roads/standard.net.xml rename to smartcross/envs/sumo_arterial_7roads/standard.net.xml diff --git a/smartcross/envs/rl_arterial_7roads/standard.sumocfg b/smartcross/envs/sumo_arterial_7roads/standard.sumocfg similarity index 100% rename from smartcross/envs/rl_arterial_7roads/standard.sumocfg rename to smartcross/envs/sumo_arterial_7roads/standard.sumocfg diff --git a/smartcross/envs/sumo_env.py b/smartcross/envs/sumo_env.py index d4a841f..edc2755 100644 --- a/smartcross/envs/sumo_env.py +++ b/smartcross/envs/sumo_env.py @@ -1,6 +1,7 @@ import os import sys import time +import gym from typing import Dict, Any, List, Tuple, Union import numpy as np import random @@ -8,7 +9,7 @@ import traci from sumolib import checkBinary -from ding.envs import BaseEnv, BaseEnvTimestep, BaseEnvInfo +from ding.envs import BaseEnv, BaseEnvTimestep # , BaseEnvInfo from ding.utils import ENV_REGISTRY from ding.torch_utils import to_ndarray, to_tensor from smartcross.envs.crossing import Crossing @@ -46,6 +47,9 @@ def __init__(self, cfg: Dict) -> None: self._action_runner = SumoActionRunner(self, cfg.action) self._reward_runner = SumoRewardRunner(self, cfg.reward) self.close() + self._observation_space = self._obs_runner.space + self._action_space = self._action_runner.space + self._reward_space = gym.spaces.Box(low=-float('inf'), high=0, shape=(1, ), dtype=np.float32) def _launch_env(self, gui: bool = False) -> None: # set gui=True can get visualization simulation result with sumo, apply gui=False in the normal training @@ -111,6 +115,8 @@ def reset(self) -> Any: self._action_runner.reset() self._obs_runner.reset() self._reward_runner.reset() + if self._launch_env_flag: + self.close() self._launch_env(self._gui) for tl in self._cfg.tls: self._crosses[tl] = Crossing(tl, self) @@ -146,19 +152,31 @@ def close(self) -> None: self._launch_env_flag = False traci.close() - def info(self) -> 'BaseEnvInfo': - info_data = { - 'agent_num': len(self._tls), - 'obs_space': self._obs_runner.info, - 'act_space': self._action_runner.info, - 'rew_space': len(self._tls), - 'use_wrappers': False - } - return BaseEnvInfo(**info_data) + # def info(self) -> 'BaseEnvInfo': + # info_data = { + # 'agent_num': len(self._tls), + # 'obs_space': self._obs_runner.info, + # 'act_space': self._action_runner.info, + # 'rew_space': self._reward_runner.info, + # 'use_wrappers': False + # } + # return BaseEnvInfo(**info_data) def __repr__(self) -> str: return "SumoEnv" + @property + def observation_space(self) -> gym.spaces.Space: + return self._observation_space + + @property + def action_space(self) -> gym.spaces.Space: + return self._action_space + + @property + def reward_space(self) -> gym.spaces.Space: + return self._reward_space + @property def vehicle_info(self) -> Dict[str, Dict]: return self._vehicle_info_dict diff --git a/smartcross/envs/wj3/detector/detector1_lane_end.add.xml b/smartcross/envs/sumo_wj3/detector/detector1_lane_end.add.xml similarity index 100% rename from smartcross/envs/wj3/detector/detector1_lane_end.add.xml rename to smartcross/envs/sumo_wj3/detector/detector1_lane_end.add.xml diff --git a/smartcross/envs/wj3/detector/detector1_lane_start.add.xml b/smartcross/envs/sumo_wj3/detector/detector1_lane_start.add.xml similarity index 100% rename from smartcross/envs/wj3/detector/detector1_lane_start.add.xml rename to smartcross/envs/sumo_wj3/detector/detector1_lane_start.add.xml diff --git a/smartcross/envs/wj3/detector/detector2_length_49_freq_60.add.xml b/smartcross/envs/sumo_wj3/detector/detector2_length_49_freq_60.add.xml similarity index 100% rename from smartcross/envs/wj3/detector/detector2_length_49_freq_60.add.xml rename to smartcross/envs/sumo_wj3/detector/detector2_length_49_freq_60.add.xml diff --git a/smartcross/envs/wj3/detector/detector2_length_7_freq_1.add.xml b/smartcross/envs/sumo_wj3/detector/detector2_length_7_freq_1.add.xml similarity index 100% rename from smartcross/envs/wj3/detector/detector2_length_7_freq_1.add.xml rename to smartcross/envs/sumo_wj3/detector/detector2_length_7_freq_1.add.xml diff --git a/smartcross/envs/wj3/detector/detector3.add.xml b/smartcross/envs/sumo_wj3/detector/detector3.add.xml similarity index 100% rename from smartcross/envs/wj3/detector/detector3.add.xml rename to smartcross/envs/sumo_wj3/detector/detector3.add.xml diff --git a/smartcross/envs/wj3/edge_measure.add.xml b/smartcross/envs/sumo_wj3/edge_measure.add.xml similarity index 100% rename from smartcross/envs/wj3/edge_measure.add.xml rename to smartcross/envs/sumo_wj3/edge_measure.add.xml diff --git a/smartcross/envs/wj3/rl_wj.ini b/smartcross/envs/sumo_wj3/rl_wj.ini similarity index 100% rename from smartcross/envs/wj3/rl_wj.ini rename to smartcross/envs/sumo_wj3/rl_wj.ini diff --git a/smartcross/envs/wj3/rl_wj.net.xml b/smartcross/envs/sumo_wj3/rl_wj.net.xml similarity index 100% rename from smartcross/envs/wj3/rl_wj.net.xml rename to smartcross/envs/sumo_wj3/rl_wj.net.xml diff --git a/smartcross/envs/wj3/rl_wj.sumocfg b/smartcross/envs/sumo_wj3/rl_wj.sumocfg similarity index 100% rename from smartcross/envs/wj3/rl_wj.sumocfg rename to smartcross/envs/sumo_wj3/rl_wj.sumocfg diff --git a/smartcross/envs/wj3/summary.xml b/smartcross/envs/sumo_wj3/summary.xml similarity index 100% rename from smartcross/envs/wj3/summary.xml rename to smartcross/envs/sumo_wj3/summary.xml diff --git a/smartcross/envs/wj3/testflow.rou.xml b/smartcross/envs/sumo_wj3/testflow.rou.xml similarity index 100% rename from smartcross/envs/wj3/testflow.rou.xml rename to smartcross/envs/sumo_wj3/testflow.rou.xml diff --git a/smartcross/envs/wj3/testflow.trip.xml b/smartcross/envs/sumo_wj3/testflow.trip.xml similarity index 100% rename from smartcross/envs/wj3/testflow.trip.xml rename to smartcross/envs/sumo_wj3/testflow.trip.xml diff --git a/smartcross/envs/wj3/testflow.turndefs.xml b/smartcross/envs/sumo_wj3/testflow.turndefs.xml similarity index 100% rename from smartcross/envs/wj3/testflow.turndefs.xml rename to smartcross/envs/sumo_wj3/testflow.turndefs.xml diff --git a/smartcross/envs/sumo_wj3_default_config.yaml b/smartcross/envs/sumo_wj3_default_config.yaml index 6553ef6..f342faa 100644 --- a/smartcross/envs/sumo_wj3_default_config.yaml +++ b/smartcross/envs/sumo_wj3_default_config.yaml @@ -1,5 +1,5 @@ env: - sumocfg_path: 'wj3/rl_wj.sumocfg' + sumocfg_path: 'sumo_wj3/rl_wj.sumocfg' gui: False inference: False max_episode_steps: 1500 diff --git a/smartcross/envs/sumo_wj3_multi_agent_config.yaml b/smartcross/envs/sumo_wj3_multi_agent_config.yaml new file mode 100644 index 0000000..a86dfd9 --- /dev/null +++ b/smartcross/envs/sumo_wj3_multi_agent_config.yaml @@ -0,0 +1,24 @@ +env: + sumocfg_path: 'sumo_wj3/rl_wj.sumocfg' + gui: False + inference: False + max_episode_steps: 1500 + green_duration: 10 + yellow_duration: 3 + tls: ['ftddj_wjj', 'ftddj_frj', 'htddj_gsndj'] + obs: + obs_type: [phase, lane_pos_vec] + lane_grid_num: 10 + traffic_volumn_ratio: 7.5 + use_centralized_obs: False + padding: True + action: + action_type: change + use_multi_discrete: True + reward: + use_centralized_reward: True + reward_type: + queue_len: 1.0 + # wait_time: 1.0 + # delay_time: 1.0 + # pressure: 1.0 \ No newline at end of file diff --git a/smartcross/envs/tests/test_cityflow_env.py b/smartcross/envs/tests/test_cityflow_env.py new file mode 100644 index 0000000..b613544 --- /dev/null +++ b/smartcross/envs/tests/test_cityflow_env.py @@ -0,0 +1,43 @@ +import os +import numpy as np +import pytest +import torch +import yaml +from easydict import EasyDict + +from smartcross.envs import CityflowEnv + + +@pytest.fixture(scope='function') +def setup_config(): + cfg = dict( + obs_type=['phase', 'lane_vehicle_num', 'lane_waiting_vehicle_num'], + n_evaluator_episode=1, + max_episode_duration=1000, + green_duration=30, + yellow_duration=5, + red_duration=0, + stop_value=0, + config_path="smartcross/envs/cityflow_grid/cityflow_grid_config.json", + ) + cfg = EasyDict(cfg) + return cfg + + +@pytest.mark.envtest +class TestCityFlowEnv: + + def get_random_action(self, action_space): + return action_space.sample() + + def test_naive(self, setup_config): + env = CityflowEnv(setup_config) + obs = env.reset() + assert len(obs) == env.observation_space.shape[0] + for i in range(10): + action = self.get_random_action(env.action_space) + timestep = env.step(action) + print(timestep.reward) + print('step {} with action {}'.format(i, action)) + print('end') + env.close() diff --git a/smartcross/envs/tests/test_sumo_env.py b/smartcross/envs/tests/test_sumo_env.py index bb6fd4b..5c3b6d2 100644 --- a/smartcross/envs/tests/test_sumo_env.py +++ b/smartcross/envs/tests/test_sumo_env.py @@ -20,17 +20,16 @@ def setup_config(): class TestSumoEnv: def get_random_action(self, action_space): - min, max, shape = action_space.value['min'], action_space.value['max'], action_space.shape - action = np.random.randint(min, max, shape) + action = action_space.sample() action = [torch.LongTensor([v]) for v in action] return action def test_naive(self, setup_config): env = SumoEnv(setup_config) obs = env.reset() - assert (len(obs) == env.info().obs_space.shape) + assert (len(obs) == env.observation_space.shape[0]) for i in range(10): - action = self.get_random_action(env.info().act_space) + action = self.get_random_action(env.action_space) timestep = env.step(action) print(timestep.reward) print('step {} with action {}'.format(i, action)) diff --git a/smartcross/policy/default_policy.py b/smartcross/policy/default_policy.py index f9cf6b2..c5c0e12 100644 --- a/smartcross/policy/default_policy.py +++ b/smartcross/policy/default_policy.py @@ -1,11 +1,10 @@ -from typing import Dict, List +from typing import Dict, List, Any import torch import numpy as np from easydict import EasyDict import copy from ding.utils import POLICY_REGISTRY -from ding.envs.common import EnvElementInfo @POLICY_REGISTRY.register('smartcross_random') @@ -13,17 +12,14 @@ class RandomPolicy(): config = dict() - def __init__(self, act_space: EnvElementInfo) -> None: + def __init__(self, act_space: Any) -> None: self._act_space = act_space - self._min_val = self._act_space.value['min'] - self._max_val = self._act_space.value['max'] - self._act_shape = act_space.shape def reset(self, *args, **keargs) -> None: pass def get_random_action(self) -> List: - action = np.random.randint(self._min_val, self._max_val, self._act_shape) + action = self._act_space.sample() action = [torch.LongTensor([v]) for v in action] return action @@ -42,16 +38,27 @@ def default_config(cls: type) -> EasyDict: return cfg +def get_random_sample_func(act_space): + + def _forward(data: Dict[int, Any], *args, **kwargs) -> Dict[int, Any]: + actions = {} + for env_id in data: + action = act_space.sample() + action = [torch.LongTensor([v]) for v in action] + actions[env_id] = {'action': action} + return actions + + return _forward + + @POLICY_REGISTRY.register('smartcross_fix') class FixedPolicy(): config = dict() - def __init__(self, act_space: EnvElementInfo) -> None: + def __init__(self, act_space: Any) -> None: self._act_space = act_space - self._min_val = self._act_space.value['min'] - self._max_val = self._act_space.value['max'] - self._act_shape = act_space.shape + self._nvec = self._act_space.nvec self._last_act = {} def reset(self, *args, **keargs) -> None: @@ -59,10 +66,10 @@ def reset(self, *args, **keargs) -> None: def get_next_action(self, i: int) -> List: if i not in self._last_act: - action = np.zeros(self._act_shape) + action = np.zeros(self._act_space.shape) else: action = self._last_act[i] + 1 - action[action >= self._max_val] = 0 + action[action >= self._nvec] = 0 self._last_act[i] = action action = [torch.LongTensor([v]) for v in action] return action diff --git a/smartcross/policy/tests/test_policy.py b/smartcross/policy/tests/test_policy.py index eb92cdf..81a1d0c 100644 --- a/smartcross/policy/tests/test_policy.py +++ b/smartcross/policy/tests/test_policy.py @@ -22,11 +22,11 @@ class TestPolicy: def test_random_policy(self, setup_env): env = setup_env obs = env.reset() - policy = RandomPolicy(env.info().act_space) + policy = RandomPolicy(env.action_space) for i in range(10): action = policy.forward({0: obs}) assert 0 in action - assert len(action[0]['action']) == env.info().act_space.shape + assert len(action[0]['action']) == len(env.action_space.nvec) timestep = env.step(action[0]['action']) obs = timestep.obs print(action) @@ -36,12 +36,12 @@ def test_random_policy(self, setup_env): def test_fix_policy(self, setup_env): env = setup_env obs = env.reset() - policy = FixedPolicy(env.info().act_space) + policy = FixedPolicy(env.action_space) for i in range(10): action = policy.forward({0: obs}) assert 0 in action - assert len(action[0]['action']) == env.info().act_space.shape - assert action[0]['action'][0].item() == i % env.info().act_space.value['max'] + assert len(action[0]['action']) == len(env.action_space.nvec) + assert action[0]['action'][0].item() == i % env.action_space.nvec[0] timestep = env.step(action[0]['action']) obs = timestep.obs print(action) diff --git a/smartcross/utils/env_utils.py b/smartcross/utils/env_utils.py new file mode 100644 index 0000000..08c9338 --- /dev/null +++ b/smartcross/utils/env_utils.py @@ -0,0 +1,28 @@ +from typing import Dict, List + + +def squeeze_obs(obs: Dict) -> List: + assert obs is not None + if isinstance(obs, dict): + return [value for key in sorted(obs) for value in squeeze_obs(obs[key])] + elif isinstance(obs, (tuple, list, set)): + return [value for item in obs for value in squeeze_obs(item)] + elif isinstance(obs, (int, float, str)): + return (obs, ) + else: + raise ValueError('Cannot process type: {}, {}'.format(type(obs), obs)) + + +def get_suffix_num(input: str) -> List: + tmp = input.split('_') + res = [int(t) for t in tmp[1:]] + return res + + +def get_onehot_obs(obs: List, length: int) -> List: + res = [] + for item in obs: + onehot = [0] * length + onehot[item] = 1 + res += onehot + return res