由于系统前端使用OpenLayers框架,后台数据库使用oracle spatial。大家知道Oracle spatial的SDO_GEOMETRY十分复杂,如果使用期java api ,那就坑爹了,要处理相当多的逻辑和数据类型。今天我有这么一个需求,从前进行多边形查询,我想到了一个好办法,由openlayers构造一个wkt空间串,然后调用SDO_UTIL.FROM_WKTGEOMETRY函数将wkt转为SDO_GEOMETRY,然后再调用SDO_ANYINTERACT进行空间查询,这种方法貌似木有问题,sql如下:select *
  from TBSVRC_RESPUBLISHITEMS t
 where SDO_ANYINTERACT(F_SPATIALEXTENT,SDO_UTIL.from_wktgeometry('POLYGON((80.83422302246095
                                                          20.518481140136714,
                                                          120.4135076904297
                                                          20.518481140136714,
                                                          120.4135076904297
                                                          50.314989929199214,
                                                          80.83422302246095
                                                          50.314989929199214,
                                                          80.83422302246095
                                                          20.518481140136714))') )='TRUE'

将sql在数据库中运行,结果报错:传入的sdo_geometry和数据库表sdo_geometry的srid不同,不能进行空间查询。忽然想起WKT可以表达空间数据信息,但是木有SRID信息。一下傻眼了,那怎么办呢?看看SDO_UTIL包的函数,也都木有将SDO_GEOMETRY设置SRID的函数。于是在网上搜索半天,也无解,搜搜oracle spatial官方文档,也是半天无解。我于是想还是好好分析SDO_GEOMETRY吧。嘿,忽然发现桃花源,SDO_GEOMETRY是一个类型,本身也是一个函数。再仔细看看还有构造参数,喔,问题解决了,sql如下:

select *
  from TBSVRC_RESPUBLISHITEMS t
 where SDO_ANYINTERACT(F_SPATIALEXTENT,sdo_geometry('POLYGON((80.83422302246095
                                                          20.518481140136714,
                                                          120.4135076904297
                                                          20.518481140136714,
                                                          120.4135076904297
                                                          50.314989929199214,
                                                          80.83422302246095
                                                          50.314989929199214,
                                                          80.83422302246095
                                                          20.518481140136714))',8307))='TRUE'

oracle spatial 爱死你了!

Oracle 关于WKT构造SDO_GEOMETRY的问题。的更多相关文章

  1. Oracle Spatial-元数据及SDO_GEOMETRY

    一.空间表的元数据 将表的SDO_GEOMETRY列的所有对象作为一个空间层.Spatial需要对所有空间对象进行验证.创建索引和查询.此时需要为图层指定适当的元数据,该数据包含如下信息:维度.维度边 ...

  2. Oracle查询多边形对象SDO_GEOMETRY并转换为java对象举例

    最近实现了一个判断点是否与多边形交互的功能,这里的点是一个经纬度,多边形是一个区域,包含多个经纬度,最后看下这个点是否在这个区域内.就好比你打开百度地图,然后看你自己的位置(点)是不是在某个小区(多边 ...

  3. C#读取Oracle Spatial的sdo_geometry

    oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...

  4. Oracle Spatial中SDO_Geometry详细说明[转]

    在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...

  5. Oracle Spatial中SDO_Geometry说明

    Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...

  6. 【转载】Oracle Spatial中SDO_Geometry详细说明

    转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/upDOoGIS/archive/2009/05/20/1469871.html 相关微博:oracle 创建SD ...

  7. Arcgis创建SDE_Geometry、SDO_Geometry的区别【转】

    1. SDO_GEOMETRY Oracle Spatial在MDSYS模式下定义了一系列几何类型.函数来支持空间数据的存储和使用,最为人耳熟能详的就是SDO_GEOMETRY这种类型——当然,Arc ...

  8. Arcgis创建SDE_Geometry、SDO_Geometry的区别

    先初略的了解下SDE_Geometry和SDO_Geometry的区别: 1. SDO_GEOMETRY Oracle Spatial在MDSYS模式下定义了一系列几何类型.函数来支持空间数据的存储和 ...

  9. oracle 空间数据库说明

    转:http://blog.csdn.net/jing_xin/article/details/4355642 由于最近弄一些空间数据,所以找了些oracle空间数据库的一些知识.下面是汇总: Ora ...

随机推荐

  1. sql中全文检索CHARINDEX 和PATINDEX 区别

    最近经常使用字符串查找功能. 包括 1.全匹配查找字符串 2.模糊查找字符串 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置.PATINDEX 可使用通配符,而 CHARIND ...

  2. asp查找</td>标记时遇到以外的文件结尾

    正确的<td></td> 错误的<td> 没有写完整

  3. cef3加载flash闪烁问题非easyhook的另外一种解决方法

    1.现象 cef3加载flash,会出现弹出命令行窗口,显示not sandboxed,影响使用体验. 网上的解决方法,参考此文. http://blog.csdn.NET/zx2356/articl ...

  4. .net core iis 502.5

    <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>n ...

  5. [javaSE] 集合框架(ArrayList,LinkedList,Vector)

    ArrayList特点:底层使用数组数据结构,查询速度快(使用脚标查),插入删除慢(索引要改变) LinkedList特点:底层使用链表数据结构,查询慢(需要一个一个去问),插入删除快 Vector特 ...

  6. 请比较throw 合throws的区别

    throw语句用在方法体内,表示抛出异常.throws语句用在方法声明的后面,表示再抛出异常,由该方法的调用者来处理.throws主要声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常. ...

  7. Git Client 管理:项目文件的获取和提交(实用篇)

    Git 服务器 可搭在云端如:coding.net.GitHub.TFS等,只要可以使用Git就可以. 示例: Git Client 安装相关程序,顺序如下: 1.安装Git-2.14.2.3-64- ...

  8. ajax 异步请求返回只刷新一次页面

    success:function (res) { if (res == "ok") { // $('#dg').bootstrapTable(('refresh')); if (l ...

  9. PM、oSE、oMDE、oTSE、oTC角色职责

  10. Spark2.x详解

    一.概述 Apache Spark 是一个快速的, 多用途的集群计算系统. 它提供了 Java, Scala, Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎. 它还 ...