在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!

skyline中遍历fly工程树的更多相关文章

  1. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  2. java 中遍历hashmap 和hashset 的方法

    一.java中遍历hashmap:    for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {     String ...

  3. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  4. Freemarker中遍历List以及内置函数使用

    在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户. 那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Free ...

  5. asp.net中遍历界面上所有控件进行属性设置

    * 使用方法: *  前台页面调用方法,重置:    protected void Reset_Click(object sender, EventArgs e)        {           ...

  6. Java中遍历Map的几种方法

      转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...

  7. VC中遍历目标进程中的模块

    VC中遍历目标进程中的模块 MFC代码win32 也可以用 在下面代码进行修改转换就可以了CString strModule; 可以换成 char* 但是MODULEENTRY32结构中的szModu ...

  8. Java中遍历Map对象的方法

    方法一: 在for-each循环中使用entries来遍历 这是最常见的遍历方式,在需要获取key和value时使用. Map<Integer, Integer> map = new Ha ...

  9. java中遍历map对象的多种方法

    在Java中如何遍历Map对象   How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...

随机推荐

  1. mvc和mvvm区别

    mvc和mvvm区别 MVC和MVVM的区别其实并不大.都是一种设计思想. 主要就是MVC中Controller演变成MVVM中的viewModel. MVVM主要解决了MVC中大量的DOM操作使页面 ...

  2. C#字符串、字节数组和内存流间的相互转换 - IT浪潮之巅

    定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串=>比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes(&q ...

  3. Appium测试过程中,建议使用谷歌输入法。用搜狗输入法报错报找不到元素,卡住

    1. 手机使用谷歌输入法,在登录页面输入密码时输入数字时卡住报错 代码: 手机卡住 页面:看到页面上没有显示数字,所以卡住报错

  4. final、static、package、import,和内部类、代码块总结

    final: final是最终修饰符,可以修饰类.成员方法.变量 final修饰的类无法被继承 final修饰的方法无法被重写 final修饰的变量无法被再次赋值,变为了常量 final修饰的引用数据 ...

  5. mybatis中处理结果集映射

    单行结果集映射: 接口中方法返回值定义为Map类型,sql语句的resultType属性设置为map即可.这种情况默认把列名作为key,列中的值作为value. 也就是说用map<Strirng ...

  6. Java A*算法搜索无向图最短路径

    网上看了很多别人写的A*算法,都是针对栅格数据进行处理,每次向外扩展都是直接八方向或者四方向,这样利于理解.每次移动当前点,gCost也可以直接设置成横向10斜向14. 但是当我想处理一个连续的数据集 ...

  7. <day006>bootstrap的简单学习 + 轮播图

    任务1:bootstrap的简单学习 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta c ...

  8. 12-5-上下文this

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. vue 返回上一页

    参考:https://www.cnblogs.com/chenguiya/p/9118265.html 注:需为history模式 方法一: @click="back" back( ...

  10. CSRF spring mvc 跨站请求伪造防御(转)

    CSRF CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一 ...