GeoJSON to SVG

Render GeoJSON features into a clean, scalable SVG map — polygons, lines and points, with a Web-Mercator projection and custom colours. No tile servers, no API key. Runs in your browser; nothing is uploaded.

SVG

About this tool

Paste GeoJSON and get back a clean, scalable SVG map — rendered entirely in your browser, with no tile servers, no API key and nothing ever uploaded.

It accepts a FeatureCollection, a single Feature, or a bare geometry, and draws every supported type: Point and MultiPoint as circles, LineString and MultiLineString as strokes, Polygon and MultiPolygon as filled shapes (with inner rings cut out as holes), plus GeometryCollection. Coordinates are read as [longitude, latitude].

Everything is scaled to fit the chosen width while preserving the aspect ratio, and you can tune the fill, stroke, stroke width, point radius and background colour. Choose the Web-Mercator projection for a familiar map look, or none to plot raw longitude/latitude.

Example

{
  "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": { "type": "Polygon",
        "coordinates": [[[0,0],[10,0],[10,10],[0,10],[0,0]]] },
      "properties": {} },
    { "type": "Feature",
      "geometry": { "type": "Point", "coordinates": [5,5] },
      "properties": {} }
  ]
}

The result is a standalone .svg you can save, embed in a page, or drop into a document — it stays crisp at any size because it's vector, not a bitmap.

Privacy

The map is projected and rendered locally in your browser. Your GeoJSON is never sent to a server.

FAQ

My shapes come out mirrored or in the wrong place — why?

The most common cause is swapped coordinates. GeoJSON positions are [longitude, latitude] (x before y), the opposite of the "lat, lon" order most people say aloud. The tool follows the GeoJSON spec strictly, so if your data was exported lat-first, every point lands transposed.

How do I control the size of the SVG?

Set the width (accepted range 16–4096 px, default 800). The height isn't a separate setting — it's derived from your data's bounding box so the aspect ratio is preserved, with a small margin added around the drawing.

What happens to features near the poles in Mercator mode?

Web-Mercator can't represent the poles, so latitudes are clamped to ±85.05° before projecting — anything beyond that is drawn at the clamp edge rather than producing infinities. If you're plotting polar data, switch the projection to none to plot raw longitude/latitude instead.

Which GeoJSON types are supported?

FeatureCollection, single Feature, or a bare geometry, containing Point / MultiPoint (drawn as circles), LineString / MultiLineString (strokes), Polygon / MultiPolygon (fills, with inner rings cut out as holes), and nested GeometryCollection. An unrecognized geometry type stops the render with an explicit error naming the type.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool geojson-to-svg '{
  "type": "FeatureCollection",
  "features": [
    { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [[[0,0],[10,0],[10,10],[0,10],[0,0]]] }, "properties": {} }
  ]
}'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/geojson-to-svg/?geojson=%7B%0A%20%20%22type%22%3A%20%22FeatureCollection%22%2C%0A%20%20%22features%22%3A%20%5B%0A%20%20%20%20%7B%20%22type%22%3A%20%22Feature%22%2C%20%22geometry%22%3A%20%7B%20%22type%22%3A%20%22Polygon%22%2C%20%22coordinates%22%3A%20%5B%5B%5B0%2C0%5D%2C%5B10%2C0%5D%2C%5B10%2C10%5D%2C%5B0%2C10%5D%2C%5B0%2C0%5D%5D%5D%20%7D%2C%20%22properties%22%3A%20%7B%7D%20%7D%0A%20%20%5D%0A%7D&width=800&fill=%23cfe8ff&stroke=%231f6feb&stroke_width=1&point_radius=4&background=%23ffffff&projection=mercator

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.