Spatial Table Join
Provide two GeoJSON FeatureCollections and calculate which polygon contains each point or has it on a boundary. Choose the first matching zone or keep all overlaps, and decide whether boundary points count. The output retains original point properties, adds zone attributes with a zone_ prefix, and reports points with no zone and zones with no point. This tool supports 2D RFC 7946 WGS 84 longitude–latitude Point and Polygon features only. It does not calculate roads, distance or coordinate transformations.
Key features
- Distinguish polygon interior, exterior boundary, hole boundary and hole interior
- Keep all overlapping zone matches or only the first in input order
- Join original point properties with lossless zone_-prefixed zone properties
- Reject name collisions, malformed rings, antimeridian crossings and legacy CRS explicitly
- Export joined GeoJSON/CSV and unmatched point/zone CSV
- Show green matched and red unmatched points on a local SVG coordinate sketch
How to use
- Paste a Point FeatureCollection and a Polygon FeatureCollection, or open each local file.
- Choose whether boundaries count and whether to keep all overlapping zones or the first one.
- Run the spatial join and inspect matched pairs, unmatched points and unmatched zones.
- Download joined GeoJSON/CSV, unmatched CSV or the SVG sketch.
Use cases
- Attach an area label to collected field points
- Compare all overlaps with a first-zone priority policy
- Audit omissions caused by polygon holes or boundary rules
Frequently asked questions
Which GeoJSON geometries are supported?
The point input accepts only 2D Point features, and the zone input only 2D Polygon features in FeatureCollections. MultiPoint, MultiPolygon, LineString, GeometryCollection and legacy CRS cause a clear error; none are silently skipped.
What if zones overlap?
All mode duplicates the point feature once per match. First mode uses the first matching zone in the zone input. Unmatched points remain as one result feature with spatial_join=null in either mode.
How are boundaries and holes treated?
A point on the outer ring or a hole ring is a boundary match only when inclusion is selected. A point inside a hole is never matched. The test uses planar longitude–latitude ring arithmetic.
Will an existing property be overwritten?
No. Point properties are retained, zone properties receive a zone_ prefix, and spatial_join metadata is added. If an original point property already has a resulting name, the join stops with a collision error.
Does it transform other coordinate systems?
No. Both inputs are interpreted as RFC 7946 WGS 84 longitude–latitude. A legacy crs member is rejected. Transform other CRS data explicitly first.
Are the coordinates sent to a server?
No. Files and results stay in current browser memory, and only user-triggered downloads write local files.
Privacy
Input GeoJSON is parsed and joined in the current browser. No map tiles or external analysis APIs receive the coordinates, and the tool does not store input files on a server.
Comments & questions