三维场景中 如何进行框选查询管线和管点数据

0 投票
您好,如题,在用C#组件开发做管线和管点的框选查询时候,管点为Point3D,管线为Line3D,我是应该把Point3D转GeoPoint3D再转成GeoModel3D,然后用

mode = PositionMode.IntersectsOrContains;

……

IDs = SpatialQuery3D.SpatialQuery(model3d, recordset, mode);

selectedLayer.Selection.AddRange(IDs.ToArray());
recordset = selectedLayer.Selection.ToRecordset();

这种思路可以么(还没转成功)?还是有其他的思路?还是管线管点可以不用转GeoModel3D,可以直接框选查询?
7月 25, 2018 分类:  736次浏览 | 用户: 数据流 初出茅庐 (39 分)
修改于 7月 25, 2018 用户:数据流

1个回答

0 投票
 
已采纳
您好!您可以创建一个选择集Selection3D,用选择集来获取所对应的记录集Recordset,然后获取记录集里的字段信息输出即可。
7月 25, 2018 用户: 胡延南 名扬四海 (3,300 分)
采纳于 7月 26, 2019 用户:数据流
谢谢您的回答,但是现在问题是获得不了selection3D,点选的话有对应的接口,但是框选怎么获得框选范围内的选择集?
您看这个行不行?Selection3D[] selection = sceneControl.Scene.FindSelection(true);
sorry,我可能没描述清楚这个问题,我的重点是想知道怎么框选,怎么框选中范围内的数据集,框选成功后才用到您说的那个步骤:

Selection3D[] seletion3D = sceneControl.Scene.FindSelection(true);

Recordset recordSet = seletion3d[0].ToRecordset();
您好!SuperMap iDesktop桌面里有多边形查询这个功能,点击这个按钮可以在场景中绘制一个面,该面范围内的模型会被选中,您是指这个吗?用这个ModelBuilder3D.LinearExtrude()和

List<int> list =   SpatialQuery3D.SpatialQuery(geomodel3d, recordset,PositionMode.Contains);

如果是鼠标点击在场景中直接框选进行查询组件里还没有这个接口。
您好,我原来试过多边形查询,好像这个多边形查询的对象必须是GeoModel3D对象,如果不是模型的话,这个按钮是灰色不可用的,对于Point3D或line3D无法进行框选。谢谢您咯,我现在思路一是数据转成GeoModel3D。二是在把画的三维矢量面转到二维上再进行查询。
您好!我这边测试了一下,桌面三维点和三维线是可以进行多边形查询的,只不过要确保它的高程在0以上。

好奇怪,我这显示是灰色……

您好!901版本的不支持三维点、三维线,多边形查询只支持模型数据集。910版本的可以,这个版本目前在测试阶段。

您好!多边形查询画面查询模型数据集接口为List<int> list =   SpatialQuery3D.SpatialQuery(geomodel3d, recordset,PositionMode.Contains);

主要代码如下:

...