📍 Google Polyline Encoder / Decoder
Decode a Google Maps polyline string into coordinates (and GeoJSON), or encode a list of lat/lng points into one — with precision 5 or 6.
3 points (lat, lng)
38.5, -120.2 40.7, -120.95 43.252, -126.453
GeoJSON LineString
{
"type": "LineString",
"coordinates": [
[
-120.2,
38.5
],
[
-120.95,
40.7
],
[
-126.453,
43.252
]
]
}Encode a list of latitude/longitude points into a Google-encoded polyline string, or decode one back into coordinates (and GeoJSON). It's the compact format the Google Maps Directions API returns for routes. Remember polyline order is latitude, longitude — the reverse of GeoJSON's. Use precision 6 for the higher-precision variant some services use. Everything runs in your browser. 🔒
How the google polyline encoder / decoder works
Google's Encoded Polyline Algorithm squeezes a list of latitude/longitude points into a short ASCII string — the compact form the Google Maps Directions API returns for a route. Each point is stored as the difference from the previous one, scaled by 10^precision (5 by default), zig-zag encoded to handle negatives, and split into base-32 chunks written as printable characters. This tool implements that algorithm exactly, both ways: paste an encoded string to decode it into coordinates and a GeoJSON LineString, or paste a list of "lat, lng" points to encode them. Choose precision 6 for the higher-precision variant some services (and OSRM/Valhalla) use.
One thing to watch: a polyline stores coordinates in latitude, longitude order — the opposite of GeoJSON, which uses longitude, latitude. This tool keeps that straight, showing decoded points as lat/lng and emitting correctly-ordered GeoJSON. Precision must match how the string was created — decoding a precision-6 polyline as precision 5 puts the points in the wrong place — so if a route looks off by a factor of ten, switch the precision. Everything is computed on your device; no coordinates are uploaded.
Frequently asked questions
What is a Google encoded polyline?
A compact ASCII string that represents a series of latitude/longitude points, defined by Google's Encoded Polyline Algorithm. It's what the Google Maps Directions API returns for a route's path, and it's widely supported by mapping libraries because it's much shorter than a list of raw coordinates.
How do I decode a polyline to coordinates?
Paste the encoded string into the decoder and it outputs the list of latitude/longitude points, plus a GeoJSON LineString you can drop into a map. Make sure the precision matches how it was encoded (5 for Google's default).
What is the difference between precision 5 and 6?
Precision is how many decimal places of latitude/longitude are preserved: precision 5 (Google's default) keeps about 1-metre resolution, precision 6 keeps about 10 cm and is used by some routing engines like OSRM and Valhalla. The two aren't interchangeable — decode with the same precision the string was encoded at.
Why are my decoded points in the wrong place?
Usually a precision mismatch (try switching between 5 and 6), or a latitude/longitude order mix-up. Polylines are latitude-first; GeoJSON and many map APIs are longitude-first. This tool labels the order to avoid the confusion.
Does it output GeoJSON?
Yes — decoding produces a GeoJSON LineString with the coordinates correctly reordered to longitude, latitude, ready to paste into Leaflet, Mapbox or any GeoJSON tool.
Are my coordinates uploaded?
No — encoding and decoding run entirely in your browser and nothing is transmitted, so location data stays on your device. It works offline too.