GEON

Geospatial Experience-Oriented Notation
stream.geon

      

A human & AI-readable
format for place.

GEON bridges the gap between machine-optimized geospatial data and rich, semantic descriptions of place — making spatial reasoning accessible to both people and AI agents.

~24%
fewer tokens than GeoJSON
8.8
facts per 100 tokens
1.2x
more places per context window
10+
semantic field categories

See the full flow

Click a place and watch data flow through the pipeline — from a point on the map to structured GEON, equivalent GeoJSON, and a grounded LLM response.

Map Click markers to switch
GEON

          
GeoJSON

          
LLM Response

Why GEON?

Traditional geospatial formats are built for machines. GEON is built for understanding.

GeoJSON WKT GEON
Readability Machine-first Machine-first Human & LLM-first
Semantics Flat properties bag None Structured fields
Experience Absent Absent Core feature
Relationships Requires computation Absent Explicit
Temporal Limited None Integrated
Token efficiency ~24% more Geometry only Baseline

What GEON captures

Every aspect of a place — from its physical form to how it feels to be there.

Identity & Geometry

Name, type, coordinates, boundary polygons, elevation, area — the spatial foundation.

Purpose & Function

What a place is for: commerce, gathering, worship, recreation — structured by category.

Experiential Qualities

Openness, noise, safety, pace, enclosure — 13 scales that describe how a place feels.

Spatial Relationships

Adjacencies, connectivity, containment, viewsheds — how places relate to each other.

Temporal Patterns

Footfall rhythms, opening hours, seasonal events, lifespan — places change over time.

Provenance & Trust

Source attribution, confidence levels, update timestamps — know where your data came from.

Field overview

Three required fields, plus a rich set of optional semantic, relational, temporal, and provenance fields.

Core Fields

  • PLACE required — name
  • TYPE required — classification
  • LOCATION required — lat, lon
  • BOUNDARY optional — polygon
  • EXTENT optional — bounding box
  • AREA optional — surface area
  • ELEVATION optional — height
  • ID optional — identifier

Semantic Fields

  • PURPOSE — activity types
  • EXPERIENCE — 13 quality scales
  • CHARACTER — descriptive traits

Relational Fields

  • ADJACENCIES — neighbours
  • CONNECTIVITY — networks
  • CONTAINS — nested places
  • PART_OF — parent place
  • VIEWSHEDS — visible landmarks

Temporal & Provenance

  • TEMPORAL — time-varying patterns
  • LIFESPAN — age and permanence
  • SOURCE — data origins
  • CONFIDENCE — quality indicators
  • UPDATED — last modified

Extended Domain

  • BUILT_FORM ECOLOGY INFRASTRUCTURE
  • DEMOGRAPHICS ECONOMY VISUAL

Build with GEON

Native parsers, generators, and validators for your favorite languages.

# Install from GitHub
pip install "git+https://github.com/jwilliamsresearch/GEON.git#subdirectory=geon-py"

# Usage
import geon

place = geon.parse("""
PLACE: Victoria Park
TYPE: public_space
LOCATION: 52.9403, -1.1340
PURPOSE:
  - recreation
  - ecology
""")

print(place.place)      # "Victoria Park"
print(place.location)   # (52.9403, -1.1340)
# Add git dependency
cargo add --git https://github.com/jwilliamsresearch/GEON.git geon-rs

# Usage
use geon_rs::Geon;

let input = r#"
PLACE: Victoria Park
TYPE: public_space
LOCATION: 52.9403, -1.1340
"#;

let place: Geon = input.parse()?;
println!("Loaded: {}", place.identity.name);
# Install from GitHub (as workspace or submodule)
npm install github:jwilliamsresearch/GEON

# Usage
import { parse } from 'geon-js';

const input = `
PLACE: Victoria Park
TYPE: public_space
LOCATION: 52.9403, -1.1340
`;

const place = parse(input);
console.log(place.identity.name);
GEON v0.1.0 | James Williams — University of Nottingham | Map data © OpenStreetMap contributors