Managed Street JSON Format
This document describes the JSON format for defining streets in the 3DStreet system. Third parties can use this format to create compatible street definitions.
Top-Level Structure
{
name: string, // Name of the street configuration
width: number, // Total width in meters
length: number, // Length of street in meters
justifyWidth: string, // How to justify segments ("center")
justifyLength: string, // How to justify street length ("start")
segments: Segment[] // Array of segment definitions
}
Segment Structure
Each segment represents a distinct part of the street and is defined as follows:
{
name: string, // Display name of the segment
type: SegmentType, // Type of segment
surface: SurfaceType, // Surface material
color: string, // Hex color code
level: number, // Vertical offset (-1, 0, 1, 2)
width: number, // Width in meters
direction: Direction, // Traffic direction
generated: Generated // Optional generated content
}
Segment Types
drive-lane
: Standard driving lanebus-lane
: Dedicated bus lanebike-lane
: Dedicated bicycle lanesidewalk
: Pedestrian walkwayparking-lane
: Parking areadivider
: Street divider/mediangrass
: Grass arearail
: Railway track
Surface Types
asphalt
: Standard road surfaceconcrete
: Concrete surfacegrass
: Grass surfacesidewalk
: Sidewalk texturegravel
: Gravel surfacesand
: Sandy surfacehatched
: Hatched patternplanting-strip
: Planted areanone
: No surfacesolid
: Solid color surface
Direction Options
none
: No direction (for sidewalks, dividers)inbound
: Traffic flowing inwardoutbound
: Traffic flowing outward
Generated Content
The generated
object can contain multiple types of generated content:
Clones
Generates repeated 3D models along the segment.
clones: [{
mode: "random" | "fixed" | "single",
modelsArray: string, // Comma-separated list of model names
spacing: number, // Distance between models in meters
count?: number, // Number of models (for random mode)
facing?: number, // Rotation in degrees
randomFacing?: boolean, // Random rotation
cycleOffset?: number, // Offset in the repeating pattern (0-1)
}]
Common model arrays:
- Vehicles:
"sedan-rig, box-truck-rig, self-driving-waymo-car, suv-rig, motorbike"
- Buses:
"bus"
- Cyclists:
"cyclist-cargo, cyclist1, cyclist2, cyclist3, cyclist-dutch, cyclist-kid, ElectricScooter_1"
- Static:
"tree3, lamp-modern, flowers1"
Stencils
Adds road markings and symbols.
stencil: [{
modelsArray: string, // Stencil model names
spacing: number, // Distance between stencils
padding?: number, // Edge padding
cycleOffset?: number, // Pattern offset (0-1)
direction?: Direction, // Stencil orientation
stencilHeight?: number // Height of stencil
}]
Stencil Types:
- Arrows:
"left, right, both, straight, left-straight, right-straight, all"
- Parking:
"parking-t, perpendicular-stalls, solid-stripe"
- Word stencils:
"word-only, word-taxi, word-bus, word-lane, word-only-small, word-yield, word-slow, word-xing, word-stop, word-loading-small"
- Other:
"sharrow, bike-arrow, hash-left, hash-right, hash-chevron"
Pedestrians
Adds pedestrian models with specified density.
pedestrians: [{
density: "normal" | "dense"
}]
Striping
Adds road stripes and lane markings.
striping: [{
striping: string, // Stripe pattern type
side?: "left" | "right" // Side of segment
}]
Striping Types:
"none"
"solid-stripe"
"dashed-stripe"
"short-dashed-stripe"
"short-dashed-stripe-yellow"
"solid-doubleyellow"
"solid-dashed"
"solid-dashed-yellow"
"solid-dashed-yellow-mirror"
Example Segments
Basic Drive Lane
{
name: "Drive Lane",
type: "drive-lane",
surface: "asphalt",
color: "#ffffff",
level: 0,
width: 3.048,
direction: "inbound",
generated: {
clones: [{
mode: "random",
modelsArray: "sedan-rig, box-truck-rig, self-driving-waymo-car, suv-rig, motorbike",
spacing: 7.3,
count: 4
}]
}
}
Sidewalk with Trees
{
name: "Tree Planting Strip",
type: "sidewalk",
surface: "sidewalk",
color: "#ffffff",
level: 1,
width: 0.914,
direction: "none",
generated: {
clones: [{
mode: "fixed",
modelsArray: "tree3",
spacing: 15
}]
}
}
Notes
- All measurements should be in meters
- Colors should be in hex format (e.g., "#ffffff")
- Level values represent curb heights: -1 (below grade), 0 (at grade), 1 (curb height), 2 (elevated)
- When using random mode for clones, both spacing and count should be specified
- For fixed mode clones, only spacing is required
- Cyclic offsets should be between 0 and 1, representing percentage of pattern offset