hippy9911

导航

ArcEngine开发与ArcGIS基础知识 - 2

<!--本文仅供初学者学习使用。如有错误,敬请指正。-->

  四、IFeatureLayer  (ESRI.ArcGIS.Carto)

    此接口为矢量图层接口。

    (1)此接口只作为展示图层使用,对其对象操作并不会对数据源产生影响

    (2)通过该接口可以修改图层的名称,图层是否可见,图层展示所用投影,例如:

    //// 命名图层
    IFeatureLayer pFeatureLayer = ; //// 需要操作的图层 
    pFeatureLayer.Name = "test";

    //// 定义投影
    ISpatialReference pSpatialReference =  ;//// 需要的投影 
    pFeatureLayer.SpatialReference = pSpatialReference;

    //// 设置是否可见
    pFeatureLayer.Visible = false;

    再次强调,IFeatureLayer只会对显示产生影响,并不会修改数据源,所以这里命名图层只是修改图层的名字;赋值投影也不会给数据源做投影,另外IFeatureLayer的投影只可写入、不能获取,想要获取投影还是要在数据源处获得。

    (3)通过IFeatureLayer接口可以获取和修改数据源,这里就要引入ArcGIS矢量数据操作中最重要的接口IFeatureClass,先说结论IFeatureClass就是IFeatureLayer的数据源。示例:

        //// 获取图层上的数据源
        IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
        //// 修改图层上的数据源
        pFeatureClass = ;////从别处获取数据源
        pFeatureLayer.FeatureClass = pFeatureClass;

    (4)IFeatureLayer提供了Search方法,Search的结果是IFeatureCursor。这里牵扯了后面许多的概念,就不做示例了,可以先有个印象。

 

    五、IWorkspaceFactory  (ESRI.ArcGIS.GeoDatabase)

    上一个接口引出了一个非常重要的接口IFeatureClass,但在讲这个接口之前,让我们在来梳理一下逻辑。

    前四个接口,只有IMapDocument涉及到了文件(.mxd),其余的接口与真实的数据都没有什么关系,所以(.mxd)文件其实相当于一个索引文件,本身不存储数据,只存储真实数据的位置,而剩下三个接口则都用来显示。只能显示不能操作的地图就像是无本之木,无源之水,所以在说IFeatureClass之前,应该先从数据的角度重新认识一下IFeatureClass。

    所以,还是从最外层的IWorkspaceFactory开始说起。

    (1)该接口主要作用是打开不同数据类型的工作空间,所以应该先看看我们的ArcGIS都能创建哪些文件,这些文件虽然可以使用ArcMap来创建,但还是有些麻烦,好在ArcGIS提供了自己的数据组织软件——ArcCatalog

    

    从图中可以看到ArcCatalog可以创建哪写文件,这里挑一些我平时用的比较多的依次介绍一下

        1. Folder  这个最简单,就是建个文件夹

        2.File Geodatabase 这个是ArcGIS自己组织的数据库格式,在电脑里看就是一个以(.gdb)结尾的文件夹

        3.Personal Geodatabase 这个是将数据存在了Access数据库里(.mdb文件)

        4.DatabaseConnection 联网的数据库,常用的是Oracle和SQL Server

        5.ArcGIS Server Connection WebGIS相关的连接(网页不怎么会,呜呜呜

        6.Layer 这时有小伙伴就要问了,这不是能创建Layer嘛,前面在说什么,Layer不是可以当数据源嘛。先别急,创建一个就知道了。

        

 

 

         喏,点击创建就会让你指定一个数据源

        7.ShapeFile 这个就是文件意义上的IFeatureClass了,当然这只是它的一种来源。

    (2)这些文件(夹)都可以通过IWorkspaceFactory打开(当然除了Folder),这里简单举几个例子:

      ////不同的对象要引用不同的dll
   IWorkspaceFactory pWorkspaceFactory = null;
  
pWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); //// ESRI.ArcGIS.DataSourcesGDB (File Geodatabase)
  pWorkspaceFactory = new AccessWorkspaceFactoryClass(); ////ESRI.ArcGIS.DataSourcesGDB (Personal Geodatabase)
  
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); ////ESRI.ArcGIS.DataSourcesFile (ShapeFile)

           

    这篇随笔就写到这了,下一篇将会介绍各个文件的含义,如有错误也请各位小伙伴指正。

posted on 2023-03-08 16:57  hippy258  阅读(38)  评论(0编辑  收藏  举报