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
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
variant?: string, // Optional preset variant (for building segments)
side?: "left" | "right", // Optional side orientation (for building segments)
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 trackbuilding
: Building segment with configurable variants
Surface Types
asphalt
: Standard road surfaceconcrete
: Concrete surfacegrass
: Grass surfacesidewalk
: Sidewalk texturegravel
: Gravel surfacesand
: Sandy surfacecracked-asphalt
: Weathered asphalt surfaceparking-lot
: Parking lot surfacewater
: Animated water surface with normalshatched
: 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" | "fit",
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, for fixed mode)
justifyWidth?: "left" | "center" | "right", // Horizontal alignment (for fit mode)
positionX?: number, // X-axis offset
positionY?: number, // Y-axis offset
}]
Clone Modes
random
: Randomly placescount
models with minimumspacing
between themfixed
: Places models at regularspacing
intervals with optionalcycleOffset
single
: Places a single model (usejustify
property for position)fit
: Intelligently places models based on their actual dimensions, fitting them end-to-end along the segment. Ideal for buildings.
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"
- Buildings:
"SM3D_Bld_Mixed_4fl, SM3D_Bld_Mixed_5fl"
(use with fit mode)
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
}]
}
}
Building Segment with Variant
{
name: "Mixed-Use Buildings",
type: "building",
surface: "sidewalk",
color: "#ffffff",
level: 1,
width: 10,
variant: "sp-mixeduse",
side: "right",
generated: {
clones: [{
mode: "fit",
modelsArray: "sp-prop-mixeduse-2L-29ft, sp-prop-mixeduse-3L-22ft",
spacing: 0,
justifyWidth: "left",
facing: 270
}]
}
}
Building Variants
When using type: "building"
, the variant
property provides preset configurations:
brownstone
: Urban mixed-use buildings (4-5 floors)suburban
: Single-family houses on grassarcade
: Commercial arcade-style buildingswater
: Seawall with animated water surfacegrass
: Fence boundary with grassparking
: Fence boundary with parking lotsp-mixeduse
: StreetPlan mixed-use buildings (2-3 floors)sp-residential
: StreetPlan single-family homes and townhousessp-big-box
: Big box stores, parking structures, government buildingscustom
: User-defined (preserves custom modifications)
Managed Street JSON Examples
These are the default street definitions in Managed Street JSON used in the 3DStreet Editor Add Layer Panel.
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