使用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 ...
随机推荐
- SpringMVC中properties文件读取
SpringMVC给我们提供了用于properties文件读取的类: org.springframework.context.support.ResourceBundleMessageSource 1 ...
- SpringBoot+JPA+cache入门
在pom.xml中加入如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- Nginx的文件夹的别名设计&drupal简洁url
参考:nginx 官方drupal 配置 - Drupal | NGINX 环境:ubuntu14,Nginx1.12, MariaDB5.5.56,PHP7.1.7 需求:1.不同的网站,不要用文件 ...
- 转:PHP中的使用curl发送请求(GET请求和POST请求)
原文地址:http://www.jb51.net/article/104974.htm 使用CURL发送请求的基本流程 使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤: 1.初始 ...
- 初学PS
PS中的一些快捷键:新建:Ctrl+N 放大:Ctrl++ 缩小:Ctrl+- 首选项:Ctrl+K 标尺:Ctrl+R移动视图:空格键 绘制正圆:Shift 绘制鼠标落脚点为中心的正圆:Shift+ ...
- 多表批量导出txt及打压缩包下载
在一些特殊的业务系统中,有些客户查看报表数据时不需要在浏览器上逐一查看,需要在页面端选择要查看的报表名称(可多选),选择条件,然后将所选中的报表批量导出到txt文件中并且要把批量导出的结果文件打 ...
- React +Redux+ Ant Design + echarts 项目实践
项目框架 采用React.js作为项目的框架 采用redux作为数据管理的框架 采用antd作为项目的UI组件 采用echarts完成项目中折线图的绘制 个人项目工作流程总结 拿到UI高保真图片之后先 ...
- 相关与卷积(数字信号处理)的数学原理及 Python 实现
数学原理 在数字信号处理中,相关(correlation)可以分为互相关(cross correlation)和自相关(auto-correlation). 互相关是两个数字序列之间的运算:自相关是单 ...
- WinForm自定义控件
[ToolboxBitmap(typeof(PropertyGrid))]//设置在工具箱中显示的小图标 public partial class ServiceManage : UserCo ...
- javaweb 读取properties配置文件参数
场景1:在servlet中读取properties配置文件参数 protected void doGet(HttpServletRequest request, HttpServletResponse ...