AE开发20210506之数据库、创建个人地理数据库、空间数据与工作空间、打开地图的三种办法、查找资料

数据库

存放东西所在的文件夹就是一个数据库

arcmap相关操作理解数据库的概念

数据库的百度定义

数据库系统(Database System),是由数据库及其管理软件组成的系统。
数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质 、处理对象和管理系统的集合体。

①打开arcmap,找到图标,创建一个新的文件夹,
连接文件夹。(注意如果没有链接文件夹,则无法在目录中找到我们需要的文件夹)
②做工作。文件夹下,添加新的文件夹,起名为“MyData”,去磁盘文件夹下找一下,发现已经存在了,看这个文件夹下全是空的,没有任何数据。
在这个文件夹下,创建数据源,创建Shapefile。
(shapefile可以创建点、线、面)
③创建的数据源,制定投影坐标系或者地理坐标系。
点击编辑,进行添加坐标系。
我们可以指定坐标系或者添加一个已有坐标系的地图,这样就实现了与我们指定数据相同的坐标系的操作
④如果不设置投影,则不能投影。
dbf存放属性数据,shp存放当前点的XY坐标空间数据,prj存放坐标(投影),shx存放索引文件

⑤值得注意的是:一个shapefile是多个文件,这么多的点,怎么去关联起来的呢?
因为有关键字,ID,把这些对象和属性关联起来。

我们打开数据库可以打开属性,显示字段,前三个是无法编辑的。


在这里插入图片描述
点击【编辑器】|【开始编辑】进行点的创建,选择编辑。

工作空间

把多个shapefile文件放在同一文件夹下,这个文件夹就是工作空间。

C#得到workspace(即程序)路径:

private String path = AppDomain.CurrentDomain.BaseDirectory;

简短一行,却十分有用

工作空间是就是你项目存放的位置,方便下次查找,项目之前没什么关系,每个工作空间里面都有一个.metadata文件夹

常见数据库

https://zhidao.baidu.com/question/283110267.html

1、MS SQL数据库
MS指的是微软Microsoft,SQL是结构化查询语言.结合起来就是说:MS SQL是指微软的SQL Server数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。
2、ACCESS数据库
美国Microsoft公司于1994年推出的微机数据库管理系统。它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面数据库管理系统。其主要特点如下:
(1)完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。
(2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Cient/Server)结构和相应的数据库安全机制,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。
(3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表,可视性好。
(4)作为Office套件的一部分,可以与Office集成,实现无缝连接。
(5)能够利用Web检索和发布数据,实现与Internet的连接。 Access主要适用于中小型应用系统,或作为客户机/服务器系统中的客户端数据库。
提示:只有你的空间支持ASP,一般都支ACCESS,ACCESS数据库一般免费,适合中小型网站。
3、My SQL数据库
My SQL是一个多用户、多线程的SQL数据库,是一个客户机/服务器结构的应用,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
4、Oracle数据库
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。到目前仍在数据库市场上占有主要份额。劳伦斯·埃里森和他的朋友,之前的同事Bob Miner和Ed Oates在1977年建立了软件开发实验室咨询公司(SDL,Software Development Laboratories)
5、DB2
IBM公司研制的一种关系型数据库系统。DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于OS/2、Windows等平台下。 DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。
DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。它以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。

创建个人地理数据库

.mdb以此为结尾的文件。实际上是一个access数据库

创建了很多的新的,在access中创建。在新的表中创建字段,赋字段,可以将创建的表存起MyfirstTable,然后就可以往里面添加数据了。

值得注意的是:
数据最好不要在access中直接修改,以免索引受到损坏

打开我们创建的.mdb文件,自动创建了许多数据(许多表)。
所有带GDB的,这个是进行管理用的,带这个GDB的文件,尽量不要去动它

在ArcMap里面看,是空的空间数据库。

我们可以往里面添加空间数据,我们可以把创建的shapefile文件添加进来,如果我们少copy一个,可能就会把数据破坏,但当我们用数据库存放就不需要担心这个问题。

添加要素类,从外部引入一个数据源过来,我就把原来那个shapefile文件引入进来。

这也就是添加,这个city,shapefile文件

当前有的一些字段,有些字段不想加,可以删除掉,如果都想,则可以按照默认的。

也可以命名为City1

此时此刻再点击,数据库,可以发现,加入了shapefile文件了,表这里有一个特殊的字段,一个shape字段。

.dbf存放的是属性
个数字段,用于控件数据的存储,名字叫做shape,这个是存放空间位置的,这个是特殊的,是二进制类型,就把刚才地图上所有的点类,都存到这个shape里面去了

在access里面不要去修改,因为索引关系会被破坏,我们需要知道数据是如何存储的,添加进来的city。

可以重新new,new一个要素类,设置字段

表和Personal geodatabass的关系:
导入很多shapefile文件,我会做很多的管理,我想把山东科技大学的所有的点层,面层,线层,做成一个数据集。形成不同的要素,在个人地理空间数据库中该如何做呢?

创建数据集的概念。

明白数据源的关系。一个数据集,单击右键,new,创建一个要素数据集,需要同样的坐标系,我们需要指定。

导入三个文件,打开access,有了三个表,也就更加明白了数据源的关系,即PPT中讲到的:空间数据与工作空间

数据库下面加载的数据集,数据集下面的这些,就是我们的数据源,就是要素类。

表和要素有什么区别呢?

创建表的时候,少了选坐标,和容差。创建的是一个纯表。

创建纯表的时候,可以看到我创建了的,发现没有Shape字段,纯表只有属性,没有空间数据,没有通过外部的一个ID进行要素之间的关联。

空间数据和属性数据统一在一张表里面,这个.mdb文件下面所管理的就是空间数据和纯表

我们能不能在这个里面创建一个纯表呢?
能,但是建议不要,因为无法做管理。如果我们通过ArcMap则可以进行。

基于文件方式,存放的空间数据库,这个数据库是基于空间的,不是.dbf什么的分开存放,而是分开管理的。

局限性:
各有各的优势,.MDB都导入这个access库当中,如果这个数据量都是矢量,数据量不大,没问题,如果很多图片和栅格数据,用MDB去管理,则不可以

工作空间对应的类型有哪一些呢?

不同的工作空间类型:
用工作空间工厂对其进行创建,工作空间工厂对象,用于工作空间创建的。
用它打开文件夹,,在这个文件夹下找到工作空间文件,

数据源打开和存放,有这个工作空间这个类。

第一个工作空间的类,用这个类创建对象,对象有什么能力呢?
可以通过接口去实现,工作空间这个对象去创建。

工作空间需要用WorkspaceFactory。我们需要查看**“对象模型图”**。

我们知道了这些层次和关系,面临相应的数据源访问,第一节课对数据源的访问要用:GeoDataBase类库。

鸟和蛋是产生关系,找他派生出来的子类,GeoDataBase

WorkSpace是一个普通类 不能new出来 可以由工作空间工厂对象产生出来,工作空间工厂是一个普通类,他派生出来的子类是虫孔。

虫孔:连接两个类库。

WorkSpaceFactory去派生,由arcinfo进行访问,这一些都是灰色的立方块,我们可以通过new的方式进行创建出来。

矢量数据进行访问的时候,访问矢量数据的能力是什么?

IFeature实现。

IworkSpace接口有相关属性和方法,对矢量数据访问的能力有IfeatureWorkSpace接口实现createtable。

ArcMap用AO开发的。工作空间工厂,WorkSpaceFacture。返回的是一个工作空间。

打开shapefile文件的那个类,

一个工作空间可以创建打开数据源了。工作空间工厂:

加一个LisenceControl和MapControl

通过这个接口,进行操作。

添加一个按钮,起名为OpenMap。

打开地图文档,找到一个MXD,取出这个文档,然后Load到这个文档当中,我们要OpenFile

空间数据和工作空间

常见的工作空间及其工作空间对象
工作空间
●数据加载需要先打开相对应的工作空间。
●IWorkspace接口: IWorkspace接口定义 了访问工作空间各种属性的方法,如工作空间的连接属性等。通过IWorkspace接口可实例化现有数据集和创建新数据集。由于WorkSpace是一一个 普通类,要获得WorkSpace,需要通过工作空间工厂(WorkspaceFactory) 来创建。
●IWorkspaceFactory接口: IWorkspaceFactory接口定义 了创建、打开工作空间的方法和对工作空间工厂信息成员的访问。用户可通过工作空间工厂管理不同类型的工作空间,所有的工作空间对象都可通过此接口产生
●IWorkspaceShapefileFactory接口的Open方法和OpenFromFile方法可以用于打开一个已经存在的工作空间,Open方法用于打开一个SDE数据库,OpenFromFile方法用于打开-一个文件类型的数据,如*.tif、 *.img等。

1. MapControl控件接口

在这里插入图片描述
在这里插入图片描述

打开地图的三种方法

https://blog.csdn.net/wangchengchengxback/article/details/76597147?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

1.MapControl控件接口的LoadMxFile方法加载

方法如下:

private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Map Document|*.mxd";//前面是一个提示,后面是过滤
            dlg.Multiselect = false;
            dlg.Title = "Open Map Document";
            //调用对话框
            if (dlg.ShowDialog() == DialogResult.OK)
            //下面按钮有OK Conser(取消)
            {
                //判定是否选择文件
                string filename = dlg.FileName;
                if (filename == "")//判断是否选择文件为空
                {
                    return;
                }
                //判定这个MXD文档是否为点文档
                //axMapControl实际上可以是MapControl,在controls类库,
                //作业:查看controls和MapControl类库
                //LoadMxFile方法,检查是否为有效的地图文档
                if (axMapControl1.CheckMxFile(filename))//如果地图文档有效,则加入
                {
                    axMapControl1.LoadMxFile(filename);
                }
                else
                {
                    MessageBox.Show("无效的地图文档!");
                }
                axMapControl1.Refresh();//地图的刷新
            }
        }

2.IMAPDocument方法,

添加一个按钮,不用方法一了,而用IMAPDocument,但是我们输入IMAP没有出现IMAPDocument,说明没有加入,则思考在哪里,对地图文档进行管理,每个文档进行渲染,存放在类库中,放在了Carto类库

所以要using一下

IMapDocument类

对象模型图中查看,Map Layer方法,我们要用Open方法,用C#里面的方法指定一个Document。

地图文档有Map属性,一个地图文档可以加多个地图,可以有多个层,只有一个地图可以出一个地图中心,MapDocument对象,我没有在控件中去显示。

IMapDocument iMapDoc = new MapDocument();//注意名词有无“I"
                    iMapDoc.Open(filename);
                    //作业:查IMapDOcument类
                    //打开在了地图文档对象里面,
                    axMapControl1.Map = iMapDoc.ActiveView.FocusMap;//赋值
                    //地图文档里面显示地图文档对象里面的地图,此刻再运行
                    //要用一个地图文档对象,查看这个IMapDocument所有的能力,所有常用的接口,每一个接口都有什么样的方法
                    //AE开发用的都是接口,暴露的是接口,我们首先访问的是接口,后面我们都去用相关的属性和方法,MapDocument的Open方法
                    //不是控件打开接口,而是对象的接口的Open方法,Open到哪里呢?实际上,装载到内存中,Open到这个对象中了,我们的控件还没有展示这个内容
                    //加载到地图控件中,是利用Map属性进行赋值,内存中指向的处于激活状态的地图,在控件中打开



                    //第三个方法,是利用Icommand,用相关的control,谁去接受这个地图文档,接受是用iCom,
                    //OnClick事件包含打开实现的代码
                    //单独加载一个shapefile文件
                    //方法一:再加一个command,但是不美观
                    //方法二:加菜单,菜单最多加两层,不要再深了,再把button1的代码加过去

3.利用命令打开地图

在ArcMap里面的那个Open,和用C#写的Open不太一样。
命令背后其实也是AO,但做了更详细的打包。
我们要学另一个接口,ICommand

可以再帮助文档当中,输入,ICommand,回车,可以找到这个接口,当前接口所在的类库的位置。

“我们需要学会自学的方法”。

引用

要用什么去打开呢?

类库冲突,是因添加引用的时候,Open后确定我们会看到两个同样的类库,删除一个。

private void icommandToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ICommand pCommand = new ControlsAddDataCommand();
            //谁去执行呢,要去调用axmapcontrol
            pCommand.OnCreate(axMapControl1.Object);
            pCommand.OnClick();
            //明白真正的底层的执行
            //打印对象模型图
        }

或者

        private void button3_Click(object sender, EventArgs e)
        {
            ICommand iCom = new ControlsOpenDocCommand();
            //谁去执行命令,谁和谁关联
            iCom.OnCreate(axMapControl1.Object);//建立关联了
            iCom.OnClick();//打开,打开文件在此实现,地图文档的打开,不需要写其他代码

        }

查找资料

查看controls

https://blog.csdn.net/yzg686/article/details/5113246

Controls对象库介绍:

MapControl、IMapControl2、IMapControlDefault关联

查看MapControl类库

https://blog.csdn.net/haizhongliangji/article/details/41172361?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.control

MapControl对应ArcMap中的数据视图,它封装了Map对象,并提供了额外的属性、方法、事件用于:
1.管理控件的外观、显示属性和地图属性;
2.添加并管理控件中的数据层;
3.装载Map文档(.mxd)到控件中;
4.从其它应用程序拖放数据到控件中;
5.Tracking shapes and drawing to the display

ArcGIS的每种控件都有属性可以设置,它们可以在可视化环境中进行编辑。将控件拖放到窗体上后,用户可以右键点击,选择“属性”菜单来编辑这些属性,它们可以让用户不编写一行代码的情况下快速构建一个GIS应用程序。

MapControl实现的主要接口有:
IMapControlDefault、IMapControl2、IMapControl3和事件接口IMapControlEvents2。

主要接口

IMapControlDefault接口

IMapControlDefault接口时地图控件缺省接口,多数开发环境自动使用这个接口定义的属性、方法。由于MapControl是一个自动化控件,当它被放到一个容器,如窗体上后,它会自动产生一个被称为axMapControl1的对象,这个对象可以直接使用缺省接口定义的属性和方法。这个接口也代表了控件最新版本的接口,MapControl当前最新版本接口为IMapControl3。

当需要使用这个接口的时候,可以使用下面代码:

IMapControlDefault pMapControl;

pMapControl=axMapControl1.Object as IMapControlDefault;

返回潜在的MapControl控件

IMapControl2接口

这个接口时任何一个与MapControl相关的任务的出发点,如设置控件外观,设置Map对象或控件的显示属性,添加或者管理数据图层、地图文档,在控件上绘制图形和返回Geometry等。

IMapControl2定义了控制控件外观界面的各种属性和方法,如Appearance,BorderStyle和BackColor。它定义的方法有TrackLine、TrackPolygon、TrackRectangle和TrackCircle方法让程序员可以直接在控件上获得Geometry对象,它还提供了Drawshape和DrawText方法让用户直接在控件上绘制图形。

IMapControl3接口

该接口继承IMapControl2,并增加了以下8个属性和一个方法:

1.CustomProperty:设置自定义控件属性
2.DocumentFilename:返回MapControl装入的地图文档的文件名
3.DocumentMap:返回MapControl最后装入的地图的名称
4.KeyIntercept:返回或设置MapControl截取键盘按键信息,详情见表3-1
5.Object:返回潜在的MapControl控件,

查IMapDOcument类

https://bbs.csdn.net/topics/391819624
https://blog.csdn.net/weixin_30624825/article/details/97705106?utm_medium=distribute.pc_relevant_bbs_down.none-task–2allfirst_rank_v2rank_v29-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2allfirst_rank_v2rank_v29-1.nonecase
https://blog.csdn.net/langwen2048/article/details/80084806

三种方法加载MXD文档
通过IMapDocument接口用代码直接打开地图文档

地图文档DongHu_1在axmapControl1控件中以导入,但是在运行时不能直接显示出来,每次都要通过 文件—打开才能显示出来,当然这是我前期代码设置的问题,可是找了半天也没能发现问题的根源。

所以干脆直接在Form1_Load中用IMapDocument接口直接打开地图文档,也能实现一样的效果。

要注意filePath文件路径的格式:

windows下文件路径是用\分隔的,比如C:\Windows\System32\就是一个标准的windows路径。

在C语言中,文件路径会被写作字符串形式,但是由于C语言的字符串规则中,\字符是转义字符的引导,所以直接写"C:\Windows\System32"会出错。**而字符’\'才是表示**。

于是在写路径的时候,就必须是"C:\Windows\System32\"

当然也可以用使用windows自带的打开对话框控件OpenFileDialog控件打开地图文档 。

查看这个IMapDocument所有的能力,所有常用的接口,每一个接口都有什么样的方法

https://blog.csdn.net/m1m2m3mmm/article/details/105485430

IMapDocument方法加载Mxd文档文件


        private void iMapDocument方法ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog pOpenFileDialog = new OpenFileDialog();
                pOpenFileDialog.CheckFileExists = true;
                pOpenFileDialog.Title = "打开地图文档";
                pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf";
                pOpenFileDialog.Multiselect = false;
                pOpenFileDialog.RestoreDirectory = true;
                if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
                {
                    string pFileName = pOpenFileDialog.FileName;
                    if (pFileName == "")
                    {
                        return;
                    }

                    if (mainMapControl.CheckMxFile(pFileName)) //检查地图文档有效性
                    {
                        //将数据载入pMapDocument并与Map控件关联
                        IMapDocument pMapDocument = new MapDocument();//using ESRI.ArcGIS.Carto;
                        pMapDocument.Open(pFileName, "");
                        //获取Map中激活的地图文档
                        mainMapControl.Map = pMapDocument.ActiveView.FocusMap;
                        mainMapControl.ActiveView.Refresh();
                    }
                    else
                    {
                        MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("打开地图文档失败" + ex.Message);
            }
        }
        #endregion

使用IMapDocument打开文档

// 使用IMapDocument打开文档
IMapDocument  m_MapDocument;
private  void LoadMapDoc()
{
m_MapDocument =  new MapDocumentClass();
try
{
//打开文档对话框选择MXD文件
System.Windows.Forms.  OpenFileDialog openFileDialog2;
openFileDialog2 =  new OpenFileDialog();
openFileDialog2.Title =  "Open Map Document";
openFileDialog2.Filter =  "Map Documents (*.mxd)|*.mxd";
openFileDialog2.ShowDialog();
string  sFilePath = openFileDialog2.FileName;
//将数据加载到pMapDocument并与MapControl联系起来
m_MapDocument.Open(sFilePath,  "");
int  i;
int  sum = m_MapDocument.MapCount ;
for  (i = 0; i <sum; i++)
{
// 一个IMapDocument对象中可能包含很多Map对象,遍历map对象
axMapControl1.Map = m_MapDocument.get_Map(i);
}
// 刷新地图控件
axMapControl1.Refresh();
}
catch  ( Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

查找raterlayer

IFeatureWorkspace

https://blog.csdn.net/ooooook/article/details/4102838
http://www.voidcn.com/article/p-zkamjkry-bah.html

提供创建和打开各种数据集和其他workspace级别对象的成员。

这个接口主要用于管理基于矢量数据的,如:表(Table)、要素类(FeatureClass)、要素数据集(FeatureDataset)和关系类(RealationClass)等;

IFeatureWorkspace接口用于访问和管理地理数据库中的要素的重要成分—数据集,如Tables,ObjectClasses,FeatureClasses,FeatureDatasets,和RelationshipClasses。所有的Open方法(例如OpenTable)都要以dataset的名称作为输入。在企业数据库上工作时,就需要使用完全限定名(例如,”database.owner.tablename”或”owner.tablename”).

处理地理数据库时(personal,file或ArcSDE),workspace将运行一个实例datasets的对象表。不同的opendatasets的方法返回一个对其的引用。

IFeatureWorkspace是用workspace创建和打开对象、对象类的主接口。

使用完全限定名可以打开workspace中任何已存在的要素类。地理数据库中的每一个要素类都有唯一的完全限定名,使用OpenFeatureClass可以直接打开要素类。

使用IDatabaseConnectionInfo接口确定User和Database。ISQLSyntax::QualifyTableName可以用来确定要素类的完全限定名。使用IWorkspace2接口的NameExists来确定geodatabase中的要素类是否有适当的名称。

打开参与topology或geometric network的要素类将在内存中打开所有参与的要素类。

上面方法中OpenDataset,OpenTable,OpenFeatureClass都是要传入一个相应的名称,如要打开一个名称为PointTest的要素类,只需要在OpenFeatureClass中传入这个要素的名称,代码如下:

IWorkspace pWsFt = new AccessWorkspaceFactoryClass();

IWorkspace pWs = pWsFt.OpenFormFile(WsName, 0);

IFeatureWorkspace pFWs = pWs as IFeatureWorkspace;

IFeatureClass pFClass = pFWs.OpenFeatureClass("PointTest");

查RasterDataset

https://blog.csdn.net/u010771437/article/details/45373589

IRasterDataset2是对IRasterDataset的扩展(继承了IRasterDataset),包含了IRasterDataset的所有方法和属性,开发时可能考虑不全面,后来发现这个接口需要扩充,AE就发布了像这样的【接口2】的新版本接口。像这样的还有很多IRaster2等。
在这里插入图片描述

查rasterlayer相关接口和属性方法

https://blog.csdn.net/xwebsite/article/details/4850407
https://www.it610.com/article/1290257842225356800.htm

根据文件名添加栅格数据主要是使用IRasterLayer接口,通过IRasterLayer接口的CreateFromFilePath方法从已知Raster数据的文件路径来创建一个IRasterLayer,然后将该对象添加到Map中即可。

ArcGIS中最常用的文件型有GRID、TIFF、ERDAS IMAGE等,这几种栅格数据的工作空间也是所在的文件夹。打开栅格数据时需要使用栅格工作空间工厂在这里插入图片描述
(RasterWorkspaceFactory)
,然后再使用IRasterWorkspace接口的打开栅格数据集方法即可打开一个栅格数据集。在打开栅格数据集时,如果数据格式为是ESRI GRID,那么OpenRasterDataset()方法的参数为栅格要素集的名称,如果数据格式为TIFF格式,那么该方法的参数为完整的文件名,即要加上.tif扩展名,
IRaster又可以通过IRasterLayer接口的Raster属性来获取Raster对象,所以只需先通过IRasterLayer接口指定Raster图层。
在这里插入图片描述

查看C#中的转义符,能转义哪一些字符

https://blog.csdn.net/qq_38819293/article/details/88570586
https://zhidao.baidu.com/question/519908566.html

C#中转义字符分2中,一种是,一种是@。

@符号在C#中有两个作用
作用1、在字符串的前面加@表示取消字符串中的转义
例如 string path=@“d:\root\subdir”;
作用2、如果用户定义的对象名和系统关键字冲突,可以在变量前面加入@
例如 string @Class=“this is a test”;

一些字母前加「\」来表示常见的那些不能显示的 ASCII 字符,如 \0、\t、\n 等,就称为转义字符,因为后面的字符,都不是它本来的 ASCII 字符意思了。

特征
是一种特殊的字符常量;

以反斜线「\」开头,后面跟一个或几个字符;

用来表示那些用一般字符不便于表示的控制代码;

用可以看见的字符表示那不可以看见的字符, 如「\n」表示换行;

作用是消除紧随其后的字符的原有含义,不同于字符原有的意义,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,故称“转义”字符。

常用转义字符及含义
符号 含义
\n 换行
\r 回车
\t 制表符
\f 换页符
\b 退格
\a 响铃
\e escape(ASCII中的escape 字符)
\007 任何八进制值(这里是,007=bell(响铃))
\x7f 任何十六进制值(这里是,007=bell)
\cC 一个控制符(这里是:Ctrl+c)
\ 反斜线
" 双引号
\l 下个字符小写
\L 接着的字符均小写直到\E
\u 下个字符大写
\U 接着的字符均大写直到\E
\Q 在 non-word 字符前加上(自动加转义符号),直到\E
\E 结束\L,\E和\Q

\0 空格

拓展知识

一 字符串中的用法

Verbatim字符串

对于verbatim字符串,编译 器会严格按照原样对其进行解释。也就是说,即使这个字符串跨越多行,或是包含转义字符,编译器也将不予理会,即这些格式和转义符将按照原样输出。唯一例外的是引号,编译器必须将其转义,因为只有这样才能确定字符串的边界。

Verbatim字符串的定义语法为以@符号开始,后面紧跟包含在引号中的字符串。例如:

 string sample = @"Hello";

 string sample = @"Hello\tworld"; //生成Hello\tworld

 以下是一个实用的示例:

 string sample=@"C:\My Documents\sample.txt";

 //结果为:C:\My Documents\sample.txt,如同语句:string sample="C:\\My Documents\\sample.txt"

若想在Verbatim字符串内使用引号,必须使用附加的引号组将其转义。例如,生成字符串"Hi"的代码如下:

  String s=@" " "Hi"""; //注意:两边都有3个引号

 上述代码将生成下列字符串:"Hi" 

字符@表示,其后的字符串是个“逐字字符串”(verbatim string)。
@只能对字符串常量作用。
1.用于文件路径
以下是引用片段:
string s_FilePath =“C:\Program Files\Microsoft.NET\test.txt”;
相当于
以下是引用片段:
string s_FilePath =@“C:\Program Files\Microsoft.NET\test.txt”;

2.**用@表示的字符串能够跨越数行。**用于在CS中写JS或SQL代码比较方便。
以下是引用片段:
string s_MultiRows = @“Line1
Line2
Line3”;
string s_JavaScript = @"
";

二 标识符中的用法

在 C# 规范中, @ 可以作为标识符(类名、变量名、方法名等)的第一个字符,以允许C# 中保留关键字作为自己定义的标识符。

以下是引用片段:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine(“true”);
else
System.Console.WriteLine(“false”);
}
}
class Class1
{
static void M() {
clu0061ss.stu0061tic(true);
}
}

注意,@ 虽然出现在标识符中,但不作为标识符本身的一部分。
因此,以上示例,定义了一个名为 class 的类,并包含一个名为 static 的方法,以及一个参数名为了 bool 的形参。

这样,对于跨语言的移植带来了便利。因为,某个单词在 C# 中作为保留关键字,但是在其他语言中也许不是。

*转义字符 *
·一种特殊的字符常量;
·以反斜线""开头,后跟一个或几个字符。
·具有特定的含义,不同于字符原有的意义,故称“转义”字符。
·主要用来表示那些用一般字符不便于表示的控制代码。
·它的作用是消除紧随其后的字符的原有含义
·用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”
·用可以看见的字符表示那不可以看见的字符,
如’\n’表示换行

举例:textbox.text="你是\"天才\",哈哈!"
显示什么?
显示:你是“天才”哈哈

字符串常用方法

https://www.cnblogs.com/zhang1999/p/7089052.html?ivk_sa=1024320u
https://blog.csdn.net/wrs120/article/details/53087912
https://blog.csdn.net/csxypr/article/details/86649664

字符串的方法分为静态方法和非静态方法,当方法是静态方法时,方法前应加String,即格式为(7,8都是静态方法)

String.方法名

1.Upper,Lower,Equals的用法

Upper:将字母转化为大写

Lower:将字母转化为小写

Equals:忽略字母的大小写

<span style="font-size:18px;">Console.WriteLine("请输入字符串");
string str1 = Console.ReadLine();
str1 = str1.ToUpper();
Console.WriteLine("请输入字符串");
string str2 = Console.ReadLine();
str2 = str2.ToUpper();  //转化成大写</span>
bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
if (result)
{
    Console.WriteLine("输入意思相同");
}
else
{
   Console.WriteLine("输入意思不同");
}
   Console.ReadKey();</span>

2.Split:分割字符串

Replace:替换某个字符串

Countain:判断某字符串中是否包含某字符串
<span style="font-size:18px;">string text = "好好玩耍,天天快乐";
bool result = text.Contains("好好玩耍");
if (result)
{
    string[] str = text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    if (str[0].Contains("好好玩耍"))
    {
       str[0].Replace("玩耍", "学习");
    }
    Console.WriteLine("{0},{1}", str[0], str[1]);
}
 else
 {
    Console.WriteLine(text);
 }
Console.ReadKey();</span>

3.StartWith、EndWith的用法

判断某个字符串是否以某个字符串开始(startwith)或以某个字符串结束(endwith)

<span style="font-size:18px;">string text = "天气真清新";
bool result = text.EndsWith("清新");
if (result)
{
  Console.WriteLine("是的");
}
   else
{
Console.WriteLine("不是");
}
Console.ReadKey();</span>

4.indexof 的用法:判断某个字符在字符串中的索引,可以从同开始找,也可以从某个索引开始找,如果没有该字符, 则返回-1,有则返回该字符在该字符串中的索引

indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置

stringObject.indexOf(searchvalue,fromindex)

该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定fromindex时)。如果找到一个searchvalue,则返回searchvalue的第一次出现的位置。 stringObject中的字符位置是从0开始的。

需要注意的是:
 1、indexOf()方法对大小写敏感  
 2、如果要检索的字符串值没有出现,则该方法返回-1

查找该字符的最后一个索引,用LastIdexOf

int index = path.IndexOf("练习", 25);

5.substring的用法:截取字符串中的一段字符

string path = @"C:\Users\SHUANG\Desktop\练习.txt";
int order = path.LastIndexOf("\\");
string name = path.Substring(order + 1);
Console.WriteLine("文件名为:{0}", name);
Console.ReadKey();

6.insert的用法:在字符串的某个索引前插入值

string text = "我是一名学生";
text = text.Insert(4, "好");
Console.WriteLine(text);
Console.ReadKey();

运行结果为:我是一名好学生
7.strign,join的用法

<span style="font-size:18px;">string[] text = { "火龙果", "香蕉", "苹果", "芒果" };
Console.WriteLine(string.Join("|", text));
Console.ReadKey()</span>;

运行结果为:火龙果|香蕉|苹果|芒果

insert与join的区别:

join是在字符串数组的前提下操作的,在每个数组元素中间插入内容

inset是对字符串操 作,在某个索引前插入内容;

8.string.IsNullOrEmpty() 的用法:判断该字符串是否为空后NULL

<span style="font-size:18px;">string text = null;
bool result = string.IsNullOrEmpty(text);
if (result)
{
    Console.WriteLine("没信息");
}
else
{
    Console.WriteLine("有信息");
}
    Console.ReadKey();</span>

NULL与" "空字符串的区别:
NULL:不分配内存,无对象
“ ”:分配内存空间,有对象

9.Trim的用法

Trim是去掉字符串两端的空格

TrimEnd是去掉字符串最后面的空格

TrimStart是去掉字符串最前面的空格

string text = "  好天气   ";
text = text.Trim();

10.Format 的用法

http://www.jb51.net/article/57216.htm

11.File.Read的用法:读取某文件的内容
在这里插入图片描述

查WorkspaceFactory

https://www.cnblogs.com/edcoder/p/11717642.html在这里插入图片描述

workspace(工作空间)是你要处理的数据的容器,各种数据在AO中都有特定的工作空间与之对应,要创建合适的工作空间,先要创建合适的工作空间厂(WorkSpaceFactory),这个工作空间厂能够使你创建合适的工作空间与你的数据相连,就是相当于一个引子,引出你要操作的featureclass等等。

在这里插入图片描述
在工作空间工厂组件中,利用接口IWorkspaceFactory可以指向一个工作空间工厂对象。

每个工作空间工厂维系一个当前连接的数据池,活动工作空间由应用程序直接指向并操作。

**当调用Open方法打开某个工作空间时,**工作空间工厂首先检查该连接属性所对应的工作空间是否已被打开,如果已打开,直接返回现有实例对象的引用;否则,根据连接属性打开一个工作空间。获得工作空间对象后,就可以利用IWorkspace接口进行工作空间内数据的访问、编辑、分析等操作。
在这里插入图片描述

查Works

workspace就是存放你的工程的根目录。

查FeatureClass类

https://blog.csdn.net/haizhongliangji/article/details/41778315
IFeatureClass
用于访问控制要素类行为和属性的成员

**IFeatureClass接口是获取和设置要素类属性的主要接口。**例如,使用IFeatureClass接口获取要素类类型、获取满足查询条件的要素数目或在要素类中创建新要素。IFeatureClass接口继承了IObjectClass接口。

成员

AddField 向这个类中添加一个字段。

AddIndex 向这个类中添加一个索引。

AliasName 这个类的别名。

AreaField 几何区域字段

CLSID 与这个对象类实例相关的组件类的GUID。

CreateFeature创建一个新要素,系统自动分配一个ID,没有属性值。

DeleteField 从对象类中删除字段。

DeleteIndex 从对象类中删除索引。

EXTCLSID 与这个要素类的扩展类相关的组件类的GUID。

Extension 这个对象类的扩展。

ExtensionProperties 这个对象类的扩展属性。

FeatureClassID 要素类的唯一标识符。

FeatureCount指定查询获得的要素数目。

FeatureDataset 包含要素类的要素数据集。

FeatureType 要素类中的要素类型。

Fields 要素类的字段集合。

FindField 指定名称的字段索引。

GetFeature 根据对象ID获得要素。

GetFeatures 由一系列ID获得Rows的指针。

HasOID 指出要素类是否是否有一个要素表示字段(OID)。

Indexes 要素类的索引集合。

Insert 返回一个可以插入新要素的指针。

LengthField 图形长度字段。

ObjectClassID 对象类的唯一标识符。

OIDFieldName 与OID相关的字段名称。

RelationshipClasses该类参与的关系类。

Search 根据指定的查询返回要素的指针。

Select 根据查询返回包含对象ID的选择集合。

ShapeFieldName 默认Shape字段的名称。

ShapeType 要素类中默认Shape的类型。

Update 按照查询返回一个更新要素的指针。

继承的接口

IObjectClass 获得对象类的信息。

IClass 获得类的信息和管理类。

实现IFeatureClass的类

FeatureClass FeatureClass对象。

NAClass(NetworkAnalyst)网络分析中将要素输入,以及产生输出要素。

NetCDFFeatureClass(DataSourceNetCDF)内存中呈现的NetCDF要素类。

RasterCatalogGeodatabase表中的栅格数据集合。

RelQueryTable 用于连接有相同数据的两个数据集。

RouteEventSource(Location)Route event source对象。

TemporalFeatureClass(TrackingAnalyst)控制时态要素类的设置。

XYEventSource XY event source对象。

几个常用的成员

CreateFeature在要素类中创建一个新要素。
这个要素仅分配一个唯一的对象ID(OID),没有其他属性值。使用IFeature::Store方法将这个要素存储到database中。当工作在版本要素类上时,CreateFeature应当在edit时期调用。调用IWorkspaceEdit::StartEditing可以开始edit session。对Topology或Geometric Network要素的编辑要在edit阶段进行,并且要包含edit operation。

**调用CreateFeature之后,并不自动设置默认的子类型,也不初始化默认值。**如果要素没有子类型,调用IRowSubtypes::InitDefaultValues来初始化默认值。可以调用IRowSubtypes::SubtypeCode来设置要素的要素的子类型。

在要素类上调用CreateFeature方法(通过IFeatureClass接口)同调用CreateRow方法(通过ITable接口)的效果相同,不过IFeatureClass的方法返回一个row对象昂的IFeature接口。

创建一个新要素的步骤是:

1)创建要素

2)为要素创建几何图形。

3)在要素中存储几何图形。

4)存储要素。

IFeatureClass.CreateFeatureBuffer Method

创建一个要素的缓冲区

**CreateFeatureBuffer方法创建一个feature缓冲区,并返回IFeatureBuffer接口。**结合insert cursor可以使用这个方法在要素类中创建新要素。

调用IFeatureClass的CreateFeatureBuffer方法和调用ITable中的CreateRowBuffer的作用相同,只是IFeatureClass的方法返回一个row buffer的IFeatureClass指针。

IFeatureClass.FeatureCount Method

FeatureCount返回满足某些属性或IQueryFilter指定的空间查询的要素的数量。如果没有指定IQueryFilter,返回要素类中所有要素的数量。

IFeatureClass.FeatureDataset Property

**这个只读属性返回包含该要素类的数据集的IFeatureDataset接口。**如果要素类是一个独立的要素类(无dataset),那么这个动能将会返回一个null值。一个coverage要素类返回指向自身的IFeatureDataset接口。Shapefiles返回一个null指针。

IFeatureClass.GetFeature Method

通过给定的对象ID(OID)返回要素的IFeature接口。适用于通过OID寻找提顶要素。使用cursor可以遍历要素类中所有要素。

调用要素类的GetFeature方法(使用IFeatureClass接口)同调用GetRow方法(使用要素类的ITable接口)的效果相同,只是IFeatureClass返回IFeature接口。

查找carto库在这里插入图片描述

https://wenku.baidu.com/view/618ae608bb68a98271fefa7c.html

Carto类库支持地图的创建和显示。ArcMap以两种不同
的方式显示地图:数据视图和页面视图。数据视图从给定
的视图显示数据,页面视图显示许多地图和其他东西。

MapDocument的查找,接口的能力,返回的是什么,Mapdocument可以有多个地图,地图与之也是组成关系

https://blog.csdn.net/dicwhzaiz8437/article/details/102048353
https://blog.csdn.net/langwen2048/article/details/80084806?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

MapDocument是一个很有用的组件类,可用于读取和修改地图文档(.mxds)。本文演示如何打开一个地图文档,并且利用一个循环来访问其所有的地图(maps)和图层(layers)。在该示例中,将这些对象的名称输出到控制台。

查Map,Imap,属性,内容,地图里面有多个层可以组成,是不是有对应的其他的组成

在这里插入图片描述

虫孔

在这里插入图片描述

常见问题

小叹号,没有地图:
说明数据损坏,解决方法:找到存放的地图,我们的地图名称。则打开数据,另存为一下,数据即可修复。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值