Terrain datasets in a geodatabase in PostgreSQL
Terrain datasets in a geodatabase in PostgreSQL
|
Release 9.3 |
|
NOTE: Requires ArcGIS 3D Analyst extension
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 can either be referenced by the terrain dataset or 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 ArcCatalog
In the Catalog tree, terrain datasets in a PostgreSQL database look like any other feature dataset. The difference is that terrain datasets contain a terrain. In the example below, the topography dataset contains the terrain topography_Terrain.
You can see the feature classes that participate in the terrain—topo_break_lines, topo_clip_poly, topo_mass_points, and topo_water_poly. To find out if there are any embedded feature classes in the terrain dataset, check the terrain properties. Right-click the terrain and click the Data Sources tab. This lists all feature classes used to create the terrain. In this example, no embedded feature classes were used to create this terrain. If there had been, an additional feature class that was not visible in the feature dataset in the Catalog tree would have been listed and contained a Yes value in the Embedded column of the Terrain Properties dialog box.Top of page
Terrains in a PostgreSQL DBMS
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>_compositetilesComposite 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 are composite tiles and what neighboring tiles provide data to complete them. One record is used per composite tile.
Field name |
Field type |
Description |
id |
integer |
The unique identifier of the shape pointing to neighbor tiles.
NOT NULL |
tilenr |
integer |
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 |
smallint |
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 |
st_geometry |
Multipoint shape storing the tile centroid of each surrounding tile that provides measurements to complete the composite tile.
|
dtm_<id>_dirtyareaDirty 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 |
id |
integer |
The unique identifier for the shape
NOT NULL |
classid |
integer |
The class ID of the feature class that's the source of the edits
NOT NULL |
tilecount |
integer |
The number of dirty tiles resulting from edits to the feature class
NOT NULL |
dirtyarea |
st_geometry |
Mutlipoint 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 zero to n embed tables. Their existence depends 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 is grouped by tile and pyramid level.
Field name |
Field type |
Description |
id |
integer |
The unique identifier for the shape
NOT NULL |
tilerow |
integer |
The row number of the terrain tile to which the embedded points belong
|
tilecol |
integer |
The column number of the terrain tile to which the embedded points belong
|
resolution |
numeric(38,8) |
Indicates in which pyramid level(s) 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.
|
pointcount |
integer |
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 |
st_geometry |
Embedded multipoint geometry
|
dtm_<id>_insidetilesThe 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's 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 |
id |
integer |
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 |
st_geometry |
Multipoint geometry storing the data tile centroids
|
dtm_<id>_mrfcThe mrfc is the pyramid structure for nonembedded feature classes. Mass points and breakline vertices for referenced feature classes are stored here under the precondition they participate in the full resolution pyramid level (they can also participate in other levels). Data is grouped by tile and pyramid level.
Field name |
Field type |
Description |
id |
integer |
The unique identifier for the shape
NOT NULL |
tilerow |
integer |
The row number of the terrain tile to which the pyramid points/vertices belong |
tilecol |
integer |
The column number of the terrain tile to which the pyramid points/vertices belong |
resolution |
numeric(38,8) |
Indicates in which pyramid level(s) 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. |
pointcount |
integer |
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 |
st_geometry |
Multipoint geometry
|
dtm_<id>_propsThe 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 |
id |
integer |
The ObjectID for the record
NOT NULL |
properties |
bytea |
Stores the version-specific dataset properties |
A record is also created in the gdb_extensiondatasets table to track the terrain dataset. The id in the names of the dtm tables comes from the id field of the gdb_extensiondatasets table.
As mentioned, terrain datasets are tracked with the same system tables as feature datasets. The additional tables for a terrain dataset are shown below. The 1 in the dtm table names is the value in the id field of the gdb_extensiondatasets table.
NOTE: Since there were no embedded feature classes in the dataset, a corresponding dtm_1_embed table was not created.
Top of page
Terrains in an XML workspace document
Terrain datasets are denoted in an XML document with the dataset type esriDTTerrain.
<DatasetType>esriDTTerrain</DatasetType>
The following is a portion of the XML document for the napa_sub 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/9.3" 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>sde.DEFAULT</Version>
<Domains xsi:type="esri:ArrayOfDomain" />
<DatasetDefinitions xsi:type="esri:ArrayOfDataElement">
<DataElement xsi:type="esri:DEFeatureDataset">
<CatalogPath>/V=sde.DEFAULT/FD=m8db.sasha.topography</CatalogPath>
<Name>m8db.sasha.topography</Name>
<Children xsi:type="esri:ArrayOfDataElement">
<DataElement xsi:type="esri:DETerrain">
<Version>1</Version>
<CatalogPath>/V=sde.DEFAULT/FD=m8db.sasha.topography/TERR=m8db.sasha.topography_terrain</CatalogPath>
<Name>m8db.sasha.topography_terrain</Name>
<DatasetType>esriDTTerrain</DatasetType>
<DSID>1</DSID>
<FeatureDatasetName>m8db.sasha.topography</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>874</FeatureClassID>
<FeatureClassName>m8db.sasha.topo_break_lines</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>m8db.sasha.topo_clip_poly</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>
<TerrainDataSource xsi:type="esri:TerrainDataSource">
<Version>1</Version>
<FeatureClassID>873</FeatureClassID>
<FeatureClassName>m8db.sasha.topo_mass_points</FeatureClassName>
<GroupID>4</GroupID>
<SourceStatus>1</SourceStatus>
<SourceType>0</SourceType>
<SurfaceFeatureType>2</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>
<TerrainDataSource xsi:type="esri:TerrainDataSource">
<Version>1</Version>
<FeatureClassID>873</FeatureClassID>
<FeatureClassName>m8db.sasha.topo_water_poly</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">
Top of page