What Is a Points-in-Polygon Spatial Join?
A points-in-polygon test — also called a spatial join — answers one question for every point in a dataset: does it fall inside a given boundary shape, or outside it? It sounds simple, but doing it by eye against a list of coordinates is slow and error-prone once you have more than a handful of points. This tool automates the whole test in your browser: load any number of points, draw or upload the boundary you care about, and get an instant, exact inside/outside classification for every single one, ready to export.
Two Ways to Add Points and Boundaries
Points and the boundary polygon are added independently, and each supports both a manual and a file-based method:
- Click to add points: toggle "+ Add on Map" in the sidebar, then click anywhere on the map to drop a point. Click the toggle again, or press Esc, to stop.
- Upload points (CSV or Shapefile): upload a CSV with latitude/longitude columns — common column names like lat/lng, latitude/longitude or y/x are detected automatically, with a manual picker if they aren't — or a zipped Shapefile of point features.
- Draw the boundary: click "✏ Draw on Map", then click each corner of your boundary polygon on the map. Click "✓ Finish Boundary" once you have at least three points to close the shape.
- Upload the boundary: upload a zipped Shapefile or a .geojson file containing one or more Polygon or MultiPolygon features. The map zooms to fit the boundary automatically.
How the Inside/Outside Test Works
Once you click "Match Points Inside Boundary", every point is tested against every polygon in your boundary layer using Turf.js's exact point-in-polygon algorithm — the same well-tested approach used across professional GIS software. If your boundary layer has more than one polygon (for example several separate zones drawn or uploaded together), a point counts as "inside" the moment it matches any one of them, and is tagged with the name of the polygon it matched. A point sitting exactly on a boundary line is counted as inside. The test runs entirely in your browser, so results appear in well under a second even for thousands of points.
Exporting Your Results
After running the spatial join, the sidebar's Export section offers three downloads, each reflecting the colours and counts shown on the map:
- Inside Points (GeoJSON): every point classified as inside the boundary, with a pip_status and pip_boundary property added, plus any original attributes from your upload kept intact.
- Inside Points (CSV): the same inside points as a spreadsheet-ready CSV file, with latitude and longitude as the first two columns.
- Outside Points (GeoJSON): every point that fell outside every polygon in your boundary layer, in the same tagged GeoJSON format.
All three files open directly in QGIS, ArcGIS, Excel, Google Sheets, or any tool that reads standard GeoJSON or CSV — no conversion step required.
Step by Step






Real-World Use Cases
Common Questions
More Tools You Might Like
Map tiles © OpenStreetMap contributors and CARTO, Esri (satellite). Spatial join powered by Turf.js. Shapefile reading by shpjs. Map rendering by Leaflet. All spatial matching happens locally in your browser — no data is uploaded to any server.