请问谁熟悉ORACLE的SPATIAL功能模块(100分)(100分)

L

lishu76

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在做关于空间数据库引擎的课题,请问有谁用过oracle的spatial功能模块,性能
如何?它提供的对象模型sdo_geometry和关系模型,哪个更好.
 
啃ORACLE自带的SPACIAL文档吧。我个人认为ORACLE SPACIAL性能不错,但由于
数据量大,速度不可能达到我们的期望值,但它是真正意义上的空间数据库。
 
我用过,觉得ORACLE SPATIAL对现在一般空间信息服务的需求都是应该可以满足的。大数据量
是个通用问题,不仅仅在GIS领域。不过进行数据优化之后速度也可以接受了。
做课题要另当别论了。你承认它是最好的,那你课题就不用做了。
 
谢谢sythree的回答,我也是第一次给分,分数不多,请见谅。也谢谢你的给分。
我想再请教sythree一些问题:
ORACLE OCI 是什么?在你实现的SDE中,有没有用ORACLE SPATIAL?
我主要是做电力GIS的,图形数据量不是很大,我关心的是SDE不光能处理简单的点线面,
而是能够实现具有拓扑关系的图形数据的数据库存放,或者能否以电力设备为对象,包含
拓扑信息,进行合理的数据库存放和管理。如果在这方面有体会或心得,欢迎赐教。
 
嘿嘿,第一次开张啦!谢谢!
ORACLE OCI 全称是ORACLE CALL INTERFACE,是ORACLE8I系列的C接口。从理论上讲你可以
用VC+OCI在你的程序中获得ORACLE所有的功能,包括SQL操作。不知道在DELPHI中怎么样,我
在平常没机会用DELPHI,虽然对INPRISE极为景仰。
在我的程序中用ORACLE SPATIAL做的空间查询,就是点选、框选之类的功能,原来要用图形学的
好多东西一阵编,现在一条SQL命令就可以搞定了。
我做过电厂的AM/FM/GIS,但很遗憾没做过电力GIS。据我所知电力系统优选系统是MAPINFO。
从你关心的东西来看,用面向对象的观点来建立空间数据模型应该可以能够实现具有拓扑关系的
图形数据的数据库存放,但建模就很重要了。现在SPATIAL没有一个工业标准,大家定义的模型也都
各有优缺点。建议你参考各大数据库公司SPATIAL产品的白皮书。我对电力设备不熟,听说山东
烟台的东方电子结合他们的电力设备用GIS做过一些产品,前几年还出来招GIS专业的毕业生。
你可以咨询一下他们。
你做的究竟是课题还是项目?课题是横向还是纵向?方便说吗?这些对你的工作都有不小的影响。
 
非常感谢sythree的回答。我想问一下在数据存放上,是用oracle spatial的sdo_geometry
还是关系模型,前者在取数据时,不是简单的一条SQL语句。
我是做课题,但与工程应用有关。从我的理解电力GIS包含AM/FM/GIS,但功能更强,很多功能
的实现建立在拓扑数据的基础上。而且GIS中简单的点线面类型不能满足电力GIS的要求,如
电力设备开关,就不能仅仅作为一个点来处理。我一方面是想了解一下ORACLE SPATIAL的
性能,另一方面是想能否对其进行扩充,满足电力GIS的需求。
 
在我做的项目都是用的OR Model,虽然它在存取数据和生成索引的时候确实有点麻烦,但是
它在做空间分析的时候,sdo_geometry带的Geometry Functions和Spatial Operators就很
有用了。现在各种GIS平台基本都带有往Oracle转数据的小程序,比如Mapinfo EasyDataLoader,
就是一个免费地把Mapinfo格式数据转入Oracle的小程序。
我指的“简单的一条SQL语句”是在空间查询中,而不是取数据时。因为在一般项目中Oracle
Spatial的功能很少完全发挥的,顶多就是利用它的索引机制加快速度和在空间分析中使用它
的Spatial Operators(当然是指GIS方面的功能)。比如框选的VC实现:
//csSqlStatement = "Select "+ 字段名 + " From "+ 表名 +
// " Where MDSYS.SDO_RELATE(GEOMETRY, MDSYS.SDO_GEOMETRY(" +
// "3, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 3), MDSYS.SDO_ORDINATE_ARRAY(" +
// str + ")), 'MASK = ANYINTERACT QueryType = Window') = 'TRUE'";
COracleRecordset* COracleDatabase::Query(CString csSqlStatement){
COracleRecordset *rs = new COracleRecordset(conn, csSqlStatement);//Connect Oracle data source
geomCursor->Open();//Open geometry cursor
geomCursor->Prepare(csSqlStatement);
geomCursor->conn->errhp,
OCIStmtExecute(geomCursor->conn->svchp,
geomCursor->stmthp,
geomCursor->conn->errhp,
(ub4)1,
(ub4)0,
(OCISnapshot*)0,
(OCISnapshot*)0,
OCI_DESCRIBE_ONLY
);

//Check possible error
//Get result
return recordset;
}
你举的电力设备开关的例子其实是一个多分辨率下空间实体的粒度问题,比如在华北电网1:1M的电子地图上,
一个电力设备开关肯定是一个点;而到了一个热电厂厂区1:500的电子地图里,它可能就变成了面。这在实际中
确实是一个很棘手的问题。在现阶段可以采用比例尺控制+类似“超级链接”的方法来接解决。
随着地图缩放比例调用不同比例尺的电子地图。在1:1M的电子地图上,一个开关就是点啦,
挂一般的属性就行了。如果用户对某个开关执行放大操作,则随比例变化逐次调入不同比例尺的电子地图,直到
一个电力开关可以完全展现为止(比如1:500)。这时如果用户还要求更详细的信息,比如
开关的图片,开关的文字介绍,可以做一个类似ARCVIEW的HOTLINK功能,往表示开关的那个POLYGON
上挂接。
我原来做电厂的AM/FM/GIS就是这样做的,把一个有上万条电缆的托盘做得纤毫毕现。
但是这样的缺点就是在大范围的空间系统(比如电网级的)中可能会准备很多套不同比例尺
的图(可能还有对应的不同属性定义),项目成本会成几何级数
增长。这是采用ORDB的技术管理空间数据的根本缺陷,只有采用纯OODB技术,在DB中去掉
TABLE的概念,在GIS中去掉LAYER的概念,才能从根本上解决这类问题。

 
sythree,你好!
我想问一下如何从SDO_GEOMETRY中读数据?我本想做一个存储过程来读,可存储过程
的输入输出变量个数一定,而SDO_GEOMETRY中点的个数不定,如何处理?
 

Similar threads

顶部