![]() |
<LandXML> | Transfer file |
||||||
![]() |
<Units><Metric> | Units (Metric) | ||||||
![]() |
<CoordinateSystem> | Coordinate and elevation system |
||||||
![]() |
<Start> | Base point |
||||||
![]() |
<Project> | Project | ||||||
![]() |
<Feature> | "IM_codings" extension type coding system |
||||||
![]() |
<Application> | Application |
||||||
![]() |
<Author> | Authors | ||||||
![]() |
<Surfaces> | Surface group |
||||||
![]() |
<Surface> | Surface |
||||||
![]() |
<SourceData> | Source Data |
||||||
![]() |
<Boundaries> | Boundary group |
||||||
![]() |
<Boundary> | Boundary |
||||||
![]() |
<PointList2D> | 2D point list | ||||||
![]() |
<Breaklines> | Breakline group |
||||||
![]() |
<Breakline> | Breakline |
||||||
![]() |
<PointList3D> | 3D point list | ||||||
![]() |
<Feature> | "IM_coding" extension type coding breakline |
||||||
![]() |
<DataPoints> | Source data points |
||||||
![]() |
<PntList3D> | 3D point list | ||||||
![]() |
<Feature> | "IM_coding" extension type coding data points |
||||||
![]() |
<Definition> | Surface description | ||||||
![]() |
<Pnts> | Vertices | ||||||
![]() |
<P> | Vertex |
||||||
![]() |
<Faces> | Faces |
||||||
![]() |
<F> | Face |
||||||
![]() |
<Feature> | "IM_soil" extension soil (layer) properties |
||||||
![]() |
<Feature> | "IM_coding" extension surface type coding |
||||||
![]() |
<Feature> | "IM_plan" extension plan information |
||||||
![]() |
<FeatureDictionary> | Extension definition dictionary |
The base data contains the data points and breaklines of the source data, as well as the triangulated representation of mesh surfaces. The surface description contains the points used to form the surface (as vertices of the triangles in TIN)). Breaklines are not used to form surfaces, but if transferred under <Surface> as source data they shall coincide with the triangulation defining the surface, i.e. each pair of consecutive breakline points given in 3D coordinates, must match the coordinates of two vertices of a triangle (exactly, within the numeric precision of the exchange file).
Surface meshes are used for terrain or ground layer models (top surface of each layer) as described in this section. They are also used for terrain (visible surface) or structural models of roads, streets, railways, waterways and area structures, as described in sections 3 - 7.
Surfaces and source data is described as surface groups <Surfaces>, which are made of individual <Surface>-elements. The name of every surface group and the name of each surface within the same group are unique, the attributes desc and state are optional, but may be required in certain use cases.
Attributes of the surface group <Surfaces>:
![]() |
desc | description | e.g. [terrain model] |
![]() |
name | optional name | e.g. [inframodel example] |
![]() |
state | state |
[abandoned] [destroyed] [existing] [proposed] |
![]() |
<Surfaces> | schema documentation |
Attributes of the <Surface> element:
![]() |
name | name, unique in surface group | e.g. [ground surface] |
![]() |
desc | description |
e.g. [contains triangle mesh, breaklines and data points] |
![]() |
OID | object ID number | individual identifier in the file, e.g. [15] |
![]() |
state | state |
[abandoned] [destroyed] [existing] [proposed] |
![]() |
<Surface> | schema documentation | |
![]() |
<Surfaces> | short example |
<LandXML xmlns="http://buildingsmart.fi/inframodel/404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:im="http://im.inframodel.fi" date="2020-02-14" time="19:30:47+05:00" version="1.2" language="Finnish" readOnly="false" xsi:schemaLocation="http://buildingsmart.fi/inframodel/404 /schema/4.0.4/inframodel.xsd http://buildingsmart.fi/im/404 /schema/4.0.4/im.xsd">
<!-- Units -->
<Units>
<Metric areaUnit="squareMeter" linearUnit="meter" volumeUnit="cubicMeter" temperatureUnit="celsius" pressureUnit="HPA" diameterUnit="meter" widthUnit="meter" heightUnit="meter" velocityUnit="kilometersPerHour" angularUnit="grads" directionUnit="grads" latLongAngularUnit="grads" elevationUnit="meter"/>
</Units>
<!-- Coordinate system -->
<CoordinateSystem desc="Vertical coordinate system: Maanmittauslaitos N60" epsgCode="4326" rotationAngle="0" verticalCoordinateSystemName="MML:N60"/>
<!-- Project -->
<Project name="inframodel example" desc="inframodel version 4.0.4 project example">
<!-- Project type coding systems -->
<Feature code="IM_codings" source="inframodel">
<Property label="terrainCoding" value="Infra"/>
<Property label="surfaceCoding" value="InfraBIM"/>
<Property label="infraCoding" value="InfraBIM"/>
</Feature>
</Project>
<!-- Application -->
<Application name="XML Spy" manufacturer="Altova" manufacturerURL="http://www.altova.com" version="2020" timeStamp="2020-02-14T17:21:05">
<!-- Author -->
<Author createdBy="Simo Suunnittelija" createdByEmail="simo.suunnittelija@yritys.com" company="Yritys" companyURL="http://www.yritys.com" timeStamp="2020-02-14T17:21:05"/>
</Application>
<!-- Surfaces -->
<Surfaces name="E1R3">
<!-- Surface -->
<Surface name="E1R3_yp" state="proposed">
<Definition surfType="TIN">
<Pnts>
<P id="1">6940692.035 26483234.351 100.736</P>
<P id="2">6940692.188 26483233.996 100.725</P>
<P id="3">6940692.288 26483233.766 100.717</P>
<P id="4">6940691.575 26483234.153 100.736</P>
<P id="5">6940691.729 26483233.797 100.724</P>
</Pnts>
<Faces>
<F>1 2 4</F>
<F>4 2 5</F>
<F>2 3 5</F>
</Faces>
</Definition>
<!-- Surface coding -->
<Feature code="IM_coding" source="inframodel">
<Property label="surfaceCoding" value="201000"/>
<Property label="surfaceCodingDesc" value="Ylin yhdistelmapinta"/>
</Feature>
</Surface>
<!-- Plan information -->
<Feature code="IM_plan" source="inframodel">
<Property label="planName" value="E1R3_Plan_B"/>
<Property label="planCode" value="12345-3210"/>
<Property label="planState" value="general_plan"/>
<Property label="planDesc" value="TIN surface example"/>
</Feature>
</Surfaces>
<!-- Feature Dictionary -->
<FeatureDictionary name="inframodel" version="4.0.4">
<DocFileRef name="Inframodel extensions" location="/inframodel/pages/extensions.html"/>
</FeatureDictionary>
</LandXML>
For the surface description the project is divided into surface groups <Surfaces> with optional "IM_plan" extension. If the project consists of sub-projects that have different rates of progress, the plan contents of the file are divided into sub-projects according to the same division. The plan information contains the planName, planCode, the planState and the plan description planDesc. The plan state is described according to a scheme agreed on by the parties of the project.
Plan information "IM_plan" <Feature>
![]() |
name | Optional name |
e.g. [2] | ||
![]() |
code | Mandatory feature code |
[IM_plan] | ||
![]() |
source | reference to source feature distionary by name |
[inframodel] | ||
plan attributes <Property> | |||||
![]() |
label | [planName] | plan name |
value | e.g. [Plan1] |
![]() |
label | [planCode] | plan code | value | e.g. [12345-321] |
![]() |
label | [planState] | plan state | value | Categories agreed on by parties of the projects, e.g. [zoning | preliminary plan | general plan | plan | construction plan | construction | maintenance | removal] |
![]() |
label | [planDesc] | description of the plan |
value | additional information, e.g. [Part 1] |
![]() |
<Feature> | schema documentation |
An existing surface is defined by setting the state of the <Surface> element to "existing". If it is proposed the state is set to "proposed". If all the surfaces within a surface group have the same state, it is possible to set the state on a higher level in the surface group <Surfaces>. The state for an individual surface is set if the constituent triangle meshes, data points and breaklines are is the same state.
The type coding systems in inframodel file transfers are set in the header information. Type codes can be set for individual plan elements:
in the element <DataPoints> for source data points
in the element <BreakLine> for breaklines
in the element <Surface> for surfaces
Individual type codes are set primarily in parent elements, from which the child elements will inherit the values. Terrain points and breaklines are type coded using the terrainCoding and a coding description terrainCodingDesc. It is optional to set a surfaceCoding and a surface coding description surfaceCodingDesc for terrain points and breaklines. Surfaces are given a surfaceCoding and a surface coding description surfaceCodingDesc, and optionally terrainCoding and a coding description terrainCodingDesc. These both may be given an infraCoding and its description infraCodingDesc. Alternative type codings can be given using proprietaryInfraCoding and their descriptions proprietaryInfraCodingDesc where they both have prefix per proprietary coding systems named under Project element.
"IM_coding" <Feature> for terrain points and breaklines
![]() |
name | optional name |
e.g. [3] | ||
![]() |
code | mandatory feature code |
[IM_coding] | ||
![]() |
source | reference to source feature distionary by name |
[inframodel] | ||
typecodes <Property> | |||||
![]() |
label | [terrainCoding] | terrain code |
value | code, e.g. [0] |
![]() |
label | [terrainCodingDesc] | description of the terrain code |
value | description, e.g. [terrain point or breakline] |
![]() |
label | [surfaceCoding] | surface code |
value | code, e.g. [201000] |
![]() |
label | [surfaceCodingDesc] | description of the surface code | value | description, e.g. [Topmost surface] |
![]() |
label | [infraCoding] | infra type code | value | code e.g. [100] |
![]() |
label | [infraCodingDesc] | description of infra type code | value | description e.g. [Surface data point or breakline] |
![]() |
label | [proprietryInfraCoding] | additional or alternative infra type code | value | code e.g. in system by organisation Y [y:3.2] |
![]() |
label | [proprietaryInfraCodingDesc] | description of additional or alternative type code | value | description e.g. [y:Ground surface] |
"IM_coding" <Feature> of surfaces
![]() |
name | optional name |
e.g. [4] | ||
![]() |
code | mandatory feature code |
[IM_coding] | ||
![]() |
source | reference to source feature distionary by name |
[inframodel] | ||
typecodes <Property> | |||||
![]() |
label | [terrainCoding] | terrain coding |
value | code, e.g. [0] |
![]() |
label | [terrainCodingDesc] | description of terrain coding | value | description, e.g. [Surface data point or breakline] |
![]() |
label | [surfaceCoding] | surface code |
value | code, e.g. [201000] |
![]() |
label | [surfaceCodingDesc] | description of surface code | value | description, e.g. [Topmost surface] |
![]() |
label | [infraCoding] | infra type code | value | code e.g. [100] |
![]() |
label | [infraCodingDesc] | description of infra type code | value | description e.g. [Surface data point or breakline] |
![]() |
label | [proprietryInfraCoding] | additional or alternative infra type code | value | code e.g. in system by organisation Y [y:3.2] |
![]() |
label | [proprietaryInfraCodingDesc] | description of additional or alternative type code | value | description e.g. [y:Ground surface] |
![]() |
<Feature> | schema documentation |
The source data is described by the element <SourceData>. This element has no attributes.
![]() |
<SourceData> | schema documentation |
Source data consists of:
Source data points <DataPoints> and
Breaklines <BreakLines>
Source data points are described by the element <DataPoints>, sorting every point group into individual elements. Their attributes are:
![]() |
name | name | [name of point group] |
![]() |
state | state |
[abandoned] [destroyed] [existing] [proposed] |
The point group is classified by IM_coding. The individual data points in the <DataPoints> point group are presented as a 3D coordinate list in the <PntList3D> element, values separated by spaces
<PntList3D>northing1 easting1 elevation1 northing2 easting2 elevation2...</PntList3D>
![]() |
<DataPoints> | schema documentation | |
![]() |
<PntList3D> | schema documentation | |
![]() |
<DataPoints> | short example |
Example <DataPoints>:
<Surfaces name="E1R3">
<Surface name="E1R3_yp" state="proposed">
<SourceData>
<!-- Data points -->
<DataPoints>
<PntList3D>6697015.574938 27444074.131174 6.144000 6697027.520915 27444078.605047 6.251000 6697016.469978 27444079.943130 5.923000 6697004.878693 27444035.771506 7.560000 6696996.585789 27444043.042529 7.457000 6696993.838758 27444037.264589 7.712000 6697018.710772 27444054.591272 6.802000 6697012.586733 27444045.751379 6.706000 6697005.914825 27444053.479386 6.503000 6696987.079968 27444060.337498 6.271000 6696989.178985 27444063.825459 6.239000</PntList3D>
<Feature code="IM_coding" source="inframodel">
<Property label="terrainCoding" value="0"/>
<Property label="terrainCodingDesc" value="Hajapiste"/>
</Feature>
</DataPoints>
</SourceData>
<Definition surfType="TIN">
<!-- Surface definition not shown here -->
</Definition>
</Surface>
</Surfaces>
In the breakline group <BreakLines>, where each <BreakLine> is presented in its own element. The breakline group has no attributes. In <BreakLine> the breakline type brkType defines the use in software.
Attributes of an individual <BreakLine>:
![]() |
brkType | breakline type | [standard] [wall] [proximity] [nondestructive] |
![]() |
desc | description | |
![]() |
name | optional name |
|
![]() |
state | state |
[abandoned] [destroyed] [existing] [proposed] |
Breaklines are classified by IM_coding and they can be given individual names. The constituent points of a <BreakLine> are described as a 3D coordinate list in the <PntList3D> element, values separated by spaces
<PntList3D>northing1 easting1 elevation1 northing2 easting2 elevation2..</PntList3D>
![]() |
<BreakLines> | schema documentation | |
![]() |
<BreakLine> | schema documentation | |
![]() |
<PntList3D> | schema documentation | |
![]() |
<BreakLines> | short example |
Additionally, it is also possible to define boundaries of the source data in the boundary group <Boundaries>, where each <Boundary> is presented in its own element. The boundary group has no attributes. In <Boundary> the mandatory attributes boundary type bndType and edge trim edgeTrim define the use in software. Additionally, optional attributes for area, name, description and state can be set.
Attributes of an individual <Boundary>:
![]() |
bndType | boundary type |
[outer | void | island] |
![]() |
edgeTrim | edge trim |
[true | false] |
![]() |
area | calculated area of the boundary in area units | |
![]() |
desc | description | |
![]() |
name | optional name |
|
![]() |
state | state |
[abandoned] [destroyed] [existing] [proposed] |
The points of a <Boundary> are described as a 2D coordinate list in the <PntList2D> element, values separated by spaces
<PntList2D>northing1 easting1 northing2 easting2 ...</PntList2D>
Surface geometry is described as triangulated meshes. Each surface is defined under the <Definition> in terms of boundaries, exterior features and holes. A triangular mesh is defined in two steps; first by defining the vertices of the triangular faces as surface points, and then each individual face by three vertices. The surface points used as vertices are assigned unique identifiers id within the same surface definition (<Surface>.<Definition>) element. The face definitions are done by referring to the id numbers id of the vertice points.
Additionally, the surface is given an type code according to the declared IM_coding.
The surface type surfType is set to "TIN" when describing a triangular mesh. The presicion of the mesh model depends on the available software and data. It is possible to optionally describe a 2D surface area area2DSurf, 3D surface area area3DSurf and the maximum elevation elevMax and minimum elevation elevMin.
Attributes of the <Definition> header:
![]() |
surfType | surface type |
[TIN | grid] |
![]() |
area2DSurf | 2D surface area |
in surface area units, e.g. [2450.510000] |
![]() |
area3DSurf | 3D surface area | in surface area units, e.g. [2450.510000] |
![]() |
elevMax | elevation maximum |
elevation, e.g. [64.372000] |
![]() |
elevMin | elevation minimum |
elevation, e.g. [56.431000] |
![]() |
<Definition> | schema documentation | |
![]() |
<Definition> | short example |
The vertex point group <Pnts> contains a listing of individual vertices <P>, which are each assigned an individual id number id. These numbers are referenced in the triangulation.
Attribute of vertex <P>:
![]() |
id | unique integer number | e.g. [1] [2] [3] etc. |
![]() |
<P> | schema documentation |
The vertices of a surface definition, minimum three of them, are given as <P> elements, where the 3D coordinates are separated by spaces.
<P id="1">northing1 easting1 elevation1</P>
<P id="2">northing2 easting2 elevation2</P>
<P id="3">northing3 easting3 elevation3</P>
The triangulation is defined in the <Faces> collection. It consists of consecutive list of faces <F>. The order of the faces implicitly defines the index number of each triangle (1,2,..). Each face is defined by referencing three vertex id numbers.
Optional attributes of faces <F>:
![]() |
i | visibility | [1] = part of the triangulation, but not visible |
![]() |
n | surrounding faces |
defines in terms of integer numbers if there is a face adjascent to the face described [0] = no faces adjacent [implicit index number of face] = defines which faces share a common edge e.g. [0 2 3] = edge1 (no face), edge 2 (face 2), edge 3 (face 3) |
![]() |
b | coinsidence with breakline |
Sum value indicating which edges touch breakline (value 0-7): edge 1 = 1 edge 2 = 2 edge 3 = 4 e.g. value 4 = only edge 3 touches breakline |
![]() |
<Faces> | schema documentation |
The terrain model in <Surfaces> contains the description of the topmost terrain surface (also Relief or Digital Elevation Model) as one or more <Surface>. It consists of the vertices of the component faces <Pnts> and the faces <Faces> as explained section 2.3. In inframodel file transfers it is also possible to assign source data points and breaklines to the surface. An "IM_coding" type coding provides surface classifications, and "IM_soil" the technical properties below the surface as <Feature> extensions. A surface is part of a plan described in "IM_plan" <Feature>. When exchanging a terrain model, the attribute <Surfaces>.desc shall be set to "terrain model".
When no information on individual ground layers is available, surface model may include description of the soil propertites below the topmost surface (i.e. "IM_soil" <Feature> under <Surface>).
Details of <Surface> in "IM_soil" <Feature>
![]() |
name | optional name | e.g. [9] | |||
![]() |
code | code | [IM_soil] | |||
![]() |
source | source | [inframodel] | |||
Parameters <Property> | ||||||
![]() |
label | [soilTypeGEO] | soil type classification according to Geotekninen maaluokitus (VTT 1974) |
value | e.g. [Sa] | |
![]() |
label | [soilTypeISO] | soil type classification according to SFS-EN ISO 14688-1 or SFS-EN ISO 14688-2 | value | e.g. [Cl] | |
![]() |
label | [qualificationClass] | soil type qualification according to table 10 in TIEH 2100029-04 | value | e.g. [U3] | |
![]() |
label | [frostSwellingFactorWet] | soil type frost swelling factor in wet conditions? | value | e.g. [6] | |
![]() |
label | [frostSwellingFactorDry] | soil type frost swelling factor in dry conditions | value | percentage e.g. [2] |
|
![]() |
label | [elasticModulusWet] | soil type modulus of elasticity in wet conditions (MPa) | value | e.g. [10] | |
![]() |
label | [elasticModulusDry] | soil type modulus of elasticity in dry conditions (MPa) | value | MPa e.g. [10] |
The ground layer model (<Surfaces>) contains a description of all the surfaces (<Surface>) between different ground layers (and the topmost surface) in the plan. It is recommended that surfaces are described top-down. Individual layer surfaces are constructed as explained section 2.3. A surface is part of a plan described in "IM_plan" <Feature>. An "IM_coding" type coding provides surface classifications. The technical properties of each soil layer between two surfaces are given in "IM_soil" <Feature> extensions, under the <Surface> desribing the top of the layer. When exchanging a ground layer model as collection of Surfaces, the attribute <Surfaces>.desc shall be set to "ground layer model".
The technical properties of a soil layer between two surfaces are assigned to its top surface, i.e. in ground layer model an "IM_soil" <Feature> extension under the <Surface> describes the soil properties below.
Details of <Surface> in "IM_soil" <Feature>
![]() |
name | optional name | e.g. [9] | |||
![]() |
code | code | [IM_soil] | |||
![]() |
source | source | [inframodel] | |||
Parameters <Property> | ||||||
![]() |
label | [soilTypeGEO] | soil type classification according to Geotekninen maaluokitus (VTT 1974) |
value | e.g. [Sa] | |
![]() |
label | [soilTypeISO] | soil type classification according to SFS-EN ISO 14688-1 or SFS-EN ISO 14688-2 | value | e.g. [Cl] | |
![]() |
label | [qualificationClass] | soil type qualification according to table 10 in TIEH 2100029-04 | value | e.g. [U3] | |
![]() |
label | [frostSwellingFactorWet] | soil type frost swelling factor in wet conditions? | value | e.g. [6] | |
![]() |
label | [frostSwellingFactorDry] | soil type frost swelling factor in dry conditions | value | percentage e.g. [2] |
|
![]() |
label | [elasticModulusWet] | soil type modulus of elasticity in wet conditions (MPa) | value | e.g. [10] | |
![]() |
label | [elasticModulusDry] | soil type modulus of elasticity in dry conditions (MPa) | value | MPa e.g. [10] |