Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial commit for the new CivilSpatial schema. #392

Merged
merged 14 commits into from
Jan 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ snapshotInformation.json
/Domains/2-DisciplinePhysical/Civil/CivilPhysical/ @iTwin/bis-civil-core
/Domains/2-DisciplinePhysical/Civil/LinearlyLocatedAttributions/RoadAttributions/ @iTwin/bis-civil-roads
/Domains/2-DisciplinePhysical/Civil/SpatialComposition/BridgeSpatial/ @iTwin/bis-civil-bridge
/Domains/2-DisciplinePhysical/Civil/SpatialComposition/CivilSpatial/ @iTwin/bis-civil-core
/Domains/2-DisciplinePhysical/Civil/SpatialComposition/RoadSpatial/ @iTwin/bis-civil-roads
/Domains/2-DisciplinePhysical/Civil/RoadRailAlignment/ @iTwin/bis-civil-core
/Domains/2-DisciplinePhysical/Civil/RoadRailUnits/ @iTwin/bis-civil-core
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ==================================================================================
| * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
| * See LICENSE.md in the project root for license terms and full copyright notice.
======================================================================================= -->
<ECSchema schemaName="CivilSpatial" alias="cvsp" version="01.00.00" description="Schema modeling the spatial breakdown of concepts common across Civil domains such as Road, Rail or Site." xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
<ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
<ECSchemaReference name="BisCustomAttributes" version="01.00.00" alias="bisCA"/>
<ECSchemaReference name="BisCore" version="01.00.13" alias="bis"/>
<ECSchemaReference name="LinearReferencing" version="02.00.03" alias="lr"/>
<ECSchemaReference name="SpatialComposition" version="01.00.01" alias="spcomp"/>
<ECSchemaReference name="RoadRailUnits" version="01.00.02" alias="rru"/>

<ECCustomAttributes>
<ProductionStatus xmlns="CoreCustomAttributes.01.00.00">
<SupportedUse>NotForProduction</SupportedUse>
</ProductionStatus>
<SchemaLayerInfo xmlns="BisCustomAttributes.01.00.00">
<Value>DisciplinePhysical</Value>
</SchemaLayerInfo>
</ECCustomAttributes>

<ECEntityClass typeName="Site" modifier="None" description="The spatial location of a geographic site on which Facilities are situated. Its geometry is typically provided as a 2D/Plan-projected boundary.">
ColinKerr marked this conversation as resolved.
Show resolved Hide resolved
<BaseClass>spcomp:Site</BaseClass>
</ECEntityClass>
diegoalexdiaz marked this conversation as resolved.
Show resolved Hide resolved

<ECEntityClass typeName="SiteType" modifier="None" displayLabel="Site Type" description="Further specializes a particular subclass of a Site by associating a custom Type that can be defined by users.">
<BaseClass>spcomp:SiteType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="SiteIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:Site is an instance of the defined cvsp:SiteType.">
<BaseClass>spcomp:SiteIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="Site" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="SiteType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="Space" displayLabel="Space" modifier="Abstract" description="A spcomp:Space modeling an Area bounded either physically or virtually that provides for some function within a Site, Road or Rail.">
<BaseClass>spcomp:Space</BaseClass>
<ECProperty propertyName="FootprintArea" displayLabel="Footprint Area" typeName="double" readOnly="true" kindOfQuantity="rru:AREA" />
<ECProperty propertyName="SlopedTopArea" displayLabel="Sloped Top Area" typeName="double" readOnly="true" kindOfQuantity="rru:AREA" />
</ECEntityClass>

<ECEntityClass typeName="ParkingArea" modifier="None" description="A cvsp:Space whose are is dedicated for use as a parking spot for vehicles, including access, such as a parking aisle.">
<BaseClass>Space</BaseClass>
</ECEntityClass>

<ECEntityClass typeName="ParkingAreaType" modifier="None" displayLabel="Parking Area Type" description="Defines a shared set of properties whose values vary per-type of cvsp:ParkingArea rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="ParkingAreaIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:ParkingArea is an instance of the defined cvsp:ParkingAreaType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="ParkingArea" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="ParkingAreaType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="ParkingIsland" modifier="None" displayLabel="Parking Island" description="A cvsp:Space modeling a subsidiary area raised or marked on a cvsp:ParkingArea, shaped and placed so as to direct traffic movement and/or provide refuge for pedestrians.">
<BaseClass>Space</BaseClass>
</ECEntityClass>

<ECEntityClass typeName="ParkingIslandType" modifier="None" displayLabel="Parking Island Type" description="Defines a shared set of properties whose values vary per-type of cvsp:ParkingIsland rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="IslandAreaIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:ParkingIsland is an instance of the defined cvsp:ParkingIslandType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="ParkingIsland" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="ParkingIslandType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="ParkingRow" modifier="None" displayLabel="Parking-Row" description="A cvsp:Space modeling a location that is designated for parking of one or more vehicles.">
<BaseClass>Space</BaseClass>
<ECProperty propertyName="ParkingSpaceCount" typeName="int" displayLabel="Parking-Space Count" description="Number of parking-spaces in this Parking-Row"/>
</ECEntityClass>

<ECEntityClass typeName="ParkingRowType" displayLabel="Parking-Row Type" description="Defines a shared set of properties whose values vary per-type of cvsp:ParkingRow rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="ParkingRowIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:ParkingRow is an instance of the defined cvsp:ParkingRowType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="ParkingRow" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="ParkingRowType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="Sidewalk" modifier="None" displayLabel="Sidewalk" description="A cvsp:Space modeling a footpath for pedestrians.">
<BaseClass>Space</BaseClass>
<BaseClass>lr:ILinearLocationElement</BaseClass>
</ECEntityClass>

<ECEntityClass typeName="SidewalkType" modifier="None" displayLabel="Sidewalk Type" description="Defines a shared set of properties whose values vary per-type of cvsp:Sidewalk rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="SidewalkIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:Sidewalk is an instance of the defined cvsp:SidewalkType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="Sidewalk" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="SidewalkType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="PondArea" displayLabel="Pond Area" modifier="None" description="A cvsp:Space modeling the Area of land reserved for the storage of water temporarily after a storm, or permanently for different purposes.">
<BaseClass>Space</BaseClass>
</ECEntityClass>

<ECEntityClass typeName="PondAreaType" displayLabel="Pond Area Type" modifier="None" description="Defines a shared set of properties whose values vary per-type of cvsp:PondArea rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="PondAreaIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific cvsp:PondArea is an instance of the defined cvsp:PondAreaType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
<Class class="PondArea" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
<Class class="PondAreaType"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="GenericArea" displayLabel="Generic Space" modifier="Sealed" description="A cvsp:Space modeling Site-Areas which cannot be further classified. More-specific cvsp:Space subclasses should be used wherever possible.">
<BaseClass>Space</BaseClass>
</ECEntityClass>

<ECEntityClass typeName="GenericAreaType" displayLabel="Generic Space Type" modifier="Sealed" description="Defines a shared set of properties whose values vary per-type of cvsp:GenericArea rather than per-instance.">
<BaseClass>spcomp:SpaceType</BaseClass>
</ECEntityClass>

<ECRelationshipClass typeName="GenericAreaIsOfType" strength="referencing" modifier="Sealed" description="A type-instance relation; one that indicates that the specific cvsp:GenericArea is an instance of the defined cvsp:GenericAreaType.">
<BaseClass>spcomp:SpaceIsOfType</BaseClass>
<Source multiplicity="(0..*)" roleLabel="is of" polymorphic="false">
<Class class="GenericArea" />
</Source>
<Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="false">
<Class class="GenericAreaType"/>
</Target>
</ECRelationshipClass>
</ECSchema>
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
noEditThisPage: true
remarksTarget: CivilSpatial.ecschema.md
---

# CivilSpatial

This schema contains the main classes to capture the Spatial Structure of Site projects.

NOTE: Currently under development. This schema should not be used for production workflows. Data created using this schema is not supported and may not be upgradable.

The following class diagram depicts the main classes in the CivilSpatial schema that extend the _Site_-related concepts from the `SpatialComposition` schema.

![Site classes](./media/Site-classes.png)

The following class diagram depicts the main classes in the CivilSpatial schema that extend the _Space_-related concepts from the `SpatialComposition` schema.

![Space classes](./media/Space-classes.png)

The following instance diagram depicts a simplified spatial hierarchy of a sample of a "Shopping Plaza", involving not only concepts defined in the `CivilSpatial` schema, but also the `BuildingSpatial` and `RoadSpatial` schemas - all of which are based on common rules and patterns defined in the `SpatialComposition` schema.

![Shopping Plaza](./media/CivilSpatial-instances.png)

## Entity Classes

### Site

`Site`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

### ParkingArea

`ParkingArea`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

Equivalent to [IfcSpace](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcSpace.htm) with a PredefinedType attribute set to [IfcSpaceTypeEnum.PARKING](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcSpaceTypeEnum.htm).

### ParkingIsland

Instances of `ParkingIsland` are typically aggregated by instances of `ParkingArea` by using the `spcomp:SpatialStructureElementAggregatesElements` relationship.

`ParkingIsland`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

### ParkingRow

The number of Parking-spaces modeled in a single instance of `ParkingRow` is captured by its `ParkingSpaceCount` property.

`ParkingRow`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

### PondArea

Uses of permanent `PondArea`s include: to manage stormwater runoff, for protection against flooding, for erosion control, and to serve as an artificial wetland and improve the water quality in adjacent bodies of water.

When needed, a `PondArea` may aggregate smaller areas within their boundary, modeled as instances of `GenericArea`.

`PondArea`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

### Sidewalk

A `Sidewalk` instance may be aggregated by a `RoadwayPlateau` when defined as part of a `rdsp:Road`, or may be defined parallel to other `spcomp:Facility` instances.

When defined as part of a `rdsp:Road`, a sidewalk may accommodate moderate changes in grade (elevation) and is normally separated from the vehicular section by a curb. There may be a central reserve between the sidewalk and traffic lanes.

`Sidewalk`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s and can be linearly located, typically along an *Alignment*. An instance of `Sidewalk` typically holds the `bis:PhysicalElement`s (e.g. *Course*s) comprising its *pavement* structure.

Equivalent to [IfcFacilityPart](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcFacilityPart.htm) with its PredefinedType attribute set to [IfcRoadPartTypeEnum.SIDEWALK](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcRoadPartTypeEnum.htm).

### GenericArea

`GenericArea`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s.

### SiteType

Instances of `SiteType` provide an additional classification that can be applied to `Site`s.

### ParkingAreaType

Instances of `ParkingAreaType` provide an additional classification that can be applied to `ParkingArea`s.

### ParkingIslandType

Instances of `ParkingIslandType` provide an additional classification that can be applied to `ParkingIsland`s.

### ParkingRowType

Instances of `ParkingRowType` provide an additional classification that can be applied to `ParkingRow`s.

### PondAreaType

Instances of `PondAreaType` provide an additional classification that can be applied to `PondArea`s.

### SidewalkType

Instances of `SidewalkType` provide an additional classification that can be applied to `Sidewalk`s.

### GenericAreaType

Instances of `GenericAreaType` provide an additional classification that can be applied to `GenericArea`s.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,6 @@
<BaseClass>RoadPart</BaseClass>
<BaseClass>lr:ILinearLocationElement</BaseClass>
</ECEntityClass>
<ECEntityClass typeName="Sidewalk" displayLabel="Sidewalk" description="A spcomp:FacilityPart modeling a footpath along the side of a road.">
<BaseClass>RoadPart</BaseClass>
<BaseClass>lr:ILinearLocationElement</BaseClass>
</ECEntityClass>
<ECEntityClass typeName="JunctionElement" modifier="Abstract" description="A spcomp:FacilityPart providing a base class for concepts modeling an at-grade junction where two or more roads meet or cross.">
<BaseClass>RoadPart</BaseClass>
</ECEntityClass>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,16 +85,6 @@ Instances of `Shoulder` are typically aggregated by an instance of `RoadwayPlate

Equivalent to [IfcFacilityPart](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcFacilityPart.htm) with its PredefinedType attribute set to [IfcRoadPartTypeEnum.SHOULDER](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcRoadPartTypeEnum.htm).

### Sidewalk

A sidewalk may accommodate moderate changes in grade (elevation) and is normally separated from the vehicular section by a curb. There may be a central reserve between the sidewalk and traffic lanes.

A `RoadwayPlateau` instance typically aggregates zero or more instances of `Sidewalk`.

`Sidewalk`s must be contained in `SpatialLocationModel`s or `PhysicalModel`s and can be linearly located, typically along an *Alignment*. An instance of `Sidewalk` typically holds the `bis:PhysicalElement`s (e.g. *Course*s) comprising its *pavement* structure.

Equivalent to [IfcFacilityPart](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcFacilityPart.htm) with its PredefinedType attribute set to [IfcRoadPartTypeEnum.SIDEWALK](https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcRoadPartTypeEnum.htm).

### JunctionElement

Only one instance of `Road` can aggregate an instance of `JunctionElement`. Other `Road`s meeting or crossing the same `JunctionElement` shall use the `RoadIncludesJunctions` relationship to indicate association with it.
Expand Down
14 changes: 14 additions & 0 deletions SchemaInventory.json
Original file line number Diff line number Diff line change
Expand Up @@ -5497,5 +5497,19 @@
"dynamic": "No",
"approved": "Yes"
}
],
"CivilSpatial": [
{
"name": "CivilSpatial",
"path": "Domains\\2-DisciplinePhysical\\Civil\\SpatialComposition\\CivilSpatial\\CivilSpatial.ecschema.xml",
"released": false,
"version": "01.00.00",
"comment": "Working Copy",
"sha1": "",
"author": "",
"approved": "No",
"date": "Unknown",
"dynamic": "No"
}
]
}
Loading