Skip to main content

A python library to render Sumo network files and trajectories with matplotlib or as an OBJ file.

Project description

SumoNetVis

A Python library for visualizing a Sumo network and trajectories with matplotlib or as an OBJ file.

Example plot of an intersection with trajectory colored by speed Example plot of a road network Example plot of aroad network (US-style markings) Example animation

Basic trajectory plotting from FCD outputs is built in, but it is also possible to plot custom data and graphics on top of the network with the full flexibility and power of matplotlib and other compatible libraries, such as seaborn.

3D geometry for a network can be generated and saved as a Wavefront-OBJ file. Example_rendering of OBJ export of an intersection

Installation

This package can be installed via pip with the command pip install SumoNetVis. You can then import the library with:

import SumoNetVis

Dependencies

  • shapely (>=1.7.0 for OBJ export)
  • matplotlib
  • numpy

Usage

To plot a Sumo net file and trajectories, you can use the following code:

import SumoNetVis
import matplotlib.pyplot as plt
# Plot Sumo Network
net = SumoNetVis.Net("path/to/yourfile.net.xml")
net.plot()
# Plot trajectories
trajectories = SumoNetVis.Trajectories("path/to/fcd-output.xml")
trajectories["vehicle_id"].assign_colors_speed()
trajectories["vehicle_id"].plot()
# Show figure
plt.show()

the Net.plot() function takes the following optional parameters:

  • ax: matplotlib Axes object (defaults to currently active Axes)
  • clip_to_limits: if True, only objects visible in the current view extents will be drawn
  • zoom_to_extents: auto-zoom to Net extents (defaults to True)
  • style: lane marking style to use ("USA" or "EUR")
  • stripe_width_scale: scale factor for lane marking widths (defaults to 1)

Animation

Instead of visualizing Trajectories as lines, an animation can be generated using the matplotlib.animation module.

import matplotlib.animation as animation
trajectories = SumoNetVis.Trajectories("path/to/fcd-output.xml")
fig, ax = plt.subplots()
a = animation.FuncAnimation(fig, trajectories.plot_points, frames=trajectories.timestep_range(), repeat=False,
                            interval=1000*trajectories.timestep, fargs=(ax,), blit=True)
plt.show()

The plot settings for each vehicle can be customized and the color of each point can be animated, as shown in the following example.

for trajectory in trajectories:
        trajectory.assign_colors_speed()
        trajectory.point_plot_kwargs["ms"] = 8  # set marker size. Can set any kwargs taken by matplotlib.pyplot.plot().

In order to animate the color of the points based on the assigned color scheme, an additional farg must be passed when creating the animation.

a = animation.FuncAnimation(fig, trajectories.plot_points, frames=trajectories.timestep_range(), repeat=False,
                            interval=1000*trajectories.timestep, fargs=(ax, True), blit=True)

OBJ Export

The Wavefront-OBJ format is a text-based file format. The Net.generate_obj_text() method generates the contents of this file for the given Sumo network. In order to save an OBJ file, do the following:

with open("model.obj", "w") as f:
    f.write(net.generate_obj_text())

The axis configuration in the generated file is Y-Forward, Z-Up. Check these settings if the orientation of the model is incorrect when importing the file into a 3D modelling program.

Each type of object is defined with a corresponding material (i.e. all bike lanes have the same material, all sidewalks, and so on), making it easy to quickly set the desired material properties before rendering.

Documentation

API documentation can be found here

Contribution

Issues and pull requests are welcome.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SumoNetVis-1.3.0.tar.gz (14.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page