artemyx logo artemyx
About App Examples GitHub
Core Operations
  • Buffer / Dissolve Vancouver bike walksheds - 200m buffer around bikeways with dissolve.
  • Intersection / Clip San Francisco bike routes intersected with parks - filter and clip modes compared.
  • Union / Merge Portland neighbourhoods merged with development opportunity areas - merge and dissolve modes compared.
  • Difference Ottawa neighbourhoods minus parks and greenspaces - subtract and exclude modes compared.
  • Contains / Within Winnipeg cycling network checked against parks - filter and within modes compared.
  • Distance (Filter) Chicago parks within walking distance of L rail stations.
  • Distance (Annotate) Calgary bikeways colored by distance to nearest LRT station.
  • Centroid Denver park polygons reduced to centroid points.
Labels
  • Labels Calgary communities and LRT stations with text labels - style.labelField for simple labels, type: symbol for full MapLibre expression control.
Expression Styling
  • Interpolate Styling Vancouver parks colored by size - interpolate expression mapping hectares to a green color ramp.
  • Match Styling Victoria road network colored by classification - match expression mapping road classes to a color palette.
Advanced Workflows
  • Multi-Dataset Layers Surrey, Burnaby, and New Westminster parks and active transportation - seven datasets across three municipalities with expression styling.
  • Multi-Step Workflow Edmonton schools + transit - union, buffer, and intersection chained to find dual-access zones.
  • Attribute Filter Vancouver cycling network filtered by infrastructure quality - safer routes via advanced SQL filter, protected lanes via structured filter, walkshed coverage buffered from the result.
deck.gl
  • deck.gl Meteorite Landings NASA meteorite landings rendered with deck.gl GeoJsonLayer - 45,000+ recorded impacts visualized from GeoParquet.
PMTiles
  • PMTiles Vector Tiles Protomaps worldwide vector basemap loaded as a PMTiles dataset - nine source layers styled independently with explicit layer configs.
About App GitHub
# Artemyx Example - Multi-Step Workflow
# Edmonton schools + transit: where can you walk to both?
# Geodetically accurate at 53.5 N - buffers are true circles via UTM reprojection.
#
# Four chained operations:
#   1. Union bus stops + LRT stations into a single transit dataset
#   2. Buffer schools by 800m (dissolve) - walkable-to-school zones
#   3. Buffer unified transit by 400m (dissolve) - walkable-to-transit zones
#   4. Intersection (clip) - areas within walking distance of both

map:
  center: [-113.4938, 53.5461]  # Edmonton, AB
  zoom: 11
  basemap: carto-dark

datasets:
  - id: neighbourhoods
    url: "https://data.edmonton.ca/resource/65fr-66s6.geojson"
    name: Edmonton Neighbourhoods
    color: "#475569"

  - id: schools
    url: "https://data.edmonton.ca/resource/ehbr-emhe.geojson"
    name: Edmonton Schools
    color: "#fb923c"

  - id: bus_stops
    url: "https://data.edmonton.ca/resource/4vt2-8zrq.geojson"
    name: Edmonton Bus Stops
    color: "#38bdf8"

  - id: lrt_stations
    url: "https://data.edmonton.ca/resource/fhxi-cnhe.geojson"
    name: Edmonton LRT Stations
    color: "#a78bfa"

operations:
  # Step 1: merge bus stops + LRT stations into one transit dataset
  - type: union
    inputs: [bus_stops, lrt_stations]
    output: all_transit
    name: All Transit Stops
    params:
      mode: merge
    color: "#38bdf8"

  # Step 2: 800m walkshed around every school (~10 min walk)
  - type: buffer
    input: schools
    output: school_walksheds
    name: School Walksheds (800m)
    params:
      distance: 800
      units: meters
      dissolve: true
    color: "#fb923c"

  # Step 3: 400m walkshed around every transit stop (~5 min walk)
  - type: buffer
    input: all_transit
    output: transit_walksheds
    name: Transit Walksheds (400m)
    params:
      distance: 400
      units: meters
      dissolve: true
    color: "#38bdf8"

  # Step 4: clip school walksheds by transit walksheds - the overlap
  - type: intersection
    inputs: [school_walksheds, transit_walksheds]
    output: dual_access
    name: Dual Access Zones
    params:
      mode: clip
    color: "#34d399"

layers:
  # --- Context (bottom) ---

  # Neighbourhoods - faint context polygons
  - id: neighbourhoods-fill
    source: neighbourhoods
    type: fill
    paint:
      fill-color: "#475569"
      fill-opacity: 0.04

  - id: neighbourhoods-outline
    source: neighbourhoods
    type: line
    paint:
      line-color: "#475569"
      line-width: 0.5
      line-opacity: 0.25

  # --- Raw inputs ---

  # Bus stops - tiny faint dots
  - id: bus-stops-circle
    source: bus_stops
    type: circle
    paint:
      circle-radius: 1.5
      circle-color: "#38bdf8"
      circle-opacity: 0.2

  # All transit (union result) - slightly larger, still subtle
  - id: all-transit-circle
    source: all_transit
    type: circle
    paint:
      circle-radius: 2
      circle-color: "#38bdf8"
      circle-opacity: 0.15

  # --- Step 2 result: school walksheds ---

  - id: school-walksheds-fill
    source: school_walksheds
    type: fill
    paint:
      fill-color: "#fb923c"
      fill-opacity: 0.08

  - id: school-walksheds-outline
    source: school_walksheds
    type: line
    paint:
      line-color: "#fdba74"
      line-width: 1
      line-opacity: 0.25

  # --- Step 3 result: transit walksheds ---

  - id: transit-walksheds-fill
    source: transit_walksheds
    type: fill
    paint:
      fill-color: "#38bdf8"
      fill-opacity: 0.08

  - id: transit-walksheds-outline
    source: transit_walksheds
    type: line
    paint:
      line-color: "#7dd3fc"
      line-width: 1
      line-opacity: 0.25

  # --- Step 4 result: dual access ---

  - id: dual-access-fill
    source: dual_access
    type: fill
    paint:
      fill-color: "#34d399"
      fill-opacity: 0.4

  - id: dual-access-outline
    source: dual_access
    type: line
    paint:
      line-color: "#6ee7b7"
      line-width: 2
      line-opacity: 0.9

  # --- Points on top ---

  # LRT stations
  - id: lrt-stations-circle
    source: lrt_stations
    type: circle
    paint:
      circle-radius: 6
      circle-color: "#a78bfa"
      circle-stroke-color: "#4c1d95"
      circle-stroke-width: 1.5
      circle-opacity: 0.9

  # Schools as points
  - id: schools-circle
    source: schools
    type: circle
    paint:
      circle-radius: 4
      circle-color: "#fb923c"
      circle-stroke-color: "#7c2d12"
      circle-stroke-width: 1