{
  "$ref": "#/definitions/ParsedMVF",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "AnchoredFloorTextProperties": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "default": "center",
          "description": "Horizontal alignment of multi-line text.",
          "enum": [
            "left",
            "center",
            "right"
          ],
          "type": "string"
        },
        "color": {
          "default": "black",
          "description": "The color of the text in CSS format (e.g. `#000000`, `rgb(0, 0, 0)`, `black`).",
          "type": "string"
        },
        "fontFamily": {
          "default": "Droid Sans",
          "description": "The font family of the text.",
          "type": "string"
        },
        "fontSize": {
          "default": 12,
          "description": "The em-height (multiplier of the font's height) at which to render the font, in meters. The font height is the distance between the ascender (highest point, height of an A) and descender (lowest point, bottom of a g) of the font. For example, if the font-size is 12, the space for a single character will be 12 meters high.",
          "type": "number"
        },
        "geometryId": {
          "anyOf": [
            {
              "$ref": "#/definitions/SpaceId"
            },
            {
              "$ref": "#/definitions/ObstructionId"
            }
          ],
          "description": "The geometry to which this text belongs. It will be displayed on top of it."
        },
        "rotation": {
          "description": "Rotation in degrees, about the center of the text. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "text": {
          "description": "The text to display. Newline characters are supported.",
          "type": "string"
        },
        "visible": {
          "default": true,
          "description": "Whether the text is visible.",
          "type": "boolean"
        }
      },
      "required": [
        "align",
        "color",
        "fontFamily",
        "fontSize",
        "geometryId",
        "rotation",
        "text",
        "visible"
      ],
      "type": "object"
    },
    "AnchoredImageProperties": {
      "additionalProperties": false,
      "properties": {
        "anchorId": {
          "anyOf": [
            {
              "$ref": "#/definitions/SpaceId"
            },
            {
              "$ref": "#/definitions/ObstructionId"
            },
            {
              "$ref": "#/definitions/AreaId"
            }
          ],
          "description": "The geometry to which this image belongs. It will be displayed on top of it."
        },
        "height": {
          "description": "The height of the image when represented on the map, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "path": {
          "description": "The path to the image. This will be a remote URL.",
          "type": "string"
        },
        "rotation": {
          "description": "Rotation in degrees, about the center of the image. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "width": {
          "description": "The width of the image when represented on the map, in meters.",
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "anchorId",
        "height",
        "path",
        "rotation",
        "width"
      ],
      "type": "object"
    },
    "AnchoredTextAreaProperties": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "$ref": "#/definitions/TextAreaAlignment",
          "description": "The alignment of the text within the label. 'Near' means the text will be aligned up against the position. Typically in the SDK the text will be rotated to always be upright, so either the start or end of the text will be up against the position. 'Center' means it will be centered in the middle of the area."
        },
        "anchorId": {
          "anyOf": [
            {
              "$ref": "#/definitions/SpaceId"
            },
            {
              "$ref": "#/definitions/ObstructionId"
            }
          ],
          "description": "The geometry to which this text area belongs. It will be displayed on top of it."
        },
        "maxHeight": {
          "description": "The maximum height of the label, in meters. Half the height will be above the feature's position, half below.",
          "exclusiveMinimum": 0,
          "type": "number"
        },
        "maxWidth": {
          "description": "The maximum width of the label, in meters. The left edge will start at the feature's position and extend in the rotation direction.",
          "exclusiveMinimum": 0,
          "type": "number"
        },
        "rotation": {
          "description": "Rotation in degrees relative to north, about the position of the label. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "align",
        "anchorId",
        "maxHeight",
        "maxWidth",
        "rotation"
      ],
      "type": "object"
    },
    "AnnotationCollection": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "additionalProperties": false,
            "properties": {
              "geometry": {
                "$ref": "#/definitions/Point"
              },
              "properties": {
                "$ref": "#/definitions/AnnotationProperties"
              },
              "type": {
                "$ref": "#/definitions/FeatureType"
              }
            },
            "required": [
              "type",
              "geometry",
              "properties"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "AnnotationId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^a_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "AnnotationProperties": {
      "additionalProperties": false,
      "properties": {
        "externalId": {
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/AnnotationId"
        },
        "symbolId": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "symbolId"
      ],
      "type": "object"
    },
    "AnnotationSymbol": {
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "url",
        "name"
      ],
      "type": "object"
    },
    "AnnotationSymbols": {
      "additionalProperties": {
        "$ref": "#/definitions/AnnotationSymbol"
      },
      "type": "object"
    },
    "Area": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Polygon"
        },
        "properties": {
          "$ref": "#/definitions/AreaProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "AreaCollection": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Area"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "AreaId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^ar_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "AreaProperties": {
      "additionalProperties": false,
      "properties": {
        "center": {
          "$ref": "#/definitions/Position",
          "description": "The center of mass of this area."
        },
        "destinationNodes": {
          "description": "A list of node IDs which can be used to navigate to this area.",
          "items": {
            "$ref": "#/definitions/NodeId"
          },
          "type": "array"
        },
        "details": {
          "$ref": "#/definitions/Details"
        },
        "externalId": {
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/AreaId"
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    },
    "Category": {
      "additionalProperties": false,
      "properties": {
        "icon": {
          "description": "The category's icon",
          "format": "uri",
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/CategoryId"
        },
        "name": {
          "type": "string"
        },
        "parent": {
          "$ref": "#/definitions/CategoryId"
        }
      },
      "required": [
        "id",
        "name",
        "icon"
      ],
      "type": "object"
    },
    "CategoryId": {
      "description": "A category ID\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^cat_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "Connection": {
      "additionalProperties": false,
      "properties": {
        "accessible": {
          "type": "boolean"
        },
        "details": {
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "externalId": {
          "type": "string"
        },
        "extra": {
          "additionalProperties": {},
          "type": "object"
        },
        "flags": {
          "$ref": "#/definitions/Flags",
          "description": "Navigation flags that indicate special properties of this connection for wayfinding."
        },
        "id": {
          "$ref": "#/definitions/ConnectionId"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        },
        "nodes": {
          "description": "A list of node IDs corresponding to nodes that are a part of this connection.",
          "items": {
            "$ref": "#/definitions/NodeId"
          },
          "type": "array"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "type",
        "nodes",
        "externalId"
      ],
      "type": "object"
    },
    "ConnectionId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^c_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "Connections": {
      "items": {
        "$ref": "#/definitions/Connection"
      },
      "type": "array"
    },
    "Day": {
      "enum": [
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday"
      ],
      "type": "string"
    },
    "DayOrPublicHoliday": {
      "anyOf": [
        {
          "$ref": "#/definitions/Day"
        },
        {
          "const": "PublicHolidays",
          "type": "string"
        }
      ]
    },
    "Details": {
      "additionalProperties": false,
      "description": "Additional information about a given entity.",
      "properties": {
        "description": {
          "type": "string"
        },
        "images": {
          "items": {
            "$ref": "#/definitions/Image"
          },
          "type": "array"
        },
        "links": {
          "items": {
            "$ref": "#/definitions/Hyperlink"
          },
          "type": "array"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "EnterpriseCategory": {
      "additionalProperties": false,
      "properties": {
        "children": {
          "items": {
            "$ref": "#/definitions/EnterpriseCategoryId"
          },
          "type": "array"
        },
        "color": {
          "type": "string"
        },
        "externalId": {
          "type": "string"
        },
        "extra": {
          "additionalProperties": {},
          "type": "object"
        },
        "icon": {
          "description": "The category's icon",
          "format": "uri",
          "type": "string"
        },
        "iconFromDefaultList": {
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "$ref": "#/definitions/EnterpriseCategoryId"
        },
        "locations": {
          "items": {
            "$ref": "#/definitions/EnterpriseLocationId"
          },
          "type": "array"
        },
        "name": {
          "type": "string"
        },
        "picture": {
          "description": "The category's picture",
          "format": "uri",
          "type": "string"
        },
        "sortOrder": {
          "type": "number"
        }
      },
      "required": [
        "children",
        "externalId",
        "id",
        "locations",
        "name",
        "sortOrder"
      ],
      "type": "object"
    },
    "EnterpriseCategoryId": {
      "description": "An ID for an enterprise category\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^ec_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "EnterpriseCategoryPriority": {
      "additionalProperties": {
        "items": {
          "$ref": "#/definitions/EnterpriseCategoryId"
        },
        "type": "array"
      },
      "description": "The ordered list of category ids that this location belongs to The order here determines the priority of the categories, with the first category being the highest priority for determining application logic like icon and color preference.",
      "propertyNames": {
        "description": "An ID for an enterprise location\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
        "pattern": "^el_[A-Za-z0-9_-]+$"
      },
      "type": "object"
    },
    "EnterpriseCollection": {
      "additionalProperties": false,
      "properties": {
        "categories": {
          "items": {
            "$ref": "#/definitions/EnterpriseCategory"
          },
          "type": "array"
        },
        "categoryPriorities": {
          "$ref": "#/definitions/EnterpriseCategoryPriority"
        },
        "enterpriseStyles": {
          "$ref": "#/definitions/EnterpriseStyles"
        },
        "floorText": {
          "$ref": "#/definitions/EnterpriseFloorText"
        },
        "layers": {
          "items": {
            "$ref": "#/definitions/EnterpriseLayer"
          },
          "type": "array"
        },
        "locationInstances": {
          "items": {
            "$ref": "#/definitions/EnterpriseLocationInstance"
          },
          "type": "array"
        },
        "locations": {
          "items": {
            "$ref": "#/definitions/EnterpriseLocation"
          },
          "type": "array"
        },
        "textures": {
          "items": {
            "$ref": "#/definitions/EnterpriseTexture"
          },
          "type": "array"
        },
        "venue": {
          "$ref": "#/definitions/EnterpriseVenue"
        }
      },
      "required": [
        "locations",
        "categories",
        "venue",
        "locationInstances",
        "layers"
      ],
      "type": "object"
    },
    "EnterpriseFloorText": {
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/definitions/FloorTextFeatureCollection"
          },
          {
            "not": {}
          }
        ]
      },
      "description": "The text to display on a map, split into  feature collection per floor.",
      "type": "object"
    },
    "EnterpriseLayer": {
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/definitions/EnterpriseLayerId"
        },
        "name": {
          "type": "string"
        },
        "spaces": {
          "items": {
            "$ref": "#/definitions/EnterpriseLayerSpace"
          },
          "minItems": 1,
          "type": "array"
        }
      },
      "required": [
        "id",
        "name",
        "spaces"
      ],
      "type": "object"
    },
    "EnterpriseLayerId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^ely_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "EnterpriseLayerSpace": {
      "additionalProperties": false,
      "properties": {
        "floorId": {
          "$ref": "#/definitions/FloorId"
        },
        "spaceId": {
          "$ref": "#/definitions/SpaceId"
        }
      },
      "required": [
        "floorId",
        "spaceId"
      ],
      "type": "object"
    },
    "EnterpriseLocation": {
      "additionalProperties": false,
      "properties": {
        "amenity": {
          "description": "The location's amenity type. Only set if the location is an amenity",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "externalId": {
          "type": "string"
        },
        "extra": {
          "additionalProperties": {},
          "type": "object"
        },
        "filterFlags": {
          "description": "The navigation flags that must be set for this location to be reachable when wayfinding. For example, if a location is only accessible through a certain entrance, that entrance should get a navigation flag that matches the filter flags.\n\nNOTE: This is an array of strings, which are the keys in the Navigation Flags Declarations.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "gallery": {
          "description": "The location's image gallery",
          "items": {
            "additionalProperties": false,
            "properties": {
              "caption": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "embeddedUrl": {
                "description": "The URL to link from the image",
                "format": "uri",
                "type": [
                  "string",
                  "null"
                ]
              },
              "image": {
                "type": "string"
              }
            },
            "required": [
              "image"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "headerImage": {
          "description": "The header image of the location",
          "format": "uri",
          "type": "string"
        },
        "hidden": {
          "description": "Whether to show the location in applications",
          "type": "boolean"
        },
        "id": {
          "$ref": "#/definitions/EnterpriseLocationId"
        },
        "links": {
          "description": "Web links for the location",
          "items": {
            "additionalProperties": false,
            "properties": {
              "label": {
                "type": "string"
              },
              "url": {
                "description": "The URL of the link",
                "format": "uri",
                "type": "string"
              }
            },
            "required": [
              "label",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "logo": {
          "description": "The location's logo",
          "format": "uri",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "nodes": {
          "deprecated": "Use `spaces` instead. A location's nodes that are not attached to a polygon will be in the spaces array as a point space. Nodes that are attached to one of it's polygons will be destinationNodes on that polygon's space",
          "items": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "$ref": "#/definitions/NodeId"
              },
              "map": {
                "$ref": "#/definitions/FloorId"
              }
            },
            "required": [
              "map",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "operationHours": {
          "items": {
            "$ref": "#/definitions/OperationHours"
          },
          "type": "array"
        },
        "phone": {
          "additionalProperties": false,
          "properties": {
            "extension": {
              "type": "string"
            },
            "number": {
              "type": "string"
            }
          },
          "required": [
            "number"
          ],
          "type": "object"
        },
        "picture": {
          "description": "The picture of the location",
          "format": "uri",
          "type": "string"
        },
        "polygons": {
          "deprecated": "Use `spaces` instead. All of a location's polygons will be in the spaces array.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "$ref": "#/definitions/SpaceId"
              },
              "map": {
                "$ref": "#/definitions/FloorId"
              }
            },
            "required": [
              "map",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "primaryCategory": {
          "$ref": "#/definitions/EnterpriseCategoryId",
          "description": "The main category of the location. It must be one of the categories in the Location's categories array."
        },
        "shortName": {
          "type": "string"
        },
        "showFloatingLabelWhenImagePresent": {
          "description": "Whether to show the flat label when an image is present",
          "type": "boolean"
        },
        "showLogo": {
          "description": "Whether to show the logo of the location",
          "type": "boolean"
        },
        "siblingGroups": {
          "description": "Locations that are related to this location in some manner (described by the label)",
          "items": {
            "$ref": "#/definitions/SiblingGroup"
          },
          "type": "array"
        },
        "social": {
          "additionalProperties": false,
          "description": "The location's social media links",
          "properties": {
            "facebook": {
              "type": "string"
            },
            "instagram": {
              "type": "string"
            },
            "twitter": {
              "type": "string"
            },
            "website": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "sortOrder": {
          "type": "number"
        },
        "spaces": {
          "description": "The places that this location is anchored to in the physical world. These are either Polygon or Point spaces. A location can be attached to many spaces, and a space can be attached to many locations.\n\nIf there are different properties for the location on those spaces, they will show up in the location's  {@link  EnterpriseLocation.instances instances }  property",
          "items": {
            "additionalProperties": false,
            "properties": {
              "floor": {
                "$ref": "#/definitions/FloorId"
              },
              "id": {
                "$ref": "#/definitions/SpaceId"
              }
            },
            "required": [
              "floor",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "states": {
          "description": "The location's state. No more than one state should be active at a time, and all but at most one should have dates set",
          "items": {
            "$ref": "#/definitions/LocationState"
          },
          "type": "array"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "externalId",
        "id",
        "name",
        "nodes",
        "polygons",
        "sortOrder",
        "spaces",
        "type"
      ],
      "type": "object"
    },
    "EnterpriseLocationId": {
      "description": "An ID for an enterprise location\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^el_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "EnterpriseLocationInstance": {
      "additionalProperties": false,
      "description": "A locationInstance is a particular instance of an Enterprise Location that has some properties different from the parent. Eg, it may have different hours, or a slightly different name.\n\nA LocationInstance:\n- MUST have a parent, referring to an Enterprise Location.\n- MUST have a unique ID, for localization to work.\n- SHOULD have AT LEAST ONE polygon or node to anchor it in space.\n- SHOULD have AT LEAST ONE other Enterprise Location property set.\n\nIt is otherwise a Partial<EnterpriseLocation>\n\nUsage examples:\n- A locationInstance for a location with a different externalId so a customer can identify them individually.\n- A locationInstance with different operationHours, that might indicate different hours for that particular entrance.",
      "properties": {
        "amenity": {
          "description": "The location's amenity type. Only set if the location is an amenity",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "externalId": {
          "type": "string"
        },
        "extra": {
          "additionalProperties": {},
          "type": "object"
        },
        "filterFlags": {
          "description": "The navigation flags that must be set for this location to be reachable when wayfinding. For example, if a location is only accessible through a certain entrance, that entrance should get a navigation flag that matches the filter flags.\n\nNOTE: This is an array of strings, which are the keys in the Navigation Flags Declarations.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "gallery": {
          "description": "The location's image gallery",
          "items": {
            "additionalProperties": false,
            "properties": {
              "caption": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "embeddedUrl": {
                "description": "The URL to link from the image",
                "format": "uri",
                "type": [
                  "string",
                  "null"
                ]
              },
              "image": {
                "type": "string"
              }
            },
            "required": [
              "image"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "headerImage": {
          "description": "The header image of the location",
          "format": "uri",
          "type": "string"
        },
        "hidden": {
          "description": "Whether to show the location in applications",
          "type": "boolean"
        },
        "id": {
          "$ref": "#/definitions/EnterpriseLocationInstanceId"
        },
        "links": {
          "description": "Web links for the location",
          "items": {
            "additionalProperties": false,
            "properties": {
              "label": {
                "type": "string"
              },
              "url": {
                "description": "The URL of the link",
                "format": "uri",
                "type": "string"
              }
            },
            "required": [
              "label",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "logo": {
          "description": "The location's logo",
          "format": "uri",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "nodes": {
          "deprecated": "Use `spaces` instead. A location's nodes that are not attached to a polygon will be in the spaces array as a point space. Nodes that are attached to one of it's polygons will be destinationNodes on that polygon's space",
          "items": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "$ref": "#/definitions/NodeId"
              },
              "map": {
                "$ref": "#/definitions/FloorId"
              }
            },
            "required": [
              "map",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "operationHours": {
          "items": {
            "$ref": "#/definitions/OperationHours"
          },
          "type": "array"
        },
        "parent": {
          "$ref": "#/definitions/EnterpriseLocationId"
        },
        "phone": {
          "additionalProperties": false,
          "properties": {
            "extension": {
              "type": "string"
            },
            "number": {
              "type": "string"
            }
          },
          "required": [
            "number"
          ],
          "type": "object"
        },
        "picture": {
          "description": "The picture of the location",
          "format": "uri",
          "type": "string"
        },
        "polygons": {
          "deprecated": "Use `spaces` instead. All of a location's polygons will be in the spaces array.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "$ref": "#/definitions/SpaceId"
              },
              "map": {
                "$ref": "#/definitions/FloorId"
              }
            },
            "required": [
              "map",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "primaryCategory": {
          "$ref": "#/definitions/EnterpriseCategoryId",
          "description": "The main category of the location. It must be one of the categories in the Location's categories array."
        },
        "shortName": {
          "type": "string"
        },
        "showFloatingLabelWhenImagePresent": {
          "description": "Whether to show the flat label when an image is present",
          "type": "boolean"
        },
        "showLogo": {
          "description": "Whether to show the logo of the location",
          "type": "boolean"
        },
        "siblingGroups": {
          "description": "Locations that are related to this location in some manner (described by the label)",
          "items": {
            "$ref": "#/definitions/SiblingGroup"
          },
          "type": "array"
        },
        "social": {
          "additionalProperties": false,
          "description": "The location's social media links",
          "properties": {
            "facebook": {
              "type": "string"
            },
            "instagram": {
              "type": "string"
            },
            "twitter": {
              "type": "string"
            },
            "website": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "sortOrder": {
          "type": "number"
        },
        "spaces": {
          "description": "The places that this location is anchored to in the physical world. These are either Polygon or Point spaces. A location can be attached to many spaces, and a space can be attached to many locations.\n\nIf there are different properties for the location on those spaces, they will show up in the location's  {@link  EnterpriseLocation.instances instances }  property",
          "items": {
            "additionalProperties": false,
            "properties": {
              "floor": {
                "$ref": "#/definitions/FloorId"
              },
              "id": {
                "$ref": "#/definitions/SpaceId"
              }
            },
            "required": [
              "floor",
              "id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "states": {
          "description": "The location's state. No more than one state should be active at a time, and all but at most one should have dates set",
          "items": {
            "$ref": "#/definitions/LocationState"
          },
          "type": "array"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "parent"
      ],
      "type": "object"
    },
    "EnterpriseLocationInstanceId": {
      "type": "string"
    },
    "EnterpriseStyles": {
      "additionalProperties": {
        "additionalProperties": false,
        "properties": {
          "edgeOffset": {
            "type": "number"
          },
          "geometryAnchors": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "floorId": {
                  "$ref": "#/definitions/FloorId"
                },
                "geometryId": {
                  "$ref": "#/definitions/SpaceId"
                }
              },
              "required": [
                "geometryId",
                "floorId"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "geometryAnchors"
        ],
        "type": "object"
      },
      "type": "object"
    },
    "EnterpriseTexture": {
      "additionalProperties": false,
      "properties": {
        "bounds": {
          "description": "Coordinates of the texture's bounding box in format: [minLon, minLat, maxLon, maxLat].",
          "items": {
            "type": "number"
          },
          "maxItems": 4,
          "minItems": 4,
          "type": "array"
        },
        "face": {
          "$ref": "#/definitions/EnterpriseTextureFace",
          "description": "Face of the polygon that the texture will be applied to.\n\n'top' means that the texture will be applied to the upward-pointing face of the polygon.\n\n'side' means that the texture will be applied to every side face of the polygon."
        },
        "geometryAnchors": {
          "description": "Anchors for the texture on the geometry of the polygon.",
          "items": {
            "$ref": "#/definitions/EnterpriseTextureGeometryAnchor"
          },
          "minItems": 1,
          "type": "array"
        },
        "offset": {
          "$ref": "#/definitions/EnterpriseTextureUV",
          "description": "Controls the starting position of the texture on the surface. The u value shifts the texture horizontally and v shifts vertically."
        },
        "path": {
          "description": "Path to the texture image. Must be either a PNG or JPG format.",
          "type": "string"
        },
        "repeat": {
          "$ref": "#/definitions/EnterpriseTextureUV",
          "description": "Controls how many times the texture repeats across the surface. The u value controls horizontal repetition and v controls vertical repetition."
        },
        "rotation": {
          "description": "Rotation of the texture in degrees clockwise.\n\nFor top textures this is relative to north. North is 0, east is 90.\n\nFor side textures this is relative to the upward direction, with 0 degrees being upright.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "surface": {
          "$ref": "#/definitions/EnterpriseTextureSurface",
          "description": "Surface of the polygon that the texture will be applied to.\n\n'inside' means that the texture will only be applied to the interior surface of the polygon.\n\n'outside' means that the texture will only be applied to the exterior surface of the polygon.\n\n'both' means that the texture will be applied to both interior and exterior surfaces of the polygon."
        }
      },
      "required": [
        "repeat",
        "offset",
        "rotation",
        "path",
        "face",
        "surface",
        "bounds",
        "geometryAnchors"
      ],
      "type": "object"
    },
    "EnterpriseTextureFace": {
      "enum": [
        "top",
        "side"
      ],
      "type": "string"
    },
    "EnterpriseTextureGeometryAnchor": {
      "additionalProperties": false,
      "properties": {
        "floorId": {
          "$ref": "#/definitions/FloorId"
        },
        "geometryId": {
          "$ref": "#/definitions/SpaceId"
        }
      },
      "required": [
        "geometryId",
        "floorId"
      ],
      "type": "object"
    },
    "EnterpriseTextureSurface": {
      "enum": [
        "inside",
        "outside",
        "both"
      ],
      "type": "string"
    },
    "EnterpriseTextureUV": {
      "additionalProperties": false,
      "properties": {
        "u": {
          "type": "number"
        },
        "v": {
          "type": "number"
        }
      },
      "required": [
        "u",
        "v"
      ],
      "type": "object"
    },
    "EnterpriseVenue": {
      "additionalProperties": false,
      "properties": {
        "countrycode": {
          "description": "The ISO 3166-1 alpha-2 country code of the venue, if known\n\nEg. `US` or `GB`",
          "type": "string"
        },
        "coverImage": {
          "description": "The venue's cover image",
          "format": "uri",
          "type": "string"
        },
        "defaultFloor": {
          "$ref": "#/definitions/FloorId",
          "description": "The venue's default floor"
        },
        "defaultLanguage": {
          "$ref": "#/definitions/Language"
        },
        "defaultMap": {
          "$ref": "#/definitions/FloorId",
          "deprecated": "Use `defaultFloor` instead"
        },
        "externalId": {
          "type": "string"
        },
        "extra": {
          "additionalProperties": {},
          "type": "object"
        },
        "icon": {
          "description": "The venue's icon",
          "format": "uri",
          "type": "string"
        },
        "languages": {
          "items": {
            "$ref": "#/definitions/Language"
          },
          "type": "array"
        },
        "logo": {
          "description": "The venue's logo",
          "format": "uri",
          "type": "string"
        },
        "mappedinWebUrl": {
          "description": "The base URL for Mappedin Web for this venue\n\nBetter name?",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "operationHours": {
          "description": "When this venue is open.",
          "items": {
            "$ref": "#/definitions/OperationHours"
          },
          "type": "array"
        },
        "propertyImage": {
          "description": "An image of the venue property",
          "format": "uri",
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "topLocations": {
          "items": {
            "$ref": "#/definitions/EnterpriseLocationId"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/EnterpriseVenueType",
          "description": "The type of the venue, if known."
        },
        "tzid": {
          "description": "The venue's timezone, from the IANA Time Zone Database. Should be in the format of `America/New_York`",
          "pattern": "^[A-Za-z0-9\\/_-]+$",
          "type": "string"
        }
      },
      "required": [
        "defaultLanguage",
        "externalId",
        "languages",
        "name",
        "slug"
      ],
      "type": "object"
    },
    "EnterpriseVenueType": {
      "enum": [
        "agriculture",
        "airport",
        "casino",
        "city-district",
        "convention-center",
        "entertainment",
        "event-centre",
        "first-responder-building",
        "government-building",
        "grocery-store",
        "healthcare",
        "higher-education",
        "hotel",
        "library",
        "manufacturing",
        "medical-centre",
        "mixed-use",
        "multifamily",
        "museum",
        "office-building",
        "oil-and-energy",
        "other",
        "parking-facility",
        "religious-institution",
        "resort",
        "retail-store",
        "schools-k-12",
        "shopping-mall",
        "stadium-or-arena",
        "storage-facility",
        "theme-park",
        "transit",
        "transportation-hub",
        "warehousing",
        "unknown"
      ],
      "type": "string"
    },
    "EntranceCollection": {
      "$ref": "#/definitions/FeatureCollection%3CLineString%2CEntranceProperties%3E"
    },
    "EntranceId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^e_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "EntranceProperties": {
      "additionalProperties": false,
      "properties": {
        "details": {
          "$ref": "#/definitions/Details"
        },
        "externalId": {
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/EntranceId"
        },
        "isExterior": {
          "type": "boolean"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        },
        "node": {
          "$ref": "#/definitions/NodeId"
        }
      },
      "required": [
        "id",
        "externalId"
      ],
      "type": "object"
    },
    "Facade": {
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/definitions/FacadeId"
        },
        "spaces": {
          "items": {
            "$ref": "#/definitions/FacadeSpace"
          },
          "minItems": 1,
          "type": "array"
        }
      },
      "required": [
        "id",
        "spaces"
      ],
      "type": "object"
    },
    "FacadeId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^fc_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "FacadeSpace": {
      "additionalProperties": false,
      "properties": {
        "floorId": {
          "$ref": "#/definitions/FloorId"
        },
        "spaceId": {
          "$ref": "#/definitions/SpaceId"
        }
      },
      "required": [
        "floorId",
        "spaceId"
      ],
      "type": "object"
    },
    "Feature<(Polygon|LineString),ObstructionProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "anyOf": [
            {
              "$ref": "#/definitions/Polygon"
            },
            {
              "$ref": "#/definitions/LineString"
            }
          ]
        },
        "properties": {
          "$ref": "#/definitions/ObstructionProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<(Polygon|LineString|Point),SpaceProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "anyOf": [
            {
              "$ref": "#/definitions/Polygon"
            },
            {
              "$ref": "#/definitions/LineString"
            },
            {
              "$ref": "#/definitions/Point"
            }
          ]
        },
        "properties": {
          "$ref": "#/definitions/SpaceProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<(Polygon|MultiPolygon|null),FloorProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "anyOf": [
            {
              "$ref": "#/definitions/Polygon"
            },
            {
              "$ref": "#/definitions/MultiPolygon"
            },
            {
              "type": "null"
            }
          ]
        },
        "properties": {
          "$ref": "#/definitions/FloorProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<LineString,EntranceProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/LineString"
        },
        "properties": {
          "$ref": "#/definitions/EntranceProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<Point,FloorImageProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Point"
        },
        "properties": {
          "$ref": "#/definitions/FloorImageProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<Point,FloorTextProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Point"
        },
        "properties": {
          "$ref": "#/definitions/FloorTextProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<Point,NodeProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Point"
        },
        "properties": {
          "$ref": "#/definitions/NodeProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<Point,TextAreaProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Point"
        },
        "properties": {
          "$ref": "#/definitions/TextAreaProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "Feature<Polygon,FloorStackFootprintProperties>": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Polygon"
        },
        "properties": {
          "$ref": "#/definitions/FloorStackFootprintProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "FeatureCollection<(Polygon|LineString),ObstructionProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3C(Polygon%7CLineString)%2CObstructionProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<(Polygon|LineString|Point),SpaceProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3C(Polygon%7CLineString%7CPoint)%2CSpaceProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<(Polygon|MultiPolygon|null),FloorProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3C(Polygon%7CMultiPolygon%7Cnull)%2CFloorProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<LineString,EntranceProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CLineString%2CEntranceProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<Point,FloorImageProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CPoint%2CFloorImageProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<Point,FloorTextProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CPoint%2CFloorTextProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<Point,NodeProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CPoint%2CNodeProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<Point,TextAreaProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CPoint%2CTextAreaProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollection<Polygon,FloorStackFootprintProperties>": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/Feature%3CPolygon%2CFloorStackFootprintProperties%3E"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "FeatureCollectionType": {
      "const": "FeatureCollection",
      "description": "The type field used for a collection of GeoJSON features.",
      "type": "string"
    },
    "FeatureType": {
      "const": "Feature",
      "description": "The type field used for individual GeoJSON features.",
      "type": "string"
    },
    "Flags": {
      "description": "A Flags array is an array of 32 bit integers, each representing a bit string of included flags. 1 means the flag is present, 0 means it's not.",
      "items": {
        "type": "number"
      },
      "type": "array"
    },
    "FloatingFloorTextProperties": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "default": "center",
          "description": "Horizontal alignment of multi-line text.",
          "enum": [
            "left",
            "center",
            "right"
          ],
          "type": "string"
        },
        "color": {
          "default": "black",
          "description": "The color of the text in CSS format (e.g. `#000000`, `rgb(0, 0, 0)`, `black`).",
          "type": "string"
        },
        "fontFamily": {
          "default": "Droid Sans",
          "description": "The font family of the text.",
          "type": "string"
        },
        "fontSize": {
          "default": 12,
          "description": "The em-height (multiplier of the font's height) at which to render the font, in meters. The font height is the distance between the ascender (highest point, height of an A) and descender (lowest point, bottom of a g) of the font. For example, if the font-size is 12, the space for a single character will be 12 meters high.",
          "type": "number"
        },
        "rotation": {
          "description": "Rotation in degrees, about the center of the text. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "text": {
          "description": "The text to display. Newline characters are supported.",
          "type": "string"
        },
        "verticalOffset": {
          "description": "The vertical offset of the text, in meters.",
          "type": "number"
        },
        "visible": {
          "default": true,
          "description": "Whether the text is visible.",
          "type": "boolean"
        }
      },
      "required": [
        "align",
        "color",
        "fontFamily",
        "fontSize",
        "rotation",
        "text",
        "verticalOffset",
        "visible"
      ],
      "type": "object"
    },
    "FloatingImageProperties": {
      "additionalProperties": false,
      "properties": {
        "height": {
          "description": "The height of the image when represented on the map, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "path": {
          "description": "The path to the image. This will be a remote URL.",
          "type": "string"
        },
        "rotation": {
          "description": "Rotation in degrees, about the center of the image. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "verticalOffset": {
          "description": "How high to position the image, in meters, relative to the ground plane.",
          "minimum": 0,
          "type": "number"
        },
        "width": {
          "description": "The width of the image when represented on the map, in meters.",
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "height",
        "path",
        "rotation",
        "verticalOffset",
        "width"
      ],
      "type": "object"
    },
    "FloatingTextAreaProperties": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "$ref": "#/definitions/TextAreaAlignment",
          "description": "The alignment of the text within the label. 'Near' means the text will be aligned up against the position. Typically in the SDK the text will be rotated to always be upright, so either the start or end of the text will be up against the position. 'Center' means it will be centered in the middle of the area."
        },
        "maxHeight": {
          "description": "The maximum height of the label, in meters. Half the height will be above the feature's position, half below.",
          "exclusiveMinimum": 0,
          "type": "number"
        },
        "maxWidth": {
          "description": "The maximum width of the label, in meters. The left edge will start at the feature's position and extend in the rotation direction.",
          "exclusiveMinimum": 0,
          "type": "number"
        },
        "rotation": {
          "description": "Rotation in degrees relative to north, about the position of the label. North is 0, east is 90.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "verticalOffset": {
          "description": "How high to position the text area, in meters, relative to the ground plane.",
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "align",
        "maxHeight",
        "maxWidth",
        "rotation",
        "verticalOffset"
      ],
      "type": "object"
    },
    "FloorCollection": {
      "$ref": "#/definitions/FeatureCollection%3C(Polygon%7CMultiPolygon%7Cnull)%2CFloorProperties%3E"
    },
    "FloorId": {
      "description": "The m_ prefix is deprecated, from when floors were previously called maps. Use f_ as the prefix instead.\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^[mf]_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "FloorImageFeatureCollection": {
      "$ref": "#/definitions/FeatureCollection%3CPoint%2CFloorImageProperties%3E",
      "description": "A collection of images to be displayed on a map. They are either attached to a polygon or are floating in space."
    },
    "FloorImageProperties": {
      "anyOf": [
        {
          "$ref": "#/definitions/AnchoredImageProperties"
        },
        {
          "$ref": "#/definitions/FloatingImageProperties"
        }
      ]
    },
    "FloorProperties": {
      "additionalProperties": false,
      "properties": {
        "elevation": {
          "description": "The elevation of this map relative to other maps in the stack. Must be an integer.",
          "type": "integer"
        },
        "externalId": {
          "description": "Use of this property as the name of the map is deprecated. Use the name property instead.",
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/FloorId"
        },
        "maxHeight": {
          "description": "The maximum height of the floor in meters. This includes the thickness of the floor itself, up to the tallest point on any wall. If the floor does not have a consistent height (eg, one room on the floor has a vaulted ceiling, the rest do not), this value represents the highest point anywhere on the floor. Must be a positive number, or undefined.",
          "exclusiveMinimum": 0,
          "type": "number"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        },
        "name": {
          "type": "string"
        },
        "shortName": {
          "description": "A short name for the map, if it exists. Usually one or two characters (eg, 3, F1, L, etc.) For display in very small spaces, like a floor selector dropdown. Might line up with what is shown on elevator buttons in the physical world.",
          "type": "string"
        },
        "subtitle": {
          "description": "A subtitle for the map, for display in larger spaces, usually beneath the full name. Provides additional context for what is actually on the map, if the name is not clear. For example, if the full name is \"Level 1\", the subtitle might be \"Arrivals and Baggage Claim\".\n\nShould be no more than a few words.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "externalId",
        "elevation"
      ],
      "type": "object"
    },
    "FloorStack": {
      "additionalProperties": false,
      "properties": {
        "defaultFloor": {
          "$ref": "#/definitions/FloorId",
          "description": "The default floor to use when a floor is not specified."
        },
        "externalId": {
          "type": "string"
        },
        "floors": {
          "description": "A list of floor IDs that belong to this floor stack.",
          "items": {
            "$ref": "#/definitions/FloorId"
          },
          "type": "array"
        },
        "footprint": {
          "$ref": "#/definitions/FeatureCollection%3CPolygon%2CFloorStackFootprintProperties%3E",
          "description": "Provides a footprint for the map stack based on the geometry of the maps it contains. This is useful for rendering a map stack without loading all of its maps."
        },
        "id": {
          "$ref": "#/definitions/FloorStackId"
        },
        "maps": {
          "deprecated": "Use `floors` instead.",
          "description": "A list of floor IDs that belong to this floor stack.",
          "items": {
            "$ref": "#/definitions/FloorId"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        },
        "name": {
          "type": "string"
        },
        "shortName": {
          "description": "A short name for the map stack, if it exists. For display in small spaces, like a floor selector dropdown.",
          "type": "string"
        },
        "type": {
          "description": "The type of MapStack, e.g. Building, Outdoor. Defaults to Building.",
          "enum": [
            "Building",
            "Outdoor"
          ],
          "type": "string"
        }
      },
      "required": [
        "id",
        "externalId",
        "name",
        "maps"
      ],
      "type": "object"
    },
    "FloorStackFootprintProperties": {
      "additionalProperties": {
        "not": {}
      },
      "type": "object"
    },
    "FloorStackId": {
      "description": "The mg_ prefix is deprecated, from when floor stacks were previously called map groups. Use fs_ as the prefix instead.\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^fs_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "FloorStacks": {
      "items": {
        "$ref": "#/definitions/FloorStack"
      },
      "type": "array"
    },
    "FloorTextFeatureCollection": {
      "$ref": "#/definitions/FeatureCollection%3CPoint%2CFloorTextProperties%3E",
      "description": "A collection of text to be displayed on a map. They are either attached to a space or are floating."
    },
    "FloorTextProperties": {
      "anyOf": [
        {
          "$ref": "#/definitions/AnchoredFloorTextProperties"
        },
        {
          "$ref": "#/definitions/FloatingFloorTextProperties"
        }
      ]
    },
    "Hyperlink": {
      "additionalProperties": false,
      "properties": {
        "displayName": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "Image": {
      "additionalProperties": false,
      "properties": {
        "altText": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "Language": {
      "additionalProperties": false,
      "properties": {
        "code": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "code"
      ],
      "type": "object"
    },
    "Latitude": {
      "description": "A WGS 84-compatible latitude coordinate value.",
      "maximum": 90,
      "minimum": -90,
      "type": "number"
    },
    "LineString": {
      "additionalProperties": false,
      "description": "An RFC-7946 compatible GeoJSON LineString geometry.",
      "properties": {
        "coordinates": {
          "items": {
            "$ref": "#/definitions/Position"
          },
          "minItems": 2,
          "type": "array"
        },
        "type": {
          "const": "LineString",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "LineStringStyle": {
      "additionalProperties": false,
      "properties": {
        "altitude": {
          "description": "How far off the \"ground\" the objects belonging to this layer should be drawn, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "color": {
          "description": "Color should be represented with a hash (#), followed by 6 hexadecimal digits. ex: #RRGGBB",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "type": "string"
        },
        "height": {
          "description": "The height of the objects belonging to this layer, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "lineStrings": {
          "description": "The line strings which this style applies to.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/EntranceId"
              },
              {
                "$ref": "#/definitions/ObstructionId"
              },
              {
                "$ref": "#/definitions/SpaceId"
              }
            ]
          },
          "type": "array"
        },
        "opacity": {
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        },
        "topColor": {
          "description": "Optional color for the top face of extruded geometry. If not specified, falls back to color.",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "type": "string"
        },
        "width": {
          "description": "The thickness of the line when rendered, in meters, measured from the center to the edge.",
          "exclusiveMinimum": 0,
          "type": "number"
        }
      },
      "required": [
        "altitude",
        "color",
        "height",
        "lineStrings",
        "opacity",
        "width"
      ],
      "type": "object"
    },
    "LocalPosition": {
      "description": "A position for a local coordinate system, measured in metres.",
      "items": {
        "type": "number"
      },
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Location": {
      "additionalProperties": false,
      "properties": {
        "annotations": {
          "items": {
            "$ref": "#/definitions/LocationAnnotationMapping"
          },
          "type": "array"
        },
        "areas": {
          "items": {
            "$ref": "#/definitions/LocationAreaMapping"
          },
          "type": "array"
        },
        "categories": {
          "items": {
            "$ref": "#/definitions/CategoryId"
          },
          "type": "array"
        },
        "connections": {
          "items": {
            "$ref": "#/definitions/ConnectionId"
          },
          "type": "array"
        },
        "description": {
          "type": "string"
        },
        "entrances": {
          "items": {
            "$ref": "#/definitions/LocationEntranceMapping"
          },
          "type": "array"
        },
        "externalId": {
          "type": "string"
        },
        "icon": {
          "description": "The location's icon, one of picture/category/logo",
          "format": "uri",
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/LocationId"
        },
        "links": {
          "description": "Web links for the location",
          "items": {
            "$ref": "#/definitions/LocationLink"
          },
          "type": "array"
        },
        "logo": {
          "description": "The location's logo",
          "format": "uri",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "obstructions": {
          "items": {
            "$ref": "#/definitions/LocationObstructionMapping"
          },
          "type": "array"
        },
        "openingHoursSpecification": {
          "description": "The location's opening hours",
          "items": {
            "$ref": "#/definitions/OpeningHoursSpecification"
          },
          "type": "array"
        },
        "phone": {
          "type": "string"
        },
        "pictures": {
          "description": "The location's pictures",
          "items": {
            "$ref": "#/definitions/LocationPicture"
          },
          "type": "array"
        },
        "searchTags": {
          "description": "Search tags are used primarily as keywords to match against when searching. They are typically not used for display.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "social": {
          "description": "The location's social media links.",
          "items": {
            "$ref": "#/definitions/LocationSocial"
          },
          "type": "array"
        },
        "spaces": {
          "items": {
            "$ref": "#/definitions/LocationSpaceMapping"
          },
          "type": "array"
        },
        "website": {
          "$ref": "#/definitions/LocationLink",
          "description": "The location's website"
        }
      },
      "required": [
        "id",
        "name",
        "categories",
        "spaces",
        "obstructions",
        "entrances",
        "connections",
        "annotations",
        "areas",
        "social",
        "pictures",
        "links",
        "openingHoursSpecification"
      ],
      "type": "object"
    },
    "LocationAnnotationMapping": {
      "additionalProperties": false,
      "properties": {
        "floor": {
          "$ref": "#/definitions/FloorId"
        },
        "id": {
          "$ref": "#/definitions/AnnotationId"
        }
      },
      "required": [
        "floor",
        "id"
      ],
      "type": "object"
    },
    "LocationAreaMapping": {
      "additionalProperties": false,
      "properties": {
        "floor": {
          "$ref": "#/definitions/FloorId"
        },
        "id": {
          "$ref": "#/definitions/AreaId"
        }
      },
      "required": [
        "floor",
        "id"
      ],
      "type": "object"
    },
    "LocationEntranceMapping": {
      "additionalProperties": false,
      "properties": {
        "floor": {
          "$ref": "#/definitions/FloorId"
        },
        "id": {
          "$ref": "#/definitions/EntranceId"
        }
      },
      "required": [
        "floor",
        "id"
      ],
      "type": "object"
    },
    "LocationId": {
      "description": "An ID for a location\n\n**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^loc_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "LocationLink": {
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string"
        },
        "url": {
          "description": "The URL of the link",
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "label",
        "url"
      ],
      "type": "object"
    },
    "LocationObstructionMapping": {
      "additionalProperties": false,
      "properties": {
        "floor": {
          "$ref": "#/definitions/FloorId"
        },
        "id": {
          "$ref": "#/definitions/ObstructionId"
        }
      },
      "required": [
        "floor",
        "id"
      ],
      "type": "object"
    },
    "LocationPicture": {
      "additionalProperties": false,
      "description": "The location's pictures Single-field object, because it's plausible we might add captions or comments in the future",
      "properties": {
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "LocationSocial": {
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "The name of the social media platform.",
          "type": "string"
        },
        "url": {
          "description": "The URL of the social media profile",
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "name",
        "url"
      ],
      "type": "object"
    },
    "LocationSpaceMapping": {
      "additionalProperties": false,
      "properties": {
        "floor": {
          "$ref": "#/definitions/FloorId"
        },
        "id": {
          "$ref": "#/definitions/SpaceId"
        }
      },
      "required": [
        "floor",
        "id"
      ],
      "type": "object"
    },
    "LocationState": {
      "additionalProperties": false,
      "description": "The state of a location. Start and end dates are optional.",
      "properties": {
        "end": {
          "description": "The start date of the state",
          "format": "date",
          "type": "string"
        },
        "start": {
          "description": "The start date of the state",
          "format": "date",
          "type": "string"
        },
        "type": {
          "description": "The type of the location state. Technically not limited, but should be one of the following:\n- closed-temporarily\n- new\n- pop-up\n- coming-soon\n- relocated",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    },
    "Longitude": {
      "description": "A WGS 84-compatible longitude coordinate value.",
      "maximum": 180,
      "minimum": -180,
      "type": "number"
    },
    "ManifestCollection": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/definitions/ManifestFeature"
          },
          "maxItems": 1,
          "minItems": 1,
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "ManifestFeature": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/definitions/Point"
        },
        "properties": {
          "$ref": "#/definitions/ManifestProperties"
        },
        "type": {
          "$ref": "#/definitions/FeatureType"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "ManifestFile": {
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "const": "file",
          "type": "string"
        }
      },
      "required": [
        "type",
        "name"
      ],
      "type": "object"
    },
    "ManifestFolder": {
      "additionalProperties": false,
      "properties": {
        "children": {
          "items": {
            "$ref": "#/definitions/ManifestFile"
          },
          "minItems": 1,
          "type": "array"
        },
        "name": {
          "type": "string"
        },
        "type": {
          "const": "folder",
          "type": "string"
        }
      },
      "required": [
        "type",
        "name",
        "children"
      ],
      "type": "object"
    },
    "ManifestProperties": {
      "additionalProperties": false,
      "properties": {
        "details": {
          "additionalProperties": false,
          "description": "Additional details about the manifest. Used for backwards compatibility with MVFv3.",
          "properties": {
            "externalId": {
              "description": "An identifier that can be used to link this manifest to some external system or database.",
              "type": "string"
            }
          },
          "type": "object"
        },
        "folder_struct": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/ManifestFolder"
              },
              {
                "$ref": "#/definitions/ManifestFile"
              }
            ]
          },
          "type": "array"
        },
        "language": {
          "description": "The RFC 5646 language tag of the MVF. https://datatracker.ietf.org/doc/html/rfc5646",
          "examples": [
            "en-US"
          ],
          "type": "string"
        },
        "map": {
          "description": "The identifier of the map that this MVF is for.",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "naturalBearing": {
          "description": "The angle, in degrees, the map is considered to be \"naturally oriented\" as, rather than facing directly north. 90 degrees means East is \"up\"",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        },
        "org_id": {
          "type": "string"
        },
        "time": {
          "description": "An ISO 8601 date-time string, including timezone offset.",
          "format": "date-time",
          "type": "string"
        },
        "tzid": {
          "description": "The map's timezone, from the IANA Time Zone Database. Should be in the format of `America/New_York`",
          "examples": [
            "America/New_York"
          ],
          "pattern": "^[A-Za-z0-9_-]+\\/[A-Za-z0-9_-]+$",
          "type": "string"
        },
        "version": {
          "const": "2.0.0",
          "type": "string"
        }
      },
      "required": [
        "name",
        "folder_struct",
        "version",
        "time"
      ],
      "type": "object"
    },
    "Maps": {
      "deprecated": "This is only present on `map.geojson` which is deprecated. Use\nthe collection on `floor.geojson` instead.",
      "items": {
        "$ref": "#/definitions/FloorProperties"
      },
      "type": "array"
    },
    "Material": {
      "additionalProperties": false,
      "description": "The color and/or texture that should be applied to an instance of a Shape.\n\nIf both a color and a texture are provided, the color will be applied to the texture via a multiply operation. If neither are provided, the shape will be white.",
      "properties": {
        "color": {
          "description": "The color of this mateial as a hex code.",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "type": "string"
        },
        "texture": {
          "$ref": "#/definitions/Texture"
        }
      },
      "type": "object"
    },
    "Metadata": {
      "additionalProperties": {},
      "description": "Can be any extra metadata that is not part of the main MVF spec. Presence of any key or value is not guaranteed. Values are expected to be JSON-serializable.",
      "type": "object"
    },
    "ModelInstance": {
      "additionalProperties": false,
      "description": "An instance of a 3D model.",
      "properties": {
        "altitude": {
          "description": "The distance above ground, in metres, where this Decoration's origin point should be placed.",
          "type": "number"
        },
        "path": {
          "description": "The path to this asset, relative to the MVF's models folder. Supports GLTF and OBJ.",
          "minLength": 1,
          "type": "string"
        },
        "position": {
          "$ref": "#/definitions/Position",
          "description": "The long/lat point that the Decoration's origin point correponds to."
        },
        "rotation": {
          "$ref": "#/definitions/Vector3",
          "description": "The rotation, in Euler angles in XYZ order, that will be applied to this Decoration."
        },
        "scale": {
          "$ref": "#/definitions/Vector3",
          "description": "The X, Y and Z scale that will be applied to this Decoration."
        }
      },
      "required": [
        "altitude",
        "path",
        "position",
        "rotation",
        "scale"
      ],
      "type": "object"
    },
    "ModelInstanceCollection": {
      "additionalProperties": {
        "$ref": "#/definitions/ModelInstance"
      },
      "description": "A map of model instances, where keys are valid polygon or obstruction IDs. Replaces the specified polygon.",
      "type": "object"
    },
    "MultiPolygon": {
      "additionalProperties": false,
      "description": "An RFC-7946 compatible GeoJSON MultiPolygon geometry.",
      "properties": {
        "coordinates": {
          "items": {
            "items": {
              "items": {
                "$ref": "#/definitions/Position"
              },
              "type": "array"
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "MultiPolygon",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "NavigationFlagDeclaration": {
      "additionalProperties": false,
      "description": "A NavigationFlagDeclaration describes the relationship between a \"key\" that a developer might use to wayfind using that flag, and the index and bit position in an object's `flags` array. Ie, if there is a flag with a key of `vip`, index 1 and bit position 0, then an item with flags as `[0, 0]` does not have the flag, `[0, 1]` does, and `[1, 2]` or `[1, 0]` do not.\n\nNavigationFlagDeclarations also may contain details about the flag, which can be displayed to a user if present.",
      "properties": {
        "bit": {
          "description": "The bit position of the flag in a flag's bitfield. ie, 0 means the first bit, 1 means the second bit, etc. A flag bitfield with that bit set to 1 means the flag is present. Other than for Well Known Flags, this is not expected to be durable across different versions of the same MVF.",
          "maximum": 31,
          "minimum": 0,
          "type": "number"
        },
        "details": {
          "$ref": "#/definitions/Details"
        },
        "index": {
          "description": "The index of the flag in a flags array. ie, 0 means the first bitfield, 1 means the second bitfield, etc.",
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "index",
        "bit"
      ],
      "type": "object"
    },
    "NavigationFlagDeclarations": {
      "additionalProperties": {
        "$ref": "#/definitions/NavigationFlagDeclaration"
      },
      "description": "A map of all NavigationFlagDeclarations present in the MVF. The key is the durable value a developer should use to interact with the flag when wayfinding, and the value is the definition of the flag that describes how to determine whether it's set in an object's flags array.",
      "type": "object"
    },
    "NodeCollection": {
      "$ref": "#/definitions/FeatureCollection%3CPoint%2CNodeProperties%3E"
    },
    "NodeId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^n_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "NodeProperties": {
      "additionalProperties": false,
      "properties": {
        "externalId": {
          "type": "string"
        },
        "flags": {
          "$ref": "#/definitions/Flags",
          "description": "Navigation flags that indicate special properties of this node for wayfinding."
        },
        "floor": {
          "$ref": "#/definitions/FloorId",
          "description": "The ID of the floor this node is found on."
        },
        "id": {
          "$ref": "#/definitions/NodeId"
        },
        "map": {
          "$ref": "#/definitions/FloorId",
          "deprecated": "use `floor` instead.",
          "description": "The ID of the floor this node is found on."
        },
        "neighbors": {
          "description": "A list of nodes that can be navigated to from this node.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "$ref": "#/definitions/NodeId"
              },
              "weight": {
                "description": "The cost of navigating to this node.",
                "minimum": 0,
                "type": "number"
              }
            },
            "required": [
              "id",
              "weight"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "preventSmoothing": {
          "description": "Flag that may optionally indicate that a node is part of a custom path network rather than auto generated and should not be removed during smoothing/simplifcation.",
          "type": "boolean"
        },
        "space": {
          "description": "The IDs of any spaces this node may be contained within.",
          "items": {
            "$ref": "#/definitions/SpaceId"
          },
          "type": "array"
        }
      },
      "required": [
        "id",
        "externalId",
        "map",
        "space",
        "neighbors"
      ],
      "type": "object"
    },
    "ObstructionCollection": {
      "$ref": "#/definitions/FeatureCollection%3C(Polygon%7CLineString)%2CObstructionProperties%3E"
    },
    "ObstructionId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^o_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "ObstructionProperties": {
      "additionalProperties": false,
      "properties": {
        "center": {
          "$ref": "#/definitions/Position",
          "description": "The center of mass of this obstruction, if it is a polygon. This is undefined for line strings as this can be trivially derived."
        },
        "details": {
          "$ref": "#/definitions/Details"
        },
        "entrances": {
          "description": "A list of entrance IDs corresponding to entrances that can be used to navigate through this obstruction.",
          "items": {
            "$ref": "#/definitions/EntranceId"
          },
          "type": "array"
        },
        "externalId": {
          "type": "string"
        },
        "footprintComponent": {
          "description": "Indicates whether this obstruction is considered part of the footprint of the building it is a part of. For example, an exterior wall would be considered part of the building footprint.",
          "type": "boolean"
        },
        "id": {
          "$ref": "#/definitions/ObstructionId"
        },
        "kind": {
          "type": "string"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        }
      },
      "required": [
        "id",
        "externalId",
        "entrances"
      ],
      "type": "object"
    },
    "OpeningHoursSpecification": {
      "additionalProperties": false,
      "description": "We (almost) follow this schema (http://schema.org/OpeningHoursSpecification) The only difference is that we (like Google: https://developers.google.com/search/docs/data-types/local-businesses) accept dayOfWeek as an array as well as an individual day.\n\nBehavioral notes:\n- if the \"opens\" property is not present, the location is closed, and the closes property is ignored (Schema.org style)\n- if opens/closes are both set to 00:00, the location is closed (Google style)\n- If special hours do not specifiy certain weekdays being open, those weekdays are closed.\n- Not specifying dayOfWeek is equivalent to specifying every day of the week.\n- we will omit the '@type' property when producing MVFs. But we won't reject 3rd party MVFs that include it.",
      "properties": {
        "@type": {
          "const": "OpeningHoursSpecification",
          "default": "OpeningHoursSpecification",
          "description": "The type of opening hours",
          "type": "string"
        },
        "closes": {
          "$ref": "#/definitions/Time",
          "description": "The time the opening hours end"
        },
        "dayOfWeek": {
          "anyOf": [
            {
              "$ref": "#/definitions/DayOrPublicHoliday"
            },
            {
              "items": {
                "$ref": "#/definitions/DayOrPublicHoliday"
              },
              "maxItems": 1,
              "minItems": 1,
              "type": "array"
            },
            {
              "items": {
                "$ref": "#/definitions/DayOrPublicHoliday"
              },
              "type": "array"
            }
          ],
          "description": "The days of the week the opening hours apply to"
        },
        "opens": {
          "$ref": "#/definitions/Time",
          "description": "The time the opening hours start"
        },
        "validFrom": {
          "description": "The date the opening hours start, in ISO 8601 format",
          "format": "date-time",
          "type": "string"
        },
        "validThrough": {
          "description": "The date the opening hours end, in ISO 8601 format",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OperationHours": {
      "additionalProperties": false,
      "description": "We (almost) follow this schema (http://schema.org/OpeningHoursSpecification) The only difference is that we (like Google: https://developers.google.com/search/docs/data-types/local-businesses) accept dayOfWeek as an array as well as an individual day.",
      "properties": {
        "@type": {
          "const": "OpeningHoursSpecification",
          "default": "OpeningHoursSpecification",
          "description": "The type of operation hours",
          "type": "string"
        },
        "closes": {
          "$ref": "#/definitions/Time",
          "description": "The time the operation hours end"
        },
        "dayOfWeek": {
          "anyOf": [
            {
              "$ref": "#/definitions/DayOrPublicHoliday"
            },
            {
              "items": {
                "$ref": "#/definitions/DayOrPublicHoliday"
              },
              "maxItems": 1,
              "minItems": 1,
              "type": "array"
            },
            {
              "items": {
                "$ref": "#/definitions/DayOrPublicHoliday"
              },
              "type": "array"
            }
          ],
          "description": "The days of the week the operation hours apply to"
        },
        "opens": {
          "$ref": "#/definitions/Time",
          "description": "The time the operation hours start"
        },
        "validFrom": {
          "description": "The date the operation hours start, in ISO 8601 format",
          "format": "date-time",
          "type": "string"
        },
        "validThrough": {
          "description": "The date the operation hours end, in ISO 8601 format",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ParsedMVF": {
      "additionalProperties": false,
      "properties": {
        "annotation": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/AnnotationCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "annotation-symbols.json": {
          "$ref": "#/definitions/AnnotationSymbols"
        },
        "area": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/AreaCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "category.json": {
          "items": {
            "$ref": "#/definitions/Category"
          },
          "type": "array"
        },
        "connection.json": {
          "$ref": "#/definitions/Connections"
        },
        "enterprise": {
          "$ref": "#/definitions/EnterpriseCollection"
        },
        "entrance": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/EntranceCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "facade": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/Facade"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^fs_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "floor.geojson": {
          "$ref": "#/definitions/FloorCollection"
        },
        "floorImages": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/FloorImageFeatureCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "floorstack.json": {
          "$ref": "#/definitions/FloorStacks"
        },
        "location.json": {
          "items": {
            "$ref": "#/definitions/Location"
          },
          "type": "array"
        },
        "manifest.geojson": {
          "$ref": "#/definitions/ManifestCollection"
        },
        "map.geojson": {
          "$ref": "#/definitions/Maps",
          "deprecated": "Use `floor.geojson` instead."
        },
        "mapstack.geojson": {
          "$ref": "#/definitions/FloorStacks",
          "deprecated": "Use `floorstack.json` instead."
        },
        "mapstack.json": {
          "$ref": "#/definitions/FloorStacks",
          "deprecated": "Use `floorstack.json` instead."
        },
        "modelInstances": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/ModelInstanceCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "navigationFlags.json": {
          "$ref": "#/definitions/NavigationFlagDeclarations"
        },
        "node.geojson": {
          "$ref": "#/definitions/NodeCollection"
        },
        "obstruction": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/ObstructionCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "shapeInstances": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/ShapeInstanceCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "shapes.json": {
          "$ref": "#/definitions/ShapeCollection"
        },
        "space": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/SpaceCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "styles.json": {
          "$ref": "#/definitions/StyleCollection"
        },
        "textAreas": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/TextAreaFeatureCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        },
        "tileset.json": {
          "$ref": "#/definitions/TilesetCollection"
        },
        "window": {
          "additionalProperties": {
            "anyOf": [
              {
                "$ref": "#/definitions/WindowCollection"
              },
              {
                "not": {}
              }
            ]
          },
          "propertyNames": {
            "pattern": "^[mf]_[A-Za-z0-9_-]+$"
          },
          "type": "object"
        }
      },
      "required": [
        "manifest.geojson",
        "mapstack.geojson",
        "map.geojson",
        "space",
        "obstruction",
        "connection.json",
        "node.geojson",
        "entrance"
      ],
      "type": "object"
    },
    "Point": {
      "additionalProperties": false,
      "description": "An RFC-7946 compatible GeoJSON Point geometry.",
      "properties": {
        "coordinates": {
          "$ref": "#/definitions/Position"
        },
        "type": {
          "const": "Point",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "PointStyle": {
      "additionalProperties": false,
      "properties": {
        "points": {
          "description": "The points which this style applies to.",
          "items": {
            "$ref": "#/definitions/SpaceId"
          },
          "type": "array"
        },
        "showImage": {
          "description": "Whether or not the first image attached to the space or obstruction should be displayed on the point.",
          "type": "boolean"
        }
      },
      "required": [
        "points"
      ],
      "type": "object"
    },
    "Polygon": {
      "additionalProperties": false,
      "description": "An RFC-7946 compatible GeoJSON Polygon geometry.",
      "properties": {
        "coordinates": {
          "items": {
            "items": {
              "$ref": "#/definitions/Position"
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "Polygon",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "PolygonStyle": {
      "additionalProperties": false,
      "properties": {
        "altitude": {
          "description": "How far off the \"ground\" the objects belonging to this layer should be drawn, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "color": {
          "description": "Color should be represented with a hash (#), followed by 6 hexadecimal digits. ex: #RRGGBB",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "type": "string"
        },
        "height": {
          "description": "The height of the objects belonging to this layer, in meters.",
          "minimum": 0,
          "type": "number"
        },
        "opacity": {
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        },
        "polygons": {
          "description": "The polygons which this style applies to.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/ObstructionId"
              },
              {
                "$ref": "#/definitions/SpaceId"
              }
            ]
          },
          "type": "array"
        },
        "showImage": {
          "description": "Whether or not the first image attached to the space or obstruction should be displayed on the polygon.",
          "type": "boolean"
        },
        "topColor": {
          "description": "Optional color for the top face of extruded geometry. If not specified, falls back to color.",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "type": "string"
        }
      },
      "required": [
        "altitude",
        "color",
        "height",
        "opacity",
        "polygons"
      ],
      "type": "object"
    },
    "Position": {
      "description": "A valid WGS 84 position consisting of a longitude coodinate, followed by a latitude coordinate.",
      "items": [
        {
          "$ref": "#/definitions/Longitude"
        },
        {
          "$ref": "#/definitions/Latitude"
        }
      ],
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Ring": {
      "description": "A simple shape for part of a complex polygon",
      "items": {
        "$ref": "#/definitions/LocalPosition"
      },
      "minItems": 3,
      "type": "array"
    },
    "Shape": {
      "description": "A 3D object made from extruded 2D polygons, that can be rendered to the map as a ShapeInstance.",
      "items": {
        "$ref": "#/definitions/ShapeComponent"
      },
      "minItems": 1,
      "type": "array"
    },
    "ShapeCollection": {
      "additionalProperties": {
        "$ref": "#/definitions/Shape"
      },
      "description": "A group of Shapes, without any information as to how they will be placed in a scene.",
      "propertyNames": {
        "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
        "pattern": "^sh_[A-Za-z0-9_-]+$"
      },
      "type": "object"
    },
    "ShapeComponent": {
      "additionalProperties": false,
      "description": "A single extruded 2D polygon.",
      "properties": {
        "altitude": {
          "description": "In metres.",
          "type": "number"
        },
        "geometry": {
          "description": "Can contain holes, like GeoJSON.",
          "items": {
            "$ref": "#/definitions/Ring"
          },
          "minItems": 1,
          "type": "array"
        },
        "height": {
          "description": "In metres.",
          "exclusiveMinimum": 0,
          "type": "number"
        }
      },
      "required": [
        "geometry",
        "altitude",
        "height"
      ],
      "type": "object"
    },
    "ShapeId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^sh_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "ShapeInstance": {
      "additionalProperties": false,
      "description": "An instance of a Shape.",
      "properties": {
        "altitude": {
          "description": "The distance above ground, in metres, where this Decoration's origin point should be placed.",
          "type": "number"
        },
        "id": {
          "$ref": "#/definitions/ShapeId",
          "description": "The identifier of the Shape to be placed."
        },
        "material": {
          "$ref": "#/definitions/Material",
          "description": "The color and/or texture to apply to this shape instance."
        },
        "position": {
          "$ref": "#/definitions/Position",
          "description": "The long/lat point that the Decoration's origin point correponds to."
        },
        "rotation": {
          "$ref": "#/definitions/Vector3",
          "description": "The rotation, in Euler angles in XYZ order, that will be applied to this Decoration."
        },
        "scale": {
          "$ref": "#/definitions/Vector3",
          "description": "The X, Y and Z scale that will be applied to this Decoration."
        }
      },
      "required": [
        "altitude",
        "id",
        "material",
        "position",
        "rotation",
        "scale"
      ],
      "type": "object"
    },
    "ShapeInstanceCollection": {
      "additionalProperties": {
        "$ref": "#/definitions/ShapeInstance"
      },
      "description": "A map of shape instances, where keys are valid polygon or obstruction IDs. Replaces the specified polygon.",
      "type": "object"
    },
    "SiblingGroup": {
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string"
        },
        "siblings": {
          "items": {
            "$ref": "#/definitions/EnterpriseLocationId"
          },
          "type": "array"
        },
        "subtype": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "label",
        "siblings"
      ],
      "type": "object"
    },
    "SpaceCollection": {
      "$ref": "#/definitions/FeatureCollection%3C(Polygon%7CLineString%7CPoint)%2CSpaceProperties%3E"
    },
    "SpaceId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^s_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "SpaceProperties": {
      "additionalProperties": false,
      "properties": {
        "center": {
          "$ref": "#/definitions/Position",
          "description": "The center of mass of this space, if it is a polygon. This is undefined for line string and point spaces as these can be trivially derived."
        },
        "destinationNodes": {
          "description": "A list of node IDs which can be used to navigate to this space.",
          "items": {
            "$ref": "#/definitions/NodeId"
          },
          "type": "array"
        },
        "details": {
          "$ref": "#/definitions/Details"
        },
        "externalId": {
          "type": "string"
        },
        "id": {
          "$ref": "#/definitions/SpaceId"
        },
        "kind": {
          "type": "string"
        },
        "metadata": {
          "$ref": "#/definitions/Metadata"
        },
        "tags": {
          "description": "A list of tags that may apply to categorize the space, e.g. Void",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "id",
        "externalId",
        "destinationNodes"
      ],
      "type": "object"
    },
    "StyleCollection": {
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/definitions/PolygonStyle"
          },
          {
            "$ref": "#/definitions/LineStringStyle"
          },
          {
            "$ref": "#/definitions/PointStyle"
          },
          {
            "not": {}
          }
        ]
      },
      "description": "A map of layer styles, where keys represent the group IDs of each style.",
      "type": "object"
    },
    "TextAreaAlignment": {
      "enum": [
        "near",
        "center"
      ],
      "type": "string"
    },
    "TextAreaFeatureCollection": {
      "$ref": "#/definitions/FeatureCollection%3CPoint%2CTextAreaProperties%3E",
      "description": "A collection of text areas to be displayed on a map. They are either attached to a polygon or are floating in space."
    },
    "TextAreaProperties": {
      "anyOf": [
        {
          "$ref": "#/definitions/AnchoredTextAreaProperties"
        },
        {
          "$ref": "#/definitions/FloatingTextAreaProperties"
        }
      ]
    },
    "Texture": {
      "additionalProperties": false,
      "description": "A reference to an image texture and how it should be applied to a Component.",
      "properties": {
        "path": {
          "description": "The path to this asset, relative to the MVF's images folder.",
          "minLength": 1,
          "type": "string"
        },
        "repeat": {
          "$ref": "#/definitions/TextureRepeat"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "TextureRepeat": {
      "additionalProperties": false,
      "description": "How a texture should be placed on a Component.",
      "properties": {
        "u": {
          "type": "number"
        },
        "v": {
          "type": "number"
        }
      },
      "required": [
        "u",
        "v"
      ],
      "type": "object"
    },
    "TilesetCollection": {
      "additionalProperties": false,
      "description": "Collection of tileset styles",
      "properties": {
        "default": {
          "$ref": "#/definitions/TilesetStyle",
          "description": "Default tileset style that should be used"
        },
        "others": {
          "description": "Additional tileset styles that can be used",
          "items": {
            "$ref": "#/definitions/TilesetStyle"
          },
          "type": "array"
        }
      },
      "required": [
        "default"
      ],
      "type": "object"
    },
    "TilesetStyle": {
      "additionalProperties": false,
      "description": "A tileset style definition",
      "properties": {
        "key": {
          "description": "Unique identifier for this tileset style",
          "minLength": 1,
          "type": "string"
        },
        "name": {
          "description": "Display name for this tileset style",
          "minLength": 1,
          "type": "string"
        },
        "url": {
          "description": "URL to the tileset style definition. This should be a JSON file matching the MapLibre style specification.",
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "key",
        "name",
        "url"
      ],
      "type": "object"
    },
    "Time": {
      "description": "A time in the format of HH:MM:SS",
      "pattern": "^[0-2][0-9]:[0-6][0-9](:[0-6][0-9])?$",
      "type": "string"
    },
    "Vector3": {
      "description": "A three-number tuple.",
      "items": {
        "type": "number"
      },
      "maxItems": 3,
      "minItems": 3,
      "type": "array"
    },
    "WindowCollection": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "additionalProperties": false,
            "properties": {
              "geometry": {
                "$ref": "#/definitions/LineString"
              },
              "properties": {
                "$ref": "#/definitions/WindowProperties"
              },
              "type": {
                "$ref": "#/definitions/FeatureType"
              }
            },
            "required": [
              "type",
              "geometry",
              "properties"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/definitions/FeatureCollectionType"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "WindowId": {
      "description": "**Important**: While the suffix can be any length, it is strongly recommended to use suffixes of at least 8 characters to ensure uniqueness and avoid collisions.",
      "pattern": "^w_[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "WindowProperties": {
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/definitions/WindowId"
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    }
  }
}