首页 / 浏览问题 / 三维GIS / 问题详情
三维属性字段查询undefined
64EXP 2017年09月06日
iClient 字段属性查询,字段名查出来了,但是字段名所对应的值全部都是undefined?请问是什么原因呢?

1个回答

您好,请您清一下客户端缓存。

停止iServer服务,打开运行输入“%appdata%”把应用目录“AppData\LocalLow\SuperMap”和“AppData\Local\SuperMap”目录删了,iServer目录下\webapps\iserver\output”删了,重启iServer服务即可。
邹涛
1
3,389EXP 2017年09月06日
你好,按照您的方法删除除掉相应的目录之后,场景上的模型不见了,真的就不见了,所以对象选择事件都没法实现,这是怎么回事?
您好,删的都是缓存目录,是不会消失的哦。

服务重启了吗?
是的服务重启了,然后我试了一下用范例的程序加载了一下我的场景图层,也是字段正确显示,对应的值是undefind,然后我确定在我的工作空间中数据信息是正常存在的
场景能看见了么?是什么缓存的数据?

是SQL查询,还点选查询?把您查询的代码贴我瞧瞧。
//控件初始化完成后的回调函数,初始化完成之后才能进行数据加载
            function initCallback()
            {
                //获取地球控件场景,控件和场景是一对一的捆绑关系
                scene = sceneControl.get_scene();
                scene.open(sceneUrl, "shexiangtou@xiaopin");
                //指定场景的服务器地址
                var sceneAddress = sceneUrl;

               //指定图层名字
                var layerName = "广告牌3d2@要素点位置";
                
                //获取三维图层信息列表对象实例
                var layer3DServicesList = sceneControl.get_layer3DServicesList();
                
                //从指定的服务器获取场景的图层服务信息,获取成功返回 True
                var bLoad = layer3DServicesList.load(sceneAddress, "shexiangtou@xiaopin");
                if(bLoad)
                {
                    var layer3DServiceInfo = layer3DServicesList.get_item(layerName);
                    var dataName = layer3DServiceInfo.get_dataName();            
                //打开图层
                var layer3D = scene.get_layer3Ds().add(sceneAddress, layerName, dataName, SuperMap.Web.Realspace.Layer3DType.VECTOR);
                                        
                if (layer3D != null)
                {
                    //获取图层的地理范围,并飞行到该范围
                    var geobound = layer3D.get_bounds();   
                
                    scene.get_flyingOperator().flyToBounds(geobound);
                }
                }
                //为场景控件添加一个选择侦听事件。
                sceneControl.addEvent("objectSelected",getFieldandValue);
            }
            
            //当在场景控件上进行选择操作时,触发该事件。
            function getFieldandValue(selection3Ds)
            {
                var layer3D = scene.get_layer3Ds().get_item("广告牌3d2@要素点位置");
                var fieldInfo = "";
                fieldCount = layer3D.get_fieldInfos().get_count();
                for(var i=0;i<fieldCount;i++)
                {
                    fieldInfo += layer3D.get_fieldInfos().get_item(i).get_name() + ":";
                    fieldInfo += layer3D.getFieldValue(i) + "; ";
                    
                }
                alert(fieldInfo);
            }
点选查询,我用浏览器开发工具打断点测试,layer3D是null?哪里出问题了呢?scene.get_layer3Ds().add(sceneAddress, layerName, dataName, SuperMap.Web.Realspace.Layer3DType.VECTOR);参数分别是场景所在的服务地址,图层名称,这个图层所对应的数据集名称,图层类型,不清楚为什么是空的呢?
您是代码添加的图层?可以试试把图层保存到场景,打开场景再获取。

缓存的格式是矢量缓存?

太感谢您了,和您这个交流的过程中发现了解决办法,谢谢谢谢yesheartheart

我也遇到类似问题,按您的方法解决啦.赞!!!
...