首页 / 浏览问题 / 三维GIS / 问题详情
空间查询的记录集如何保存并制作专题图
38EXP 2017年07月20日

空间查询结果如下:该相交查询可以得到一个Recordset,那么如何把这个记录集存储下来并以此来制作专题图呢

1个回答

您好。

储存记录集:您可以新建一个线数据集(dataset.Create(DatasetVectorInfo),然后对线数据集设置字段信息(datasetVector.FieldInfos.Add()),接着获取数据集的记录集,最后批量添加记录Recordset.AddNew(Geometry, Dictionary<(Of <(String, Object>)>))。

制作专题图:新建一个专题图对象(Theme3Dxxxxxx()),然后向场景添加专题图图层(Add(Dataset, Theme3D, Boolean))。
5,560EXP 2017年07月21日

您好。我已经用Datasource.RecordsetToDataset()生成一个矢量数据集了,但是生成专题图时不显示图形。如下图为空间查询的结果:

下图是把查询结果存到矢量数据集中并制作专题图,

如题 没有专题图形。

下面是代码:

 Theme3DGraph m_theme3dGraph = MakeTheme3DGraph(nType);

                //将三维统计专题图添加到三维场景中
Layer3DDataset layerPipeThemeLine = mSceneControl.Scene.Layers.Add(dataset, m_theme3dGraph, true, "layerThemeGraph");

     private Theme3DGraph MakeTheme3DGraph(int type)
        {
            Theme3DGraph theme3dGraph = null;
            try
            {
                //制作三维统计专题图
                theme3dGraph = new Theme3DGraph();
                theme3dGraph.GraduatedMode3D = GraduatedMode3D.Constant;
                theme3dGraph.IsGraph3DTextDisplayed = true;
                theme3dGraph.MaxGraphSize = 50;
                theme3dGraph.MinGraphSize = 0;
                theme3dGraph.BarWidth = 1;
                theme3dGraph.StartAngle = 0;

                TextStyle style = new TextStyle();
                style.ForeColor = Color.White;
                style.FontName = "微软雅黑";
                style.Weight = 1;
                style.Alignment = TextAlignment.BaselineLeft;
                style.Outline = true;
                theme3dGraph.Graph3DTextStyle = style;

                switch (type)
                {
                    case 1:
          theme3dGraph.Graph3DType = Theme3DGraphType.Bar;
          heme3dGraph.Graph3DTextFormat = Theme3DGraphTextFormat.Value;

           //初始化统计图子项并设置子项风格
           Theme3DGraphItem item_Bar1 = new Theme3DGraphItem();
           item_Bar1.GraphExpression = "PipeDiameter";
           item_Bar1.Caption = "管径";
     item_Bar1.UniformStyle.FillForeColor = Color.FromArgb(200, 115, 136, 193);
     item_Bar1.UniformStyle.FillMode = FillMode3D.LineAndFill;
     item_Bar1.UniformStyle.IsMarkerSizeFixed = true;

     //将专题子项添加到专题图中
     theme3dGraph.Add(item_Bar1);
     break;

插入过断点发现没有错误

隐藏掉其他图层然后refresh下场景,看看有没有呢?
我就只有一个图层,直接把dataset按照一定的风格是可以显示。例如:

Layer3DDataset layerPipeLine =mSceneControl.Scene.Layers.Add(dataset, layer3DSetting, true, "Line");

但是把专题图对象添加进去就不显示了。例如:

Layer3DDataset layerPipeThemeLine = mSceneControl.Scene.Layers.Add(dataset, m_theme3dGraph, true, "layerThemeGraph");
...