{
"$schema":"http://json-schema.org/draft-04/schema#", "title":"TopoJSON object", "description":"Schema for a TopoJSON object", "type":"object", "required":[ "type" ], "properties":{ "bbox":{ "$ref":"#/definitions/bbox" } }, "oneOf":[ { "$ref":"#/definitions/topology" }, { "$ref":"#/definitions/geometry" } ], "definitions":{ "bbox":{ "title":"TopoJSON bounding box", "description":"A bounding box as defined by TopoJSON", "type":"array", "items":{ "$ref":"#/definitions/bbox/definitions/dimension" }, "minItems":2, "maxItems":2, "definitions":{ "dimension":{ "type":"array", "description":"This array should have an entry per dimension in the geometries", "items":{ "type":"number" } } } }, "geometry":{ "title":"Geometry objects", "description":"A Geometry object as defined by TopoJSON", "type":"object", "required":[ "type" ], "properties":{ "id":{ "type":[ "string", "integer" ] }, "properties":{ "type":"object" } }, "oneOf":[ { "title":"Point", "description":"A Point Geometry object as defined by TopoJSON", "required":[ "type", "coordinates" ], "properties":{ "type":{ "enum":[ "Point" ] }, "coordinates":{ "$ref":"#/definitions/geometry/definitions/position" } } }, { "title":"MultiPoint", "description":"A MultiPoint Geometry object as defined by TopoJSON", "required":[ "type", "coordinates" ], "properties":{ "type":{ "enum":[ "MultiPoint" ] }, "coordinates":{ "type":"array", "items":{ "$ref":"#/definitions/geometry/definitions/position" } } } }, { "title":"LineString", "description":"A LineString Geometry object as defined by TopoJSON", "required":[ "type", "arcs" ], "properties":{ "type":{ "enum":[ "LineString" ] }, "arcs":{ "type":"array", "items":{ "type":"integer" } } } }, { "title":"MultiLineString", "description":"A MultiLineString Geometry object as defined by TopoJSON", "required":[ "type", "arcs" ], "properties":{ "type":{ "enum":[ "MultiLineString" ] }, "arcs":{ "type":"array", "items":{ "type":"array", "items":{ "type":"integer" } } } } }, { "title":"Polygon", "description":"A Polygon Geometry object as defined by TopoJSON", "required":[ "type", "arcs" ], "properties":{ "type":{ "enum":[ "Polygon" ] }, "arcs":{ "TODO":"Check if arcs refer to valid LinearRings", "type":"array", "items":{ "type":"array", "items":{ "type":"integer" } } } } }, { "title":"MultiPolygon", "description":"A MultiPolygon Geometry object as defined by TopoJSON", "required":[ "type", "arcs" ], "properties":{ "type":{ "enum":[ "MultiPolygon" ] }, "arcs":{ "type":"array", "items":{ "type":"array", "items":{ "type":"array", "items":{ "type":"integer" } } } } } }, { "title":"GeometryCollection", "description":"A MultiPolygon Geometry object as defined by TopoJSON", "required":[ "type", "geometries" ], "properties":{ "type":{ "enum":[ "GeometryCollection" ] }, "geometries":{ "type":"array", "items":{ "$ref":"#/definitions/geometry" } } } } ], "definitions":{ "position":{ "type":"array", "items":{ "type":"number" }, "minItems":2 } } }, "topology":{ "title":"Topology", "description":"A Topology object as defined by TopoJSON", "type":"object", "required":[ "objects", "arcs" ], "properties":{ "type":{ "enum":[ "Topology" ] }, "objects":{ "type":"object", "additionalProperties":{ "$ref":"#/definitions/geometry" } }, "arcs":{ "$ref":"#/definitions/topology/definitions/arcs" }, "transform":{ "$ref":"#/definitions/topology/definitions/transform" }, "bbox":{ "$ref":"#/definitions/bbox" } }, "definitions":{ "transform":{ "type":"object", "required":[ "scale", "translate" ], "properties":{ "scale":{ "type":"array", "items":{ "type":"number" }, "minItems":2 }, "translate":{ "type":"array", "items":{ "type":"number" }, "minItems":2 } } }, "arcs":{ "type":"array", "items":{ "type":"array", "items":{ "oneOf":[ { "$ref":"#/definitions/topology/definitions/position" }, { "type":"null" } ] }, "minItems":2 } }, "position":{ "type":"array", "items":{ "type":"number" }, "minItems":2 } } } }
}