diff --git a/docusaurus/docs/reference/buildings/part.mdx b/docusaurus/docs/reference/buildings/part.mdx
new file mode 100644
index 00000000..4dfded22
--- /dev/null
+++ b/docusaurus/docs/reference/buildings/part.mdx
@@ -0,0 +1,51 @@
+---
+title: part
+---
+
+import CodeBlock from '@theme/CodeBlock';
+import JSONSchemaViewer from "@theme/JSONSchemaViewer";
+import generateResolverOptions from "@site/src/components/shared-libs/generateResolverOptions"
+import yamlLoad from "@site/src/components/yamlLoad"
+import BuildingPartSchema from "!!raw-loader!@site/docs/_schema/buildings/part.yaml";
+
+import BuildingPartExample from "!!raw-loader!@site/docs/_examples/buildings/building-part-basic.yaml";
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Building Part
+
+
+
+ Geometry Type |
+ Polygon or MultiPolygon |
+
+
+ Theme |
+ buildings |
+
+
+ Type |
+ part |
+
+
+
+
+## Schema
+
+
+
+
+
+
+ {BuildingPartSchema}
+
+
+
+## Examples
+
+
+
+ { JSON.stringify(yamlLoad(BuildingPartExample), null, 2) }
+
+
diff --git a/docusaurus/sidebars.js b/docusaurus/sidebars.js
index 3f1bfc77..04ac13bc 100644
--- a/docusaurus/sidebars.js
+++ b/docusaurus/sidebars.js
@@ -76,6 +76,7 @@ const sidebars = {
collapsed: false,
items: [
'reference/buildings/building',
+ 'reference/buildings/part'
]
},
{
diff --git a/docusaurus/src/YAML_FILE_TREE.js b/docusaurus/src/YAML_FILE_TREE.js
index f80c0d27..01d9415a 100644
--- a/docusaurus/src/YAML_FILE_TREE.js
+++ b/docusaurus/src/YAML_FILE_TREE.js
@@ -7,6 +7,8 @@ const _default = {
'/admins/locality.yaml': require('!!raw-loader!@site/docs/_schema/admins/locality.yaml'),
'/buildings/building.yaml': require('!!raw-loader!@site/docs/_schema/buildings/building.yaml'),
+ '/buildings/part.yaml': require('!!raw-loader!@site/docs/_schema/buildings/part.yaml'),
+ '/buildings/defs.yaml': require('!!raw-loader!@site/docs/_schema/buildings/defs.yaml'),
'/places/place.yaml': require('!!raw-loader!@site/docs/_schema/places/place.yaml'),
diff --git a/examples/buildings/building-part-basic.yaml b/examples/buildings/building-part-basic.yaml
new file mode 100644
index 00000000..664784ba
--- /dev/null
+++ b/examples/buildings/building-part-basic.yaml
@@ -0,0 +1,34 @@
+---
+id: overture:buildings:part:1234
+type: Feature
+geometry:
+ type: Polygon
+ coordinates: [[
+ [-77.036873, 38.897804],
+ [-77.036873, 38.897559],
+ [-77.036260, 38.897559],
+ [-77.036260, 38.897804],
+ [-77.036873, 38.897804]
+ ]]
+properties:
+ # Custom user properties.
+ extFoo: I am a customer user property.
+ extBar: Me too!
+ # Overture properties
+ theme: buildings
+ type: part
+ version: 1
+ level: 1
+ updateTime: "2023-06-06T10:30:00-08:00"
+ buildingId: abc123
+ height: 21.34
+ numFloors: 4
+ minHeight: 15.0
+ roofShape: dome
+ roofOrientation: across
+ roofDirection: 23.4
+ sources:
+ - property: ""
+ dataset: microsoftMLBuildings
+ - property: /properties/height
+ dataset: metaLidarExtractions
diff --git a/examples/buildings/osm/outline.yaml b/examples/buildings/osm/outline.yaml
new file mode 100644
index 00000000..a497dbb4
--- /dev/null
+++ b/examples/buildings/osm/outline.yaml
@@ -0,0 +1,33 @@
+# https://www.openstreetmap.org/way/30407741
+id: overture:buildings:building:1234
+type: Feature
+geometry:
+ type: Polygon
+ coordinates: [[
+ [-117.1710888, 32.7238481],
+ [-117.1711025, 32.7239038],
+ [-117.1711923, 32.7238882],
+ [-117.1712198, 32.724],
+ [-117.1712713, 32.7242091],
+ [-117.1706665, 32.7243145],
+ [-117.1705738, 32.7239379],
+ [-117.1707783, 32.7239022],
+ [-117.1710888, 32.7238481]
+ ]]
+properties:
+ extFoo: I am a customer user property.
+ extBar: Me too!
+ theme: buildings
+ type: building
+ version: 1
+ level: 1
+ updateTime: '2023-06-06T10:30:00-08:00'
+ names:
+ common:
+ - value: Valentina by Alta
+ language: local
+ numFloors: 8
+ class: commercial
+ sources:
+ - property: ''
+ dataset: OpenStreetMap
diff --git a/examples/buildings/osm/part1.yaml b/examples/buildings/osm/part1.yaml
new file mode 100644
index 00000000..a835667a
--- /dev/null
+++ b/examples/buildings/osm/part1.yaml
@@ -0,0 +1,30 @@
+id: overture:buildings:part:100
+type: Feature
+geometry:
+ type: Polygon
+ coordinates: [[
+ [-117.1707971, 32.7240658],
+ [-117.1712198, 32.724],
+ [-117.1712713, 32.7242091],
+ [-117.1706665, 32.7243145],
+ [-117.1705738, 32.7239379],
+ [-117.1707783, 32.7239022],
+ [-117.1707949, 32.7240226],
+ [-117.1707279, 32.7240319],
+ [-117.1707635, 32.7241786],
+ [-117.1708208, 32.7241677],
+ [-117.1707971, 32.7240658]
+ ]]
+properties:
+ buildingId: '1234'
+ extFoo: I am a customer user property.
+ extBar: Me too!
+ theme: buildings
+ type: part
+ version: 1
+ level: 1
+ updateTime: '2023-06-06T10:30:00-08:00'
+ numFloors: 8
+ sources:
+ - property: ''
+ dataset: OpenStreetMap
diff --git a/examples/buildings/osm/part2.yaml b/examples/buildings/osm/part2.yaml
new file mode 100644
index 00000000..a43e54d0
--- /dev/null
+++ b/examples/buildings/osm/part2.yaml
@@ -0,0 +1,30 @@
+id: overture:buildings:part:101
+type: Feature
+geometry:
+ type: Polygon
+ coordinates: [[
+ [-117.1712198, 32.724],
+ [-117.1711923, 32.7238882],
+ [-117.1711025, 32.7239038],
+ [-117.1710888, 32.7238481],
+ [-117.1707783, 32.7239022],
+ [-117.1707949, 32.7240226],
+ [-117.1707279, 32.7240319],
+ [-117.1707635, 32.7241786],
+ [-117.1708208, 32.7241677],
+ [-117.1707971, 32.7240658],
+ [-117.1712198, 32.724]
+ ]]
+properties:
+ buildingId: '1234'
+ extFoo: I am a customer user property.
+ extBar: Me too!
+ theme: buildings
+ type: part
+ version: 1
+ level: 1
+ updateTime: '2023-06-06T10:30:00-08:00'
+ numFloors: 3
+ sources:
+ - property: ''
+ dataset: OpenStreetMap
diff --git a/schema/buildings/building.yaml b/schema/buildings/building.yaml
index d300c716..25a5b5d0 100644
--- a/schema/buildings/building.yaml
+++ b/schema/buildings/building.yaml
@@ -17,18 +17,11 @@ properties:
properties:
unevaluatedProperties: false
allOf:
+ - "$ref": ./defs.yaml#/shapeContainer
- "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer
- "$ref": ../defs.yaml#/$defs/propertyContainers/levelContainer
properties:
names: { "$ref": "../defs.yaml#/$defs/propertyDefinitions/names" }
- height:
- description: Height of the building in meters
- type: number
- exclusiveMinimum: 0
- numFloors:
- description: Number of above-ground floors of the building
- type: integer
- exclusiveMinimum: 0
class:
description: >-
A broad category of the building type / purpose. When the current use of the building does not match the built purpose, the class should
@@ -48,3 +41,6 @@ properties:
- medical
- entertainment
- military
+ hasParts:
+ description: Flag indicating whether the building has parts
+ type: boolean
diff --git a/schema/buildings/defs.yaml b/schema/buildings/defs.yaml
new file mode 100644
index 00000000..0a0c732c
--- /dev/null
+++ b/schema/buildings/defs.yaml
@@ -0,0 +1,95 @@
+---
+"$schema": https://json-schema.org/draft/2020-12/schema
+title: Overture Maps Shared Building Properties
+description: Common schema definitions shared by building footprints and building parts
+shapeContainer:
+ title: Shape
+ description: Properties of the buildings shape, such as height or roof type.
+ properties:
+ height:
+ description: >-
+ Height of the building or part in meters. The height is the distance from the lowest point to the highest point.
+ type: number
+ exclusiveMinimum: 0
+ numFloors:
+ description: >-
+ Number of above-ground floors of the building or part.
+ type: integer
+ exclusiveMinimum: 0
+ minHeight:
+ description: >-
+ The height of the bottom part of building in meters. Used if a building or part of building starts above the ground level.
+ type: number
+ facadeColor:
+ description: >-
+ The color (name or color triplet) of the facade of a building or building part in hexadecimal
+ type: string
+ facadeMaterial:
+ description: >-
+ The outer surface material of building facade.
+ type: string
+ enum:
+ - brick
+ - cement_block
+ - concrete
+ - glass
+ - metal
+ - mud
+ - plaster
+ - plastic
+ - stone
+ - wood
+ - other
+ roofMaterial:
+ description: >-
+ The outermost material of the roof.
+ type: string
+ enum:
+ - concrete
+ - copper
+ - eternit
+ - glass
+ - grass
+ - metal
+ - plastic
+ - roof_tiles
+ - slate
+ - tar_paper
+ - thatch
+ - wood
+ - other
+ roofShape:
+ description: The shape of the roof
+ type: string
+ enum:
+ - dome
+ - flat
+ - gable
+ - gambrel
+ - half-hip
+ - hip
+ - mansard
+ - onion
+ - pyramid
+ - round
+ - spherical
+ - other
+ roofDirection:
+ description: >-
+ Bearing of the roof ridge line.
+ type: number
+ exclusiveMinimum: 0
+ exclusiveMaximum: 360
+ roofOrientation:
+ description: >-
+ Orientation of the roof shape relative to the footprint shape. Either "along" or "across".
+ type: string
+ enum:
+ - across
+ - along
+ roofColor:
+ description: The color (name or color triplet) of the roof of a building or building part in hexadecimal
+ type: string
+ eaveHeight:
+ description: The height of the building eave in meters
+ type: number
diff --git a/schema/buildings/part.yaml b/schema/buildings/part.yaml
new file mode 100644
index 00000000..2e8264b7
--- /dev/null
+++ b/schema/buildings/part.yaml
@@ -0,0 +1,26 @@
+---
+"$schema": https://json-schema.org/draft/2020-12/schema
+title: Building Part Schema
+description: >-
+ A single building part. Parts describe their shape and color and other properties. Each
+ building part must contain the building with which it is associated.
+type: object
+properties:
+ geometry:
+ description: >-
+ The part's geometry. It must be a polygon or multipolygon.
+ unevaluatedProperties: false
+ oneOf:
+ - "$ref": https://geojson.org/schema/Polygon.json
+ - "$ref": https://geojson.org/schema/MultiPolygon.json
+ properties:
+ unevaluatedProperties: false
+ allOf:
+ - "$ref": ./defs.yaml#/shapeContainer
+ - "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer
+ - "$ref": ../defs.yaml#/$defs/propertyContainers/levelContainer
+ required: [buildingId]
+ properties:
+ buildingId:
+ description: The building ID to which this part belongs
+ type: string
diff --git a/schema/defs.yaml b/schema/defs.yaml
index ac66c7e9..12a90182 100644
--- a/schema/defs.yaml
+++ b/schema/defs.yaml
@@ -23,6 +23,7 @@ description: Common schema definitions shared by all themes
- land
- landUse
- locality
+ - part
- place
- segment
- water
diff --git a/schema/schema.yaml b/schema/schema.yaml
index e1c83b17..eecc04e2 100644
--- a/schema/schema.yaml
+++ b/schema/schema.yaml
@@ -34,6 +34,14 @@ oneOf:
type: { enum: [building] }
then: { "$ref": buildings/building.yaml }
else: { propertyNames: false }
+ - if:
+ properties:
+ properties:
+ properties:
+ theme: { enum: [buildings] }
+ type: { enum: [part] }
+ then: { "$ref": buildings/part.yaml }
+ else: { propertyNames: false }
- if:
properties:
properties: