Terrain datasets in a geodatabase in SQL Server

Terrain datasets are surfaces that represent three-dimensional space. They use measurements (stored as feature classes) and rules to generate triangular irregular network (TIN) pyramids to represent elevation.

The source feature classes either can be referenced by the terrain dataset or be embedded in the terrain dataset.

For an explanation of terrain datasets, read the topics in the book Understanding terrain datasets. You can begin with the topic What is a terrain dataset?

Terrains in ArcGIS Desktop

In the Catalog tree, terrain datasets look like any other feature dataset, but they contain a terrain. Terrains are represented with the following icon:

The name of a terrain dataset in a geodatabase in SQL Server contains the database name, the name of the owner of the locator, and the name of the locator itself.

For example, a terrain dataset, napa_terrain, owned by user molly, in a geodatabase named gdb would be listed as gdb.MOLLY.Napa_terrain in the Catalog tree.

To see what feature classes participate in the terrain, check the terrain properties. In the following example, you can see two of the feature classes that participate in the terrain—ud_terrain_breaks, ud_terrain_clip, and an embedded feature class, napasub.

Data sources for the terrain

Terrains in a Microsoft SQL Server database

Being datasets, terrain datasets are managed in the geodatabase in the same tables as feature datasets, plus there are terrain-specific tables created in the schema of the user who created the terrain dataset. These tables are as follows:

DTM_<ID>_COMPOSITETILES

Composite tiles are incomplete, in terms of data coverage, around their perimeter. They could be void of measurements entirely or within the proximity of one or more corners. To define a surface that covers the extent of these tiles data is used from surrounding tiles. This table is used to identify which tiles are composite tiles and what neighboring tiles provide data to complete them. One record is used per composite tile.

Field name

Field type

Description

Null?

ID

objectid

The unique identifier of the shape pointing to neighbor tiles

NOT NULL

tilenr

long

The composite tile number

This is defined by the terrain's tile system. A value of -1 is reserved for one record containing the centroids of the terrain's perimeter tiles.

NOT NULL

emptytile

short

A value of -1 indicates the tile is void of any measurements. A value of 0 indicates the tile has some data but is incomplete.

NOT NULL

othertiles

BLOB

geometry

Multipoint shape storing the tile centroid of each surrounding tile that provides measurements to complete the composite tile

NOT NULL

DTM_<ID>_DIRTYAREA

Dirty areas are tiles that have been invalidated as a result of edits to features in one or more participating feature classes. This table is used to keep track of these invalidated tiles and to record in which feature classes the edits have taken place. One record is used per feature class in which edits have been made. The table will be empty if no edits have been made.

Field name

Field type

Description

Null?

ID

objectid

The unique identifier for the shape

NOT NULL

classid

long

The class identifier of the feature class that is the source of the edits

NOT NULL

tilecount

long

The number of dirty tiles resulting from edits to the feature class

NOT NULL

dirtyarea

BLOB

geometry

Multipoint shape containing the tile centroids invalidated as a result of edits to the feature class

NOT NULL

DTM_<ID>_EMBED_#

Embed tables are used to store embedded multipoint feature classes. There may be 0..n embed tables. Their existence depend on whether the terrain has any embedded data. One table is used per embedded feature class. An embed table has the dual purpose of being part of the terrain's pyramid structure. The embedded data are grouped by tile and pyramid level.

Field name

Field type

Description

Null?

ID

objectid

The unique identifier for the shape

NOT NULL

tilerow

long

The row number of the terrain tile to which the embedded points belong

NOT NULL

tilecol

long

The column number of the terrain tile to which the embedded points belong

NOT NULL

resolution

numeric(38,8)

Indicates in which pyramid level or levels the points are used

Since pyramid levels are cumulative, points participate in levels with resolutions equal to or greater than themselves. A special case involves the terrain overview. The resolution of the overview level is indicated with a value of -1. Points assigned this value participate through the entire pyramid.

NOT NULL

pointcount

long

The number of points in the multipoint

NOT NULL

neighbordata

smallint

Indicates whether points are inside the tile neatline boundary; those outside are used to ensure complete coverage of the tile area. A value of 0 indicates the points are inside the tile. -1 indicates they are outside.

NOT NULL

shape

BLOB

geometry

Embedded multipoint geometry

NOT NULL

DTM_<ID>_INSIDETILES

The InsideTiles table is used to record which terrain tiles are within the data area, or interpolation zone, of the terrain. This is recorded per pyramid level because it is possible for the extent to differ across levels (for example, with the use of different clip polygon feature classes in different pyramid levels). One record is used per pyramid level. This includes both overview and full resolution levels.

Field name

Field type

Description

Null?

ID

objectid

The unique identifier for the shape

NOT NULL

ztolerance

numeric(38,8)

The resolution of the pyramid level A value of -1 indicates the overview level.

NOT NULL

insidetiles

BLOB

geometry

Multipoint geometry storing the data tile centroids

NOT NULL

DTM_<ID>_MRFC

The MRFC is the pyramid structure for non-embedded feature classes. Mass points and breakline vertices for referenced feature classes are stored here under the pre-condition they participate in the full resolution pyramid level (they can also participate in other levels). Data are grouped by tile and pyramid level.

Field name

Field type

Description

Null?

ID

objectid

The unique identifier for the shape

NOT NULL

tilerow

long

The row number of the terrain tile to which the embedded points belong

NOT NULL

tilecol

long

The column number of the terrain tile to which the pyramid points/vertices belong

NOT NULL

resolution

numeric(38,8)

Indicates in which pyramid level or levels the points are used

Since pyramid levels are cumulative, points participate in levels with resolutions equal to or greater than themselves. A special case involves the terrain overview. The resolution of the overview level is indicated with a value of -1. Points assigned this value participate through the entire pyramid.

NOT NULL

pointcount

long

The number of points in the multipoint

NOT NULL

neighbordata

smallint

Indicates whether points are inside the tile neatline boundary; those outside are used to ensure complete coverage of the tile area. A value of 0 indicates the points are inside the tile. -1 indicates they are outside.

NOT NULL

shape

BLOB

geometry

Multipoint geometry

NOT NULL

DTM_<ID>_PROPS

The terrain props table is used to hold version specific properties for an individual terrain dataset. These include point count and extent. The information is stored in a BLOB and is not user accessible through the table. Instead, use terrain's ArcObjects API to access the information.

Field name

Field type

Description

Null?

ID

integer

The object ID for the record

NOT NULL

properties

varbinary(max)

Stores the version specific dataset properties

A record is also created in the GDB_ITEMS table to track the terrain dataset. The id in the names of the terrains tables come from the ObjectID field of the GDB_ITEMS table.

Because terrain datasets are part of a feature dataset, they are also tracked in the GDB_ITEMRELATIONSHIPS table. The feature dataset UUID corresponds to the ORIGINID, and the feature class UUID is the DESTID in the GDB_ITEMRELATIONSHIPS table. The additional tables for a terrain dataset are shown below. The 2 in the example DTM_* table names is from the ObjectID field in the GDB_ITEMS table.

Terrain dataset tables in SQL Server

Dashed lines indicate implicit relationships between columns.

NoteNote:

You cannot use the Microsoft geography spatial type with terrain datasets because 3-D features are not supported.

Terrains in an XML document

Terrain datasets are denoted in an XML document with the dataset type ersriDTTerrain.

<DatasetType>esriDTTerrain</DatasetType>

The following is a portion of the XML document for the ud_terrain_ds terrain dataset. The XML document excerpt below covers the definition of the dataset, including data sources, up to the point of describing the first feature class in the dataset.

 <esri:Workspace xmlns:esri="http://www.esri.com/schemas/ArcGIS/10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <WorkspaceDefinition xsi:type="esri:WorkspaceDefinition">
  <WorkspaceType>esriRemoteDatabaseWorkspace</WorkspaceType> 
  <Version>RJP.WO2557</Version> 
  <Domains xsi:type="esri:ArrayOfDomain" /> 
  <DatasetDefinitions xsi:type="esri:ArrayOfDataElement">
    <DataElement xsi:type="esri:DEFeatureDataset">
      <CatalogPath>/V=RJP.WO2557/FD=gdb.MOLLY.napa_sub</CatalogPath> 
      <Name>gdb.MOLLY.napa_sub</Name> 
      <Children xsi:type="esri:ArrayOfDataElement">
        <DataElement xsi:type="esri:DETerrain">
          <Version>2</Version> 
              <CatalogPath>/V=RJP.WO2557/FD=gdb.MOLLY.napa_sub/TERR=gdb.MOLLY.napa_sub_terrain1</CatalogPath> 
          <Name>gdb.MOLLY.napa_sub_terrain1</Name> 
          <DatasetType>esriDTTerrain</DatasetType> 
          <DSID>2</DSID> 
          <FeatureDatasetName>gdb.MOLLY.napa_sub</FeatureDatasetName> 
          <Versioned>false</Versioned> 
          <CanVersion>false</CanVersion> 
          <ChildrenExpanded>true</ChildrenExpanded> 
          <MetadataRetrieved>false</MetadataRetrieved> 
          <FullPropsRetrieved>true</FullPropsRetrieved> 
          <PyramidType>0</PyramidType> 
          <TileSize>6000</TileSize> 
          <MaxShapeSize>5000</MaxShapeSize> 
          <MaxOverviewSize>50000</MaxOverviewSize> 
          <TerrainDataSources xsi:type="esri:ArrayOfTerrainDataSource">
            <TerrainDataSource xsi:type="esri:TerrainDataSource">
              <Version>1</Version> 
              <FeatureClassID>875</FeatureClassID> 
              <FeatureClassName>gdb.MOLLY.DTM_2_DISCONNECT_3</FeatureClassName> 
              <GroupID>1</GroupID> 
              <SourceStatus>1</SourceStatus> 
              <SourceType>1</SourceType> 
              <SurfaceFeatureType>18</SurfaceFeatureType> 
              <IsBase>true</IsBase> 
              <ApplyToOverview>true</ApplyToOverview> 
              <AutoGeneralize>false</AutoGeneralize> 
              <ResolutionLowerBound>0</ResolutionLowerBound> 
              <ResolutionUpperBound>0</ResolutionUpperBound> 
              <SourceName>napasub_embedded</SourceName> 
              <HeightField>Shape</HeightField> 
              <TagValueField /> 
              <ReservedFields xsi:type="esri:ArrayOfString" /> 
           </TerrainDataSource>
           <TerrainDataSource xsi:type="esri:TerrainDataSource">
              <Version>1</Version> 
              <FeatureClassID>874</FeatureClassID> 
              <FeatureClassName>gdb.MOLLY.napa_sub_breaks</FeatureClassName> 
              <GroupID>2</GroupID> 
              <SourceStatus>1</SourceStatus> 
              <SourceType>0</SourceType> 
              <SurfaceFeatureType>1</SurfaceFeatureType> 
              <IsBase>true</IsBase> 
              <ApplyToOverview>false</ApplyToOverview> 
              <AutoGeneralize>false</AutoGeneralize> 
              <ResolutionLowerBound>0</ResolutionLowerBound> 
              <ResolutionUpperBound>2.6</ResolutionUpperBound> 
              <SourceName /> 
              <HeightField>Shape</HeightField> 
              <TagValueField /> 
              <ReservedFields xsi:type="esri:ArrayOfString" /> 
           </TerrainDataSource>
           <TerrainDataSource xsi:type="esri:TerrainDataSource">
              <Version>1</Version> 
              <FeatureClassID>873</FeatureClassID> 
              <FeatureClassName>gdb.MOLLY.napa_sub_clip</FeatureClassName> 
              <GroupID>3</GroupID> 
              <SourceStatus>1</SourceStatus> 
              <SourceType>0</SourceType> 
              <SurfaceFeatureType>10</SurfaceFeatureType> 
              <IsBase>false</IsBase> 
              <ApplyToOverview>true</ApplyToOverview> 
              <AutoGeneralize>false</AutoGeneralize> 
              <ResolutionLowerBound>0</ResolutionLowerBound> 
              <ResolutionUpperBound>31</ResolutionUpperBound> 
              <SourceName /> 
              <HeightField /> 
              <TagValueField /> 
              <ReservedFields xsi:type="esri:ArrayOfString" /> 
           </TerrainDataSource>
         </TerrainDataSources>
         <TerrainPyramidLevelZTols xsi:type="esri:ArrayOfTerrainPyramidLevelZTol">
           <TerrainPyramidLevelZTol xsi:type="esri:TerrainPyramidLevelZTol">
           <Version>1</Version> 
           <PyramidLevelStatus>1</PyramidLevelStatus> 
           <PointCount>-1</PointCount> 
           <MaxScale>10000</MaxScale> 
           <Resolution>5</Resolution> 
         </TerrainPyramidLevelZTol>
         <TerrainPyramidLevelZTol xsi:type="esri:TerrainPyramidLevelZTol">
           <Version>1</Version> 
           <PyramidLevelStatus>1</PyramidLevelStatus> 
           <PointCount>-1</PointCount> 
           <MaxScale>20000</MaxScale> 
           <Resolution>10</Resolution> 
         </TerrainPyramidLevelZTol>
       </TerrainPyramidLevelZTols>
      </DataElement>
      <DataElement xsi:type="esri:DEFeatureClass">

Related Topics


11/18/2013