abstreet/rustdoc/map_model/index.html

90 lines
24 KiB
HTML
Raw Normal View History

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`map_model` describes the world where simulations occur. Importing a map from OSM partly happens in `convert_osm` and here."><meta name="keywords" content="rust, rustlang, rust-lang, map_model"><title>map_model - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings" ></script><script src="../storage.js"></script><script src="../crates.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg"><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod crate"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../map_model/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><h2 class="location">Crate map_model</h2><div class="block version"><div class="narrow-helper"></div><p>Version 0.1.0</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all map_model's items</p></a><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#constants">Constants</a></li></ul></div><div id="sidebar-vars" data-name="map_model" data-ty="mod" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Crate <a class="mod" href="#">map_model</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/map_model/lib.rs.html#1-119" title="goto source code">[src]</a></span></h1><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p><code>map_model</code> describes the world where simulations occur. Importing a map from OSM partly happens
in <code>convert_osm</code> and here.</p>
<p>Helpful terminology:</p>
<ul>
<li>ch = contraction hierarchy, for speeding up pathfinding</li>
<li>degenerate intersection = only has 2 roads connected, so why is it an intersection at all?</li>
<li>lc = lane-change (which is modelled very strangely: <a href="https://a-b-street.github.io/docs/tech/trafficsim/discrete_event.html#lane-changing">https://a-b-street.github.io/docs/tech/trafficsim/discrete_event.html#lane-changing</a>)</li>
<li>ltr = left-to-right, the order of lanes for a road</li>
<li>osm = OpenStreetMap</li>
</ul>
<p>Map objects are usually abbreviated in method names:</p>
<ul>
<li>a = area</li>
<li>b = building</li>
<li>br = bus route</li>
<li>bs = bus stop</li>
<li>i = intersection</li>
<li>l = lane</li>
<li>pl = parking lot</li>
<li>r = road</li>
<li>ss = stop sign</li>
<li>t = turn</li>
<li>ts = traffic signal</li>
</ul>
</div></details><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="mod" href="city/index.html" title="map_model::city mod">city</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="mod" href="connectivity/index.html" title="map_model::connectivity mod">connectivity</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="mod" href="edits/index.html" title="map_model::edits mod">edits</a></div><div class="item-right docblock-short"><p>Once a Map exists, the player can edit it in the UI (producing <code>MapEdits</code> in-memory), then save
the changes to a file (as <code>PermanentMapEdits</code>). See
<a href="https://a-b-street.github.io/docs/tech/map/edits.html">https://a-b-street.github.io/docs/tech/map/edits.html</a>.</p>
</div><div class="item-left module-item"><a class="mod" href="make/index.html" title="map_model::make mod">make</a></div><div class="item-right docblock-short"><p>See <a href="https://a-b-street.github.io/docs/tech/map/importing/index.html">https://a-b-street.github.io/docs/tech/map/importing/index.html</a> for an overview. This module
covers the RawMap-&gt;Map stage.</p>
</div><div class="item-left module-item"><a class="mod" href="map/index.html" title="map_model::map mod">map</a></div><div class="item-right docblock-short"><p>A bunch of (mostly read-only) queries on a Map.</p>
</div><div class="item-left module-item"><a class="mod" href="objects/index.html" title="map_model::objects mod">objects</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="mod" href="osm/index.html" title="map_model::osm mod">osm</a></div><div class="item-right docblock-short"><p>Useful utilities for working with OpenStreetMap.</p>
</div><div class="item-left module-item"><a class="mod" href="pathfind/index.html" title="map_model::pathfind mod">pathfind</a></div><div class="item-right docblock-short"><p>Everything related to pathfinding through a map for different types of agents.</p>
</div><div class="item-left module-item"><a class="mod" href="raw/index.html" title="map_model::raw mod">raw</a></div><div class="item-right docblock-short"><p>The convert_osm crate produces a RawMap from OSM and other data. Storing this intermediate
structure is useful to iterate quickly on parts of the map importing pipeline without having to
constantly read .osm files, and to visualize the intermediate state with map_editor.</p>
</div><div class="item-left module-item"><a class="mod" href="traversable/index.html" title="map_model::traversable mod">traversable</a></div><div class="item-right docblock-short"></div></div><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="struct" href="struct.AccessRestrictions.html" title="map_model::AccessRestrictions struct">AccessRestrictions</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Amenity.html" title="map_model::Amenity struct">Amenity</a></div><div class="item-right docblock-short"><p>A business located inside a building.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.Area.html" title="map_model::Area struct">Area</a></div><div class="item-right docblock-short"><p>Areas are just used for drawing.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.AreaID.html" title="map_model::AreaID struct">AreaID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Building.html" title="map_model::Building struct">Building</a></div><div class="item-right docblock-short"><p>A building has connections to the road and sidewalk, may contain commercial amenities, and have
off-street parking.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.BuildingID.html" title="map_model::BuildingID struct">BuildingID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.BusRoute.html" title="map_model::BusRoute struct">BusRoute</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.BusRouteID.html" title="map_model::BusRouteID struct">BusRouteID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.BusStop.html" title="map_model::BusStop struct">BusStop</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.BusStopID.html" title="map_model::BusStopID struct">BusStopID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.City.html" title="map_model::City struct">City</a></div><div class="item-right docblock-short"><p>A single city (like Seattle) can be broken down into multiple boundary polygons (udistrict,
ballard, downtown, etc). The load map screen uses this struct to display the entire city.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.CompressedMovementID.html" title="map_model::CompressedMovementID struct">CompressedMovementID</a></div><div class="item-right docblock-short"><p>This is cheaper to store than a MovementID. It simply indexes into the list of movements.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.ControlStopSign.html" title="map_model::ControlStopSign struct">ControlStopSign</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.ControlTrafficSignal.html" title="map_model::ControlTrafficSignal struct">ControlTrafficSignal</a></div><div class="item-right docblock-short"><p>A traffic signal consists of a sequence of Stages that repeat in a cycle. Most Stages last for a
fixed duration. During a single Stage, some movements are protected (can proceed with the
highest priority), while others are permitted (have to yield before proceeding).</p>
</div><div class="item-left module-item"><a class="struct" href="struct.DirectedRoadID.html" title="map_model::DirectedRoadID struct">DirectedRoadID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.EditEffects.html" title="map_model::EditEffects struct">EditEffects</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.EditRoad.html" title="map_model::EditRoad struct">EditRoad</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Intersection.html" title="map_model::Intersection struct">Intersection</a></div><div class="item-right docblock-short"><p>An intersection connects roads. Most have &gt;2 roads and are controlled by stop signs or traffic
signals. Roads that lead to the boundary of the map end at border intersections, with only that
one road attached.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.IntersectionCluster.html" title="map_model::IntersectionCluster struct">IntersectionCluster</a></div><div class="item-right docblock-short"><p>This only applies to VehiclePathfinder; walking through these intersections is nothing special.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.IntersectionID.html" title="map_model::IntersectionID struct">IntersectionID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Lane.html" title="map_model::Lane struct">Lane</a></div><div class="item-right docblock-short"><p>A road segment is broken down into individual lanes, which have a LaneType.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.LaneID.html" title="map_model::LaneID struct">LaneID</a></div><div class="item-right docblock-short"><p>A lane is identified by its parent road and its position, ordered from the left.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.LaneSpec.html" title="map_model::LaneSpec struct">LaneSpec</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Map.html" title="map_model::Map struct">Map</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.MapConfig.html" title="map_model::MapConfig struct">MapConfig</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.MapEdits.html" title="map_model::MapEdits struct">MapEdits</a></div><div class="item-right docblock-short"><p>Represents changes to a map. Note this isnt serializable thats what <code>PermanentMapEdits</code>
does.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.Movement.html" title="map_model::Movement struct">Movement</a></div><div class="item-right docblock-short"><p>A Movement groups all turns from one road to another, letting traffic signals and pathfinding
operate at a higher level of abstraction.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.MovementID.html" title="map_model::MovementID struct">MovementID</a></div><div class="item-right docblock-short"><p>A movement is like a turn, but with less detail it identifies a movement from one directed
road to another.
One road usually has 4 crosswalks, each a singleton Movement. We need all of the information
here to keep each crosswalk separate.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.NamePerLanguage.html" title="map_model::NamePerLanguage struct">NamePerLanguage</a></div><div class="item-right docblock-short"><p>None corresponds to the native name</p>
</div><div class="item-left module-item"><a class="struct" href="struct.ParkingLot.html" title="map_model::ParkingLot struct">ParkingLot</a></div><div class="item-right docblock-short"><p>Parking lots have some fixed capacity for cars, and are connected to a sidewalk and road.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.ParkingLotID.html" title="map_model::ParkingLotID struct">ParkingLotID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Path.html" title="map_model::Path struct">Path</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.PathRequest.html" title="map_model::PathRequest struct">PathRequest</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.PathV2.html" title="map_model::PathV2 struct">PathV2</a></div><div class="item-right docblock-short"><p>A path between two endpoints for a particular mode. This representation is immutable and doesnt
prescribe specific lanes and turns to follow.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.PermanentMapEdits.html" title="map_model::PermanentMapEdits struct">PermanentMapEdits</a></div><div class="item-right docblock-short"><p>MapEdits are converted to this before serializing. Referencing things like LaneID in a Map wont
work if the basemap is rebuilt from new OSM data, so instead we use stabler OSM IDs thatre less
likely to change.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.Position.html" title="map_model::Position struct">Position</a></div><div class="item-right docblock-short"><p>Represents a specific point some distance along a lane.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.RawToMapOptions.html" title="map_model::RawToMapOptions struct">RawToMapOptions</a></div><div class="item-right docblock-short"><p>Options for converting RawMaps to Maps.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.Road.html" title="map_model::Road struct">Road</a></div><div class="item-right docblock-short"><p>A Road represents a segment between exactly two Intersections. It contains Lanes as children.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.RoadID.html" title="map_model::RoadID struct">RoadID</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RoadWithStopSign.html" title="map_model::RoadWithStopSign struct">RoadWithStopSign</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RoutingParams.html" title="map_model::RoutingParams struct">RoutingParams</a></div><div class="item-right docblock-short"><p>Tuneable parameters for all types of routing.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.Stage.html" title="map_model::Stage struct">Stage</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Turn.html" title="map_model::Turn struct">Turn</a></div><div class="item-right docblock-short"><p>A Turn leads from the end of one Lane to the start of another. (Except for pedestrians;
sidewalks are bidirectional.)</p>
</div><div class="item-left module-item"><a class="struct" href="struct.TurnID.html" title="map_model::TurnID struct">TurnID</a></div><div class="item-right docblock-short"><p>Turns are uniquely identified by their (src, dst) lanes and their parent intersection.
Intersection is needed to distinguish crosswalks that exist at two ends of a sidewalk.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.UberTurn.html" title="map_model::UberTurn struct">UberTurn</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.Zone.html" title="map_model::Zone struct">Zone</a></div><div class="item-right docblock-short"><p>A contiguous set of roads with access restrictions. This is derived from all the maps roads and
kept cached for performance.</p>
</div></div><h2 id="enums" class="section-header"><a href="#enums">Enums</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="enum" href="enum.AmenityType.html" title="map_model::AmenityType enum">AmenityType</a></div><div class="item-right docblock-short"><p>Businesses are categorized into one of these types.</p>
</div><div class="item-left module-item"><a class="enum" href="enum.AreaType.html" title="map_model::AreaType enum">AreaType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.BufferType.html" title="map_model::BufferType enum">BufferType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.BuildingType.html" title="map_model::BuildingType enum">BuildingType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.Direction.html" title="map_model::Direction enum">Direction</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.DrivingSide.html" title="map_model::DrivingSide enum">DrivingSide</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.EditCmd.html" title="map_model::EditCmd enum">EditCmd</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.EditIntersection.html" title="map_model::EditIntersection enum">EditIntersection</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.IntersectionType.html" title="map_model::IntersectionType enum">IntersectionType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.LaneType.html" title="map_model::LaneType enum">LaneType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.OffstreetParking.html" title="map_model::OffstreetParking enum">OffstreetParking</a></div><div class="item-right docblock-short"><p>Represent no parking as Private(0, false).</p>
</div><div class="item-left module-item"><a class="enum" href="enum.PathConstraints.html" title="map_model::PathConstraints enum">PathConstraints</a></div><div class="item-right docblock-short"><p>Whos asking for a path?</p>
</div><div class="item-left module-item"><a class="enum" href="enum.PathStep.html" title="map_model::PathStep enum">PathStep</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.PathStepV2.html" title="map_model::PathStepV2 enum">PathStepV2</a></div><div class="item-right docblock-short"><p>One step along a path.</p>
</div><div class="item-left module-item"><a class="enum" href="enum.StageType.html" title="map_model::StageType enum">StageType</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.Traversable.html" title="map_model::Traversable enum">Traversable</a></div><div class="item-right docblock-short"><p>Either a lane or a turn, where most movement happens.</p>
</div><div class="item-left module-item"><a class="enum" href="enum.TurnPriority.html" title="map_model::TurnPriority enum">TurnPriority</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="enum" href="enum.TurnType.html" title="map_model::TurnType enum">TurnType</a></div><div class="item-right docblock-short"></div></div><h2 id="constants" class="section-header"><a href="#constants">Constants</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="constant" href="constant.MAX_BIKE_SPEED.html" title="map_model::MAX_BIKE_SPEED constant">MAX_BIKE_SPEED</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="constant" href="constant.MAX_WALKING_SPEED.html" title="map_model::MAX_WALKING_SPEED constant">MAX_WALKING_SPEED</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="constant" href="constant.NORMAL_LANE_THICKNESS.html" title="map_model::NORMAL_LANE_THICKNESS constant">NORMAL_LANE_THICKNESS</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="constant" href="constant.PARKING_LOT_SPOT_LENGTH.html" title="map_model::PARKING_LOT_SPOT_LENGTH constant">PARKING_LOT_SPOT_LENGTH</a></div><div class="item-right docblock-short"><p>From some manually audited cases in Seattle, the length of parallel street parking spots is a
bit different than the length in parking lots, so set a different value here.</p>
</div><div class="item-left module-item"><a class="constant" href="constant.SIDEWALK_THICKNESS.html" title="map_model::SIDEWALK_THICKNESS constant">SIDEWALK_THICKNESS</a></div><div class="item-right docblock-short"></div></div></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="map_model" data-search-index-js="../search-index.js" data-search-js="../search.js"></div>
<script src="../main.js"></script>
</body></html>