Problems 3/42 Random 1 Random mix All None
All42 Coordinates11 Geometry10 Attributes9 Structure7 Bytes & encoding5
✓ Everything on one point Every feature shares an identical lat/lon. Clusterers collapse, auto-zoom goes to max. ✓ Swapped lat/lon Some rows have the pair reversed. London ends up in the Indian Ocean. ✓ Null Island Missing coordinates silently became 0,0. A pile of pins off West Africa. ✓ Precision drift Decimal places vary from 0 to 15 per row. Rounded rows snap onto a coarse grid. ✓ Out-of-range values Latitudes past ±90 and longitudes past ±180. Projection maths returns NaN or Infinity. ✓ Numbers as strings "51.5072" instead of 51.5072. Strict parsers reject; loose ones concatenate. ✓ Antimeridian crossing Geometry spanning ±180°. Naive renderers draw a stripe right across the map. ✓ Polar coordinates Features at ±90° latitude. Web Mercator projects those to infinity. ✓ Projected metres (EPSG:3857) Coordinates left in Web Mercator metres but labelled WGS84. Values in the millions. ✓ Z and M values 3- and 4-element positions mixed with 2-element ones. Elevation read as latitude. ✓ null / NaN inside coordinates A null or NaN in the middle of a position array. Usually an uncaught TypeError. ✓ Mixed geometry types Points, lines and polygons in one collection. Single-layer renderers pick one and drop the rest. ✓ Null geometry Valid features with geometry: null. Legal GeoJSON, and a crash in most viewers. ✓ Empty coordinate arrays coordinates: []. Not null, not valid, and bbox maths returns Infinity. ✓ Unclosed polygon rings First position ≠ last. Some libraries close it for you, some render a line. ✓ Wrong winding order Exterior rings clockwise, against RFC 7946. Fills invert or vanish entirely. ✓ Self-intersecting polygons Bow-tie shapes. Tessellation produces holes, spikes, or nothing at all. ✓ Degenerate shapes Zero-length lines, zero-area polygons, rings of two points. Area and centroid divide by zero. ✓ Interior rings Polygons with holes, including one hole placed outside its shell. ✓ Vertex bomb One geometry with ~50k vertices. Fine on paper, a frozen main thread in practice. ✓ Nested GeometryCollections A GeometryCollection inside a GeometryCollection. Non-recursive walkers stop at depth 1. ✓ Inconsistent schema Every feature carries a different set of keys. Table views end up mostly empty. ✓ Unstable property types One key holding numbers, strings, booleans and nulls. Sorting and filtering go sideways. ✓ Nulls and fake nulls null, "", " ", "NULL", "N/A", "-", "None". Seven ways to say nothing. ✓ Unicode chaos Emoji, CJK, right-to-left text, combining marks and zero-width joiners in labels. ✓ Injection-shaped strings Values like <script>, ={{7*7}} and =1+1. Checks that popups escape and CSV exports quote. ✓ Oversized properties ~100 KB of text and deeply nested objects on a handful of features. Popups explode. ✓ Six date formats ISO, US, UK, epoch seconds, epoch millis and Excel serials in one column. ✓ Awkward property keys Keys with dots, spaces, leading digits, __proto__, and names over 10 chars for shapefiles. ✓ Broken feature ids Duplicate ids, missing ids, and ids that are numbers on one row and strings on the next. ✓ Exact duplicates The same feature repeated. Counts double, and overlapping fills darken. ✓ Overplotted cluster A third of the features packed into a ~10 m box. Everything at low zoom is one dot. ✓ Global outliers A few features scattered worldwide. Fit-to-bounds zooms all the way out. ✓ Legacy crs member The GeoJSON 2008 crs block naming a non-WGS84 EPSG code. Removed from the spec, still shipped. ✓ Lying bbox A bbox member that disagrees with the geometry it describes. ✓ Foreign members Extra top-level and feature-level keys the spec says to ignore. Strict validators refuse. ✓ Empty result Zero features. The single most common thing an integration forgets to handle. ✓ UTF-8 BOM A byte order mark before the first character. JSON.parse throws on position 0. ✓ Mixed line endings CRLF and LF in the same file. Line-oriented parsers keep a trailing \r on every value. not in GeoJSON ✓ Malformed JSON Trailing commas, unquoted keys, single quotes. Reads fine to a human, fatal to a parser. ✓ Bare NaN / Infinity Python's json.dump output. Not valid JSON, and accepted by almost nothing else. ✓ Mojibake UTF-8 bytes decoded as Latin-1. Café becomes Café, all the way down.