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 placescountmodels with minimumspacingbetween themfixed: Places models at regularspacingintervals with optionalcycleOffsetsingle: Places a single model (usejustifyproperty 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