Spatial Features

Geocode addresses, visualize data on maps, calculate drive times and distances, and analyze polygons with GeoSheet's native spatial data types and formulas.

GeoSheet is built from the ground up for geospatial data. You can store locations, routes, and regions directly in cells, visualize them on maps, and compute spatial relationships with formulas.

Spatial Data Types

GeoSheet cells natively support these spatial types, shown with color-coded indicators:

TypeDescriptionColor
POINTA single location (lat/lon)Blue
MULTIPOINTMultiple pointsTeal
LINEConnected path of pointsAmber
MULTILINEMultiple line stringsIndigo
POLYGONEnclosed areaPurple
MULTIPOLYGONMultiple polygonsFuchsia
COLLECTIONMix of spatial typesOrange

Creating Spatial Values

Via formulas:

=POINT(40.7128, -74.0060)          # New York City
=GEOCODE("Paris, France")           # Geocode an address
=LINE(A1:A5)                        # Line from a column of points
=POLYGON(A1:A10)                    # Polygon from points

Via typing/pasting:

  • Type POINT(lat, lon) directly into a cell
  • Paste GeoJSON — auto-detected and converted. Supports all geometry types: Point, LineString, MultiPoint, MultiLineString, Polygon, MultiPolygon
  • Paste WKT (Well-Known Text) — auto-detected and converted
  • Addresses in spatial formula arguments are automatically geocoded

Input Formats

GeoSheet accepts multiple input formats:

FormatExample
Point stringPOINT(40.71, -74.00)
GeoJSON{"type": "Polygon", "coordinates": [...]}
WKTPOLYGON((0 0, 1 0, 1 1, 0 1, 0 0))
Address (in formulas)=GEOCODE("123 Main St, NYC")

Geocoding

Geocoding converts addresses to coordinates. GeoSheet uses Mapbox for high-quality results.

Forward Geocoding

=GEOCODE("Empire State Building")     # Returns POINT(40.748, -73.986)
=GEOCODE(A1)                          # Geocode address in cell A1

Reverse Geocoding

=REVERSE_GEOCODE(POINT(40.748, -73.986))   # Returns address string
=REVERSE_GEOCODE(A1)                        # Reverse geocode point in A1

Implicit Geocoding

Spatial formulas automatically geocode address strings:

=DISTANCE("New York", "Los Angeles")   # No GEOCODE() needed
=DRIVE_TIME("Paris", "Berlin")         # Addresses auto-resolved

Results are cached for performance. Geocoded cells show #PENDING briefly while resolving.


Routing

Routing formulas compute driving directions, distances, and reachable areas using Mapbox.

Drive Time & Distance

=DRIVE_TIME(A1, B1)           # Duration between two points (returns DURATION)
=DRIVE_DISTANCE(A1, B1)       # Distance in kilometers (returns number)

Route Path

=ROUTE(A1, B1)                # Returns a LINE following the road network

Isochrone (Reachable Area)

=ISOCHRONE(A1, 15)            # POLYGON of area reachable within 15 minutes
=ISOCHRONE(A1, 30)            # 30-minute drive-time polygon

Isochrones support 1–240 minute ranges.


Spatial Analysis

Distance

=DISTANCE(A1, B1)             # Straight-line distance in km (default)
=DISTANCE(A1, B1, "mi")       # Distance in miles
=DISTANCE(A1, B1, "m")        # Distance in meters

Point-in-Polygon

=CONTAINS(polygon, point)     # TRUE if point is inside polygon

Nearest Neighbor

=NEAREST(A1, B:B, 3)          # 3 nearest points in column B to point A1

Buffer Zones

=BUFFER(A1, 5, "km")          # 5km circular buffer around a point

Area & Perimeter

=POLYGON_AREA(A1)             # Area of polygon
=POLYGON_PERIMETER(A1)        # Perimeter of polygon

Intersection

=INTERSECTS(A1, B1)           # TRUE if geometries overlap
=INTERSECTION(A1, B1)         # Geometry of the overlap

Export as WKT or GeoJSON

=TOWKT(A1)                    # "POLYGON ((...))"  — standard Well-Known Text
=TOGEOJSON(A1)                # {"type":"Polygon","coordinates":[...]}

Both formulas work on any spatial type. Use them to feed a spatial value into another tool, build a WKT column for export, or inspect the raw geometry. You can also right-click any spatial cell and choose Copy as WKT or Copy as GeoJSON to copy the value directly to your clipboard without a formula.


Location Analytics

GeoSheet's Location Analytics formulas operate on cells with temporal history — typically a POINT cell whose value changes over time, such as a live LOCATION() cell or a column tracking a moving asset. When Time Warp is enabled, GeoSheet records each change so these formulas can reconstruct motion, detect geofence entries, and measure trips retroactively.

Motion

Compute instantaneous motion from the two most recent history entries on a point cell, or look up a historical position.

=SPEED(A1)                    # Current speed (km/h by default)
=SPEED(A1, "mph")             # mph / kmh / ms / knots supported
=HEADING(A1)                  # Compass bearing 0–360° (0=N, 90=E)
=TRAVELED(A1, "09:00")        # Distance travelled since 9am (km)
=TRAVELED(A1, "09:00", "17:00", "mi")   # Workday miles
=LOCATIONAT(A1, "2026-04-05 09:00")     # Historical POINT at a specific moment

Geofencing

Detect whether a point is inside a polygon, and measure time spent inside.

=GEOFENCE(A1, polygon)        # TRUE if point A1 is inside the polygon
=GEOFENCEIN(A1, store_poly)   # Datetime the point most recently entered the polygon
=DWELLTIME(A1, polygon)       # Total DURATION inside polygon (all history)
=DWELLTIME(A1, polygon, "2026-04-01")   # Dwell time since April 1

GEOFENCE vs CONTAINS: both test whether a point falls inside a polygon, but the argument order is flipped. Use GEOFENCE(point, polygon) when you're thinking "is this device inside the fence?" (the point is the subject), and CONTAINS(polygon, point) when you're thinking "does this region contain this point?" (the polygon is the subject). They're aliases semantically — pick whichever reads better in your formula.

Proximity & Trade Areas

Find nearest neighbours and build service/catchment areas.

=NEARESTPOINT(A1, B2:B100)          # Closest POINT in B2:B100 to A1
=NEARESTDIST(A1, B2:B100, "mi")     # Distance to that closest point
=COUNTWITHIN(A1, B2:B100, 5, "km")  # Count points within 5km of A1
=POINTSINPOLY(polygon, B2:B100)     # Count points inside the polygon

=TRADEAREA(A1, 10, "radius", "km")  # 10km circular POLYGON around A1
=TRADEAREA(A1, 15, "drivetime")     # 15-minute drive-time POLYGON (Mapbox isochrone)

=OVERLAP(poly1, poly2)              # Share of poly1 that overlaps poly2 (0–1)

TRADEAREA has two modes: "radius" builds a simple circular polygon, and "drivetime" calls Mapbox to compute an isochrone along the road network.

Trip Analysis

Reconstruct and measure trips over a time window from a point cell's history.

=TRIPPATH(A1, "2026-04-05 08:00", "2026-04-05 17:00")  # LINE tracing the day's movement
=TRIPDIST(A1, TODAY(), NOW())                          # Total km travelled today
=TRIPDIST(A1, TODAY(), NOW(), "mi")                    # Same in miles
=TRIPTIME(A1, TODAY(), NOW())                          # Active moving time (DURATION)
=TRIPTIME(A1, TODAY(), NOW(), 5)                       # Exclude segments below 5 km/h

TRIPTIME excludes stationary segments using a default 2 km/h threshold — pass a custom kph value to tighten or loosen what counts as "moving".

For routes you build yourself from a range of waypoints (no history needed):

=ROUTEDIST(A1:A10)            # Total km visiting 10 waypoints in order
=ROUTEDIST(stops, "mi")       # Same in miles

Clustering & Density

Discover spatial patterns, assign territories, and find hotspots.

=CLUSTER(A1, $A$1:$A$100, 5)                # Cluster ID (1–5) for this point via k-means
=WEIGHTEDCENTER(A1:A50)                      # Mean center of 50 locations
=WEIGHTEDCENTER(A1:A50, B1:B50)              # Revenue-weighted center of gravity
=DENSITYRANK(A1, $A$1:$A$200)               # Density percentile 0–100 (default 5km radius)
=DENSITYRANK(A1, $A$1:$A$200, 10)           # Same with 10km radius
=VORONOI(A1, $A$1:$A$20)                    # Voronoi cell POLYGON — the territory "owned" by A1

CLUSTER uses k-means on lat/lon coordinates — works best for datasets within a single continent. Each cell with CLUSTER gets the same cluster assignment for the same dataset and k, so you can fill a column with =CLUSTER(A1, $A$1:$A$100, 5) and color-code by cluster.

VORONOI returns the region closer to the given point than to any other point in the set — useful for territory assignment, nearest-facility zones, and coverage maps.

Matrix, Regions, Road Snapping & Route Optimization

Advanced routing and administrative-region lookups backed by the Mapbox API.

=DISTMATRIX(A1, B1)              # Driving minutes from A1 to B1 (Mapbox Matrix)
=DISTMATRIX($A$1, B1, "dist")    # Driving kilometres from A1 to B1
=REGION(A1, "state")             # State/province containing point A1 — e.g. "New York"
=REGION(A1, "zipcode")           # Postal code — "10001"
=REGION(A1, "country")           # Country — "United States"
=SNAPTOROAD(A1:A20)              # Snap a noisy GPS trace to the road network → LINE
=ROUTEOPTIMIZE(A1, $A$1:$A$10)   # Position (1..n) of A1 in the optimal visit order
=ROUTEOPTIMIZE(A1, $A$1:$A$10, depot)   # Pin the route to start at a depot

DISTMATRIX returns a single time/distance per cell — fill the formula across a grid to build a full origin/destination matrix. Use mode "time" (default, minutes) or "dist" (kilometres).

REGION supports six levels: country, state, county, city, zipcode, and neighborhood. Returns #N/A when no feature at that level covers the point (e.g., rural areas without a city assignment).

SNAPTOROAD accepts 2–100 POINTs in order and returns a LINE snapped to driveable roads — ideal for cleaning up GPS traces before plotting on a map.

ROUTEOPTIMIZE runs a haversine-based TSP heuristic (nearest-neighbour seeding + 2-opt improvement) and returns the 1-indexed position of each point in the optimal route. Fill it down a column of waypoints to reveal the full ordering; pass an optional start point to pin the first stop (useful when routing out of a depot).


Map Charts

Visualize spatial data on interactive maps. Map charts support:

Creating a Map

  1. Select cells containing spatial data
  2. Open chart creation (toolbar or Geovani)
  3. Choose Map chart type
  4. Configure series (points, lines, polygons)

Or ask Geovani: "Create a map showing all the locations in column A"

Tile Styles

Four map tile styles, switchable via the chart settings:

  • Street — detailed road map
  • Light — minimal, light background
  • Dark — dark mode map
  • Satellite — aerial imagery

Map Features

  • Point clustering — large datasets auto-cluster at lower zoom levels
  • Choropleth shading — polygons colored by value (e.g., population density)
  • Series visibility — toggle individual data series on/off
  • Multiple series — overlay points, lines, and polygons on the same map
  • Pinned charts — pin maps to a side panel for persistent view

Map Interaction

  • Zoom: scroll wheel or zoom controls
  • Pan: click and drag
  • Click a point/polygon to see its data
  • Maps auto-fit to show all data when created

Spatial Data Catalog

Browse and import curated spatial datasets directly into your spreadsheets.

Accessing the Catalog

  1. Click Catalog in the toolbar, or
  2. Ask Geovani: "Search the catalog for US state boundaries"

Dataset Categories

  • Boundaries — country, state, county, city boundaries
  • Infrastructure — roads, airports, transit
  • Natural — rivers, lakes, parks, elevation
  • Demographics — population, income, education
  • Points of Interest — restaurants, hospitals, schools

Importing Data

  1. Browse or search datasets
  2. Preview the data (geometry type, feature count, source)
  3. Click Import — creates a new sheet with all features
  4. Large imports (>1,000 features) show a progress bar

Imported data includes all properties as columns, with spatial values in the first column.


Live Location Tracking

Track GPS positions in real-time using the LOCATION() formula:

=LOCATION("alice")              # Alice's latest position
=LOCATION("bob", "phone")       # Bob's phone position
=LOCATION("alice", , 5)         # Update every 5 seconds

Positions are stored in a hidden system sheet and updated automatically when users have location sharing enabled.


Tips

  • Batch geocoding: Geovani can geocode entire columns at once — just ask "Geocode all addresses in column A"
  • Distance matrices: Ask Geovani to "Build a distance matrix between all stores and warehouses"
  • Combine lat/lon: If you have separate latitude and longitude columns, ask Geovani or use =POINT(A1, B1) to combine them
  • WKT paste: Copy spatial data from GIS tools in WKT format and paste directly into cells
  • Export to GIS tools: Right-click any spatial cell and choose Copy as WKT or Copy as GeoJSON to extract the geometry in a standard format, or use =TOWKT(A1) / =TOGEOJSON(A1) to build an export column

Related Tutorials