在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. VC++ MFC文件的移动复制删除更名遍历操作

    1.判断文件是否存在 利用CFile类和CFileStatus类判断 CFileStatus filestatus; if (CFile::GetStatus(_T("d://softist ...

  2. JavaScript的函数进阶

    函数进阶 1立即执行函数表达式 立即执行的函数表达式的英文全称为Immediately Invoked Function Expression,简称就为IIFE.这是一个如它名字所示的那样,在定义后就 ...

  3. vuecli脚手架+vue+vuex实现vue驱动的demo。

    哎呀呀呀,现在大家都要会Vue ||  React,否则感觉跟这个前端的世界脱节了一样. start: vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack-de ...

  4. mysql重点,表查询操作和多表查询

    表单查询 1. 完整的查询语句语法 select distinct(* or 字段名 or 四则运算 )from 表名 where 条件 group by 条件 having 条件 order by ...

  5. Cocos2d-x通过Jni实现C++与Java相互调用

    在cocos2dx项目中与运营平台(java sdk)对接时使用了JNI. 通过C++调用Java 在JniUtil.h文件中如下实现: #ifndef _JNIUTIL_H_ #define _JN ...

  6. Halt- Linux必学的60个命令

    1.作用 halt命令的作用是关闭系统,它的使用权限是超级用户. 2.格式 halt [-n] [-w] [-d] [-f] [-i] [-p] 3.主要参数说明 -n:防止sync系统调用,它用在用 ...

  7. 改变 HTML 样式 Object.style.property=new style;

    改变 HTML 样式 HTML DOM 允许 JavaScript 改变 HTML 元素的样式.如何改变 HTML 元素的样式呢? 语法: Object.style.property=new styl ...

  8. Entity Framework Code First 模式-建立一对一联系

    使用的例子为教室(ClassRoom),教室里的多媒体设备(Device),一个教室里有一套多媒体设备,一套多媒体设备只放在一个教室里. 1.Data Annotations方式 需要在任意一方的主键 ...

  9. leetcode-77-组合-字典序

    题目描述: 第一次提交: class Solution: def combine(self, n: int, k: int) -> List[List[int]]: res = [] def b ...

  10. C语言利用动态数组实现顺序表(不限数据类型)

    实现任意数据类型的顺序表的初始化,插入,删除(按值删除:按位置删除),销毁功能.. 顺序表结构体 实现顺序表结构体的三个要素:(1)数组首地址:(2)数组的大小:(3)当前数组元素的个数. //顺序表 ...