使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
首先,这个需要使用ODAC,也就是Oracle.DataAccess.dll,新出的托管Oracle.ManagedDataAccess.dll不支持Object Type,无法使用
ODAC使用方法参考:http://blog.csdn.net/rrrrssss00/article/details/7178515
- [OracleCustomTypeMappingAttribute("MDSYS.SDO_GEOMETRY")]
- public class SdoGeometry : OracleCustomTypeBase<SdoGeometry>
- {
- private enum OracleObjectColumns { SDO_GTYPE, SDO_SRID, SDO_POINT, SDO_ELEM_INFO, SDO_ORDINATES }
- private decimal? sdo_Gtype;
- [OracleObjectMappingAttribute(0)]
- public decimal? Sdo_Gtype
- {
- get { return sdo_Gtype; }
- set { sdo_Gtype = value; }
- }
- private decimal? sdo_Srid;
- [OracleObjectMappingAttribute(1)]
- public decimal? Sdo_Srid
- {
- get { return sdo_Srid; }
- set { sdo_Srid = value; }
- }
- private SdoPoint point;
- [OracleObjectMappingAttribute(2)]
- public SdoPoint Point
- {
- get { return point; }
- set { point = value; }
- }
- private decimal[] elemArray;
- [OracleObjectMappingAttribute(3)]
- public decimal[] ElemArray
- {
- get { return elemArray; }
- set { elemArray = value; }
- }
- private decimal[] ordinatesArray;
- [OracleObjectMappingAttribute(4)]
- public decimal[] OrdinatesArray
- {
- get { return ordinatesArray; }
- set { ordinatesArray = value; }
- }
- [OracleCustomTypeMappingAttribute("MDSYS.SDO_ELEM_INFO_ARRAY")]
- public class ElemArrayFactory : OracleArrayTypeFactoryBase<decimal> {}
- [OracleCustomTypeMappingAttribute("MDSYS.SDO_ORDINATE_ARRAY")]
- public class OrdinatesArrayFactory : OracleArrayTypeFactoryBase<decimal> {}
- public override void MapFromCustomObject()
- {
- SetValue((int)OracleObjectColumns.SDO_GTYPE, Sdo_Gtype);
- SetValue((int)OracleObjectColumns.SDO_SRID, Sdo_Srid);
- SetValue((int)OracleObjectColumns.SDO_POINT, Point);
- SetValue((int)OracleObjectColumns.SDO_ELEM_INFO, ElemArray);
- SetValue((int)OracleObjectColumns.SDO_ORDINATES, OrdinatesArray);
- }
- public override void MapToCustomObject()
- {
- Sdo_Gtype = GetValue<decimal?>((int)OracleObjectColumns.SDO_GTYPE);
- Sdo_Srid = GetValue<decimal?>((int)OracleObjectColumns.SDO_SRID);
- Point = GetValue<SdoPoint>((int)OracleObjectColumns.SDO_POINT);
- ElemArray = GetValue<decimal[]>((int)OracleObjectColumns.SDO_ELEM_INFO);
- OrdinatesArray = GetValue<decimal[]>((int)OracleObjectColumns.SDO_ORDINATES);
- }
- }
- OracleCommand cmd = new OracleCommand()
- cmd.Connection = con;
- cmd.CommandType = CommandType.Text;
- cmd.CommandText = " select id,geo from geoinfo ";
- using (OracleDataReader readerGeoInfo = cmd.ExecuteReader())
- {
- while (readerGeoInfo.Read())
- {
- GeoInfo geoInfo = new GeoInfo();
- if (!readerGeoInfo.IsDBNull(0))
- {
- geoInfo.Id = readerGeoInfo.GetDecimal(0);
- }
- if (!readerGeoInfo.IsDBNull(1))
- {
- geoInfo.Geo = (SdoGeometry)readerGeoInfo.GetValue(1);
- }
- geoInfoList.Add(geoInfo);
- }
- readerGeoInfo.Close();
- }
- cmd.CommandText = " insert into geoinfo values (geoinfo_seq.nextval,:param) ";
- cmd.Parameters.Clear();
- OracleParameter oracleParameterGeo = new OracleParameter();
- oracleParameterGeo.OracleDbType = OracleDbType.Object;
- oracleParameterGeo.UdtTypeName = "MDSYS.SDO_GEOMETRY";
- cmd.Parameters.Add(oracleParameterGeo);
- //creating point
- SdoGeometry geoPoint = new SdoGeometry();
- geoPoint.Sdo_Gtype = 2001;
- geoPoint.Point = new SdoPoint();
- geoPoint.Point.X = 200;
- geoPoint.Point.Y = 400;
- oracleParameterGeo.Value = geoPoint;
- //insert point in table geoinfo
- cmd.ExecuteNonQuery();
- //creating polygon
- SdoGeometry geoPolygon = new SdoGeometry();
- geoPolygon.Sdo_Gtype = 2003;
- geoPolygon.ElemArray = new decimal[] { 1, 1003, 1 };
- geoPolygon.OrdinatesArray = new decimal[] { 3, 3, 3, 10, 10, 10, 10, 3, 3, 3 };
- oracleParameterGeo.Value = geoPolygon;
- //insert polygon into table geoinfo
- cmd.ExecuteNonQuery();
使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)的更多相关文章
- C#读取Oracle Spatial的sdo_geometry
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- Oracle Spatial中SDO_Geometry详细说明[转]
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- 【转载】Oracle Spatial中SDO_Geometry详细说明
转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/upDOoGIS/archive/2009/05/20/1469871.html 相关微博:oracle 创建SD ...
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
- Oracle spatial与arcsde 的关系
有一些同事问过我下面这些问题: 我们用了oracle spatial sdo_geometry,是不是没用arcsde? 我们到底是使用oracle spatial还是arcsde,有点懵! 执行了c ...
- shp转oracle spatial
2010年12月1日 终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...
- Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)
在使用Oracle spatial做空间查询和展示时,经常会遇到展示或者查询过慢,这时候我可以通过空间数据抽稀来优化查询展示效率. 在Oracle spatial中的抽稀函数为:SDO_UTIL.SI ...
随机推荐
- [转]使用C#进行图像处理的几种方法
最近做监控图像由彩色变灰处理的时候发现图像处理过程中,很慢很慢代码如下: int Height = this.picInfo.Image.Height; int ...
- Winform 常用的方法
一,Winform 如何内嵌窗体 1,判断窗体中是否以还有内嵌窗体 private void ClosePreForm() { foreach (Control item in this.spCont ...
- [javaSE] 位运算符(&|^)
位运算是直接对二进制进行计算 左移 << 右移 >> 先把整数换成四个8bit 0000-0000 0000-0000 0000-0000 0000-0000 这个二进制左右移 ...
- mysql information_schema介绍
mysql information_schema介绍 一.information_schema是什么 information_schema是MySQL自带的一个信息数据库,其保存着关于MySQL服务器 ...
- execution表达式
execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?) 除了返回类型模式.方法名模式和参数模式外 ...
- Python Django Ajax 传递列表数据
function getTableContent(node) { event.preventDefault(); var tr = node.parentNode.parentNode; var id ...
- Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动
核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...
- LOJ#6491. zrq 学反演(莫比乌斯反演 杜教筛)
题意 题目链接 Sol 反演套路题? 不过最后一步还是挺妙的. 套路枚举\(d\),化简可以得到 \[\sum_{T = 1}^m (\frac{M}{T})^n \sum_{d \ | T} d \ ...
- JavaScript对象遍历属性和值
原文链接:http://caibaojian.com/javascript-object-3.html 加入你输出来一个对象,但是苦于不知道里面有哪些属性和值,这个时候,你可以通过下面的代码来遍历这个 ...
- Web缓存加速指南(转载)
这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后面参考 ...