• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
修成正果
记录修身养性、终成正果之漫漫长路
博客园    首页    新随笔    联系   管理    订阅  订阅

遥感影像数据管理(二)

ArcSDE 9.2

美国环境系统研究所公司(Environmental Systems Research Institute, Inc. 简称ESRI公司)是世界最大的地理信息系统(Geographic Information System,GIS)技术提供商。其产品体系非常庞大,ArcSDE是一个从ARC/INFO系列中SDE产品发展而来的,历经数十年的改进,目前成为主要用于访问存储于关系数据库管理系统(RDBMS)中的海量多用户地理数据库的服务器软件产品。它是ArcGIS 中所集成的一部分,也是任何企业GIS 解决方案中的核心要素。ArcSDE是ArcGIS与关系数据库之间的GIS通道,它允许用户在多种数据管理系统中管理地理信息,并使所有的ArcGIS应用程序都能够使用这些数据; 同时,ArcSDE是多用户ArcGIS系统的一个关键部件,它为DBMS提供了一个开放接口,允许ArcGIS在多种数据库平台上管理地理信息。最新的ArcSDE9.2版本支持的数据库平台包括Oracle,Oracle with Spatial/Locator,Microsoft SQL Server, IBM DB2,和Informix。

1 ArcSDE介绍

ArcGIS需要使用一个可以被大量用户同步访问并编辑的大型数据库提供必要的功能。通过ArcSDE,ArcGIS可以在DBMS中轻而易举地管理一个共享的、多用户的空间数据库。ArcSDE的具体功能如下:

Ø  运行在关系数据库上的实现空间数据管理的网关

Ø  提供GIS客户端和关系数据库通讯手段

Ø  空间数据库中心

–   管理大型,连续空间数据

–   快速空间查找

–   多源空间数据存储和管理方案

 

ArcSDE对栅格数据的管理提供了很好的支持。

Ø  能够将ArcGIS支持的任何栅格数据导入到多用户 (SDE) GeoDatabase

Ø  加载的工具在 ArcToolbox, ArcCatalog中

–   创建金字塔索引

–   将多个栅格数据组合成一个栅格数据

Ø  栅格数据只能被存储在企业GeoDatabases中

ArcSDE将遥感影像分块储存:

Ø  ArcSDE 把影像分成块

–   自动分块

Ø  块号自定义缺省128x128

Ø  以块为单位存取

–   每块存在SDE_BLK_<id>中存为一个记录

Ø  通过块号存取

–   于矢量的GX,GY类似

2 体系结构

通过ArcSDE可以实现用关系型数据库管理系统(RDBMS)管理空间数据。在RDBMS中融入空间数据后,ArcSDE可以提供对空间、非空间数据进行高效操作的数据库服务。ArcSDE采用Clinet/Server体系结构,适于大量用户同时并发地对同一数据进行操作。ArcSDE的体系结构如图所示:

3 实现部分

大体实现思路如下:

Ø  利用ArcGIS公司提供的ArcCatalog软件,连接已经构建数据库环境,建立Raster Catalog并连接数据库;

Ø  利用ArcGIS公司的Developer Kit在.NET环境下提供的ArcGIS Windows Forms开发

3.1 建立Raster Catalog

1、构建数据库环境

本文采用的是Oracle10g。在安装ArcSDE的过程中,会逐步创建SDE用户,并为其创建专门表空间和相应的表,大部分只需要按照缺省参数即可。在创建完SDE用户后,会创建一个sde_esri的服务程序,用于连接Oracle。

2、连接数据库

在ArcCatalog软件中,选择Add Spatial Database Connection。

3、创建Raster Catalog

选择New Raster Catalog。

4、导入栅格数据

需要声明的是:上述操作中,除了构建数据库以外,其他步骤均可在.NET中用程序实现,可见ArcSDE提供了很多很强大的操作类。

3.2 .NET下开发

1、利用ArcGIS公司的Developer Kit在.NET环境下提供的ArcGIS Windows Forms开发

2、几个关键函数

1)、//连接GeoDatabase

private IRasterWorkspaceEx OpenSDEGeodatabase()

{

            IPropertySet pConn = new PropertySet();

            pConn.SetProperty("server", "dbrg-32k-8");

            pConn.SetProperty("instance", "esri_sde");

            pConn.SetProperty("user", "sde");

            pConn.SetProperty("password", "cg");

            pConn.SetProperty("version", "sde.DEFAULT");

            IWorkspaceFactory pFact = new SdeWorkspaceFactory();

            return (IRasterWorkspaceEx)pFact.Open(pConn, 0);

}

2)、//连接Raster Catalog

private void LoadDirtoRasterCatalog(object outRasterCatalog, string inputDir)

{

            //Initialize GeoProcessor

            ESRI.ArcGIS.Geoprocessor.Geoprocessor geoProcessor = new ESRI.ArcGIS.Geoprocessor.Geoprocessor();

            //CreateRasterCatalog GP tool

            WorkspaceToRasterCatalog workspaceToRasterCatalog = new WorkspaceToRasterCatalog();

            //Set parameters

            workspaceToRasterCatalog.in_raster_catalog = outRasterCatalog;

            workspaceToRasterCatalog.in_workspace = inputDir;

            //Execute the tool to load rasters in the directory to raster catalog

            geoProcessor.Execute(workspaceToRasterCatalog, null);

}

3)、//显示栅格数据

private void AddRasterCatalogLayer(ESRI.ArcGIS.Carto.IActiveView activeView, ESRI.ArcGIS.Geodatabase.IRasterCatalog rasterCatalog)

{

            //create a raster catalog layer

            ESRI.ArcGIS.Carto.IGdbRasterCatalogLayer rastercatalogLayer = new GdbRasterCatalogLayerClass();

            rastercatalogLayer.Setup((ITable)rasterCatalog);

            //Add it to map if the layer is valid

            if (!(rastercatalogLayer == null))

            {

                ESRI.ArcGIS.Carto.IMap map = activeView.FocusMap;

                map.AddLayer((ILayer)rastercatalogLayer);

            }

}

 

posted @ 2008-09-04 23:10  修程正果.GIS  阅读(1985)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3