출처: thinkmoult.com/ifc-coordinate-reference-systems-and-revit.html
BIM의 기본 개념 중 하나는 정확한 좌표를 얻는 것입니다. 나는 현재 IFC 4 사양에서 내가 해석하는 내용과 이것이 현재 Revit에서 어떻게 작동하는지 설명하려고 시도했습니다.
One of the fundamental concepts of BIM is getting coordinates correct. I’ve attempted to explain what I interpret from the current IFC 4 specification, as well as how this currently works in Revit.
Revit에는 내부 원점, 조사 점 및 프로젝트 기준점의 세 가지 참조 점이 있습니다. 프로젝트 기준점은 true north set에 대한 각도를 가질 수 있습니다. IFC로 내보낼 때 IfcProject 및 IfcSite가 작성됩니다. 두 요소 모두 좌표와 데이터가 있습니다. 그러나 이 좌표가 정확합니까? 완전합니까? 다른 소프트웨어에서도 안정적으로 사용할 수 있습니까? 조사해 보겠습니다.
Revit has three reference points for coordinates: the internal origin, a survey point, and a project base point. The project base point may have an angle to true north set. When you export to IFC, an IfcProject and IfcSite is created. Both elements have coordinates and data. However, are these coordinates correct? Are they complete? And can we use them reliably in other software? Let’s investigate.
IfcProject에서 정의한 좌표계
- 프로젝트 좌표계 the project coordinate system
- 좌표 공간 차원 the coordinate space dimension
- 기하학적 표현 내에서 사용되는 정밀도 the precision used within the geometric representations
- 선택적으로 진북의 표시 optionally the indication of the true north
- 선택적으로 프로젝트 좌표계와 지리 공간 좌표 참조 시스템 간의 지도 변환 optionally the map conversion between the project coordinate system and the geospatial coordinate reference system
이 정보는 IfcProject의 RepresentationContexts 관계를 사용하여 제공됩니다. 이 관계에는 하나 이상의 IfcGeometricRepresentationContext 요소가 포함됩니다. 각각은 일반적으로 3D 모델을 표시하기 위해 CoordinateSpaceDimension이 3이고 Precision 속성은 모델 정밀도를 표시합니다.
This information is provided using the RepresentationContexts relationship of the IfcProject. This relationship will contain one or more IfcGeometricRepresentationContext elements. Each will typically have a CoordinateSpaceDimension of 3, to show a 3D model, and the Precision attribute shows the model precision.
실제 프로젝트 좌표계는 HasCoordinateOperation 관계로 정의됩니다. 이것은 모든 종류의 유용한 속성과 함께 IfcMapConversion 요소를 보유합니다.
The actual project coordinate system is defined by the HasCoordinateOperation relationship. This holds an IfcMapConversion element, with all sorts of useful attributes.
IfcProject의 IfcGeometricRepresentationContext의 IfcMapConversion 요소는 필요한 모든 CRS(좌표계) 변환 정보를 보유합니다. 그러나 이 MapConversion의 값은 위에서 만든 것만큼 간단하지 않습니다. 단순히 평면축의 오프셋 및 회전 문제가 아닙니다. 실제로 Helmert 변환을 수행하는데 필요한 모든 매개 변수가 포함되어 있습니다. 이 변환은 모든 로컬 프로젝트 좌표를 전역적으로 배치된 좌표계에 수학적으로 매핑합니다. 이러한 변환 매개 변수를 올바르게 계산하려면 로컬 좌표에 여러 측량 점 (최소 2 개)과 대상 CRS의 해당점이 필요합니다. 조사되는 포인트가 많을수록 IfcMapConversion이 더 정확해집니다.
IfcMapConversion element of the IfcProject’s IfcGeometricRepresentationContext holds all of the CRS conversion information that we require. However, the values for this MapConversion aren’t exactly as straightforward as its made out above. It isn’t simply a matter of an offset and rotation on a planar axis. It actually contains all of the parameters required to perform a Helmert transformation. This transformation mathematically maps all local project coordinates to a globally positioned coordinate system. To calculate these transformation parameters properly, it requires multiple surveyed points (a minimum of two) in your local coordinates, as well as their equivalents in the target CRS. The more points that are surveyed, the more accurate this IfcMapConversion will become.
WorldCoordinateSystem 속성
IfcProject의 IfcGeometricRepresentationContext에는 WorldCoordinateSystem 속성도 있습니다. 일반적으로 이것은 (0, 0, 0)으로 설정되며 가상 세계의 원점을 나타냅니다. 즉, 프로젝트의 모든 요소는 일반적으로 IfcSite까지 상위의 로컬 상대 배치를 상속하지만 어딘가에서는 절대 좌표로 끝나야합니다. 이 WorldCoordinateSystem은 다른 어떤 것과도 관련이없는 최종 절대 좌표입니다. 따라서 원하는 경우 프로젝트의 모든 것을 오프셋하는 데 사용할 수 있습니다. IfcMapConversion은 가상 세계를 실제 세계로 변환하는 데 사용됩니다.
The IfcGeometricRepresentationContext of the IfcProject also has a WorldCoordinateSystem attribute. Usually, this will be set to (0, 0, 0), and represents the origin of the virtual world. In other words, any element in a project usually inherit the local relative placement of its parent, all the way up to IfcSite, but somewhere, it needs to end in an absolute coordinate. This WorldCoordinateSystem is the final absolute coordinate that is not relative to anything else. It can therefore be used to offset everything in your project, should you want to. The IfcMapConversion we just described, will then be used to convert our virtual world into the real world.
좌표계 상속 Coordinate system inheritance
IfcSite는 IfcProject에 공간적으로 포함됩니다. 그러나 공간적 억제는 좌표가 상속되는 방식을 결정하는 요소가 아닙니다. 대신 IfcSite에는 ObjectPlacement 및 Representation 속성이 있습니다. 이것들은 주의를 기울여야 할 중요한 속성입니다.
The IfcSite is spatially contained in the IfcProject. However, the spatial containment is not the determining factor for how coordinates are inherited. Instead, the IfcSite has an ObjectPlacement and a Representation attribute. These are the important attributes to pay attention to.
ObjectPlacement 속성은 다른 개체를 기준으로 IfcSite 요소를 배치합니다. 아래에서 다른 위치에 대해 논의 할 것이지만, 좌표의 상대적 오프셋만을 다룬다고해도 충분합니다.
The ObjectPlacement attribute positions the IfcSite element relative to other objects. We will discuss about different placements below, but suffice to say that it merely deals with relative offsets of coordinates.
그러나 Representation 속성은 IfcProject 레벨에서 정의 된 컨텍스트 목록에서 선택된 IfcRepresentationContext를 포함합니다. IfcSite가 IfcProject 레벨에서 정의 된 특정 WorldCoordinateSystem 및 MapConversion 속성을 상속 할 수 있도록하는 것이 IfcRepresentationContext의 특정 선택입니다.
The Representation attribute, however, contains an IfcRepresentationContext chosen from the list of contexts defined at the IfcProject level. It is this particular selection of the IfcRepresentationContext that allows the IfcSite to inherit a particular WorldCoordinateSystem and MapConversion attribute defined at the IfcProject level.
좌표 변환의 상속은 공간적 포함으로 인해 수행되지 않고 대신 IfcRepresentationContext의 선택으로 인해 수행된다는 점을 강조하고 싶습니다. 이를 통해 다른 IfcSite 요소가 다른 IfcRepresentationContext를 가질 수 있으므로 다른 MapConversion을 가질 수 있습니다. 이것은 작은 마을이나 지리적으로 큰 프로젝트에서 작업하는 경우 유용합니다. 사이트마다 다른 Helmert 변환이 필요할 수 있기 때문입니다. 즉, IfcMapConversion이 IfcProject 대신 IfcSite 수준에서 정의되도록 이동할 수 있다는 이야기를 들었습니다.
I would like to emphasize that the inheritance of coordinate transformation is not done due to spatial containment, but instead due to the selection of IfcRepresentationContext. This allows different IfcSite elements to have a different IfcRepresentationContext, and therefore have a different MapConversion. This is useful if you are working on a small town or any geographically large projects, as different sites will likely require different Helmert transformations. That said, I have heard talk that the IfcMapConversion could be moved to be defined at the IfcSite level, instead of the IfcProject.
실제로 표현이있는 모든 IFC 제품은 자체 컨텍스트를 선택할 수 있습니다. 즉, IfcWall은 하나의 맵 변환을 가질 수 있고 다른 맵 변환이있는 다른 IFC 요소에 대한 ObjectPlacement를 가질 수 있습니다. 기술적으로는 가능하지만, 이는 나쁜 습관이며 노련한 GIS 전문가는 유용하기보다는 예술적으로 되기를 원하지 않는 한, 한 맵에서 다른 CRS(좌표계)를 혼합하지 말라고 말할 것입니다.
In fact, any IFC product that has a representation can select its own context. This means that an IfcWall can have one map conversion, and have an ObjectPlacement to another IFC element which has a different map conversion. Although technically possible, it is bad practice and seasoned GIS professionals will tell you to never mix different CRSes on one map unless you want to be more artistic than useful.
IfcSite에서 정의한 좌표계
일반 좌표 외에도 IfcSite는 RefLatitude, RefLongitutde 및 RefElevation 속성을 제공합니다. 접두사 "Ref"에서 알 수 있듯이 이것은 기준점의 위도와 경도입니다. 공급 업체가 IFC2X3와 IFC4간에 쉽게 마이그레이션 할 수있는 방법으로 도입되었습니다. IFC2X3에는지도 변환 개념이 존재하지 않았기 때문입니다. IFC4의 경우 실제로 데이터 중복입니다. IfcMapConversion과 IfcSite에 제공된 데이터 사이에 불일치가있는 경우 IfcMapConversion이 우선합니다.
In addition to ordinary coordinates, the IfcSite provides RefLatitude, RefLongitutde, and RefElevation attributes. As the prefix “Ref” suggests, this is the latitude and longitutde for the reference point. It was introduced as a way for vendors to easily migrate between IFC2X3 and IFC4. This is because the concept of map conversions did not exist in IFC2X3. In the case of IFC4, it is in fact a duplication of data. If there is a discrepancy between the IfcMapConversion and the data provided in IfcSite, the IfcMapConversion takes priority.
이러한 RefLatitude 및 RefLongitude 값은도, 분, 초 및 선택적 백만 분의 1 초를 나타 내기 위해 마침표로 구분 된 정수로 기록됩니다. 서쪽 및 남쪽 위치는 음수이고 동쪽 및 북쪽 위치는 양수입니다.
Note that these RefLatitude and RefLongitude values are recorded in integers that are separated by a full stop to represent degrees, minutes, seconds, and an optional millionths of a second. West and south locations are negative, and east and north locations are positive.
실제 프로젝트에서 프로젝트는 여러 IfcSite 객체를 포함 할 수 있습니다. 각 IfcSite에는 예를 들어 지형을 포함 할 수있는 표현이 있습니다. 대부분의 프로젝트에는 토지의 합법적 인 구획을 나타내는 지적 경계와 같은 부지 경계가 있습니다. 따라서 IfcSite의 ObjectPlacement는 측량 된 지점 인 사이트 경계의 모서리가 될 수 있습니다.
In a real project, a project may contain multiple IfcSite objects. Each IfcSite has a Representation, which may include terrain, for example. For most projects, there is a site boundary, such as a cadastral boundary which denotes the legal plot of land. The ObjectPlacement of the IfcSite is therefore likely to be a corner of the site boundary which is a point that has been surveyed.
IfcBuilding에서 정의한 좌표계
IfcBuilding은 건물의 표현을 포함합니다. 또한 IfcSite에 상대적인 IfcObjectPlacement도 포함됩니다. 이렇게하면 건물이 사이트 모델에 배치됩니다. 이 배치의 회전은 또한 건물 북쪽의 프로젝트를 설정합니다. 건물에 여러 개의 윙이있는 경우 각 윙의 북쪽에있는 개별 프로젝트를 정의 할 수도 있습니다.
The IfcBuilding contains a Representation of the building. It also contains an IfcObjectPlacement, which is relative to the IfcSite. This would place your building on your site model. The rotation of this placement also sets out the project north of the building. If your building has multiple wings, it may also define the individual project norths of each wing.
IfcBuilding에는 추가로 두 가지 속성이 있습니다:
The IfcBuilding additionally contains two attributes:
ElevationOfRefHeight : 건물에 한 걸음 들어가면 마감 바닥 레벨이 건물의 내부 참조 높이 +0.00으로 표시됩니다. 이 속성은 해발 고도의 절대 값 측면에서 "+0.00 기준 높이"를 기록합니다.
ElevationOfTerrain : 건물 주변을 둘러싸고있는 지형의 해발 고도의 절대 값 높이입니다. 지형이 기울어지면 가장 낮은 지점으로 간주됩니다.
IfcSite의 기준점 값과 마찬가지로 이것도 데이터의 중복입니다. 명시 적으로 언급되어 있지는 않지만 불일치가있을 경우 IfcMapConversion에서 파생 된 좌표가 우선합니다.
ElevationOfRefHeight: as one steps into your building, the finish floor level will be seen as the building’s internal reference height of +0.00. This attribute will record this “+0.00 reference height” in terms of the absolute values of elevation above sea level.
ElevationOfTerrain: this is the height in absolute values of elevation above sea level of the terrain immediately surrounding the perimeter of the building. If the terrain slopes, it is taken to be the lowest point.
Just like the reference point values in IfcSite, these are also duplications of data. It is not explicitly mentioned, but I believe that should there be a discrepancy, the derived coordinate from the IfcMapConversion takes priority.
ElevationOfTerrain은 참조 값과 별도로 Qto_BuildingBaseQuantities에 기록 된 건물의 EavesHeight 및 Height (총 높이)를 측정하기위한 기준도 제공합니다.
The ElevationOfTerrain, apart from being a reference value, also provides a datum to measure the EavesHeight and the Height (total height) of the building which is recorded in the Qto_BuildingBaseQuantities.
절대 좌표 Absolute coordinates
개체에 IfcObjectPlacement가있는 경우 일반적으로 PlacementRelTo가있는 IfcLocalPlacement를 사용하므로 상위 위치를 상속합니다. PlacementRelTo를 생략하면 더 이상 상위 좌표를 상속하지 않고 결국 절대 좌표가됩니다. 절대 좌표는 IfcProject의 WorldCoordinateSystem에 대해서만 상대적으로 정의됩니다.
이에 대한 일반적인 예는 IfcProject의 직계 자식 인 IfcSite 요소입니다. 유일한 상위 좌표는 WorldCoordinateSystem이므로 절대 배치라고합니다.
또한 IfcObjectPlacement를 모두 생략 할 수 있으며 따라서 IfcProject의 WorldCoordinateSystem과 동일한 절대 배치로 취급됩니다.
IfcObjectPlacement를 생략하면 IfcBuildingStorey, IfcBuilding 및 IfcSite가 모두 WorldCoordinateSystem에 있다고 빠르고 쉽게 말할 수 있습니다. 이 동작은 일부 상황에서 Revit과 같은 일부 소프트웨어에서 언급되었습니다.
If your object has an IfcObjectPlacement, it usually uses an IfcLocalPlacement which has a PlacementRelTo, thus inheriting the parent’s placement. If you omit the PlacementRelTo, it does not inherit any more parent coordinates, and ends up being an absolute coordinate. An absolute coordinate is defined as only relative to the WorldCoordinateSystem of the IfcProject.
A common example for this is the IfcSite element which is the immediate child of the IfcProject. Because its only parent coordinate is the WorldCoordinateSystem, it is known as an absolute placement.
You can also omit the IfcObjectPlacement altogether, and it will therefore also be treated as an absolute placement which is equal to the WorldCoordinateSystem of the IfcProject.
Omission of the IfcObjectPlacement is a quick and easy way to say that your IfcBuildingStorey, IfcBuilding, and IfcSite, are all at the WorldCoordinateSystem. This behaviour has been noted in some software, such as Revit in some circumstances.
좌표계와 IfcGrid
그리드는 관례에 따라 (즉, IFC 사양에 의해 적용되지 않는 설명) 컨테이너의 로컬 배치를 기준으로 배치됩니다. 그리드는 IfcSite, IfcBuilding 또는 IfcBuildingStorey에 포함될 수 있습니다. 상대 및 절대 배치에 대한 대안으로 좌표를 그리드 시스템으로 제한하여 지정할 수도 있습니다. 이것은 IfcObjectPlacement에 IfcGridPlacement를 사용하는 것만 큼 간단합니다.
IfcGridPlacement를 사용하면 두 그리드 선의 교차점 또는 IfcVirtualGridIntersection 및 방향을 사용하여 객체의 배치를 지정할 수 있습니다. 자세한 내용은 여기에서 설명하지 않지만 그리드를 사용해도 사이트 좌표의 기본 개념이 변경되지는 않습니다. 이러한 방식으로 배치 된 모든 객체는 IfcMapConversion을 사용하여 변환 할 수있는 로컬 (X, Y, Z)로 해석됩니다.
따라서 IfcSite에 공간적으로 포함 된 IfcGrid를 가질 수 있습니다. 그러면 IfcBuilding은 그리드와 정렬되는 배치를 가질 수 있습니다. 이것은 사이트에 배치 된 그리드를 기준으로 건물을 배치하는 것은 직관적으로 이해되지만, 격리 트리와 상대 배치 트리가 동일해야하는 ISG 계약을 위반합니다.
Coordinate systems created by Revit
Revit은 예상대로 IfcProject를 제공하며 여기에는 하나의 IfcGeometricRepresentationContext가 있습니다. 불행히도 IfcMapConversion이 제공되지 않기 때문에 우리의 행운은 여기서 끝납니다. 따라서 CRS, 데이터 및 투영 등을 기록 할 수있는 위치에 대해 이야기 한 모든 훌륭한 자료를 사용할 수 없습니다.
Revit은 건물 또는 대지가 무엇인지 알지 못하므로 여러 건물, 건물 부분, 대지 또는 하위 대지를 가질 수 없습니다. 모든 파일은 단일 사이트 및 단일 건물 내에서 모든 콘텐츠를 자동으로 생성하고 포함합니다.
이 정보를 아는 것은 매우 중요합니다. Revit은 CRS 변환을 지정하지 않기 때문에 많은 사람들이 로컬 CRS Easting 및 Northing 좌표를 프로젝트 기준점과 조사 점에 배치합니다. 이러한 값의 대부분은 크기가 매우 크기 때문에 IfcSite 로컬 배치도 공간에서 매우 멀리 떨어져 있습니다.
이 원거리 사이트 배치는 사이트에 공간적으로 포함 된 모든 단일 객체에 상속됩니다. 그런 다음 IFC를 구문 분석하여 지오메트리를 추출하는 모든 프로그램이이를 처리해야하며 이러한 큰 변환 크기를 처리 할 수 없다는 것은 3D 산업에서 잘 알려진 문제입니다. 결과적으로 지오메트리는 불필요하게 "파손"되고 가져 오기를 신뢰할 수 없습니다. CRS 좌표가있는 Blender로 IFC를 가져 오거나 IFC를 다시 Revit으로 가져 오려고 시도하여 직접이를 경험할 수 있습니다. 자체 생성을 처리 할 수 없습니다.
해결 방법으로 IFC를 가져 오기 전에 텍스트 편집기에서 IfcSite의 IfcLocalPlacement를 간단히 수정할 수 있습니다. 가져온 후 애플리케이션의 기본 GIS 기능을 사용하여 원점이 대상 CRS로 변환되는 방식을 지정할 수 있습니다. 위의 IfcSite 좌표의 관계를 알면 원점을 올바르게 지정하는 데 도움이됩니다. 원점이 프로젝트 기준점과 일치하도록 값을 재설정하는 경향이 있습니다. 간단한 시나리오에서 이것은 (0, 0, 0)이지만 때로는 위의 공식을 사용하여 계산할 수있는 추가 오프셋이있을 수 있습니다. 더 간단한 대안은 IfcSite와 Revit의 프로젝트 기준점 간의 좌표 차이를 찾아 새로운 IfcSite 로컬 배치 위치로 만드는 것입니다.
이 기사에서는 BIM 및 Revit의 모든 좌표 관련 개념을 명확히해야하며 이제 Revit 이외의 다른 소프트웨어에서 IFC를 좀 더 안정적으로 사용할 수 있기를 바랍니다.
'일하기 > 공부하기' 카테고리의 다른 글
BIM(IFC) Viewer in Web (0) | 2021.03.12 |
---|---|
오픈 소스 네이티브 OpenBIM 저작 도구 및 WebGL IFC Viewers (0) | 2021.01.13 |
IFC WebGL Viewer (0) | 2021.01.13 |
Chevrotain - Parser Building Toolkit for JavaScript (0) | 2021.01.13 |
IFC 파일 포맷 (0) | 2021.01.13 |
댓글