Amenity System
Categories
15 amenity categories defined in shared/src/models/Floor.ts:
| Category | Icon Glyph | Label | Connector? |
|---|---|---|---|
toilet | WC | Restroom | No |
escalator | ⤡ | Escalator | Yes |
elevator | ⬍ | Lift | Yes |
stairs | ⌇ | Stairs | Yes |
atm | $ | ATM | No |
info | i | Information | No |
exit | → | Exit | No |
parking | P | Parking | No |
parents_room | 👶 | Parents Room | No |
ev_charging | ⚡ | EV Charging | No |
valet | 🔑 | Valet | No |
taxi | 🚖 | Taxi | No |
bus | 🚌 | Bus | No |
rideshare | 🚗 | Rideshare | No |
concierge | 🛎 | Concierge | No |
Elevator Highlighting
Elevators render differently from other amenities to stand out on the floor plan:
- Yellow fill (
#FACC15) instead of the default theme circle fill - Amber stroke (
#B45309), 1.6x thicker than standard - 1.25x larger circle and icon
- Dark icon color (
#1F2937) for contrast - Connector badge position adjusts for the larger circle radius
Amenity Classification (Mappedin)
The Mappedin parser (agent/parsers/mappedin.py) classifies amenities from two sources:
Primary: Location-based classification
The public_1_location_*.json file contains typed amenity entries with names like "ATM", "Parents Room", "EV Charging Station". These are matched against 24+ name patterns in AMENITY_NAME_PATTERNS (case-insensitive substring matching, ordered most-specific first).
This overrides any layer-based classification when a polygon is linked to a location entry.
Fallback: Layer-based classification
Mappedin polygon layers map to amenity categories:
| Layer | Category |
|---|---|
Washroom / Washrooms | toilet |
Connection / Connections | escalator |
Entrance / Entrances | exit |
Amenities Icons | Skipped (no type discriminator — handled by location lookup) |
Elevator Data Availability
Only Yorkdale (8 elevators) and Rockingham (2 elevators) have elevator data in their Mappedin source. Australian Vicinity malls (Chadstone, Glen, Emporium, QVB, etc.) do not tag elevators — Vicinity's Mappedin data uses generic "Connection" polygons for all vertical circulation (escalators, elevators, stairs) with no discriminator field on the polygon itself.
The externalId field occasionally contains ELEVATOR-* prefixes (e.g. Chadstone has 1 out of 166 Connection polygons tagged ELEVATOR-11), but this is unreliable.
Decision: No Heuristic Elevator Detection
Aspect-ratio-based heuristics (small + square → elevator, long + thin → escalator) were considered and rejected. The risk of false positives (tagging stairs as elevators) outweighs the benefit. Elevator data must come from the source provider. Malls that need elevators should have them added via the editor UI.