首页 / 浏览问题 / 组件GIS / 问题详情
请问怎么获取军标的XYZ值?
14EXP 2017年03月27日
数据集里面找不到军标的Z值,请问怎么获取呢?

1个回答

您好,这儿要纠正一下您对概念的理解。

首先标绘符号确实是存在数据集中的,标绘符号是以对象的形式(GeoGraphicObject)存在数据集中的。所以数据集里是找不到军标的Z值哈,正确思路是通过数据集获取数据集的记录集,通过某一条记录集(某一个标绘符号)来获取。一般是通过几何对象的风格来获取的,设置的时候也是哈。

比如:

        void sc_ObjectAdded(object sender, ObjectAddedEventArgs e)
        {
            Layer3D layer = e.Layer3D;
            if (null == layer)
            {
                return;
            }

            if (layer.Type != Layer3DType.Dataset)
            {
                return;
            }
            DatasetVector dataset = null;
            Layer3DDataset layerDataset = layer as Layer3DDataset;
            if (layerDataset.Dataset.Type == DatasetType.CAD && layerDataset.IsEditable == true)
            {
                dataset = layerDataset.Dataset as DatasetVector;
            }

            if (null == dataset)
            {
                return;
            }

            Recordset rect = dataset.GetRecordset(false, CursorType.Dynamic);
            bool bExist = false;
            bExist = rect.MoveFirst();
            Geometry geo = null;
            while (bExist)
            {
                Geometry tempGeo = rect.GetGeometry();
                if (null == tempGeo)
                {
                    bExist = rect.MoveNext();
                    continue;
                }

                if (tempGeo.ID == e.ID)
                {
                    geo = tempGeo;
                    break;
                }

                bExist = rect.MoveNext();
            }

            GeoGraphicObject geoGo = geo as GeoGraphicObject;
            // 对象风格的底部高层
            double height = geoGo.Style3D.BottomAltitude;

            MessageBox.Show("绘制的对象是:" + geoGo.GetSymbolName() + "\n" + "GeometryID = " + geoGo.ID);
        }

具体您在我们帮助手册搜索GeoGraphicObject这个类,再看style3D即可。

3,389EXP 2017年03月27日
rect.GetGeometry();我用这个方法获取不到当前记录的几个对象怎么办?
肯定可以的。

或者您说一下您是怎么获取的吧?
Recordset recordset = layer3D.Selection.ToRecordset();
            SuperMap.Data.Geometry geo = recordset.GetGeometry();

就是这样啦,获取到的为null
选择集转记录集啊,

问一下 您的数据是缓存数据吗?缓存数据是不能直接转的哦。
不是啊,数据集里面有的呀, Recordset recordset = datasetVector.Query(ID, SuperMap.Data.CursorType.Static);
            SuperMap.Data.Geometry geo = recordset.GetGeometry();

我这样也不得
您场景加载的不是缓存数据集?

那应该是可以的啊,您再确定一下呢
不是缓存的数据集,是数据源里的数据集,我调这方法它转不了,我再试试吧
晕,您直接说您场景图层类型是什么,用代码获取的图层类型,我看看就知道了。

如果确实获取不到,我跟您远程看看。用TeamViewer远程
CAD类型的啊
嗯,不好意思哈,我都晕了,忘记您是用的军标,肯定是CAD类型的,您那网络好吗,发TeamViewer号直接远程看看吧

我加了个字段存高度啦surprise

自己存自己取wink

6666666

这个思路也挺好,点个赞。
谢谢你啦
不客气。
...