首页 / 浏览问题 / 组件GIS / 问题详情
累加时精度出现问题
70EXP 2023年05月17日

在做面积累加的时候,9780的面积变成了10000(看下图)。

但字段设置是64位的双精度,用的也是getDouble(),而且在取其他值比如坐标X、Y都是正常取出的,为什么计算面积累加时却不行呢?

1个回答

您好,请问您截图的内容是在桌面端显示的吗?

目前能够辅助判断的信息较少,无法准确的判断您描述的异常原因,如果方便的话建议您提供一下信息有助于我们更加准确的为您分析异常原因:

  • iObjects Java 组件使用的是哪个版本呢?
  • 在 Java 代码中调试的时候,使用 getDouble() 接口的时候返回的数据值是多少呢,是 10000 还是 9708.55?
  • 如果方便的话,建议您可以提供计算累加面积的代码逻辑截图以及debug过程中 getDouble() 接口的值输出情况。

希望可以帮到您。

2,158EXP 2023年05月17日

是桌面端显示的。iObject Java是11i。getDouble()返回的是10000。

以下是截图

您好,根据您提供的代码截图可以看出,是直接读取的数据集属性表中的字段值,不难判断您读取的属性表对应的数据集应该是二维矢量面数据集,建议您可以从记录集 Recordset 中直接获取几何要素 Recordset.getGeometry(),此时获取的几何要素类型应该是二维矢量面 GeoRegion,将 Geometry 转换成 GeoRegion 后,通过 GeoRegion 提供的 getArea() 接口计算二维矢量面对象的面积。

此时计算的面积才是真正当前二维矢量面要素的面积,而存储在数据集属性表中的非系统字段值是可以被修改的,不一定是真实的面积,就如同您在桌面端浏览属性表时看到的值。

最后,记录集的使用方式与数据库游标类似,您的代码中获取的永远是第一行的记录值,也就是 10000,并没有使用 Recordset.moveNext() 接口将记录指向下一行。关于记录集 Recordset 的使用方式建议参考 iObjects Java 组件帮助文档。

谢谢您专业的回答,已解决。忘写了moveNext()了
...