{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "$schema": {
            "type": "string",
            "description": "Version stamp added by `normalize()`. Optional so that specs persisted by earlier releases (which never carried it) stay valid, and readers must tolerate its absence. `exportCode()` output is unaffected."
        },
        "visId": {
            "type": "string"
        },
        "name": {
            "type": "string"
        },
        "encodings": {
            "$ref": "#/definitions/DraggableFieldState"
        },
        "config": {
            "$ref": "#/definitions/IVisualConfigNew"
        },
        "layout": {
            "$ref": "#/definitions/IVisualLayout"
        }
    },
    "required": [
        "visId",
        "encodings",
        "config",
        "layout"
    ],
    "additionalProperties": false,
    "definitions": {
        "DraggableFieldState": {
            "type": "object",
            "properties": {
                "dimensions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "measures": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "rows": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "columns": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "color": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "opacity": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "size": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "shape": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "theta": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "radius": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "longitude": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "latitude": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "geoId": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "details": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                },
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IFilterField"
                    }
                },
                "text": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IViewField"
                    }
                }
            },
            "required": [
                "dimensions",
                "measures",
                "rows",
                "columns",
                "color",
                "opacity",
                "size",
                "shape",
                "theta",
                "radius",
                "longitude",
                "latitude",
                "geoId",
                "details",
                "filters",
                "text"
            ],
            "additionalProperties": false
        },
        "IViewField": {
            "type": "object",
            "properties": {
                "fid": {
                    "type": "string",
                    "description": "fid: key in data record"
                },
                "name": {
                    "type": "string",
                    "description": "display name for field"
                },
                "aggName": {
                    "type": "string",
                    "description": "aggregator's name, \"expr\" represents for aggergated computed field."
                },
                "semanticType": {
                    "$ref": "#/definitions/ISemanticType"
                },
                "analyticType": {
                    "$ref": "#/definitions/IAnalyticType"
                },
                "cmp": {
                    "type": "string"
                },
                "geoRole": {
                    "$ref": "#/definitions/IGeoRole"
                },
                "computed": {
                    "type": "boolean"
                },
                "expression": {
                    "$ref": "#/definitions/IExpression"
                },
                "timeUnit": {
                    "type": "string",
                    "enum": [
                        "year",
                        "quarter",
                        "month",
                        "week",
                        "day",
                        "hour",
                        "minute",
                        "second",
                        "iso_year",
                        "iso_week"
                    ]
                },
                "basename": {
                    "type": "string"
                },
                "path": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "offset": {
                    "type": "number"
                },
                "aggergated": {
                    "type": "boolean"
                },
                "sort": {
                    "$ref": "#/definitions/ISortMode"
                }
            },
            "additionalProperties": false,
            "required": [
                "analyticType",
                "fid",
                "name",
                "semanticType"
            ]
        },
        "ISemanticType": {
            "type": "string",
            "enum": [
                "quantitative",
                "nominal",
                "ordinal",
                "temporal"
            ]
        },
        "IAnalyticType": {
            "type": "string",
            "enum": [
                "dimension",
                "measure"
            ]
        },
        "IGeoRole": {
            "type": "string",
            "enum": [
                "longitude",
                "latitude",
                "none"
            ]
        },
        "IExpression": {
            "type": "object",
            "properties": {
                "op": {
                    "type": "string",
                    "enum": [
                        "bin",
                        "log2",
                        "log10",
                        "one",
                        "binCount",
                        "dateTimeDrill",
                        "dateTimeFeature",
                        "log",
                        "paint",
                        "expr"
                    ]
                },
                "params": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IExpParameter"
                    }
                },
                "as": {
                    "type": "string"
                },
                "num": {
                    "type": "number"
                }
            },
            "required": [
                "op",
                "params",
                "as"
            ],
            "additionalProperties": false
        },
        "IExpParameter": {
            "anyOf": [
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "field"
                        },
                        "value": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "value"
                        },
                        "value": {}
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "expression"
                        },
                        "value": {
                            "$ref": "#/definitions/IExpression"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "constant"
                        },
                        "value": {}
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "format"
                        },
                        "value": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "offset"
                        },
                        "value": {
                            "type": "number"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "map"
                        },
                        "value": {
                            "$ref": "#/definitions/IPaintMap"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "sql"
                        },
                        "value": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "newmap"
                        },
                        "value": {
                            "$ref": "#/definitions/IPaintMapV2"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "displayOffset"
                        },
                        "value": {
                            "type": "number"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                }
            ]
        },
        "IPaintMap": {
            "type": "object",
            "properties": {
                "x": {
                    "type": "string",
                    "description": "fid of x"
                },
                "y": {
                    "type": "string",
                    "description": "fid of y"
                },
                "domainX": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 2,
                    "maxItems": 2
                },
                "domainY": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 2,
                    "maxItems": 2
                },
                "mapwidth": {
                    "type": "number",
                    "description": "width"
                },
                "map": {
                    "type": "string",
                    "description": "a bit map, compressed array of UInt8[mapwidth][mapwidth]"
                },
                "dict": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "color": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "name",
                            "color"
                        ],
                        "additionalProperties": false
                    },
                    "description": "map values"
                },
                "usedColor": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                }
            },
            "required": [
                "x",
                "y",
                "domainX",
                "domainY",
                "mapwidth",
                "map",
                "dict",
                "usedColor"
            ],
            "additionalProperties": false,
            "deprecated": true
        },
        "IPaintMapV2": {
            "type": "object",
            "properties": {
                "facets": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IPaintMapFacet"
                    }
                },
                "dict": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "color": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "name",
                            "color"
                        ],
                        "additionalProperties": false
                    }
                },
                "usedColor": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                }
            },
            "required": [
                "facets",
                "dict",
                "usedColor"
            ],
            "additionalProperties": false
        },
        "IPaintMapFacet": {
            "type": "object",
            "properties": {
                "dimensions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/IPaintDimension"
                    }
                },
                "map": {
                    "type": "string",
                    "description": "a bit map, compressed array of UInt8[dimensions.reduce((x,d) => x * d.domain.width, 1)]"
                },
                "usedColor": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                }
            },
            "required": [
                "dimensions",
                "map",
                "usedColor"
            ],
            "additionalProperties": false
        },
        "IPaintDimension": {
            "type": "object",
            "properties": {
                "fid": {
                    "type": "string"
                },
                "domain": {
                    "anyOf": [
                        {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "const": "nominal"
                                },
                                "value": {
                                    "type": "array",
                                    "items": {}
                                },
                                "width": {
                                    "type": "number"
                                }
                            },
                            "required": [
                                "type",
                                "value",
                                "width"
                            ],
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "const": "quantitative"
                                },
                                "value": {
                                    "type": "array",
                                    "items": {
                                        "type": "number"
                                    },
                                    "minItems": 2,
                                    "maxItems": 2
                                },
                                "width": {
                                    "type": "number"
                                }
                            },
                            "required": [
                                "type",
                                "value",
                                "width"
                            ],
                            "additionalProperties": false
                        }
                    ]
                }
            },
            "required": [
                "fid",
                "domain"
            ],
            "additionalProperties": false
        },
        "ISortMode": {
            "type": "string",
            "enum": [
                "none",
                "ascending",
                "descending"
            ]
        },
        "IFilterField": {
            "type": "object",
            "properties": {
                "fid": {
                    "type": "string",
                    "description": "fid: key in data record"
                },
                "name": {
                    "type": "string",
                    "description": "display name for field"
                },
                "aggName": {
                    "type": "string",
                    "description": "aggregator's name, \"expr\" represents for aggergated computed field."
                },
                "semanticType": {
                    "$ref": "#/definitions/ISemanticType"
                },
                "analyticType": {
                    "$ref": "#/definitions/IAnalyticType"
                },
                "cmp": {
                    "type": "string"
                },
                "geoRole": {
                    "$ref": "#/definitions/IGeoRole"
                },
                "computed": {
                    "type": "boolean"
                },
                "expression": {
                    "$ref": "#/definitions/IExpression"
                },
                "timeUnit": {
                    "type": "string",
                    "enum": [
                        "year",
                        "quarter",
                        "month",
                        "week",
                        "day",
                        "hour",
                        "minute",
                        "second",
                        "iso_year",
                        "iso_week"
                    ]
                },
                "basename": {
                    "type": "string"
                },
                "path": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "offset": {
                    "type": "number"
                },
                "aggergated": {
                    "type": "boolean"
                },
                "sort": {
                    "$ref": "#/definitions/ISortMode"
                },
                "rule": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/IFilterRule"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "enableAgg": {
                    "type": "boolean"
                }
            },
            "required": [
                "analyticType",
                "fid",
                "name",
                "rule",
                "semanticType"
            ],
            "additionalProperties": false
        },
        "IFilterRule": {
            "anyOf": [
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "range"
                        },
                        "value": {
                            "type": "array",
                            "items": {
                                "type": [
                                    "number",
                                    "null"
                                ]
                            },
                            "minItems": 2,
                            "maxItems": 2
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "temporal range"
                        },
                        "value": {
                            "type": "array",
                            "items": {
                                "type": [
                                    "number",
                                    "null"
                                ]
                            },
                            "minItems": 2,
                            "maxItems": 2
                        },
                        "offset": {
                            "type": "number"
                        },
                        "format": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "one of"
                        },
                        "value": {
                            "type": "array",
                            "items": {}
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "not in"
                        },
                        "value": {
                            "type": "array",
                            "items": {}
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                },
                {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "const": "regexp"
                        },
                        "value": {
                            "type": "string"
                        },
                        "caseSensitive": {
                            "type": "boolean"
                        }
                    },
                    "required": [
                        "type",
                        "value"
                    ],
                    "additionalProperties": false
                }
            ]
        },
        "IVisualConfigNew": {
            "type": "object",
            "properties": {
                "defaultAggregated": {
                    "type": "boolean"
                },
                "geoms": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "coordSystem": {
                    "$ref": "#/definitions/ICoordMode",
                    "default": "generic"
                },
                "limit": {
                    "type": "number"
                },
                "folds": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "timezoneDisplayOffset": {
                    "type": "number"
                }
            },
            "required": [
                "defaultAggregated",
                "geoms",
                "limit"
            ],
            "additionalProperties": false
        },
        "ICoordMode": {
            "type": "string",
            "enum": [
                "generic",
                "geographic"
            ]
        },
        "IVisualLayout": {
            "type": "object",
            "properties": {
                "showTableSummary": {
                    "type": "boolean"
                },
                "format": {
                    "type": "object",
                    "properties": {
                        "numberFormat": {
                            "type": "string"
                        },
                        "timeFormat": {
                            "type": "string"
                        },
                        "normalizedNumberFormat": {
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                },
                "primaryColor": {
                    "type": "string"
                },
                "colorPalette": {
                    "type": "string"
                },
                "scale": {
                    "$ref": "#/definitions/IConfigScaleSet"
                },
                "resolve": {
                    "type": "object",
                    "properties": {
                        "x": {
                            "type": "boolean"
                        },
                        "y": {
                            "type": "boolean"
                        },
                        "color": {
                            "type": "boolean"
                        },
                        "opacity": {
                            "type": "boolean"
                        },
                        "shape": {
                            "type": "boolean"
                        },
                        "size": {
                            "type": "boolean"
                        }
                    },
                    "additionalProperties": false
                },
                "size": {
                    "type": "object",
                    "properties": {
                        "mode": {
                            "type": "string",
                            "enum": [
                                "auto",
                                "fixed",
                                "full"
                            ]
                        },
                        "width": {
                            "type": "number"
                        },
                        "height": {
                            "type": "number"
                        }
                    },
                    "required": [
                        "mode",
                        "width",
                        "height"
                    ],
                    "additionalProperties": false
                },
                "useSvg": {
                    "type": "boolean"
                },
                "geojson": {
                    "$ref": "#/definitions/FeatureCollection%3CGeometry%2CGeoJsonProperties%3E"
                },
                "geoKey": {
                    "type": "string"
                },
                "geoUrl": {
                    "$ref": "#/definitions/IGeoUrl"
                },
                "geoMapTileUrl": {
                    "type": "string"
                },
                "interactiveScale": {
                    "type": "boolean"
                },
                "stack": {
                    "$ref": "#/definitions/IStackMode"
                },
                "showActions": {
                    "type": "boolean"
                },
                "zeroScale": {
                    "type": "boolean"
                },
                "background": {
                    "type": "string"
                },
                "scaleIncludeUnmatchedChoropleth": {
                    "type": "boolean",
                    "default": false
                },
                "showAllGeoshapeInChoropleth": {
                    "type": "boolean"
                },
                "renderer": {
                    "type": "string",
                    "enum": [
                        "vega-lite",
                        "observable-plot"
                    ],
                    "default": "vega-lite"
                }
            },
            "required": [
                "showTableSummary",
                "format",
                "resolve",
                "size",
                "interactiveScale",
                "stack",
                "showActions",
                "zeroScale"
            ],
            "additionalProperties": false
        },
        "IConfigScaleSet": {
            "type": "object",
            "properties": {
                "row": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "column": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "color": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "opacity": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "size": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "radius": {
                    "$ref": "#/definitions/IConfigScale"
                },
                "theta": {
                    "$ref": "#/definitions/IConfigScale"
                }
            },
            "additionalProperties": false
        },
        "IConfigScale": {
            "type": "object",
            "properties": {
                "rangeMax": {
                    "type": "number"
                },
                "rangeMin": {
                    "type": "number"
                },
                "domainMin": {
                    "type": "number"
                },
                "domainMax": {
                    "type": "number"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "linear",
                        "log",
                        "pow",
                        "sqrt",
                        "symlog"
                    ]
                }
            },
            "additionalProperties": false
        },
        "FeatureCollection<Geometry,GeoJsonProperties>": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "FeatureCollection",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "features": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Feature%3CGeometry%2CGeoJsonProperties%3E"
                    }
                }
            },
            "required": [
                "features",
                "type"
            ],
            "additionalProperties": false,
            "description": "A collection of feature objects.  https://tools.ietf.org/html/rfc7946#section-3.3"
        },
        "BBox": {
            "anyOf": [
                {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 4,
                    "maxItems": 4
                },
                {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 6,
                    "maxItems": 6
                }
            ],
            "description": "Bounding box https://tools.ietf.org/html/rfc7946#section-5"
        },
        "Feature<Geometry,GeoJsonProperties>": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "Feature",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "geometry": {
                    "$ref": "#/definitions/Geometry",
                    "description": "The feature's geometry"
                },
                "id": {
                    "type": [
                        "string",
                        "number"
                    ],
                    "description": "A value that uniquely identifies this feature in a https://tools.ietf.org/html/rfc7946#section-3.2."
                },
                "properties": {
                    "$ref": "#/definitions/GeoJsonProperties",
                    "description": "Properties associated with this feature."
                }
            },
            "required": [
                "geometry",
                "properties",
                "type"
            ],
            "additionalProperties": false,
            "description": "A feature object which contains a geometry and associated properties. https://tools.ietf.org/html/rfc7946#section-3.2"
        },
        "Geometry": {
            "anyOf": [
                {
                    "$ref": "#/definitions/Point"
                },
                {
                    "$ref": "#/definitions/MultiPoint"
                },
                {
                    "$ref": "#/definitions/LineString"
                },
                {
                    "$ref": "#/definitions/MultiLineString"
                },
                {
                    "$ref": "#/definitions/Polygon"
                },
                {
                    "$ref": "#/definitions/MultiPolygon"
                },
                {
                    "$ref": "#/definitions/GeometryCollection"
                }
            ],
            "description": "Geometry object. https://tools.ietf.org/html/rfc7946#section-3"
        },
        "Point": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "Point",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "$ref": "#/definitions/Position"
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "Point geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.2"
        },
        "Position": {
            "type": "array",
            "items": {
                "type": "number"
            },
            "description": "A Position is an array of coordinates. https://tools.ietf.org/html/rfc7946#section-3.1.1 Array should contain between two and three elements. The previous GeoJSON specification allowed more elements (e.g., which could be used to represent M values), but the current specification only allows X, Y, and (optionally) Z to be defined."
        },
        "MultiPoint": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "MultiPoint",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Position"
                    }
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "MultiPoint geometry object.  https://tools.ietf.org/html/rfc7946#section-3.1.3"
        },
        "LineString": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "LineString",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Position"
                    }
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "LineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.4"
        },
        "MultiLineString": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "MultiLineString",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#/definitions/Position"
                        }
                    }
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "MultiLineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.5"
        },
        "Polygon": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "Polygon",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#/definitions/Position"
                        }
                    }
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "Polygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.6"
        },
        "MultiPolygon": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "MultiPolygon",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "coordinates": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/Position"
                            }
                        }
                    }
                }
            },
            "required": [
                "coordinates",
                "type"
            ],
            "additionalProperties": false,
            "description": "MultiPolygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.7"
        },
        "GeometryCollection": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "const": "GeometryCollection",
                    "description": "Specifies the type of GeoJSON object."
                },
                "bbox": {
                    "$ref": "#/definitions/BBox",
                    "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
                },
                "geometries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Geometry"
                    }
                }
            },
            "required": [
                "geometries",
                "type"
            ],
            "additionalProperties": false,
            "description": "Geometry Collection https://tools.ietf.org/html/rfc7946#section-3.1.8"
        },
        "GeoJsonProperties": {
            "anyOf": [
                {
                    "type": "object"
                },
                {
                    "type": "null"
                }
            ]
        },
        "IGeoUrl": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "GeoJSON",
                        "TopoJSON"
                    ]
                },
                "url": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "url"
            ],
            "additionalProperties": false
        },
        "IStackMode": {
            "type": "string",
            "enum": [
                "none",
                "stack",
                "normalize",
                "zero",
                "center"
            ]
        }
    }
}