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:
| Type | Description | Color |
|---|---|---|
| POINT | A single location (lat/lon) | Blue |
| MULTIPOINT | Multiple points | Teal |
| LINE | Connected path of points | Amber |
| MULTILINE | Multiple line strings | Indigo |
| POLYGON | Enclosed area | Purple |
| MULTIPOLYGON | Multiple polygons | Fuchsia |
| COLLECTION | Mix of spatial types | Orange |
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:
| Format | Example |
|---|---|
| Point string | POINT(40.71, -74.00) |
| GeoJSON | {"type": "Polygon", "coordinates": [...]} |
| WKT | POLYGON((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), andCONTAINS(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
- Select cells containing spatial data
- Open chart creation (toolbar or Geovani)
- Choose Map chart type
- 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
- Click Catalog in the toolbar, or
- 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
- Browse or search datasets
- Preview the data (geometry type, feature count, source)
- Click Import — creates a new sheet with all features
- 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
- Map Data in a Spreadsheet -- step-by-step guide to creating maps from your data
- Geocode Addresses -- detailed tutorial on forward and reverse geocoding
- Calculate Distance Between Addresses -- straight-line and driving distance calculations
- Calculate Drive Time Between Locations -- driving times, routes, and isochrones
- What Is a Geospatial Spreadsheet? -- overview of how spatial data works in a spreadsheet
Updated 15 days ago