About the Adding a real-time feed to ArcMap Sample
[C#]
AddTrackingServerLayerButton.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.TrackingAnalyst;
namespace TAAddRealTimeTemporalLayer
{
public class AddTrackingServerLayerButton : ESRI.ArcGIS.Desktop.AddIns.Button
{
private const string TS_SERVER_NAME = "hound"; //computer name of the Tracking Server
private const string TS_SERVICE_NAME = "SanDiegoTaxis"; //name of the Tracking Service to open
public AddTrackingServerLayerButton()
{
}
protected override void OnClick()
{
//get the map container
object mapObj = ArcMap.Application;
//load the Tracking Analyst extension
ITrackingEnvironment trackingEnv = setupTrackingEnv(ref mapObj);
//Create the temporal layer and add it to the display
ILayer temporalLayer = CreateTemporalLayer();
ArcMap.Document.FocusMap.AddLayer(temporalLayer);
ArcMap.Application.CurrentTool = null;
}
protected override void OnUpdate()
{
Enabled = ArcMap.Application != null;
}
//Create a new temporal layer with default symbology
private ILayer CreateTemporalLayer()
{
IFeatureLayer featureLayer = new TemporalFeatureLayerClass();
IFeatureClass featureClass = OpenTrackingServerConnection();
featureLayer.FeatureClass = featureClass;
return featureLayer as ILayer;
}
private IFeatureClass OpenTrackingServerConnection()
{
IWorkspaceFactory amsWorkspaceFactory = new AMSWorkspaceFactory();
IPropertySet connectionProperties = CreateTrackingServerConnectionProperties();
IAMSWorkspace amsWorkspace = amsWorkspaceFactory.Open(connectionProperties, 0) as IAMSWorkspace;
IFeatureClass featureClass = amsWorkspace.OpenFeatureClass(TS_SERVICE_NAME);
return featureClass;
}
//Create connection property set for Tracking Server
private IPropertySet CreateTrackingServerConnectionProperties()
{
IPropertySet connectionProperties = new PropertySetClass();
connectionProperties.SetProperty("SERVERNAME", TS_SERVER_NAME);
connectionProperties.SetProperty("AMS_CONNECTION_NAME", "Sample TS Connection");
//This is the standard AMS connection editor, this would only be different if you wrote your own connector
connectionProperties.SetProperty("AMS_CONNECTOR_EDITOR", "{1C6BA545-2F59-11D5-B7E2-00010265ADC5}");
//This is the standard AMS connector, this would only be different if you wrote your own connector
connectionProperties.SetProperty("AMS_CONNECTOR", "{F6FC70F5-5778-11D6-B841-00010265ADC5}");
connectionProperties.SetProperty("AMS_USER_NAME", "");
connectionProperties.SetProperty("TMS_USER_PWD", "");
return connectionProperties;
}
//Initialize the Tracking Environment, you only need to do this once
private ITrackingEnvironment3 setupTrackingEnv(ref object mapObj)
{
IExtensionManager extentionManager = new ExtensionManagerClass();
UID uid = new UIDClass();
uid.Value = "esriTrackingAnalyst.TrackingEngineUtil";
((IExtensionManagerAdmin)extentionManager).AddExtension(uid, ref mapObj);
ITrackingEnvironment3 trackingEnv = new TrackingEnvironmentClass();
try
{
trackingEnv.Initialize(ref mapObj);
}
catch (Exception ex)
{
}
trackingEnv.EnableTemporalDisplayManagement = true;
return trackingEnv;
}
}
}
[Visual Basic .NET]
AddTrackingServerLayerButton.vb
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.TrackingAnalyst
Public Class AddTrackingServerLayerButton
Inherits ESRI.ArcGIS.Desktop.AddIns.Button
Private Const TS_SERVER_NAME As String = "hound" 'computer name of the Tracking Server
Private Const TS_SERVICE_NAME As String = "SanDiegoTaxis" 'name of the Tracking Service to open
Public Sub New()
End Sub
Protected Overrides Sub OnClick()
'load the Tracking Analyst extension
Dim trackingEnv As ITrackingEnvironment3 = setupTrackingEnv(My.ArcMap.Application)
'Create the temporal layer and add it to the display
Dim temporalLayer As ILayer = CreateTemporalLayer()
My.ArcMap.Document.FocusMap.AddLayer(temporalLayer)
My.ArcMap.Application.CurrentTool = Nothing
End Sub
Protected Overrides Sub OnUpdate()
Enabled = My.ArcMap.Application IsNot Nothing
End Sub
'Create a new temporal layer with default symbology
Private Function CreateTemporalLayer() As ILayer
Dim featureLayer As IFeatureLayer = New TemporalFeatureLayerClass()
Dim featureClass As IFeatureClass = OpenTrackingServerConnection()
featureLayer.FeatureClass = featureClass
Return TryCast(featureLayer, ILayer)
End Function
Private Function OpenTrackingServerConnection() As IFeatureClass
Dim amsWorkspaceFactory As IWorkspaceFactory = New AMSWorkspaceFactory()
Dim connectionProperties As IPropertySet = CreateTrackingServerConnectionProperties()
Dim amsWorkspace As IAMSWorkspace = TryCast(amsWorkspaceFactory.Open(connectionProperties, 0), IAMSWorkspace)
Dim featureClass As IFeatureClass = amsWorkspace.OpenFeatureClass(TS_SERVICE_NAME)
Return featureClass
End Function
'Create connection property set for Tracking Server
Private Function CreateTrackingServerConnectionProperties() As IPropertySet
Dim connectionProperties As IPropertySet = New PropertySetClass()
connectionProperties.SetProperty("SERVERNAME", TS_SERVER_NAME)
connectionProperties.SetProperty("AMS_CONNECTION_NAME", "Sample TS Connection")
'This is the standard AMS connection editor, this would only be different if you wrote your own connector
connectionProperties.SetProperty("AMS_CONNECTOR_EDITOR", "{1C6BA545-2F59-11D5-B7E2-00010265ADC5}")
'This is the standard AMS connector, this would only be different if you wrote your own connector
connectionProperties.SetProperty("AMS_CONNECTOR", "{F6FC70F5-5778-11D6-B841-00010265ADC5}")
connectionProperties.SetProperty("AMS_USER_NAME", "")
connectionProperties.SetProperty("TMS_USER_PWD", "")
Return connectionProperties
End Function
'Initialize the Tracking Environment, you only need to do this once
Private Function setupTrackingEnv(ByRef mapObj As Object) As ITrackingEnvironment3
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
Return trackingEnv
End Function
End Class