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.
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=mercatorMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
