首页 / 浏览问题 / 组件GIS / 问题详情
创建缓冲区失败
38EXP 2017年07月11日

代码如下:

               Int32 id=bd_layerNetLine.Selection[0];
                if (m_lineRecordset != null)
                {
                    m_lineRecordset.Dispose();
                    m_lineRecordset = null;
                }
                m_lineRecordset = bd_pipeNet.Query("SMID = " + id, CursorType.Static);

                Datasource datasource = bd_datasource;
                m_regionDataset = datasource.Datasets["Region"] as DatasetVector;

                BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
                bufferAnalystParam.EndType = BufferEndType.Round;
                bufferAnalystParam.LeftDistance = m_leftRadius;
                bufferAnalystParam.RightDistance = m_rightRadius;

m_bufferDataset=(DatasetVector)datasource.Datasets.CreateFromTemplate(bufferName,m_regionDataset);

Boolean isTrue = SuperMap.Analyst.SpatialAnalyst.BufferAnalyst.CreateBuffer(m_lineRecordset, m_bufferDataset, bufferAnalystParam, false, true);

先在网络数据集中获取点选的线记录集为m_lineRecordset,然后根据模板创建面数据集用来存放缓冲区图层,最后生成缓冲区出错,异常信息为不支持该类型:参数为sourceRecord,即m_lineRecordset 出错。求解。

1个回答

您好,面对象只支持左缓冲,不支持右缓冲。
5,985EXP 2017年07月11日
不是吧,我是存放缓冲区的图层是面图层,用来做缓冲区的是Geoline3d类型的,是不是不支持这个类型?
线缓冲区的左缓冲距离跟右缓冲距离一致吗
是自身的问题,我想创建三维缓冲区,用错对应的类。

恩,三维缓冲区用BufferAnalyst3DParameter。

还有个问题,我创建三维缓冲区后存到模型数据集中,然后添加在场景显示出来,发现缓冲区高度出现错误。

这是代码。

  while (!m_lineRecordset.IsEOF)
                 { 
                     geo = m_lineRecordset.GetGeometry() as Geometry3D;
                     BufferAnalyst3DParameter bufferAnalyst3DParameter = new BufferAnalyst3DParameter();
                     bufferAnalyst3DParameter.EndType = SuperMap.Realspace.SpatialAnalyst.BufferEndType.Round;
                     bufferAnalyst3DParameter.BufferDistance = 1;
                     bufferAnalyst3DParameter.BufferQuality = 100;
                     Geometry3D geo3D = Geometrist3D.CreateBuffer(geo, bufferAnalyst3DParameter,bd_datasetLine3D.PrjCoordSys);
                     GeoStyle3D geoStyle3D = new GeoStyle3D();
                     geoStyle3D.AltitudeMode = AltitudeMode.RelativeToGround;
                     geoStyle3D.FillMode = FillMode3D.Fill;
                     geo3D.Style3D = geoStyle3D;
                     m_recordset.AddNew(geo3D);
                     m_lineRecordset.MoveNext();
                 }
                m_recordset.Update();

                Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
                m_layerBuffer = bd_sceneControl.Scene.Layers.Add(m_recordset.Dataset, layer3DSetting,true);
                m_layerBuffer.UpdateData();
                bd_sceneControl.Scene.Refresh();

意思是缓冲的距离不是1米吗?
缓冲距离是设置1米 但应该是以线为中心 周围距离是1米做缓冲才对啊。现在缓冲区是在线的上面了
你获取的是这个管线作为缓冲对象吗,这个管线是矢量数据风格化得到的还是模型数据啊
管线数据是三维线数据经过符号化的,然后通过鼠标选择获取某一条。如下

Selection3D[] selection = bd_sceneControl.Scene.FindSelection(true);
 
m_lineRecordset = selection[0].ToRecordset();
你把高度模式设置成绝对高度试试呢
问题解决了!是模型数据集添加到场景时的风格没有设置好,后面我直接把Geometry3D添加到跟踪图层可以正常显示。
...