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 TypePolygon or MultiPolygon
Themebuildings
Typepart
+ + +## 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: