About the Add and symbolize a historical temporal layer in ArcMap Sample
[C#]
AddTemporalLayerButton.cs
using System; using System.Collections.Generic; using System.Text; using System.IO; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.TrackingAnalyst; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using System.Windows.Forms; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.Display; namespace TAAddHistoricalTrackingLayer { public class AddTemporalLayerButton : ESRI.ArcGIS.Desktop.AddIns.Button { private bool m_bInitialized = false; public AddTemporalLayerButton() { } protected override void OnClick() { setupTrackingEnv(); //Open the year 2000 hurricanes shapefile IFeatureClass featureClass = openTemporalData(); //Create and add a Temporal Layer to the map AddTemporalLayer(featureClass, "EVENTID", "Date_Time"); //Turn on Dynamic Display EnableDynamicDisplay(); ArcMap.Application.CurrentTool = null; } protected override void OnUpdate() { Enabled = ArcMap.Application != null; } //Initialize the Tracking Environment, you only need to do this once private void setupTrackingEnv() { if (!m_bInitialized && ArcMap.Application != null) { IExtensionManager extentionManager = new ExtensionManagerClass(); UID uid = new UIDClass(); uid.Value = "esriTrackingAnalyst.TrackingEngineUtil"; object mapRef = ArcMap.Application; ((IExtensionManagerAdmin)extentionManager).AddExtension(uid, ref mapRef); ITrackingEnvironment3 trackingEnv = new TrackingEnvironmentClass(); try { trackingEnv.Initialize(ref mapRef); } catch (Exception ex) { } trackingEnv.EnableTemporalDisplayManagement = true; m_bInitialized = true; } } /// <summary> /// Turns Dynamic Display On. /// </summary> private void EnableDynamicDisplay() { IDynamicMap dynamicMap = ArcMap.Document.FocusMap as IDynamicMap; if (dynamicMap != null) { dynamicMap.DynamicMapEnabled = true; } } /// <summary> /// Opens a feature class from a shapefile stored on disk. /// </summary> /// <returns>The opened feature class</returns> private IFeatureClass openTemporalData() { //set the path to the featureclass string path = @"..\..\..\..\..\data\Time\ProjectData.gdb"; if (!System.IO.Directory.Exists(path)) { MessageBox.Show("Cannot find hurricane data:\n" + path, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } IWorkspaceFactory2 wsFactory = new FileGDBWorkspaceFactoryClass(); IWorkspace workspace = wsFactory.OpenFromFile( path, 0 ); IFeatureClass featureClass = ((IFeatureWorkspace)workspace).OpenFeatureClass( "atlantic_hurricanes_2000" ); return featureClass; } /// <summary> /// Creates a Temporal Layer using the specified feature class and add it to the map. /// </summary> /// <param name="featureClass">The feature class to use for the temporal layer.</param> /// <param name="eventFieldName">Indicates the feature class column that identifies or groups temporal observations with time series.</param> /// <param name="temporalFieldName">Identifies the temporal field, which must be a field type whose data can be converted to a date value.</param> private void AddTemporalLayer(IFeatureClass featureClass, string eventFieldName, string temporalFieldName) { ITemporalLayer temporalFeatureLayer = new TemporalFeatureLayerClass(); IFeatureLayer2 featureLayer = temporalFeatureLayer as IFeatureLayer2; ILayer layer = temporalFeatureLayer as ILayer; ITemporalRenderer temporalRenderer = new CoTrackSymbologyRendererClass(); ITemporalRenderer2 temporalRenderer2 = (ITemporalRenderer2)temporalRenderer; IFeatureRenderer featureRenderer = temporalRenderer as IFeatureRenderer; ITrackSymbologyRenderer trackRenderer = temporalRenderer as ITrackSymbologyRenderer; if (featureLayer != null) { featureLayer.FeatureClass = featureClass; } if (featureRenderer != null) { temporalRenderer.TemporalObjectColumnName = eventFieldName; temporalRenderer.TemporalFieldName = temporalFieldName; temporalFeatureLayer.Renderer = featureRenderer; } if (trackRenderer != null) { //Create green color value IRgbColor rgbColor = new RgbColorClass(); rgbColor.RGB = 0x00FF00; //Create simple thin green line ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = (IColor)rgbColor; simpleLineSymbol.Width = 1.0; //Create simple renderer using line symbol ISimpleRenderer simpleRenderer = new SimpleRendererClass(); simpleRenderer.Symbol = (ISymbol)simpleLineSymbol; //Apply line renderer as track symbol and enable track rendering trackRenderer.TrackSymbologyRenderer = (IFeatureRenderer)simpleRenderer; trackRenderer.ShowTrackSymbologyLegendGroup = true; temporalRenderer2.TrackRendererEnabled = true; } if (layer != null) { ArcMap.Document.FocusMap.AddLayer(layer); } } } }
[Visual Basic .NET]
AddTemporalLayerButton.vb
Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.TrackingAnalyst Imports ESRI.ArcGIS.Geodatabase Imports ESRI.ArcGIS.DataSourcesGDB Imports ESRI.ArcGIS.esriSystem Imports System.Windows.Forms Imports ESRI.ArcGIS.Display Public Class AddTemporalLayerButton Inherits ESRI.ArcGIS.Desktop.AddIns.Button Private m_bInitialized As Boolean = False Public Sub New() End Sub Protected Overrides Sub OnClick() setupTrackingEnv() 'Open the year 2000 hurricanes shapefile Dim featureClass As IFeatureClass = openTemporalData() 'Create and add a Temporal Layer to the map AddTemporalLayer(featureClass, "EVENTID", "DATE_TIME") 'Turn on Dynamic Display EnableDynamicDisplay() My.ArcMap.Application.CurrentTool = Nothing End Sub Protected Overrides Sub OnUpdate() Enabled = My.ArcMap.Application IsNot Nothing End Sub 'Initialize the Tracking Environment, you only need to do this once Private Sub setupTrackingEnv() 'get the map container Dim mapObj As Object = My.ArcMap.Application If (Not m_bInitialized) AndAlso Not mapObj Is Nothing Then Dim extentionManager As IExtensionManager = New ExtensionManagerClass() Dim uid As UID = New UIDClass() uid.Value = "esriTrackingAnalyst.TrackingEngineUtil" CType(extentionManager, IExtensionManagerAdmin).AddExtension(uid, mapObj) Dim trackingEnv As ITrackingEnvironment3 = New TrackingEnvironmentClass() trackingEnv.Initialize(mapObj) trackingEnv.EnableTemporalDisplayManagement = True m_bInitialized = True End If End Sub ''' <summary> ''' Turns Dynamic Display On. ''' </summary> Private Sub EnableDynamicDisplay() Dim dynamicMap As IDynamicMap = TryCast(My.ArcMap.Document.FocusMap, IDynamicMap) If Not dynamicMap Is Nothing Then dynamicMap.DynamicMapEnabled = True End If End Sub ''' <summary> ''' Opens a feature class from a shapefile stored on disk. ''' </summary> ''' <returns>The opened feature class</returns> Private Function openTemporalData() As IFeatureClass 'set the path to the featureclass Dim path As String = "..\..\..\..\..\data\Time\ProjectData.gdb" If (Not System.IO.Directory.Exists(path)) Then MessageBox.Show("Cannot find hurricane data:" & Constants.vbLf & path, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Return Nothing End If Dim wsFactory As IWorkspaceFactory2 = New FileGDBWorkspaceFactoryClass() Dim workspace As IWorkspace = wsFactory.OpenFromFile(path, 0) Dim featureClass As IFeatureClass = (CType(workspace, IFeatureWorkspace)).OpenFeatureClass("atlantic_hurricanes_2000") Return featureClass End Function ''' <summary> ''' Creates a Temporal Layer using the specified feature class and add it to the map. ''' </summary> ''' <param name="featureClass">The feature class to use for the temporal layer.</param> ''' <param name="eventFieldName">Indicates the feature class column that identifies or groups temporal observations with time series.</param> ''' <param name="temporalFieldName">Identifies the temporal field, which must be a field type whose data can be converted to a date value.</param> Private Sub AddTemporalLayer(ByVal featureClass As IFeatureClass, ByVal eventFieldName As String, ByVal temporalFieldName As String) Dim temporalFeatureLayer As ITemporalLayer = New TemporalFeatureLayerClass() Dim featureLayer As IFeatureLayer2 = TryCast(temporalFeatureLayer, IFeatureLayer2) Dim layer As ILayer = TryCast(temporalFeatureLayer, ILayer) Dim temporalRenderer As ITemporalRenderer = New CoTrackSymbologyRendererClass() Dim temporalRenderer2 As ITemporalRenderer2 = CType(temporalRenderer, ITemporalRenderer2) Dim featureRenderer As IFeatureRenderer = TryCast(temporalRenderer, IFeatureRenderer) Dim trackRenderer As ITrackSymbologyRenderer = TryCast(temporalRenderer, ITrackSymbologyRenderer) If Not featureLayer Is Nothing Then featureLayer.FeatureClass = featureClass End If If Not featureRenderer Is Nothing Then temporalRenderer.TemporalObjectColumnName = eventFieldName temporalRenderer.TemporalFieldName = temporalFieldName temporalFeatureLayer.Renderer = featureRenderer End If If Not trackRenderer Is Nothing Then 'Create green color value Dim rgbColor As IRgbColor = New RgbColorClass() rgbColor.RGB = &HFF00 'Create simple thin green line Dim simpleLineSymbol As ISimpleLineSymbol = New SimpleLineSymbolClass() simpleLineSymbol.Color = CType(rgbColor, IColor) simpleLineSymbol.Width = 1.0 'Create simple renderer using line symbol Dim simpleRenderer As ISimpleRenderer = New SimpleRendererClass() simpleRenderer.Symbol = CType(simpleLineSymbol, ISymbol) 'Apply line renderer as track symbol and enable track rendering trackRenderer.TrackSymbologyRenderer = CType(simpleRenderer, IFeatureRenderer) trackRenderer.ShowTrackSymbologyLegendGroup = True temporalRenderer2.TrackRendererEnabled = True End If If Not layer Is Nothing Then My.ArcMap.Document.FocusMap.AddLayer(layer) End If End Sub End Class