gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:3411回复:9

Oracle Spatial中上载GIS空间数据方法研究

楼主#
更多 发布于:2007-05-15 20:01
<FONT face=宋体>存储、管理空间数据,易于解决数据共享、分布式处理、网络通信、开放式开发、并发控制、网络化集成、跨平台运行及数据安全恢复机制等方面的难题,因而成为 <p></p></FONT>
<P ><FONT size=3><FONT face=宋体>      了目前的一种应用趋势。而如何将现有GIS软件中产生的空间数据导入该数据库中成为该技术应用的首要关键环节。本文以此为出发点,在探讨了向Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Spatial 上载GIS的空间数据的基本原理的基础上,较全面地介绍了在Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Spatial中上载矢量数据与栅格数据的各种方法,重点介绍了使用 Microsoft的ADO接口、Oracle Spatial的Java <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      API</FONT><FONT size=3>及OCCI</FONT><FONT size=3>接口等手工方式上载程序的实现过程。最后,给出了全文的结论及相关的建议。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      1引言<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      </FONT><FONT size=3>空间数据是GIS的血液,对空间数据的管理的好坏将直接影响到GIS系统质量的高低。GIS</FONT><FONT size=3>空间数据的管理经过了纯文件方式管理图形数据与属性数据、图形 <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      数据文件方式管理与属性数据关系型数据库管理、空间数据与属性数据一体化的管理方式三个阶段。目前,大多数GIS <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      软件都逐渐倾向于采用第三种管理方式,也就是图形数据与属性数据都采用数据库管理的方式。例如,采用Oracle Spatial、DB2 Spatial <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Extender、Informix Spatial <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      DataBlade</FONT><FONT size=3>(目前Informix已经被IBM收购)以及ArcSDE数据库引擎、MapGIS MapORA</FONT><FONT size=3>引擎等等。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      Oracle <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      Spatial</FONT><FONT size=3>提供了对象-关系模式和关系模式两种方式来存储空间数据。前者的特征是空间表中有一个类型为MDSYS.SDO_GEOMETRY</FONT><FONT size=3>的字段, <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      后者也就是Spatial的早期版本空间数据暗盒(Spatial <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      Cartridge</FONT><FONT size=3>),其特征是每一个空间几何图层对应四个表,分别为_SDOLAYER、_SDODIM、_SDOGEOM</FONT><FONT size=3>与_<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      SDOINDEX。这些表并不包括属性数据,属性数据需建立连接。目前许多GIS软件公司都提供了对Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Spatial的支持,比如Intergraph的GeoMedia 4.0、MapInfo的MapInfo 6.0、AutoDesk的MapGuide <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      6.0</FONT><FONT size=3>、ESRI的ArcSDE、ArcGIS以及国内中地公司的MapGIS 6.5</FONT><FONT size=3>等。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      本文主要研究上载GIS的矢量数据和栅格数据到Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>Spatial的原理与具体的各种实现方法,并在编程实践的基础上比较几种上载方法的优点与不足。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      2 </FONT><FONT size=3>向Oracle Spatial上载GIS</FONT><FONT size=3>空间数据的原理<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      向Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Spatial上载GIS空间数据,其实质也就是把空间数据的图形数据(包括矢量数据与栅格数据)与相应的属性数据写入数据库的表格中。因此,在上载前必须清楚GIS空间数据的数据格式与Oracle <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Spatial中空间数据是如何存储的。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      </FONT><FONT size=3>每个GIS软件拥有自己的内部数据格式和数据存储方式,大部分GIS</FONT><FONT size=3>软件并不向用户直接提供读写内部数据的函数。为了与其它软件进行数据转换,通常定义一 <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      </FONT><FONT size=3>种外部数据交换格式,如MapInfo的*.mif/*.mid、MapGIS的明码格式与ESRI的Shape格式(非ASCII</FONT><FONT size=3>码格式)等等。这些外 <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      </FONT><FONT size=3>部交换格式大部分为ASCII</FONT><FONT size=3>码文件,关于这些交换格式的数据结构的详细请参阅其公司发布的说明文档。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      Oracle Spatial是一个对象-关系数据库,提供存储空间数据的类型是SDO_GEOMETRY。随着Oracle <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      <st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="10" UnitName="g">10g</st1:chmetcnv></FONT><FONT size=3>的推出,又给Spatial</FONT><FONT size=3>扩充了拓扑数据模型、网络数据模型与栅格数据模型,每种数据模型都有其各自的数据类型,比如类型 <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      SDO_TOPOGEOMETRY用来存储拓扑数据等。在上载前一定要清楚这些数据类型的属性与方法,详细信息请参考文献1、2、3。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      3 </FONT><FONT size=3>向Oracle Spatial上载GIS</FONT><FONT size=3>空间数据的方法<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      </FONT><FONT size=3>上载空间数据的方法,总的来说可以分为使用GIS</FONT><FONT size=3>软件公司提供的工具与手工的方式上载两种方法。本节主要介绍矢量数据与栅格数据的各种上载方法及其具体的实现过程。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      3.1 矢量数据的上载方法<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.1.1</st1:chsdate> 使用手工的方式实现上载<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      用户可以使用交互式的SQL语句上载GIS空间数据,使用这种方法也就是使用各种应用程序编程接口(如ADO、ODBC等等)来上载,用户可以以自己的应 <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      用需要为导向使用开发语言调用这些接口开发出各种各样的上载工具,即实现手工方式的加载。本小节介绍了重点介绍使用 <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      Microsoft</FONT><FONT size=3>的ADO接口以及Oracle Spatial的Java API和OCCI</FONT><FONT size=3>接口实现空间数据的上载的实现过程。<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>      <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.1.1</st1:chsdate>.1 </FONT><FONT size=3>使用Java API</FONT><FONT size=3>上载<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      Oracle Spatial的Java API(Application Programing <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Interface)提供了3个类,即JGeometry、JGeometry.Point与DataException。JGeometry类对应于 <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      Oracle Spatial的对象类型MDSYS.SDO_GEOMETRY,JGeometry.Point类对应于对象类型 <p></p></FONT></FONT></P>
<P ><FONT size=3><FONT face=宋体>      MDSYS.SDO_POINT_TYPE, DataException类表示异常。下面的示例演示了如何使用Java <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      API</FONT><FONT size=3>实现将GIS的空间数据写入Oracle Spatial</FONT><FONT size=3>中:<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      /// 从数据库中读取空间数据<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      ResultSet rs = statement.executeQuery("SELECT geoloc FROM countries where <p></p></FONT></FONT></P>
<P ><FONT face=宋体><FONT size=3>      name='<st1:country-region w:st="on"><st1:place w:st="on">China</st1:place></st1:country-region></FONT><FONT size=3>'");<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT size=3><FONT face=宋体>      STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);<p></p></FONT></FONT></P>
<P ><p><FONT face=宋体 size=3> </FONT></p></P>
<P ><FONT face=宋体><FONT size=3>    </FONT></FONT></P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2007-05-15 20:03
<P>//把结构体转换为geometry 对象 <BR> </P>
<P>      JGeometry j_geom = JGeometry.load(st);</P>

<P>      // ... 在空间对象上执行空间操作或者创建新的空间对象 ...</P>

<P>      /// 向数据库中存储空间对象</P>

<P>      PreparedStatement ps = connection.prepareStatement("UPDATE countries set </P>
<P>      geometry=? where name=' China '");</P>

<P>      //把JGeometry对象转换为数据库的结构体。</P>

<P>      STRUCT obj = JGeometry.store(j_geom, connection);</P>

<P>      ps.setObject(1, obj);</P>

<P>      ps.execute();</P>

<P>      3.1.1.2 OCCI上载示例</P>

<P>      该上载示例是使用OCCI(Oracle C++ Call </P>
<P>      Interface)上载空间数据的完整示例程序。首先使用Oracle数据库数据类型翻译工具OTT(Oracle Type </P>
<P>      Translator)翻译类型MDSYS.SDO_POINT_TYPE与类型MDSYS.SDO_GEOMETRY,在命令行下输入,</P>

<P>      ott attraccess=private code=cpp cppfile=spatial_classeso.cpp </P>
<P>      hfile=spatial_classesh.h intype=spatial_types.typ </P>
<P>      mapfile=spatial_classesm.cpp mapfunc=RegisterClasses userid=scott/tig</P>

<P>      <a href="mailter@gis" target="_blank" >er@gis</A></P>

<P>      命令成功执行以后,就会生成4个文件,分别为spatial_classesh.h、spatial_classeso.cpp、 </P>
<P>      spatial_classesm.h、与 spatial_classesm.cpp;</P>

<P>      然后,在scott用户模式下创建空间表格(即存储空间数据的表格)spatial,实现的SQL语句如下:</P>

<P>      CREATE TABLE spatial(geoloc MDSYS.SDO_GEOMETRY);</P>

<P>      最后,利用VC++建立一个工程,把前面翻译的文件spatial_classesh.h、spatial_classeso.cpp、 </P>
<P>      spatial_classesm.h、与 spatial_classesm.cpp添加到工程中。主文件的内容为,</P>

<P>      #include </P>

<P>      #include </P>

<P>      #include </P>

<P>      #include </P>

<P>      #include "spatial_classesh.h"</P>

<P>      #include "spatial_classesm.h"</P>

<P>      using namespace std;</P>

<P>      using namespace oracle::occi;</P>

<P>      const int SDO_GTYPE_2DPOINT = 2001;</P>

<P>      const int SDO_GTYPE_2DPOLYGON = 2003;</P>

<P>      const int SDO_ETYPE_POLYGON = 1003;</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2007-05-15 20:03
<P>     const int SDO_INTERPRETATION_RECTANGLE = 3;</P>

<P>      void main()</P>

<P>      {try</P>

<P>      {//以OBJECT模式初始化环境变量</P>

<P>      Environment *env = Environment::createEnvironment(Environment::OBJECT);</P>

<P>      RegisterClasses(env);//注册类型函数</P>

<P>      Connection *conn = env->createConnection("scott","tiger","gis");</P>

<P>      try</P>

<P>      { Statement *stmt = conn->createStatement("Insert Into spatial(geoloc) </P>
<P>      VALUES (:1)");</P>

<P>      //存储空间对象 </P>

<P>      Number srid_null;</P>

<P>      SDOPointType *point_null = new SDOPointType();</P>

<P>      point_null->setNull();</P>

<P>      SDOGeometry *spatial_obj = new SDOGeometry();//建立对象</P>

<P>      spatial_obj->setSdo_gtype(SDO_GTYPE_2DPOLYGON);</P>

<P>      spatial_obj->setSdo_srid(srid_null);//不设置坐标系</P>

<P>      spatial_obj->setSdo_point(point_null);//设置点对象为null</P>

<P>      vector elem_info, ordinates;</P>

<P>      elem_info.clear();//清空elem_info</P>

<P>      ordinates.clear();//清空ordinates</P>

<P>      //存储elem_info对象</P>

<P>      elem_info.push_back(1);elem_info.push_back(SDO_ETYPE_POLYGON);</P>

<P>      elem_info.push_back(SDO_INTERPRETATION_RECTANGLE);</P>

<P>      spatial_obj->setSdo_elem_info(elem_info);</P>

<P>      //存储矩形,利用ordinates可以存储大于4000个字符的参数,ADO则小于4000</P>

<P>      ordinates.push_back(1);ordinates.push_back(1);// (1,1)</P>

<P>      ordinates.push_back(5);ordinates.push_back(7);// (5,7)</P>

<P>      spatial_obj->setSdo_ordinates(ordinates);</P>

<P>      stmt->setObject(1, spatial_obj);</P>

<P>      stmt->executeUpdate();</P>

<P>      delete spatial_obj;//释放对象</P>

<P>      conn->terminateStatement(stmt);}</P>

<P>      catch (SQLException ;ex)</P>

<P>      {env->terminateConnection(conn);</P>

<P>      Environment::terminateEnvironment(env);</P>

<P>      throw; }</P>

<P>      env->terminateConnection(conn);</P>

<P>      Environment::terminateEnvironment(env); }</P>

<P>      catch (SQLException ;ex)</P>

<P>      {cout << "Error running Demo : " << ex.getMessage() << endl; }}</P>

<P>      编译成功之后,该工程就向Oracle <BR></P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
3楼#
发布于:2007-05-15 20:03
<P>  </P>
<P> <BR>      Spatial的spatial表格中存储了一个矩形。用户可以扩展该工程,向数据库中存储以ASCII码表示的GIS软件的公开格式,比如 </P>
<P>      MapInfo的*.mif/*.mid格式,MapGIS的点、线、区域、网络文件的明码数据等。</P>

<P>      3.1.1.3 使用VB与ADO上载</P>

<P>      各种应用程序接口也是有区别的,如果使用ADO的话,有可能会出现参数传递不能满足要求的情况,例如下面在VB6.0中使用ADO的语句,</P>

<P>      Set adoCommand = Nothing</P>

<P>      adoCommand.CommandType = adCmdText</P>

<P>      adoCommand.CommandText = “Insert into SpatialTable_name(Spatial_column) </P>
<P>      values” ; SpatialData</P>

<P>      adoCommand.ActiveConnection = adoConnection</P>

<P>      adoCommand.Execute</P>

<P>      由于ADO </P>
<P>      Command对象的CommandText属性的长度如果超过4000个字符将不能进行值的传递。因此,对于较长的空间对象就需要被截断,所以,采用 </P>
<P>      ADO接口进行上载不是最佳的选择。如果选择Oracle提供的应用程序编程接口(除了,前面提到的还可以使用OO4O、OCI等)就不会出现这种问题。 </P>
<P>      因此建议采用Oracle提供的应用程序编程接口开发上载程序。</P>

<P>      3.1.2 直接使用工具实现上载</P>

<P>      目前许多GIS软件公司都提供了上载空间数据到Oracle Spatial中的工具,比如EasyLoader、ArcSDE、MapGIS等等。</P>

<P>      3.1.2.1 EasyLoader</P>

<P>      Easyloader是MapInfo公司提供的上载工具,不过该工具只支持上载MapInfo格式的*.tab数据。该工具提供了命令行上载与窗口上载 </P>
<P>      两种方法。该工具在底层通过调用OCI(Oracle Call </P>
<P>      Interface)把数据写入数据库。使用EasyLoader上载空间数据到Oracle </P>
<P>      Spatial中,最大的优点就是上载的空间数据使用对象-关系模式存储的,可以完全利用Oracle </P>
<P>      Spatial的对象-关系模式的优点。在安装了MapInfo </P>
<P>      Professional以后,就默认安装了该工具,可以%MAPINFO%\Tools目录下找到该工具;此外,MapInfo的官方网站上也提供本免 </P>
<P>      费工具的下载。</P>

<P>      3.1.2.2 SQL*Loader与Shp2SDO</P>

<P>      SQL*Loader根据从控制文件接受的指令读取ASCII码数据,并将数据放入Oracle数据库中。控制文件通知SQL*Loader数据应放在何 </P>
<P>      处,并描述装入Oracle数据库中的各类数据。SQL*Loader还能过滤数据(即不装入那些不适合的数据, ),同时可以将数据装载进多个表,并在将数 </P>
<P>      据放入Oracle表之前生成唯一关键字或操作数据。</P>

<P>      Shp2SDO是Oracle公司提供的,用来把ESRI的*.shp文件转换为可以使用SQL*Loader的控制文件与数据文件的一个命令行工具。该 </P>
<P>      工具不仅可以把*.shp转换为对象-关系的格式,也可以转换为关系格式。该工具可以从Oracle公司的网站上免费下载。</P>

<P>      配合使用SQL*Loader与Shp2SDO就可以把ESRI的Shape文件上载到Oracle Spatial中。</P>

<P>      3.1.2.3 ArcSDE与MapGIS提供的工具</P>

<P>      如果购买了ESRI的ArcSDE,就可以使用ArcToolbox工具通过ArcSDE空间数据库引擎来上载ESRI格式的数据。与ArcMap或者 </P>
<P>      ArcCatalog一样,ArcToolbox是ArcGIS家族的一个重要的成员,专门负责数据的导入导出工作。除了ESRI格式的数据以外(如 </P>
<P>      ShapeFile、Covage文件),ArcToolbox还提供了E00、DWG等常用文件格式的数据转换工作。在进行数据转换的时候,用户可以根 </P>
<P>      据实际的需要设置转换的参数,如空间数据表的字段名称,空间索引坐标的最值等。ArcToolbox给我们提供了良好的数据转换工具。同样,如果使用的 </P>
<P>      MapGIS是6.5或者其更高版本的话,就可以使用MapGIS的属性库管理子系统、编辑子系统所提供的工具来上载MapGIS空间数据。虽然 </P>
<P>      ArcSDE从逻辑上看是面向对象存储的,但是物理上使用的还是Oracle的纯关系表格。因此,这两个工具目前的版本只支持关系模式,也就是 </P>
<P>      Spatial Cartridge的模式。</P>

<P>      3.2 栅格数据的上载方法</P>

<P>      从Oracle 10g开始,Oracle Spatial中增加了存储栅格数据的模块,同时还提供了上载栅格数据的Java API、PL/SQL </P>
<P>      API以及上载工具GeoRasterLoader。下面给出了使用GeoRasterLoader上载栅格数据的过程:</P>

<P>      1) CREATE TABLE jpegs (jpg MDSYS.SDO_GEORASTER);</P>

<P>      2) CALL sdo_geor_utl.createDMLtrigger(‘jpegs', 'jpg');</P>

<P>      3) CREATE TABLE rdt1 of MDSYS.SDO_RASTER (primary key (rasterId, </P>
<P>      pyramidLevel,bandBlockNumber, rowBlockNumber, columnBlockNumber));</P>

<P>      4) INSERT INTO jpegs VALUES(MDSYS.SDO_GEOR.init('rdt1'));</P>

<P>      5) SELECT jpg FROM jpegs;</P>

<P>      返回值为SDO_GEORASTER(NULL, NULL, 'RDT1', 22, NULL)</P>

<P>      6) COMMIT;</P>

<P>      7) 在操作系统的命令行工具使用下面的命令来上载栅格图像"C:\TEST.jpg",</P>

<P>      java GeoRasterLoader gis01 gis 1521 scott tiger thin 32 T jpegs jpg </P>
<P>      "blocking=true,blocksize=(256,256,1)" "C:\TEST.jpg,22,rdt1";</P>

<P>      8) 上载成功以后,还可以使用GeoRasterViewer来浏览栅格图像,在操作系统的命令行工具下输入下面的命令,</P>

<P>      java GeoRasterLoader gis01 gis 1521 scott tiger thin 32 T;</P>

<P>      在上载栅格数据的时候,由于目前的Oracle10.1.2版本所采用栅格数据模型不支持中文字符,所以用户在安装Oracle </P>
<P>      10g的时候,必须选择使用英语,而不能默认使用中文。</P>

<P>      4 结论</P>

<P>      (1) 采用Oracle Spatial </P>
<P>      存储、管理空间数据,易于解决数据共享、分布式处理、网络通信、开放式开发、并发控制、网络化集成、跨平台运行及数据安全恢复机制等方面的难题,因而成为 </P>
<P>      了目前的一种应用趋势。而如何将现有GIS软件中产生的空间数据导入该数据库中成为该技术应用的首要关键环节。</P>

<P>      (2) 向Oracle </P>
<P>      Spatial上载GIS空间数据,其实质也就是把空间数据的图形数据(包括矢量数据与栅格数据)与相应的属性数据写入数据库的表格中。而充分理解所导入 </P>
<P>      的GIS数据的存储方式以及Oracle Spatial的数据类型及其对象的属性与方法是上载程序实现的工作基础。</P>

<P>      (3) </P>
<P>      在上载的实现方式上可以使用GIS件公司提供的工具或手工编写程序进行上载。在具体方式的选择上:如果GIS软件提供了相应的上载工具的话,建议采用这些 </P>
<P>      工具上载,因为这样就可以利用相应的二次开发组件开发基于Oracle </P>
<P>      Spatial的应用程序(例如,使用Easyloader上载了*.tab文件后,就可以在MapInfo的MapX以及MapXtreme for </P>
<P>      Java中使用Oracle Spatial数据源);如果没有相应的上载工具,就用户可以通过ADO、OCI、OCCI、OO4O、Java </P>
<P>      API等接口自行开发上载工具。</P>

<P>      (4) 在本文介绍的Java API、OCCI、ADO三种接口的实现过程中,由于ADO接口的 </P>
<P>      Command对象在CommandText属性的长度超过4000个字符的情况下不能进行值的传递,较长的空间对象会被截断。因此建议采用Oracle </P>
<P>      提供的Java API和OCCI接口来开发上载程序。</P>

<P>      (5)Oracle10g 的Oracle Spatial选件中增加了存储栅格数据的模块,同时还提供了上载栅格数据的Java API、PL/SQL </P>
<P>      API以及上载工具GeoRasterLoader。使用GeoRasterLoader可以实现栅格数据的上载,但是由于目前的 </P>
<P>      Oracle10.1.2版本所采用栅格数据模型不支持中文字符,所以建议在安装时的语言的选项上不采用默认的中文而选择使用英语。<BR></P>
举报 回复(0) 喜欢(0)     评分
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-05-20 18:59
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
xiaomeizi789
路人甲
路人甲
  • 注册日期2007-05-10
  • 发帖数12
  • QQ
  • 铜币183枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-06-13 09:57
<P>请教!怎么才能利用vc++开发一个生成DEM和TIN的软件呢?主要是流程,拜托了!</P>
举报 回复(0) 喜欢(0)     评分
zhouxianjun
路人甲
路人甲
  • 注册日期2004-11-16
  • 发帖数135
  • QQ
  • 铜币141枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2007-06-14 11:26
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
举报 回复(0) 喜欢(0)     评分
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2007-06-15 19:19
<img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
liujun
路人甲
路人甲
  • 注册日期2007-04-08
  • 发帖数87
  • QQ
  • 铜币391枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2007-06-19 19:12
<P>OCI是最低层的接口,OCCI和java用起来比较方便</P>
举报 回复(0) 喜欢(0)     评分
liujun
路人甲
路人甲
  • 注册日期2007-04-08
  • 发帖数87
  • QQ
  • 铜币391枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2007-06-29 16:48
<a href="http://www.gisempire.com/bbs/dispbbs.asp?boardID=36;ID=61360;page=1" target="_blank" >http://www.gisempire.com/bbs/dispbbs.asp?boardID=36;ID=61360;page=1</A>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部