首页 / 浏览问题 / 组件GIS / 问题详情
二维线转三维
35EXP 2022年04月16日

使用产品:supermap iObjects.NET 10.2.1

问题描述:现在我有二维线数据,线属性表中有起点高程和终点高程,我想要转为三维的线数据,请问应该如何操作。我写的半成品代码如下,遍历到每一条记录时,我想要读取二维线数据的节点信息,但是我用GeoLine.Item属性老是报错,我写的语句是Point2DS point2Ds=geoLine.Item(0),但是会报错显示没有item这个属性。请问怎么办。可以麻烦写一段示例代码实现这个二维线转三维线功能吗

        private Dataset To3D_Line(Dataset dataset2D)
        {
            DatasetVector datasetVector2D = dataset2D as DatasetVector;
            //在数据源中创建三维线数据集
            Datasource datasource = Datasource;
            string name = datasource.Datasets.GetAvailableDatasetName("Line3D");
            DatasetVectorInfo datasetVectorInfo = new DatasetVectorInfo(name, DatasetType.Line3D);
            DatasetVector datasetVector3D = datasource.Datasets.Create(datasetVectorInfo);

            Recordset recordset2D = datasetVector2D.GetRecordset(false, CursorType.Static);
            Recordset recordset3D = datasetVector3D.GetRecordset(false, CursorType.Dynamic);
            //遍历二维线的记录集
            recordset2D.MoveFirst();
            while (!recordset2D.IsEOF)
            {
                GeoLine geoLine = recordset2D.GetGeometry() as GeoLine;
                ///这里我就不会往下写了

            }
            return datasetVector3D;
        }

1个回答

您好,根据您的描述和截图内容,可以初步判断您的实现逻辑是正常的。

关于您遇到的无法获取二维线数据中的点集数据问题,建议您截图报错信息以及二维线数据集的线数据结构(简单线(Line)?折线(Polyline)?多折线(MultiPolyline)?),以便我们更好的帮您定位问题原因。

若方便的话,建议您私信我您的联系方式,我添加您后,您将报错的二维线数据发给我,我这边通过功能代码实现来定位出错的原因。

希望可以帮到您。
2,163EXP 2022年04月18日
 while (!recordset2D.IsEOF)
            {
                GeoLine geoLine = recordset2D.GetGeometry() as GeoLine;//获取当前记录的几何对象——简单线
                //每个线对象都是简单线,子对象个数为1,只有起点和终点
                //我想要获取起点和终点,并将其转化为三维点,进而构造GeoLine3D对象
                int partCount = geoLine.PartCount;
                Point2Ds point2Ds = geoLine.Item[0];//利用Item属性获取起点、终点
            }

报错的是Item属性

您好,建议您检测一下您截图代码中的geoLine对象使用的GeoLine类是否是SuperMap.Data命名空间下的。

若是,请问您方便将您的测试代码发给我排查一下问题原因吗?
您好,请问这个问题解决了吗?
暂时没有,我在自己调试,有问题再来追评,谢谢
你好,我在超图管网介绍里看到,超图的iDesktop也是基于supermap iObjects.NET 10.2.1进行的开发,我用桌面端进行二维转三维时,速度非常快,感觉不是我上面那种遍历方法可以达到的速度。请问桌面端二维转三维的原理大概是什么样的呢?没有更高效的转换方法吗?遍历对于大数据量而言太慢了。
您好,单线程遍历的话性能确实不高,建议您可以参考采样多线程读取数据,批量转换后,单线程写入新的数据集,这样性能会有一些提升。

为了在问题解决后,便于所有人检索查看。建议以后新的问题在社区重新提问,谢谢理解
您好,GeoLine对象的节点不通过 geoLine.Item[0] 的方式获取,建议通过索引的方式获取,如:Point2D point2d = geoLine[0][0]。
...