由于skyline是以流的形式进行加载图层(为了响应更快),浏览哪里就显示哪里,要获取该图层的要素features集合的话,默认情况下图层是不加载的,图层不加载的话,图层中对应的features自然也获取不到。除非你手动去浏览该图层所在的位置令其加载,但是进行二次开发时要获取features就必须能让他全部一次性加载出来,手动浏览的情况也不现实。我们可以采取关闭流的方式来进行加载,也就是,先关闭流再进行图层加载。
//代码1 :关闭流加载图层
featureLayer.Streaming=false; //关闭流
featureLayer.Load();//加载图层
//代码2 :获取树上的图层
var groupID = sgworld.ProjectTree.FindItem(layerName);
var featureLayer=sgworld.ProjectTree.GetLayer(groupID);
........关闭流和加载图层等操作
..........
// 代码3:获取features集合
var features=featureLayer.FeatureGroups.Polyline.GetCurrentFeatures();//此时你会发现获取的features.Count是0。
//代码4:令图层可见
sgworld.ProjectTree.SetVisibility(groupID,true);
featurelayer = sgworld.Creator.CreateFeatureLayer("longjingguoji","FileName=D:\\data\\longjingguoji.shp;TEPlugName=OGR;","");
//此时无需再进行setvisibilty。只需关闭流再对图层进行refresh即可。
featurelayer.Streaming = false;
featurelayer.Refresh();