实现了ArcMap中的时间滑块的基本功能,通过要素设置时间属性,是数据在不同的时间显示不同的内容。数据的话使用的是ArcGIS自带的数据,我把它放在程序的 根目录下了,需要的同学可以下载学习下,有不足的地方请见谅。
主界面
界面中可以看到有两种方法,事实是第一种方法没有调试好,一直出现问题,方法二其实是方法一的简化版,有兴趣的同学可以自行下载代码调试下,不过方法二中也大致实现了时间滑块的功能。
效果图
主要用到了两个函数,具体的大家可以可以下载代码查看:
private void DoReplay(IFeatureLayer pFLyr)
{
try
{
ITimeZoneFactory pTimeZoneFactory = new TimeZoneFactoryClass(); ITimeData pTimeData = pFLyr as ITimeData;
pTimeData.UseTime = true;
String slocalTimeZoneWId = pTimeZoneFactory.QueryLocalTimeZoneWindowsID();
ITimeReference pTimeReference = pTimeZoneFactory.CreateTimeReferenceFromWindowsID(slocalTimeZoneWId);
if (!pTimeData.SupportsTime) return;
pTimeData.UseTime = true;
ITimeTableDefinition pTimeDataDef = pFLyr as ITimeTableDefinition;
pTimeDataDef.StartTimeFieldName = "Date_Time";
pTimeDataDef.TimeReference = pTimeReference;
//获取图层时态数据时间
pLayerTimeExtent = pTimeData.GetFullTimeExtent();
//激活timer控件
timer1.Enabled = true;
pCount = 0;
}
catch (Exception Err)
{
string msg = Err.Message;
}
}
private void Display(int count)
{
//IMap pMap = axMapControl1.Map;
IActiveView pActiveView = pMap as IActiveView;
IScreenDisplay pScreenDisplay = pActiveView.ScreenDisplay;
ITimeDisplay pTimeDisplay = pScreenDisplay as ITimeDisplay;
ITime startTime = pLayerTimeExtent.StartTime;
ITime endTime = (ITime)((IClone)startTime).Clone();
//每次递进12小时
((ITimeOffsetOperator)startTime).AddHours(0.5 * (count - 1));
((ITimeOffsetOperator)endTime).AddHours(0.5 * count);
ITimeExtent pTimeExt = new TimeExtentClass();
pTimeExt.SetExtent(startTime, endTime);
pTimeExt.Empty = false;
pTimeDisplay.TimeValue = pTimeExt as ITimeValue;
pActiveView.Refresh();
}
ArcEngine的时间滑块用到的主要接口:ITimeData、ITimeTableDefinition 、ITimeDataDisplay、ITimeExtent等等:代码示例下载