Skip to main content
Vecaria

GeoJSON Join Tool

Local

Join two GeoJSON layers by matching keys or point-in-polygon — merge attributes locally in your browser, free with no sign-in, nothing uploaded.

Attribute join merges properties by matching keys (duplicate keys: last wins by default, first selectable); spatial join merges properties of the polygon containing each target point (multi-match: first by default, last or largest-overlap selectable — overlap is computed by real polygon clipping, and point targets fall back to the first match). Files can also be dragged onto either box or picked via the file links. Inputs totalling over 5 MB are parsed and joined in a Web Worker so the page stays responsive (the inline SVG fallback preview is skipped for those — the map preview still shows the result). The spot-check list shows the first merged rows so you can verify the join without opening the download.

What is it? GeoJSON Attribute & Spatial Join joins two layers: an attribute join matches values of a key field (like a table lookup), and a spatial join attaches a polygon's attributes to the points it contains — inputs totalling over 5 MB are parsed and joined in a Web Worker, and conflict rules (duplicate keys, multi-match) are selectable.

TL;DR: Join two GeoJSON layers in your browser — attribute join by matching a key field, or spatial join by point-in-polygon containment. Paste both layers, pick conflict rules, spot-check the merged rows, then download. Free with no sign-in; nothing is uploaded.

How to use

  1. Paste the target and source GeoJSON into the two text boxes (or drag files in / pick them via the file links).
  2. Choose attribute or spatial join — set the matching keys (attribute) or prefix, and pick a conflict rule (duplicate keys: last/first; multi-match: first/last/largest-overlap).
  3. Click Join — the summary line reports matched/total and the conflict rule; expand "Spot-check" to verify merged attribute rows, preview the result on the map, then copy or download it.

FAQ

Which spatial join is supported?

Polygon-into-point containment is supported for attaching area attributes to points.

What happens to unmatched features?

They are kept as-is; only matched features receive source attributes. The summary line shows how many were joined.

How do I verify the join is correct?

The spot-check list shows the first joined features with their merged attribute rows; the unmatched output (if any) can be downloaded separately.

What about very large layers?

Inputs totalling over 5 MB are parsed and joined in a Web Worker (falling back to the main thread automatically — both paths run the same functions), so the page stays responsive.

Is it local?

Yes — the worker runs on your machine; nothing is uploaded.

Is it free? Do I need an account?

Yes — joining two GeoJSON layers uses a free daily allowance and needs no sign-in. Batch runs and larger quotas are the paid Pro tier.

How is this different from the spatial join in QGIS or ArcGIS?

It is a deliberate subset: containment only (point-in-polygon; non-point targets fall back to their bounding-box center), with selectable conflict rules and a spot-check list. Nothing is installed or uploaded — if you need polygon-to-polygon joins, distance-based joins or the full join dialog of desktop GIS, use QGIS or ArcGIS; if you need to union two polygon layers, use the GeoJSON Overlay tool.

Can it merge all features from both files into one layer?

No — the output keeps the target layer's features, enriched with source attributes; it does not concatenate both layers or add new features. To union overlapping polygons from two layers use GeoJSON Overlay (union); to merge adjacent polygons in one layer use GeoJSON Dissolve.

Why are non-point targets matched by bounding-box center?

Containment is computed point-in-polygon; a line or polygon target is approximated by the center of its bounding box, so a large polygon whose bbox center falls outside the source polygon will not match. Convert targets to points first (for example with GeoJSON Centroid) when in doubt.

Examples

  • Paste target and source GeoJSON → join → spot-check merged rows → download
  • Input: a points layer (e.g. customers) and a polygons layer (e.g. service areas) → spatial join → each point carries its polygon's name and attributes
  • Input: a target layer with an id column and a source layer sharing the same ids → attribute join → target features enriched (unmatched features are kept and can be downloaded separately)

Supported formats

GeoJSON

Limitations

  • Attribute join matches values as strings.
  • Spatial join uses point-in-polygon containment; non-point targets are approximated by their bounding-box center.
  • Conflict rules are selectable: duplicate source keys keep the last (default) or first record; when a target falls in multiple polygons the first (default) or last match wins, or the largest overlap — computed by real polygon clipping (slower); point targets have zero-area overlap and fall back to the first match (disclosed).
  • Inputs totalling over 5 MB are parsed and joined in a Web Worker (automatic main-thread fallback — both paths run the same functions); the inline SVG fallback preview is skipped on that path, the map preview still works.
  • The map preview renders geometry locally; CARTO basemap tiles are fetched over the network. Previews sample the first 5,000 features — downloads contain all of them.
  • Coordinate systems should match before joining.

Privacy

Privacy first: this tool runs entirely in your browser — your input and files never leave your device, and everything is cleared when you close the page.