如何从 Oracle Spatial 读取不适合 .NET 小数类型的纵坐标值?

发布于 2024-11-16 03:27:24 字数 528 浏览 3 评论 0原文

我正在尝试使用 ODP.NET 通过 C# 读取 Oracle Spatial 数据。

在某些情况下,我的 Oracle Spatial 数据在 SDO_GEOMETRY 的 OrdinateArray 中的数值太大,.NET 无法处理。因此,当我尝试读取 SDO_GEOMETRY 值时,它会抛出“System.OverflowException:算术运算导致溢出”。就我而言,纵坐标值小数点后的数字太多,我不关心丢失这些信息。

我的代码基于此处的示例应用程序: http:// www.orafaq.com/forum/mv/msg/27794/296419/0/#msg_296419

我看到那里是使用数据集的 SafeMapping 方法来读取不适合 Decimal 类型的 Number 类型,但我不知道如何将其应用于 SDO_GEOMETRY 类型的内部部分。

有办法解决这个问题吗?

I am trying to read Oracle Spatial data with C# using ODP.NET.

In some cases, my Oracle Spatial data has Number values in the SDO_GEOMETRY’s OrdinateArray that are too big for .NET to handle. So, when I try to read the SDO_GEOMETRY values, it throws a “System.OverflowException: Arithmetic operation resulted in an overflow”. In my case, the ordinate values just have too many digits after the decimal point, and I don’t care about losing this information.

My code is based on the sample app here: http://www.orafaq.com/forum/mv/msg/27794/296419/0/#msg_296419

I see there are SafeMapping approaches with DataSets to read Number types that won’t fit into Decimal types, but I don’t see how to apply this to an internal part of the SDO_GEOMETRY type.

Is there a way around this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲鸠 2024-11-23 03:27:24

“OrdinateArray”的 Oracle 数据类型是什么?如果它是用户定义的类型(例如VARRAY),您可以创建自定义.NET 类来接受数据。有关这方面的更多信息,请阅读“用户定义类型”

What is the Oracle Datatype of "OrdinateArray"? If it is a user defined type (eg VARRAY), you can create a custom .NET class to accept the data. For more information on this, read up on "User Defined Types"

鲸落 2024-11-23 03:27:24

对您来说可能为时已晚,但也许有人可以使用我的解决方案来解决问题。

我在 C# 中为 Oracle Locator 导入器制作自定义 shapefile 时遇到了这个问题。

我所做的是将 SdoGeometry 类中的 ordordsArray 变量类型从decimal[]更改为double[]。 OrdinatesArray = GetValue((int)OracleObjectColumns.SDO_ORDINATES)需要进行相同的更改(十进制到双精度)

MapToCustomObject 方法中的公共类 OrdinatesArrayFactory : OracleArrayTypeFactoryBase {}

事实上,当我使用 oracle.spatial.util.SampleShapefileToJGeomFeature 工具导入数据时,代码在十进制类型下工作正常。
当我使用我的工具导入数据(shapefile 几何图形到 WKB,然后使用
插入 some_table (GEOM) 值 (SDO_UTIL.FROM_WKBGEOMETRY())
由于某种原因,尽管我处理了精度,但坐标对于小数来说太大了。

It's probably too late for you but maybe someone could use my solution to the problem.

I run into this problem while making custom shapefile to Oracle Locator importer in C#.

What I did is I changed ordinatesArray variable type from decimal[] to double[] in SdoGeometry class. Same change (decimal to double)was needed for

public class OrdinatesArrayFactory : OracleArrayTypeFactoryBase {}

and

OrdinatesArray = GetValue((int)OracleObjectColumns.SDO_ORDINATES) in MapToCustomObject method.

In fact the code was working OK with decimal type when I imported data using oracle.spatial.util.SampleShapefileToJGeomFeature tool.
Problems started when I imported data using my tool (shapefile geometry to WKB and then insert to Oracle using
INSERT INTO some_table (GEOM) VALUES (SDO_UTIL.FROM_WKBGEOMETRY())
For some reason ordinates where too big for decimal although I handled precision.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文