时间感知层
ArcGIS 10的支持时间感知层,其中存储的数据集随着时间的推移不断变化的状态信息。时间感知层,让你一步一步地的时间内,揭示的规律和趋势,在您的数据。例如,您可以使用时间感知层完成以下:
- 跟踪飓风路径和其他气象事件。
- 通过时间的数据,如人口或土地利用的变化,探索历史悠久的模式。
- 监控以及生产或状态的变化。
- 地图野火和洪水的进展。
- 随着时间的推移,可视化疾病的传播。
时间感知层存在的ArcGIS API的Silverlight应用程序时,地图被认为是一次意识到,地图的时间范围。时间范围定义 的时间段层的数据显示在地图上。设置在地图上的时间范围是相似的设置,因为一旦被设定的时间程度的空间范围,在地图上显示的自动更新的变化一致。每次改变地图的时间范围,时间感知层更新,以反映新的程度。
有几种方法与时间感知层。最简单的方法是使用TimeSlider控制工具包,因为它处理的过程中,为你更新地图的时间范围。或者,您也可以使用API来构建应用程序执行时间的查询,使用时间定义的过滤层,并设置地图的时间范围。
层时间感知
为了使你的图层时间感知,在ArcMap中使用“ 图层属性 “对话框中,用鼠标右键单击图层在ArcMap中,并选择” 属性“。在下面的屏幕截图所示的图层属性对话框。
时间字段必须是类型的日期。
保存时间信息,可以通过地图服务,当您发布到ArcGIS Server的地图。发布后,您可以使用一个时间感知的地图或特色服务,使用的ArcGISDynamicMapServiceLayer或的FeatureLayer类执行时态查询和查看数据的变化随着时间的推移。
影像服务,时间意识,为镶嵌数据集的支持。时间信息必须存在的镶嵌数据集的栅格的属性。要定义时间属性,使用ArcMap或ArcCatalog中,使用马赛克镶嵌数据集的数据集属性 “对话框中的默认值 “选项卡中。发布后,您可以利用时间感知内容的ArcGISImageServiceLayer图像中的服务。
镶嵌数据集属性“对话框,在下面的屏幕截图所示:
所有时间感知层具有TimeExtent的的属性提供了访问的TimeExtent类。TimeExtent类提供了详细的信息层的特性,包括时间范围和时间参考。下面的代码片段检索的时间范围为层:
TimeExtent timeExtent = (MyMap.Layers["MyFeatureLayer"] as FeatureLayer).TimeExtent;
创建日期和时间,使用时间感知层
工作时间感知层时,你可能需要创建的日期和时间的Silverlight。该平台有一个DateTime类定义一个特定的时间和TimeSpan类定义一个时间。当创建一个时间范围,适用于在地图上,或使用查询的层,两者均可使用。当创建一个新的DateTime,指定协调世界时(UTC)的时区。UTC是基于原子时的时间标准,是功能上等同于格林威治标准时间(GMT)。UTC表示加一个“Z”的时间字符串的结束。例如,2008-11-01T19:35:00.0000000Ž表示,2008年11月1日19点35分00秒UTC。
如果没有指定时区,在ArcGIS Server REST API返回的日期字符串不带时区信息。如果您使用的日期,时间查询中没有一个时区,时区可能会默认为当前本地时间。这可能会导致偏离了几个小时的日期。下面的例子演示了如何创建一个新的TimeExtent实例,并定义开始时间,使用UTC日期:
TimeExtent timeExtent = new ESRI.ArcGIS.Client.TimeExtent(); timeExtent.Start = DateTime.Parse("2002-01-01T17:33:46.0000000",CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal);
随着时间的推移,工作的ArcGIS API为Silverlight
为Silverlight的ArcGIS API提供了一个TimeSlider控制,简化了处理过程的时空数据可视化工具包的的库(ESRI.ArcGIS.Client.Toolkit.dll)。使用时间滑块,你可以在地图上显示累计数据到一个时间点,一个单一的时间点,或下降的时间范围内的数据进行过滤。使用时间滑块的好处是它处理设置地图的时间范围,时间感知层过滤,只显示当前时间范围内的数据。
成立时间滑块,添加时间感知的地图或在XAML中使用ArcGISDynamicMapService的FeatureLayer类的地图服务功能。接下来,关联的值(时间范围)的TimeSlider的时间范围内的地图使用元件结合。然后,创建数的的抽动(或停止)显示滑块(代码隐藏)。
在下面的代码示例中,功能层所表示的功能服务,包含在一个特定的时间和地点的地震。TimeSlider的最小值和最大值的值绑定到该层中的功能的开始和结束时间。地图的时间范围是必然的TimeSlider的值(时间范围)。当该功能层被初始化,它有它需要建立的TimeSlider间隔的信息。Initialize事件是用来计算和应用的时间间隔。
x:Name="MyMap" TimeExtent="{Binding ElementName=MyTimeSlider, Path=Value}"> ID="BaseLayer"Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer" />ID="Earthquakes 1970 - 2004" Initialized="FeatureLayer_Initialized"Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/Since_1970/MapServer/0" />x:Name="MyTimeSlider" Height="20" TimeMode="CumulativeFromStart" MinimumValue="{Binding ElementName=MyMap, Path=Layers[1].TimeExtent.Start, Mode=OneWay}" MaximumValue="{Binding ElementName=MyMap, Path=Layers[1].TimeExtent.End, Mode=OneWay}">
private void FeatureLayer_Initialized(object sender, EventArgs e) { List<</span>DateTime> intervals = new List<</span>DateTime>(); DateTimedt = MyTimeSlider.MinimumValue; while (dt <</span> MyTimeSlider.MaximumValue) { intervals.Add(dt); dt =dt.AddYears(2); }MyTimeSlider.Intervals = intervals; }
滑块简图表示的滑块上的一个位置,并使用指定的时间模式的TimeSlider属性。时间模式财产有效的值是CumulativeFromStart的的,TimeInstant,并TimeExtent的。默认情况下,TimeSlider包含一个拇指(TimeInstant数字),使用户能够定义一个时间范围,其范围从最低值(最早的日期)至较后日期的最大值。如果两个大拇指(TimeExtent)都包括在内,则用户可以拖动的简图来表示一个时间范围内或在滑块上的瞬间。值的时间模式属性CumulativeFromStart有一个不可见的拇指锁定到开始的TimeSlider和一个可见的拇指,是可移动的。一组的按钮和的TimeSlider成员也使您能够自动显示遍历序列的范围或间隔时间程度。该控件包含一个播放按钮,自动单步的顺序进和快退按钮,并移动拇指。一组方法和属性,使您能够控制和管理自动化。
不应该使用TimeSlider,功能层的“随需应变”的模式,因为它可能会导致太多的请求到服务器。如果你不工作了大量的数据,在快照模式下,你可以使用一个功能层。如果你的数据集大,可以考虑使用一个ArcGISDynamicMapServiceLayer。
过滤数据在地图控件的TimeExtent的财产的
在除了向TimeSlider,还有其他的技术,用于可视化的映射应用程序的时间感知层。的的地图具有TimeExtent充当时间感知层的过滤器的属性,该属性。它加载后,在地图上可以设置TimeExtent财产。在下面的代码示例中,只有数据,以满足输入时间的定义,2009年6月2日,0:00 UTC出现。
如果没有TimeExtent已经在地图上,你必须同时指定开始和结束的TimeExtent值。
private void MyMap_Loaded(object sender, RoutedEventArgs e) { TimeExtent timeExtent = new ESRI.ArcGIS.Client.TimeExtent(); timeExtent.Start= DateTime.Parse("2009-06-02T00:00:00.0000000Z", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); timeExtent.End =DateTime.Parse("2010-6-30T17:33:46.0000000Z", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); myMap中。TimeExtent timeExtent; }
所有的时间感知层的时间范围内的地图显示功能。时间感知层的TimeExtent属性不能明确,因为它是由地图,功能,或影像服务。