如何获取三维缓冲区包含的网络数据集的对象

0 投票
通过三维线geometry创建了三维缓冲区geoModel3D,

Geometry3D geoModel3D = Geometrist3D.CreateBuffer(geometry, bufferAnalyst3DParameter, prjCoordSys);

然后遍历网络数据集得到recordset,通过SpatialQuery3D.SpatialQuery判断三维线和缓冲区的关系,应该是Contain,为什么得到的是Unknow呢,请问应该如何获取缓冲区内包含的三维线呢?
10月 11, 2019 分类:  72次浏览 | 用户: 亚特兰蒂斯丹丹 初出茅庐 (51 分)

1个回答

0 投票
您好,因为SpatialQuery3D.SpatialQuery支持的数据类型为点或者模型数据,你要判断它们之间的关系,用SpatialQuery3D.GetRelativePosition就行了。至于你说的如何获取缓冲区内包含的线?没太明白,你本身就是用线做的缓冲区,那个几何对象你肯定是已经有了呀
10月 12, 2019 用户: 邬袁凯 名扬四海 (2,429 分)
geometry是三维线,类型是GeoLine3D,通过geometry创建缓冲区得到geoModel3D。但是当我使用SpatialQuery3D.GetRelativePosition的时候(代码如下)会报错,提示geometry几何对象类型不合法。所以我通过SpatialQuery3D.SpatialQuery得到它们的关系,结果得到的PositionMode是Unknow。

Geometry3D geoModel3D = Geometrist3D.CreateBuffer(geometry, bufferAnalyst3DParameter, prjCoordSys);

SpatialQuery3D.GetRelativePosition(geometry,geoModel3D,);
我的需求是通过某一条三维线创建了一个缓冲区,然后需要获取这个缓冲区所包含的Network图层所有的三维线。
您好,我看了下SpatialQuery3D这个类是只能模型与模型 模型与点之间的,如果你要判断几何体包含三维线,可以给两种思路

1.把线转成点,再计算出线的中点,判断线的两个端点和线的中点与模型的关系去判断线与模型的关系(自己写算法)

2.把线缓冲成体,半径小一点,比如设置0.1,使其几乎和你原来的线体积差不多,然后让这个缓冲体与另外一个缓冲体做模型布尔运算BooleanOperator3D
谢谢您提供的思路,可以实现呢
您好,还需要请教一个问题,不使用高度量算,如何直接获取两条三维线之间的垂直间距呢?有相关函数或者思路可以提供吗
不太明白,两条线的垂直间距?可以理解成两个线的中点之间的距离
是的,需求是计算专题图的两条三维线之间的垂直间距,没有相关的函数是吧,这样操作的话就需要自己写算法实现了
您好,你要算距离就geometrist.Distance可以算,你要算高度就两点Z值相减就是了呀
...