zoukankan      html  css  js  c++  java
  • 遥感影像数据管理(二)

    ArcSDE 9.2

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

    1 ArcSDE介绍

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

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

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

    Ø  空间数据库中心

       管理大型,连续空间数据

       快速空间查找

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

     

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

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

    Ø  加载的工具在 ArcToolbox, ArcCatalog

       创建金字塔索引

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

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

    ArcSDE将遥感影像分块储存:

    Ø  ArcSDE 把影像分成块

       自动分块

    Ø  块号自定义缺省128x128

    Ø  以块为单位存取

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

    Ø  通过块号存取

       于矢量的GX,GY类似

    体系结构

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

    实现部分

    大体实现思路如下:

    Ø  利用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);

                }

    }

    来自:http://www.cnblogs.com/nudtchengguo/articles/1284741.html

  • 相关阅读:
    数据库优化方案之分库分表
    聊聊ThreadLocal源码(基于JDK1.8)
    HashMap扩容死循环问题
    Synchronized偏向锁和轻量级锁的升级
    【Java并发编程之深入理解】Synchronized的使用
    ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock
    面试必备技能:HashMap哪些技术点会被经常问到?
    序列键生成器及单例多例模式
    Effective.Java第1-11条
    抽象工厂(AbstractFactory)模式
  • 原文地址:https://www.cnblogs.com/gisoracle/p/1915346.html
Copyright © 2011-2022 走看看