HOW TO

Create a complex 3D building model

Last Published: April 25, 2020

Summary


[O-Image] Canada Flag
This article was contributed by Esri Canada.The instructions provided describe how to create a 3D building divided by floors with those floors further divided into individual rooms. The result is a realistic complex building model that allows for a level of analysis not possible with simple building models.The instructions are provided in two parts: creating floors and creating a 3D building. The instructions are based on sample data for a large residential building available for download as a .zip file: Sample Data - Complex 3D Building Model

Procedure



CREATING FLOORS
To create a complex 3D building model, floor plans are needed for each floor of the building. A building's floor plans can come in a variety of formats: paper/hardcopy, CAD or vector data, distances and bearings, and so forth.


Note:
In the sample data provided, the floor plans were only available in paper format. They were scanned, and raster images of the floor plans were created. These images must be georeferenced and digitized to create floor plan vector data.

The following steps describe how to georeference and digitize the floor plan for the first floor.

Step 1: Georeference Floor Plan

A. In ArcMap, navigate to and open CreateFloors.mxd.

B. Add the Georeferencing toolbar and the Effects toolbar.

C. Ensure level1.png is selected in both toolbars.


[O-Image] Select level1.png
D. Zoom in to the building with Building ID 1001.

E. In the Georeferencing drop-down menu, select Fit To Display. (For help on georeferencing, go to ArcGIS Help 10.1 - Georeferencing.)

F. In the Effects toolbar, set the transparency of level1.png to 30%.

G. Georeference the raster (level1.png) to the vector layer (Building Footprints) by collecting 3-4 control points between the image and the building footprint.

H. Use the Georeference toolbar to update the georeferencing.

Step 2: Create Floor Plan Vector Data

A. In ArcCatalog, navigate to CreateFloors.gdb and add the FP_Level_1 feature class to the map.
<div id='indent' style='padding: 0em,0em,0em,1em;'>
<pre class='ckeditor_codeblock' style='width: 800px; background-color: #c7eaff; border: 1px solid #77bde7;white-space: pre-wrap;font-family:Arial'><b>Note:</b>
FP_Level_1 is an empty polygon feature class that must be edited to create a vectorized floor plan for the first floor of the building.
B. In ArcMap, change the symbology of the FP_Level_1 layer to match the following:
<div id='indent' style='padding: 0em,0em,0em,1em;'>
<pre class='ckeditor_codeblock' style='background-color: whitesmoke;white-space: pre-wrap;font-family:Arial'><b>Fill Color:</b> No Color
<b>Outline Width:</b> 2
<b>Outline Color:</b> Mars Red
C. Create new floor plan polygons.
<div id='indent' style='padding: 0em,0em,0em,1em;'>i. Add the Editor toolbar and begin an editing session.
ii. In the Create Features window, select FP_Level_1 and the polygon construction tool.
iii. In the Editor toolbar, select the Right Angle tool and digitize the large room.
iv. Select the Auto Complete Polygon construction tool and use the Right Angle tool to construct the remainder of the rooms on the first floor.
v. Save the edits and stop the editing session.
[O-Image] Digitize the first floor rooms

D. In the Catalog window, right-click FP_Level_1 and go to Properties. Under the Fields tab add the following three fields:
<div id='indent' style='padding: 0em,0em,0em,1em;'>
<pre class='ckeditor_codeblock' style='background-color: whitesmoke;white-space: pre-wrap;font-family:Arial'><b>Field Name Data Type</b>
Floor Long Integer
FloorHeight Long Integer
RoomType Text (String)
E. In the Table of Contents, right-click the FP_Level_1 layer and open the attribute table.

F. Calculate the values for Floor to be 1 as this is the first floor.

G. With the table still open, select the rooms marked 'TH' and calculate the values for RoomType as 'Condo'.

H. Repeat this for the large main room calculating it as 'Lobby' and the remaining four rooms as 'Patio'.

I. Leave FloorHeight as null.

The first floor of the building is now vectorized. This process must be repeated for each floor, assuming they have different floor plans. If multiple floors share the same plan, then it can be copied and renamed as the next floor. In the sample data, this process has been completed for the remaining 14 floors.

Step 3: Combining Floors

A. Navigate to and open CombineFloors.mxd; do not save CreateFloors.mxd.

B. Create a new feature class for the building.
<div id='indent' style='padding: 0em,0em,0em,1em;'>i. Right-click CombineFloors.gdb in the Catalog window and select New > Feature Class.
ii. Name the new feature class 'Building', set the type to Polygon and click Next.
iii. Set the coordinate system to NAD 1983 UTM Zone 10N and click Next.
iv. Click Next twice. At the Field dialog, click the Import button. Navigate to FP_Level_1 from CombineFloors.gdb and click Add. Click Finish.

<pre class='ckeditor_codeblock' style='width: 800px; background-color: #c7eaff; border: 1px solid #77bde7;white-space: pre-wrap;font-family:Arial'><b>Note:</b>
The empty Building feature class is used to combine all the floors in the following steps.
C. Use the Search window to find and open the Append (Data Management) tool.

D. Add the floors from 1 to 15 as the Input Datasets. Set the Target Dataset to Building and make sure Schema Type is set to TEST. Click OK to run the tool.
[O-Image] Combine floors


The floors have now been combined into a single feature class, Building. Next, the Floor field is used to calculate the height of each floor (the FloorHeight field). The height of a building story (or floor) is approximately 4 meters (12 ft) from floor to ceiling. The first floor has a height of 0 meters because it is the starting point at ground level. The second floor has a height of 4 meters above the first floor. The third floor has a height of 8 meters above the first floor and so forth.

E. Open the attribute table for Building, right-click FloorHeight, and select the Field Calculator. Enter the following equation:
[O-Image] Field Calculator Equation
F. Close ArcMap.

A complete 2D building has been created. The next step is to use the floor heights to create a 3D building.

CREATE A 3D BUILDING
The following steps describe how to convert a 2D building into a 3D model.

Step 1: Raise Floors to Floor Height

A. Start ArcScene and open Create3DBuilding.sxd. This scene contains the 2D building that was created earlier. All of the floors are at a height of 0 meters.

B. Raise the floors to their respective heights using the calculated floor height values.
<div id='indent' style='padding: 0em,0em,0em,1em;'>i. Use the Search window to find and open the Feature to 3D by Attribute tool.
ii. Set the Input Features to Building.
iii. Set the Output Feature Class to Building3D in the Create3DBuilding.gdb.
iv. Set the Height Field to FloorHeight.
v. Click OK to run the tool.
[O-Image] Raise the Floors

C. Remove the Building layer and zoom to the full extent. The floors have been raised to their proper height and should look like the figure below.
[O-Image] 3D Building

Step 2: Extrude Floors

<div id='indent' style='padding: 0em,0em,0em,1em;'>This step describes how to extrude the floors to create fully 3D floors and rooms with walls and ceilings.

A. Open the attribute table for Building3D and in the Table Options drop-down menu, click Add Field. Name the field 'ExtrudeValue' and set it as type Double.
<div id='indent' style='padding: 0em,0em,0em,1em;'>
<pre class='ckeditor_codeblock' style='width: 800px; background-color: #c7eaff; border: 1px solid #77bde7;white-space: pre-wrap;font-family:Arial'><b>Note:</b>
This field is used as the value to extrude each room by. The room types Patio, Balcony, and Terrace are extruded to 1.5 meters; every other room type is extruded to 4 meters. This 4 meter extrusion takes each room's ceiling up to the level of the next floor thus creating a full 3D building.
B. In the Table Options drop-down menu, click Select By Attributes and create a SELECT statement to select the Patio, Balcony, and Terrace room types.
<div id='indent' style='padding: 0em,0em,0em,1em;'>
<pre class='ckeditor_codeblock' style='background-color: whitesmoke;white-space: pre-wrap;font-family:Arial'>"RoomType" = 'Patio' OR "RoomType" = 'Balcony' OR "RoomType" = 'Terrace'
C. Use the Field Calculator to calculate the ExtrudeValue for the selected records to 1.5.

D. In the Table Options drop-down menu, click Switch Selection and use the Field Calculator to calculate the ExtrudeValue to 4.

E. Clear the selection and close the attribute table.

F. Extrude the features.
<div id='indent' style='padding: 0em,0em,0em,1em;'>i. Open the properties for the Building3D layer.
ii. Under the Extrusion tab, check the 'Extrude features in layer' checkbox.
iii. Click the Calculator button and in the Expression Builder dialog, click ExtrudeValue and click OK.
iv. In Layer Properties, click OK.
[O-Image] Extrude Floors

G. Convert the 3D layer to a feature class.
<div id='indent' style='padding: 0em,0em,0em,1em;'>i. Use the Search window to find and open the Layer 3D To Feature Class tool.
ii. Set the Input Feature Layer to Building3D.
iii. Set the Output Feature Class to BuildingFull3D in Create3DBuilding.gdb.
iv. Click OK to run the tool.
[O-Image] Layer3D to Feature Class

After the floors have been extruded, the 3D building model is finished. This 3D building model can be used for both visualizations and analysis. For more information about exploring this 3D building, see the Support blog Exploring a 3D model In ArcGIS.

Article ID:000011799

Software:
  • ArcMap

Get help from ArcGIS experts

Contact technical support

Download the Esri Support App

Go to download options

Discover more on this topic