zoukankan      html  css  js  c++  java
  • skyline中遍历fly工程树

    在skyline二次开发过程中,做空间分析总是要去读取工程中的shp图层。假设想获取工程树中“建筑物”图层,图层结构如下:

    传统的方法是:

    var itemId=SGWorld.ProjectTree.FindItem("图层\中模\建筑物");
    var layer=SGWorld.ProjectTree.GetLayer(itemId);
    

    这样有个坏处是,工程树配好了不能再改了。或者说一旦改fly文件的工程树结构了,就得改代码。否则就无法获取“建筑物“。这样有个想法是,在fly工程首次加载的时候,就遍历工程树,把所有的shp图层、以及图层在工程树的图层名存放在数组中。

    代码如下:

    //遍历工程树,将所有的layer图层、图层名都存放在数组中
        var players=new Array();
    var playersName=new Array();
    function BuildTreeRecursive(current) { SGWorld = TE.ISGWorld61(); try{ while (current > 0) { itemName = SGWorld.ProjectTree.GetItemName(current); if (itemName != "地形修改" && itemName != "位置" && itemName != "PresentationRoute") { if (SGWorld.ProjectTree.IsGroup(current)) { if (SGWorld.ProjectTree.IsLayer(current)) { var name = SGWorld.ProjectTree.GetItemName(current); var layer = SGWorld.ProjectTree.GetLayer(current); playersName[playersName.length] = name; players[players.length] = layer; } else { var childItem = SGWorld.ProjectTree.GetNextItem(current, 11);//CHILD – 11,The first child item of ItemID. TR.BuildTreeRecursive(childItem); } } } current = SGWorld.ProjectTree.GetNextItem(current, 13); } } catch (e) { alert(e)} }

     我们在上面的基础上再添加一个方法,就是根据图层名获取图层:

    //下面是根据工程树中layer图层的名字获取layer
        function GetLayerByLayerGroupName(layerGroupName) {
            if (playersName.length>0) {
                for (i = 0; i < playersName.length; i++) {
                    if (playersName[i] == layerGroupName)
                        return players[i];
                }
            }
            else { alert("图层名数组为空,请检查TR.BuildTreeRecursive()方法是否执行"); }
        };

    这样的话,我们在空间分析时,要找建筑物图层,就可以调用上面的方法就可以了,如下:

    var layerGroupName="建筑物";
    var buildLayer=GetLayerByLayerGroupName(layerGroupName);
    

      上面返回的buildLayer就是建筑物图层。

    欢迎关注:www.skylinecn.com!

  • 相关阅读:
    c#查找窗口的两种办法
    也说自动化测试
    定位bug的基本要求
    c#调用GetModuleFileNameEx获取进程路径
    对比PG数据库结构是否一致的方法
    C#调用endtask
    提bug
    接口测试的结果校验
    ProcessExplorer使用分享
    C++如何在r3静态调用NT函数
  • 原文地址:https://www.cnblogs.com/pengjw/p/3447531.html
Copyright © 2011-2022 走看看