One possible solution is to use the CreateSelectionLayer method with IFeatureLayerDefinition interface. First, construct a temporalLayer using the first function; then construct a query Filter for each feature in the loop; and call the second function to create one individual layer per feature.
public ITemporalLayer CreateTemporalLayer(IFeatureClass featureClass, string layerName, string trackIdField, string timeField)
{
ITemporalLayer temporalLayer = new TemporalFeatureLayerClass();
IFeatureLayer featureLayer = (IFeatureLayer)temporalLayer;
featureLayer.FeatureClass = featureClass;
featureLayer.Name = layerName;
ITemporalRenderer temporalRenderer = (ITemporalRenderer)temporalLayer.Renderer;
temporalRenderer.TemporalObjectColumnName = trackIdField;
temporalRenderer.TemporalFieldName = timeField;
temporalRenderer.ShowObservationLegendGroup = true;
temporalRenderer.ShowTimeLegendGroup = true;
temporalRenderer.Renderer = (IFeatureRenderer)temporalRenderer;
return temporalLayer;
}
private ITemporalLayer CreateLayerSubset(IQueryFilter queryFilter, ITemporalLayer temporalLayer)
{
IFeatureSelection featureSelection = (IFeatureSelection)temporalLayer;
featureSelection.SelectFeatures(queryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
if(featureSelection.SelectionSet.Count == 0)
throw new NoDataException();
IFeatureLayerDefinition featureLayerDefinition = (IFeatureLayerDefinition)temporalLayer;
ITemporalLayer queryResult = (ITemporalLayer)featureLayerDefinition.CreateSelectionLayer(temporalLayer.Name, true, null, null);
return queryResult;
}