USE CASE

A GIS editor for the rest of the team.

QGIS-class operations — buffer, simplify, boolean ops, typed attributes — in a browser, embeddable in any web app, no GIS installation required.

The problem

GIS analysts work in QGIS or ArcGIS. Product teams, ops teams, and non-GIS users don't — and shouldn't have to install a desktop GIS to do basic spatial edits. Handing raw GeoJSON to a form-builder tool loses the geometric operations; using a full GIS is overkill for the workflow.

How Element Editor fits

Element's operation set covers the common ground between "simple drawing" and "full GIS":

  • Draw & edit — every geometry type, including Multi*.
  • Snap — magnetic pull to existing features for topologically-clean editing.
  • Boolean operations — union, intersect, subtract, cut hole, slice.
  • Geometry processing — buffer by distance, simplify with Ramer–Douglas–Peucker, smooth with Chaikin, break apart multi-features, merge singles.
  • Typed attributes — schema-backed property forms instead of QGIS's attribute table.
  • GeoJSON in / out — interop with everything that speaks RFC 7946.

Boolean operations, cut hole, slice and the buffer, simplify and smooth previews run in a Web Worker, so the UI stays responsive.

The operations a GIS analyst reaches for most, without leaving the browser.

What matters most for this use case

What Element doesn't do

  • Raster analysis. No raster overlays, no zonal statistics, no band math. Vector-only.
  • Projections beyond Web Mercator. Element stores and reads WGS84 coordinates. Re-projection is upstream or downstream.
  • Shapefile import/export. GeoJSON is the native format. Convert with mapshaper or similar before / after.
  • CAD-grade precision. Element's snap and measure tools are calibrated for geographic precision, not millimetre-level engineering.

A minimal setup

import { ElementEditor } from '@element-editor/react'
import type { FeatureCollection } from '@element-editor/react'
import '@element-editor/react/style.css'

export default function GisEditor({ initialData }: { initialData: FeatureCollection }) {
  return (
    <div style={{ height: 600 }}>
      <ElementEditor
        initialData={initialData}
        onChange={(data) => saveToGisBackend(data)}
      />
    </div>
  )
}

No tools restriction — GIS users want every tool available.

Ready to try it?