首页 / 浏览问题 / 组件GIS / 问题详情
SpatialQuery3D.SpatialQuery接口异常
4EXP 2020年07月15日
public static List<int> SpatialQuery(
	Geometry3D geometry,
	Recordset modelRecordset,
	PositionMode posMode
)

我使用上述接口对模型数据集进行空间关系运算是,后台不停的输出如下异常,导致查询速度非常非常慢,最终能查询出结果,但耗时可能长达两分钟,导致业务完全不可用。

这是什么原因?以下是我的主要代码:

rs.moveFirst();
            while (!rs.isEOF()) {
                GeoModel3D geo = (GeoModel3D) rs.getGeometry();
                int[] ids = SpatialQuery3D.spatialQuery(geo, recordset2, PositionMode.INTERSECTS);   // 非常非常慢
                if (ids != null && ids.length > 0) {
                    CollisionResult cr = new CollisionResult();
                    cr.add(coll.getDataset(), ids);
                    results.add(cr);
                }
                geo.dispose();
                
                rs.moveNext();
            }

使用的产品为iserver10版本,目前官方最新正式版。

windows 10 企业版 x64。

数据类型:udbx

测试数据:

链接: https://pan.baidu.com/s/1AKPt3sYHfxdNK6yhR2K_wA 提取码: 5zk3

1个回答

你好,请问您这边用代码去获取模型数据进行空间分析也是这么慢吗?
张亮
1
2,842EXP 2020年07月16日
我已经贴出了代码,你说的是啥意思?
您debug一下看一下 传入 SpatialQuery3D.spatialQuery()的参数是否有空的,注意Geometry3D的坐标系要与查询的Recordset坐标系一致
没有空的,测试数据也发了,代码也很简单,拿去重现一下啊。

我是拿道路和标志标牌进行相交查询。

第一个参数就是唯一的那条道路(数据中只有一条道路),

第二个参数是所有的标志标牌。

第三个参数是PositionMode.INTERSECTS

如果任何一个参数是空的,很快就会报异常或者返回空了,怎么可能要这么久!
你好,经过测试,10.0.0 10.0.1版本的Java组件该接口确实有问题,10.1.0的版本则可以正常运行。我这跟研发上报缺陷,建议您先暂时更换10.1版本链接: https://pan.baidu.com/s/1faMY9v-q_OG4PlzIRRokqQ 提取码: pmjn
好的,谢谢!
这个版本你测试过吗?为什么我替换成这个版本,还是不停的打印信息,跟之前没有任何差别。
我检查了一下,10.1.0 版本用到的cgal文件跟10.0.1是一摸一样的,而这个打印输出就是cgal文件相关,

CGAL-vc110-mt-4.12.dll

CGAL_Core-vc110-mt-4.12.dll

这两个文件一摸一样,没有解决问题。
...