skyline的TerraExplorer api for js二次开发时,图层中的features无法获取或者features对象没有包含任何单个feature。

来源:互联网 发布:设置百度为主页 mac 编辑:程序博客网 时间:2024/06/06 04:30

由于skyline是以流的形式进行加载图层(为了响应更快),浏览哪里就显示哪里,要获取该图层的要素features集合的话,默认情况下图层是不加载的,图层不加载的话,图层中对应的features自然也获取不到。除非你手动去浏览该图层所在的位置令其加载,但是进行二次开发时要获取features就必须能让他全部一次性加载出来,手动浏览的情况也不现实。我们可以采取关闭流的方式来进行加载,也就是,先关闭流再进行图层加载。


//代码1 :关闭流加载图层                featureLayer.Streaming=false; //关闭流                 featureLayer.Load();//加载图层

此时解决了图层加载的问题,但是注意:在工程树上图层已经存在的layer(比如引入的发布数据),该图层可直接通过图层名获取的要素图层。代码如下:


//代码2 :获取树上的图层         var groupID = sgworld.ProjectTree.FindItem(layerName);         var featureLayer=sgworld.ProjectTree.GetLayer(groupID);         ........关闭流和加载图层等操作         ..........// 代码3:获取features集合          var features=featureLayer.FeatureGroups.Polyline.GetCurrentFeatures();//此时你会发现获取的features.Count是0。

         也就是说features对象里面是没有内容的。本人经过多次调试发现原来,这种情况 必须先设置图层为visible可视,不然图层还是不会进行加载的,可能也是skyline为了提高渲染速度才这样设计的,在客户没有要求显示时(图层加载也就没什么意义),尽量减少不必要的开销,而不对该图层进行加载。故,在关闭流的前面加上一下语句即可:


//代码4:令图层可见          sgworld.ProjectTree.SetVisibility(groupID,true);

       

          在这种情况下正确的代码运算顺序为:代码2》》代码4》》代码1》》代码3。才能获取到图层中的features集合。
          第二种情况:图层是自己新添加的构建的如: 

featurelayer = sgworld.Creator.CreateFeatureLayer("longjingguoji","FileName=D:\\data\\longjingguoji.shp;TEPlugName=OGR;","");  //此时无需再进行setvisibilty。只需关闭流再对图层进行refresh即可。        featurelayer.Streaming = false;          featurelayer.Refresh();




阅读全文
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小狗被邻居家大狗咬死了怎么办 狗狗死胎在腹中怎么办 小狗不吃饭没精神怎么办 虎皮鹦鹉生蛋了怎么办 钢笔替换芯干了怎么办 水芯钢笔不出水怎么办 被红斑蛇咬了怎么办 狗生完小狗不爰吃饭怎么办 比熊见了狗就叫怎么办 小狗到新主人家里吐怎么办 床上有小绿叶蝉怎么办 腰椎间盘轻微突出怎么办 养的小白兔死了怎么办 小鸡嘴边起很大的疙瘩怎么办 兔子下牙齿断了怎么办 刚种的花蔫了怎么办 鲜切花花朵蔫了怎么办 兔子扭伤脚肿了怎么办 兔子的耳朵肿了怎么办 家里养兔子大了怎么办 幼兔不吃兔粮怎么办 大兔子咬小兔子怎么办 买的小兔子拉稀怎么办 半个月的小兔子怎么办 母兔下崽没奶怎么办 母松鼠下崽后没有奶怎么办 母猫下崽后小猫没奶吃怎么办 母兔产后没奶水怎么办 兔子生崽了不管怎么办 兔子下小兔不管小兔怎么办 兔子下小兔示喂奶怎么办 兔子生完小兔不喂奶怎么办 小兔子生宝宝了怎么办 人摸了小兔崽怎么办 狗狗尿道有脓怎么办 笼养母兔下崽了怎么办 小羊羔站不起来怎么办 兔子不让小兔子吃奶怎么办 兔子不吃东西没精神怎么办 母兔没有初奶怎么办 兔子只喝水不吃东西怎么办