{
  "fixtures": [
    {
      "id": "ring-closed",
      "category": "rings",
      "title": "A correctly closed ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "valid",
      "specNote": "The first and last positions of a linear ring are identical.",
      "why": "The control. Any implementation that fails this one is broken, and it gives the other ring fixtures something to be compared against.",
      "file": "rings/ring-closed.geojson"
    },
    {
      "id": "ring-unclosed",
      "category": "rings",
      "title": "Ring not closed",
      "clause": "RFC 7946 3.1.6",
      "spec": "invalid",
      "specNote": "A linear ring MUST have identical first and last positions.",
      "why": "The single most common malformed polygon. What an implementation does here decides whether the error surfaces now or three systems downstream.",
      "file": "rings/ring-unclosed.geojson"
    },
    {
      "id": "ring-three-positions",
      "category": "rings",
      "title": "Ring of three positions",
      "clause": "RFC 7946 3.1.6",
      "spec": "invalid",
      "specNote": "RFC 7946 defines a linear ring as a closed LineString with four or more positions.",
      "why": "A triangle needs four positions, not three, because the first repeats at the end. Off-by-one code that builds rings produces exactly this.",
      "file": "rings/ring-three-positions.geojson"
    },
    {
      "id": "ring-two-positions",
      "category": "rings",
      "title": "Ring of two positions",
      "clause": "RFC 7946 3.1.6",
      "spec": "invalid",
      "specNote": "RFC 7946 defines a linear ring as a closed LineString with four or more positions.",
      "why": "Degenerate past the point of being a shape at all. Included to see whether implementations distinguish it from the three-position case.",
      "file": "rings/ring-two-positions.geojson"
    },
    {
      "id": "hole-unclosed",
      "category": "rings",
      "title": "Interior ring not closed",
      "clause": "RFC 7946 3.1.6",
      "spec": "invalid",
      "specNote": "The rule applies to every linear ring, interior rings included.",
      "why": "Exterior rings get checked far more often than holes. This finds implementations that validate only the first ring.",
      "file": "rings/hole-unclosed.geojson"
    },
    {
      "id": "hole-outside-exterior",
      "category": "rings",
      "title": "Hole entirely outside its exterior ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "invalid",
      "specNote": "Implied by the specification without being stated as its own rule: interior rings bound holes within the surface, and a ring outside the exterior bounds nothing.",
      "why": "Structurally well formed and geometrically nonsense. Separates parsers that check structure from ones that check geometry.",
      "file": "rings/hole-outside-exterior.geojson"
    },
    {
      "id": "duplicate-consecutive-positions",
      "category": "rings",
      "title": "Repeated consecutive positions",
      "clause": "RFC 7946 3.1.6",
      "spec": "ambiguous",
      "specNote": "The specification does not forbid repeated positions.",
      "why": "Legal but degenerate. Simplifiers and topology checks disagree about whether to strip these.",
      "file": "rings/duplicate-consecutive-positions.geojson"
    },
    {
      "id": "multipolygon-unclosed-part",
      "category": "rings",
      "title": "One unclosed ring inside a MultiPolygon",
      "clause": "RFC 7946 3.1.7",
      "spec": "invalid",
      "specNote": "Every ring of every polygon in the collection must close.",
      "why": "Tests whether validation reaches the second part of a multi-geometry or stops at the first.",
      "file": "rings/multipolygon-unclosed-part.geojson"
    },
    {
      "id": "winding-ccw-exterior",
      "category": "winding",
      "title": "Counter-clockwise exterior ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "valid",
      "specNote": "A linear ring MUST follow the right-hand rule, so an exterior ring winds counter-clockwise.",
      "why": "The control for the winding fixtures.",
      "file": "winding/winding-ccw-exterior.geojson"
    },
    {
      "id": "winding-cw-exterior",
      "category": "winding",
      "title": "Clockwise exterior ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "ambiguous",
      "specNote": "The specification pulls both ways. A linear ring MUST follow the right-hand rule, and parsers SHOULD NOT reject one that does not, for compatibility with data written before the rule existed.",
      "why": "The most consequential ambiguity in the format. Some renderers draw this inside out; most ignore winding entirely.",
      "file": "winding/winding-cw-exterior.geojson"
    },
    {
      "id": "winding-cw-hole",
      "category": "winding",
      "title": "Clockwise interior ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "valid",
      "specNote": "The right-hand rule puts holes clockwise, the opposite of the exterior ring.",
      "why": "The correct orientation for a hole, included so the incorrect one below has a pair.",
      "file": "winding/winding-cw-hole.geojson"
    },
    {
      "id": "winding-ccw-hole",
      "category": "winding",
      "title": "Counter-clockwise interior ring",
      "clause": "RFC 7946 3.1.6",
      "spec": "ambiguous",
      "specNote": "The right-hand rule makes this wrong, and the same instruction not to reject it applies.",
      "why": "Same orientation as its exterior. Renderers that use winding to decide fill will disagree about whether the hole is a hole.",
      "file": "winding/winding-ccw-hole.geojson"
    },
    {
      "id": "self-intersecting-bowtie",
      "category": "winding",
      "title": "Self-intersecting bowtie polygon",
      "clause": "Not in RFC 7946",
      "spec": "ambiguous",
      "specNote": "RFC 7946 never mentions self-intersection. The rule comes from the OGC Simple Features model, which the geometry engines apply and the pure JSON validators do not.",
      "why": "The classic invalid polygon. Almost everything parses it; what differs is whether anything says so.",
      "file": "winding/self-intersecting-bowtie.geojson"
    },
    {
      "id": "zero-area-spike",
      "category": "winding",
      "title": "Polygon with a zero-area spike",
      "clause": "Not in RFC 7946",
      "spec": "ambiguous",
      "specNote": "Also outside RFC 7946. A spike doubles back along itself, which the OGC model treats as degenerate.",
      "why": "Survives many validity checks because no two distinct edges cross. Buffering and union operations still fail on it.",
      "file": "winding/zero-area-spike.geojson"
    },
    {
      "id": "lon-out-of-range",
      "category": "coordinates",
      "title": "Longitude of 181 degrees",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "Longitude is bounded to the range -180 to 180.",
      "why": "Usually means projected coordinates were pasted in unchanged, or a value wrapped past the date line.",
      "file": "coordinates/lon-out-of-range.geojson"
    },
    {
      "id": "lat-out-of-range",
      "category": "coordinates",
      "title": "Latitude of 91 degrees",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "Latitude is bounded to the range -90 to 90.",
      "why": "The signature of a swapped coordinate pair when the longitude was above 90.",
      "file": "coordinates/lat-out-of-range.geojson"
    },
    {
      "id": "web-mercator-metres",
      "category": "coordinates",
      "title": "Web Mercator metres in a GeoJSON Point",
      "clause": "RFC 7946 4",
      "spec": "invalid",
      "specNote": "GeoJSON positions are WGS 84 longitude and latitude in decimal degrees.",
      "why": "The Empire State Building in EPSG:3857. Structurally perfect, geographically meaningless, and enormous. Nothing rejects it on structure alone.",
      "file": "coordinates/web-mercator-metres.geojson"
    },
    {
      "id": "swapped-lat-lon",
      "category": "coordinates",
      "title": "Latitude and longitude the wrong way round",
      "clause": "RFC 7946 3.1.1",
      "spec": "valid",
      "specNote": "Positions are ordered longitude first, then latitude.",
      "why": "The most common spatial bug there is, and completely undetectable by any validator, because the result is a legal position somewhere else. Included to prove that.",
      "file": "coordinates/swapped-lat-lon.geojson"
    },
    {
      "id": "antimeridian-unsplit",
      "category": "coordinates",
      "title": "LineString crossing the antimeridian unsplit",
      "clause": "RFC 7946 3.1.9",
      "spec": "ambiguous",
      "specNote": "Geometry crossing the antimeridian SHOULD be split into two parts at the meridian.",
      "why": "Renderers draw a line the long way around the world. The positions are individually legal, so validators stay quiet.",
      "file": "coordinates/antimeridian-unsplit.geojson"
    },
    {
      "id": "antimeridian-split",
      "category": "coordinates",
      "title": "The same crossing, split correctly",
      "clause": "RFC 7946 3.1.9",
      "spec": "valid",
      "specNote": "Split at 180 into two parts, as the specification recommends.",
      "why": "The control. The pair shows what the recommendation buys you.",
      "file": "coordinates/antimeridian-split.geojson"
    },
    {
      "id": "pole-point",
      "category": "coordinates",
      "title": "A position exactly at the north pole",
      "clause": "RFC 7946 3.1.1",
      "spec": "valid",
      "specNote": "Latitude 90 is in range. Longitude is undefined at the pole but must still be present.",
      "why": "Legal and awkward. Projections and distance calculations often divide by zero here.",
      "file": "coordinates/pole-point.geojson"
    },
    {
      "id": "null-island",
      "category": "coordinates",
      "title": "Null island at zero, zero",
      "clause": "RFC 7946 3.1.1",
      "spec": "valid",
      "specNote": "Perfectly valid as a position.",
      "why": "Almost always a geocoding failure. No validator can tell it from a real location, which is the point.",
      "file": "coordinates/null-island.geojson"
    },
    {
      "id": "coordinate-nan",
      "category": "numbers",
      "title": "NaN as a coordinate value",
      "clause": "RFC 8259 6",
      "spec": "invalid",
      "specNote": "NaN is not a JSON number, so the document is not JSON at all.",
      "why": "Emitted by several libraries when a calculation fails. Fails before any spatial logic is reached.",
      "file": "numbers/coordinate-nan.geojson"
    },
    {
      "id": "coordinate-infinity",
      "category": "numbers",
      "title": "Infinity as a coordinate value",
      "clause": "RFC 8259 6",
      "spec": "invalid",
      "specNote": "Infinity is not a JSON number.",
      "why": "The other half of the failed-calculation pattern.",
      "file": "numbers/coordinate-infinity.geojson"
    },
    {
      "id": "coordinate-string",
      "category": "numbers",
      "title": "Coordinates as quoted strings",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "Positions are arrays of numbers, not strings.",
      "why": "What you get from a CSV import that never cast its columns. Valid JSON, invalid GeoJSON.",
      "file": "numbers/coordinate-string.geojson"
    },
    {
      "id": "coordinate-exponent",
      "category": "numbers",
      "title": "Coordinates in scientific notation",
      "clause": "RFC 7946 3.1.1",
      "spec": "valid",
      "specNote": "Exponent notation is a legal JSON number.",
      "why": "Legal and rarely tested. Some hand-written parsers only accept plain decimals.",
      "file": "numbers/coordinate-exponent.geojson"
    },
    {
      "id": "coordinate-15-decimals",
      "category": "numbers",
      "title": "Fifteen decimal places",
      "clause": "RFC 7946 11.2",
      "spec": "valid",
      "specNote": "The specification recommends against more precision than the data justifies.",
      "why": "Sub-nanometre precision on a building. Legal, wasteful, and the default output of several exporters.",
      "file": "numbers/coordinate-15-decimals.geojson"
    },
    {
      "id": "coordinate-negative-zero",
      "category": "numbers",
      "title": "Negative zero in a position",
      "clause": "RFC 7946 3.1.1",
      "spec": "valid",
      "specNote": "Negative zero is a legal JSON number equal to zero.",
      "why": "Round-trips inconsistently. Some implementations preserve the sign, others drop it, which makes byte comparison unreliable.",
      "file": "numbers/coordinate-negative-zero.geojson"
    },
    {
      "id": "coordinate-null",
      "category": "numbers",
      "title": "null inside a position array",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "Every element of a position must be a number.",
      "why": "Produced by sparse data joins where one ordinate was missing.",
      "file": "numbers/coordinate-null.geojson"
    },
    {
      "id": "coordinate-four-elements",
      "category": "numbers",
      "title": "A position with four elements",
      "clause": "RFC 7946 3.1.1",
      "spec": "ambiguous",
      "specNote": "A position has two or three elements. Additional elements are outside the specification.",
      "why": "Measure values from a database export land here. The spec says not to, but does not say what a reader should do.",
      "file": "numbers/coordinate-four-elements.geojson"
    },
    {
      "id": "coordinate-single-element",
      "category": "numbers",
      "title": "A position with one element",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "A position MUST have at least two elements.",
      "why": "Truncated data. Tests whether the length check happens at all.",
      "file": "numbers/coordinate-single-element.geojson"
    },
    {
      "id": "missing-type",
      "category": "structure",
      "title": "No type member",
      "clause": "RFC 7946 3",
      "spec": "invalid",
      "specNote": "Every GeoJSON object MUST have a type member.",
      "why": "The most basic structural failure, and a useful floor for what each implementation checks.",
      "file": "structure/missing-type.geojson"
    },
    {
      "id": "unknown-type",
      "category": "structure",
      "title": "An unrecognised type value",
      "clause": "RFC 7946 3",
      "spec": "invalid",
      "specNote": "The value of the type member MUST be one of the GeoJSON types.",
      "why": "Catches implementations that switch on type without a default branch.",
      "file": "structure/unknown-type.geojson"
    },
    {
      "id": "feature-no-properties",
      "category": "structure",
      "title": "Feature with no properties member",
      "clause": "RFC 7946 3.2",
      "spec": "invalid",
      "specNote": "RFC 7946 says a Feature object has a member named properties, whose value is an object or null.",
      "why": "Renders everywhere and fails strict validation. The most commonly ignored MUST in the specification.",
      "file": "structure/feature-no-properties.geojson"
    },
    {
      "id": "feature-null-geometry",
      "category": "structure",
      "title": "Feature with null geometry",
      "clause": "RFC 7946 3.2",
      "spec": "valid",
      "specNote": "A Feature geometry member MAY be null.",
      "why": "Legal, and a frequent crash. Code that assumes a geometry exists throws on the null.",
      "file": "structure/feature-null-geometry.geojson"
    },
    {
      "id": "feature-no-geometry",
      "category": "structure",
      "title": "Feature with no geometry member at all",
      "clause": "RFC 7946 3.2",
      "spec": "invalid",
      "specNote": "The member must be present even when null.",
      "why": "Distinct from the null case, and treated differently by about half the implementations tested.",
      "file": "structure/feature-no-geometry.geojson"
    },
    {
      "id": "nested-geometrycollection",
      "category": "structure",
      "title": "GeometryCollection inside a GeometryCollection",
      "clause": "RFC 7946 3.1.8",
      "spec": "ambiguous",
      "specNote": "RFC 7946 says implementations SHOULD avoid nested GeometryCollections. It is discouraged, not forbidden.",
      "why": "Explicitly forbidden and structurally easy to produce. Recursive code that flattens geometry usually accepts it.",
      "file": "structure/nested-geometrycollection.geojson"
    },
    {
      "id": "featurecollection-not-array",
      "category": "structure",
      "title": "features member is an object",
      "clause": "RFC 7946 3.3",
      "spec": "invalid",
      "specNote": "The features member MUST be an array.",
      "why": "Produced by serialisers that write a map keyed by id.",
      "file": "structure/featurecollection-not-array.geojson"
    },
    {
      "id": "featurecollection-bare-geometry",
      "category": "structure",
      "title": "A raw geometry inside features",
      "clause": "RFC 7946 3.3",
      "spec": "invalid",
      "specNote": "Every element of features MUST be a Feature object.",
      "why": "The commonest way a hand-built FeatureCollection goes wrong.",
      "file": "structure/featurecollection-bare-geometry.geojson"
    },
    {
      "id": "coordinates-as-object",
      "category": "structure",
      "title": "Coordinates given as an object where an array belongs",
      "clause": "RFC 7946 3.1.1",
      "spec": "invalid",
      "specNote": "A position is an array.",
      "why": "The shape a Leaflet LatLng serialises to. A frequent conversion mistake.",
      "file": "structure/coordinates-as-object.geojson"
    },
    {
      "id": "foreign-member",
      "category": "structure",
      "title": "An unrecognised top-level member",
      "clause": "RFC 7946 6.1",
      "spec": "valid",
      "specNote": "Foreign members MAY be used. RFC 7946 defines no processing model for them, so what a reader does with one is not specified.",
      "why": "Explicitly legal. Tests whether an implementation preserves, drops or rejects the extra member.",
      "file": "structure/foreign-member.geojson"
    },
    {
      "id": "feature-id-number",
      "category": "structure",
      "title": "Numeric feature id",
      "clause": "RFC 7946 3.2",
      "spec": "valid",
      "specNote": "An id may be a string or a number.",
      "why": "Both are legal; implementations differ on whether the type survives a round trip.",
      "file": "structure/feature-id-number.geojson"
    },
    {
      "id": "legacy-crs-named",
      "category": "legacy",
      "title": "The 2008 crs member",
      "clause": "RFC 7946 4",
      "spec": "ambiguous",
      "specNote": "RFC 7946 removed the crs member, it did not forbid one. A crs member today is a foreign member, which MAY be present, so the document stays structurally valid.",
      "why": "Still emitted by older exporters. The interesting question is whether a reader ignores it or honours it.",
      "file": "legacy/legacy-crs-named.geojson"
    },
    {
      "id": "legacy-crs-projected",
      "category": "legacy",
      "title": "A crs member naming a projected system",
      "clause": "RFC 7946 4",
      "spec": "ambiguous",
      "specNote": "Structurally valid for the same reason. The coordinates here are metres, read as degrees, which is the part that actually hurts.",
      "why": "The dangerous version. An implementation that silently ignores the crs reads metres as degrees.",
      "file": "legacy/legacy-crs-projected.geojson"
    },
    {
      "id": "bbox-valid",
      "category": "legacy",
      "title": "A correct four-element bbox",
      "clause": "RFC 7946 5",
      "spec": "valid",
      "specNote": "The bbox is ordered west, south, east, north.",
      "why": "The control for the bbox fixtures.",
      "file": "legacy/bbox-valid.geojson"
    },
    {
      "id": "bbox-wrong-length",
      "category": "legacy",
      "title": "A bbox with five elements",
      "clause": "RFC 7946 5",
      "spec": "invalid",
      "specNote": "A bbox has four elements, or six when positions carry elevation.",
      "why": "Off-by-one in generated output. Consumers that slice blindly read the wrong ordinate.",
      "file": "legacy/bbox-wrong-length.geojson"
    },
    {
      "id": "bbox-disagrees-with-geometry",
      "category": "legacy",
      "title": "A bbox that does not match its geometry",
      "clause": "RFC 7946 5",
      "spec": "ambiguous",
      "specNote": "The specification does not require a reader to verify the bbox.",
      "why": "Stale after an edit. Libraries that trust the bbox for spatial filtering silently lose features.",
      "file": "legacy/bbox-disagrees-with-geometry.geojson"
    },
    {
      "id": "bbox-antimeridian",
      "category": "legacy",
      "title": "A bbox spanning the antimeridian",
      "clause": "RFC 7946 5.2",
      "spec": "valid",
      "specNote": "A bbox crossing the antimeridian has a west value greater than its east value.",
      "why": "Legal and widely mishandled. Naive code reads west greater than east as an empty box.",
      "file": "legacy/bbox-antimeridian.geojson"
    },
    {
      "id": "bom-prefix",
      "category": "encoding",
      "title": "A UTF-8 byte order mark before the JSON",
      "clause": "RFC 8259 8.1",
      "spec": "ambiguous",
      "specNote": "A writer MUST NOT add a byte order mark, and a parser MAY ignore one without calling it an error. Accepting and refusing are both conformant.",
      "why": "Written by several Windows editors. The failure is a parse error on character zero, which reads as a mystery.",
      "file": "encoding/bom-prefix.geojson"
    },
    {
      "id": "crlf-line-endings",
      "category": "encoding",
      "title": "Windows line endings throughout",
      "clause": "RFC 7946 12",
      "spec": "valid",
      "specNote": "Whitespace between tokens is insignificant in JSON.",
      "why": "Legal, and included to confirm that nothing trips on it.",
      "file": "encoding/crlf-line-endings.geojson"
    },
    {
      "id": "duplicate-keys",
      "category": "encoding",
      "title": "The same key twice in one object",
      "clause": "RFC 8259 4",
      "spec": "ambiguous",
      "specNote": "JSON does not forbid duplicate names, and does not say which wins.",
      "why": "Genuinely undefined. Whichever value an implementation keeps, another will keep the other one.",
      "file": "encoding/duplicate-keys.geojson"
    },
    {
      "id": "trailing-comma",
      "category": "encoding",
      "title": "A trailing comma in an array",
      "clause": "RFC 8259 5",
      "spec": "invalid",
      "specNote": "JSON does not permit a trailing comma.",
      "why": "Legal in JavaScript source and in JSON5, which is why it keeps appearing in hand-edited files.",
      "file": "encoding/trailing-comma.geojson"
    },
    {
      "id": "json-comment",
      "category": "encoding",
      "title": "A JavaScript comment inside the document",
      "clause": "RFC 8259 2",
      "spec": "invalid",
      "specNote": "JSON has no comment syntax.",
      "why": "Hand-annotated files fail here. The error message rarely mentions comments.",
      "file": "encoding/json-comment.geojson"
    },
    {
      "id": "unicode-properties",
      "category": "encoding",
      "title": "Non-ASCII text in properties",
      "clause": "RFC 7946 12",
      "spec": "valid",
      "specNote": "GeoJSON is UTF-8, so any Unicode text is legal.",
      "why": "Legal, and the place where encoding bugs surface when a file passes through a system that assumes Latin-1.",
      "file": "encoding/unicode-properties.geojson"
    },
    {
      "id": "empty-featurecollection",
      "category": "empty",
      "title": "A FeatureCollection with no features",
      "clause": "RFC 7946 3.3",
      "spec": "valid",
      "specNote": "An empty features array is legal.",
      "why": "The control. Also the correct output of a spatial query that matched nothing.",
      "file": "empty/empty-featurecollection.geojson"
    },
    {
      "id": "point-empty-coordinates",
      "category": "empty",
      "title": "A Point with an empty coordinates array",
      "clause": "RFC 7946 3.1",
      "spec": "ambiguous",
      "specNote": "RFC 7946 says processors MAY read a geometry with an empty coordinates array as a null object, so accepting and refusing are both conformant.",
      "why": "GeoJSON has no way to say POINT EMPTY, so conversions from WKT and databases produce this instead.",
      "file": "empty/point-empty-coordinates.geojson"
    },
    {
      "id": "linestring-empty",
      "category": "empty",
      "title": "A LineString with no positions",
      "clause": "RFC 7946 3.1",
      "spec": "ambiguous",
      "specNote": "Empty, where the neighbouring fixture is merely short. The same clause that permits reading an empty coordinates array as null applies here.",
      "why": "The same conversion problem, one geometry type along.",
      "file": "empty/linestring-empty.geojson"
    },
    {
      "id": "linestring-one-position",
      "category": "empty",
      "title": "A LineString with a single position",
      "clause": "RFC 7946 3.1.4",
      "spec": "invalid",
      "specNote": "Two or more positions are required.",
      "why": "A line that is really a point. Distance and length calculations return zero and no error.",
      "file": "empty/linestring-one-position.geojson"
    },
    {
      "id": "polygon-empty",
      "category": "empty",
      "title": "A Polygon with no rings",
      "clause": "RFC 7946 3.1",
      "spec": "ambiguous",
      "specNote": "An array of zero linear rings. Covered by the same permission to read an empty coordinates array as a null object.",
      "why": "Round-tripping an empty geometry through a database produces this shape.",
      "file": "empty/polygon-empty.geojson"
    },
    {
      "id": "geometrycollection-empty",
      "category": "empty",
      "title": "A GeometryCollection with no geometries",
      "clause": "RFC 7946 3.1.8",
      "spec": "valid",
      "specNote": "An empty geometries array is legal.",
      "why": "Legal, and a frequent source of null dereferences in code that assumes at least one member.",
      "file": "empty/geometrycollection-empty.geojson"
    },
    {
      "id": "multipoint-empty",
      "category": "empty",
      "title": "A MultiPoint with no positions",
      "clause": "RFC 7946 3.1.3",
      "spec": "valid",
      "specNote": "The specification sets no minimum for a MultiPoint.",
      "why": "Legal where the single-geometry equivalents are not, which few people expect.",
      "file": "empty/multipoint-empty.geojson"
    }
  ]
}
