如何从 Oracle Spatial 读取不适合 .NET 小数类型的纵坐标值?
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
“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"
对您来说可能为时已晚,但也许有人可以使用我的解决方案来解决问题。
我在 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.