Oracle spatial与arcsde 的关系

有一些同事问过我下面这些问题:

  • 我们用了oracle spatial sdo_geometry,是不是没用arcsde?
  • 我们到底是使用oracle spatial还是arcsde,有点懵!
  • 执行了create enterprise geodatabase是不是就表示使用了arcsde?那这个动作到底是做什么呢?
  • 我们没用arcsde的服务,为什么你还说我们用了arcsde呢?
  • ……

因为问得人很多,我打算将我的理解写下来,与大家交流,以收抛砖引玉之效。

1、什么是ARCSDE

  SDE的全称是spatial database engine(空间数据引擎),之所以称之为引擎,是因为所有的空间数据IO都需要通过它来管理。它属于中间件技术,位于客户端和数据库之间,其本身并不能够存储空间数据(存储是由数据库完成),它的作用可以理解为将数据库中的对象(表、视图等)抽象成上层GIS应用可以认识的概念,例如feature、feature class等。

2、ARCSDE是怎么工作的

  ARCSDE保存了一系统数据库对象,用于管理空间信息,这些对象统称为资料档案库(Repository)。以基于ORACLE数据库的ARCSDE为例,资料档案库包含SDE用户下的数据字典表、存储过程、以及数个.dll文件。数据字典表,用以存储要素类、要素类字段、要素类投影、要素类范围等元数据信息,而存储过程和.dll用于实现对空间数据的GIS运算和操作,例如用于计算polygon周长的方法。

3、空间数据是如何存储的

  上文已经说过,ARCSDE并不能够存储空间数据,数据都是存储在RDBMS(关系型数据库)(实际上并不限于RDBMS,ARCSDE也支持非关系型数据库和HADOOP。但现在只谈它与ORACLE SPATIAL的关系,因此,此处说RDBMS)中。以矢量数据为例,它既可以以二近制形式存储为一个BLOB对象,也可以使用RDBMS或ARCSDE提供的矢量数据类型。

  最初的时候,即ARCSDE和RDBMS还未提供矢量数据类型之前,所有的数据都是以序列化的二近制形式存储,在数据库里表现为一个BLOB字段。

  以BLOB字段的形式存储,虽然解决了存储的问题,但却没能很好地利用RDBMS的能力。例如,它不能用SQL操作(所谓SQL操作,就是与我们COM的ArcGISEngine对比就是我们不需要使用ArcGIS接口对数据进行操作,我们直接使用SQL语句的增删改对空间数据进行操作)非常便捷地处理空间数据(处理BLOB需要反序列化)。为了更好地利用RDBMS的资源,从ARCSDE 9.2开始,提供了一个结构化的数据类型——ST_GEOMETRY。由于数据是结构化的,所以通过SQL查询空间数据即可了解数据内容,通过SQL即可非常便捷地对数据进行各种操作(例如更新)。这样的好处是显示易见的,它突破了ARCGIS的种种障碍限制,在特定的环境下特别是用户的数据都是简单的点线面,并且业务只有相关的编辑方面,无需SDE版本要求时,SQL操作将非常便捷直观。这些操作其实也降低了操作人员的GIS门槛,但是切记:高便利与高风险是时刻并存的。

  除此之外,RDBMS也纷纷推出了自定义的空间数据类型,例如ORACLE的SDO_GEOMETRY。它的作用与ST_GEOMETRY类似。

4、使用ARCSDE的连接方式

  在ARCSDE8.1之前,通过ARCSDE连接数据库是一种三层模型。从8.1之后,ArcSDE提供了两种数据联结架构,即两层和三层模型。两层模型即直连、三层模型即ARCSDE服务连接。

  ARCSDE服务连接模型如下图:

  在ArcSDE Server上运行着1个giomgr进程和多个gsrvr进程。

    giomgr即ArcSDE服务器管理进程,该进程一直存在,负责监听用户连接请求,分配相应的gsrvr管理进程,进行空间数据字典的维护。

    gsrvr属于这样一种进程:当有客户端请求数据库连接,由giomgr分配名为gsrvr的独立进程来全面负责客户机与服务器的元数据通信。

    当使用ArcSDE服务连接时,需要在ArcSDE Server安装RDBMS Client software。在此种连接模式下,客户端通过SDE服务访问数据表后,ArcSDE Server服务器端完成对数据的各种操作,再把操作结果返回客户端。

    ARCSDE直连模型如下图:

  与ARCSDE服务连接方式不同,gsrvr进程内嵌到客户端,不再需要服务器端ArcSDE服务。ArcSDE直连驱动和ArcSDE服务采用相同的代码构建。不同的是,ArcSDE直连驱动是一系列动态链接库dll,安装和运行于客户端应用程序的进程空间内;而ArcSDE服务是可执行程序,运行于服务器端。

    当使用ArcSDE直连时,需要在客户端安装dbms client software。在此种连接模式下,通过SDE访问数据表后,将在客户端本地完成对数据的各种操作(像空间分析,编辑等)。

  直连与服务连接下比,优势表现在:

  1. 直连方式较服务连接方式卸载了20%-40%的负载
  2. 直连方式降低了服务器端内存的需求
  3. 直连速度更快
  4. 直连配置支持FAILOVER,而服务连接不支持RAC架构
  5. 不需要安装SDE服务,也不需要维护SDE服务
  6. 实施部署方便,切换环境只需将工具与ORACLE客户端打包即可
  7. 使用操作系统认证方式连接到数据库,必须使用直连

    劣势表现在:

  1. 对客户端配置要求高
  2. 所有的客户端都必须安装oracle客户端(或其它数据库连接驱动程序)
  3. 数据库客户端必须是32位

注意:自ESRI提供直连方式后,ESRI一直推荐使用直连方式。另外,从ARCGIS 10.3之后,不再提供SDE服务(即不再提供sdeservice工具(从ARCGIS 10.1开始,ESRI官方推荐以直连方式连接SDE,因此在SDE安装时不再自动安装SDE服务,需要手动用sdeservice工具来创建服务 ))。

5、ORACLE SPATIAL是什么

  ORACLE SPATIAL提供了一套 SQL 方案和函数,用来存储、检索、更新和查询数据库中的空间要素集合。主要由几何数据类型,空间索引机制,一套操作函数,管理工具组成。

  对ORACLE数据库而言,实际上ORACLE SPATIAL可以全面取代ArcSDE, ArcSDE提供的能力它几乎都提供了。它除了提供了数据类型SDO_GEOMETRY,还提供了大量的GIS应用API,还实现了渲染与可视化,只是在实现方式上,功能的丰富性、稳定性上与ARCSDE有所不同。

6、Oracle Spatial+ArcSDE是一种怎样的组合

  当前,我们很多项目的确是同时使用了Oracle Spatial和ArcSDE。按照第5个问题的回答,我们有一套东西就够了,为什么这里它们同时都被使用了?

  在Oracle Spatial+ArcSDE这种应用中,Oracle Spatial提供矢量数据类型,即SDO_GEOMETRY,而ArcSDE负责将使用SDO_GEOMETRY数据类型的表在SDE Repository中注册,只有注册后,应用层的ArcMap、ArcEngine才能认识它。因为对于ArcMap、ArcEngine等应用程序来讲,它没有数据库中表的概念,它只有geodatabase中定义的feature、feature class、feature dataset这些概念。换句话说,之所以要用SDE Repository,是因为我们的项目是基于ArcEngine开发的。如果项目不基于ArcEngine开发,而是使用ORACLE SPATIAL提供的SDK,那么我们完全可以不用SDE Repository,也就完全不需要使用ARCSDE,而是全面使用ORACLE SPATIAL来实现各种GIS操作、渲染与可视化。

7、create enterprise geodatabase到底在做什么

  在ARCGIS 10.0(包括10.0)之前,在安装完ARCSDE软件之后,会跳转到post Installation界面。在这里,可以选择创建用户、创建表空间、安装SDE Repository、创建SDE服务等。如下图:

(当选择“complete”时,创建用户、创建表空间、安装SDE Repository、创建SDE服务四个步骤均会执行)

  10.1之后,不再需要安装ARCSDE软件,创建SDE用户、SDE表空间、安装SDE Repository都由create enterprise geodatabase功能完成。与10.1之前相比,默认不再创建SDE服务,SDE服务需要用sdeservice工具手动创建(ARCGIS 10.3不再提供该工具)。

8、没有SDE Repository,通过arcmap为何仍然能够看到feature class

  从ARCMAP 10.1开始,如果一个带SDO_GEOMETRY数据类型的表未在SDE Repository中注册,甚至没有SDE Repository,也是可以浏览的。此时ARCMAP会根据矢量数据类型,去读取ORACLE SPATIAL的Repository(元数据表),即user_sdo_geom_metadata,只要能够获取到该图层在oracle spatial中的元数据信息,也可以在arcmap中浏览。但此时也仅限于浏览,因为没有SDE Repository,sdo geodatabase模型的高级功能,如拓扑构建、版本管理等特性将无法使用。

9、Oracle Spatial+ArcSDE算不算用了ARCSDE

  算,只要使用SDE Repository就等于说使用了ArcSDE。

时间: 2024-11-08 20:07:56

Oracle spatial与arcsde 的关系的相关文章

Oracle Spatial构建点、线、面

在ArcGIS中通过ArcSDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等. 最近我主要是学习基于Oracle Spatial的存储方式,通过这种存储方式的几何列Shape的字段类型为mdsys.sdo_geometry类型. 关于Oracle Spatial定义的SDO_GEOMETRY类型,我将单独在一章里来说明,个人觉得关于操作空间数据的SQL语句来说,相交

C#读取Oracle Spatial的sdo_geometry

oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con = new OracleConnection(conStr); OracleCommand cmd = new OracleCommand(@"SELECT sdo_geometry.get_wkt(geometry) FROM geoms WHERE id= 1902 ", con);

oracle sql查询表外键关系

SELECT F.TABLE_NAME, F.CONSTRAINT_NAME, F.COLUMN_NAME, F.POSITION, P.TABLE_NAME, P.COLUMN_NAME, P.POSITION ,R.OWNER FROM USER_CONSTRAINTS R, USER_CONS_COLUMNS F, USER_CONS_COLUMNS P WHERE 1=1 and R.OWNER = UPPER('ATS001') AND R.TABLE_NAME = UPPER('AC

后端JSP文件里Java语言如果操作Oracle Spatial提供的JGeometry对象

记个流水账,记录下这个困扰自己多时的问题最后怎么解决的.当时觉得该尝试的都尝试了,纳闷到底怎样能解决的,最后还是解决了~ 正确的代码如下: <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.lang.*,oracle.spatial.geometry.*,oracle.spatial.util.*,oracle.sql.*&

在Oracle Spatial中增加Web Mercator投影坐标系

参考资料: 1. 最重要的参考文章,基本上就是按这个做的!!!:https://www.inf.unibz.it/dis/wiki/doku.php?id=students:minnerebner:oracle:addingsrid . 2. 实例参考:http://www.cnblogs.com/cleverxy/archive/2012/04/28/2474563.html 步骤1是从0开始,这个应该有一些基础了,可以对照看一下里面对8801~8807.9802~9807的解释,然后再去数据

Oracle Spatial中SDO_Geometry详细说明[转]

在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等. <UpDooGIS原创> 关于这几种方式的各自的优缺点不是主要的探讨的方向,这些我们可以通过ArcGIS中的ArcGIS Server Help得到相关的帮助.这里主要是学习关于基于Oracle Spatial的存储方式,通过这种存储方式几何列Shape的字段类型为mdsys.sde_geo

Oracle Spatial分区应用研究之三:县市省不同分区粒度的效率比较

在<Oracle Spatial分区应用研究之一:分区与分表查询性能对比>中已经说明:按县分区+全局空间索引效率要优于按县分区+本地空间索引,因此在该实验报告中,将不再考虑按县分区+本地空间索引的组合,本次实验的实验主体为如下3个: 按县分区+全局空间索引 按市分区+本地空间索引 按省分区+本地空间索引 第一组实验: 第二组实验: 结论: 按省分区+本地空间索引效率最高 Part_query算法最优 (未完待续--) 原文地址:https://www.cnblogs.com/6yuhang/p

ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决

首先描述来形容什么问题: 周边环境:ArcGIS10.x.Oracle 11g R2,这个问题无关与环境 假设用户使用关联查询(比方一个空间数据与一个属性数据进行关联),在ArcGIS for Desktop中查询的结果(查看属性表).与进行REST的Query(where条件输入1=1即查询全部数据)查询的结果不一致.普通情况下REST的Query查询比桌面查询的结果要多. ------------------------------------------------------------

oracle session和process的关系

什么是session 通俗来讲,session 是通信双方从开始通信到通信结束期间的一个上下文(context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户在登录等信息[在pl/sql developer中,通过Tools-->Sessions可以查看当前数据库的session].session 是和connection同时建立的,两者是对同一件事情不同层次的描述.简单讲,connection是物理上的客户机同服务器段的通信链路,session是逻