第一篇:ArcGIS地统计分析总结
ArcGIS地统计分析(Geostatistical Analyst)1 介绍
1.1为什么使用ArcGIS Geostatistical Analyst
人为判断总是会遗漏某些重要信息,同时也会无中生有。而ArcGIS Geostatistical Analyst提供客观的数据驱动方法,定量预测数据变化趋势和从空间数据中发掘特征模型。如果数据不够精确或者模型不够准确,这样势必影响输出的地图和从中得到的结论。而ArcGIS Geostatistical Analyst可以提供一个概率框架,来定量计算生成数据面时的不确定性。
元统计分析方法利用属性数据之间的相关来推断不同变量之间的联系,ArcGIS Geostatistical Analyst可以联合各种数据来做更精确的预测。ArcGIS Geostatistical Analyst可以有效地推测一些空间现象的未知部分,因此,对采样计划的设计和优化非常关键。
1.2使用ArcGIS Geostatistical Analyst的各个领域
这个模块的应用对象不计其数,可以使用这个工具包开发任何一种地理数据集(比如坐标和属性),下面列出几个成功应用ArcGIS Geostatistical Analyst的典型领域:
气象学家和统计学家应用ArcGIS Geostatistical Analyst来进行气象数据分析。采矿行业广泛的应用ArcGIS Geostatistical Analyst,涉及从最初的地质特征研究到产量控制的各个阶段。
石油工业成功的应用ArcGIS Geostatistical Analyst,来分析包括地震数据和油井数据集成的空间数据,并且用来研究物理特性和地震属性之间的相关关系。
在环境问题的研究中,ArcGIS Geostatistical Analyst的应用提供了一个分析空气、土壤和地下水污染高效和一致的模型。演示、个例研究和研究教育论文提供了大量的应用ArcGIS Geostatistical Analyst的例子。同时,ArcGIS Geostatistical Analyst也成为评估渔业产量的一个标准方法。
精细农业所应用的土壤特性的图形分析中,ArcGIS Geostatistical Analyst也得到广泛应用。越来越多的农民或者农村顾问使用ArcGIS Geostatistical Analyst来增加作物产量、提高利润、减小对环境的不利影响。
2基本原理
地统计学与经典统计学的共同之处在于:它们都是在大量采样的基础上,通过对样本属性值的频率分布或均值、方差关系及其相应规则的分析,确定其空间分布格局与相关关系。但地统计学区别于经典统计学的最大特点即是:地统计学既考虑到样本值的大小,又重视样本空间位置及样本间的距离,弥补了经典统计学忽略空间方位的缺陷。
地统计分析理论基础包括前提假设、区域化变量、变异分析和空间估值。
2.1 前提假设(1)随机过程
与经典统计学相同的是,地统计学也是在大量样本的基础上,通过分析样本间的规律,探索其分布规律,并进行预测。地统计学认为研究区域中的所有样本值都是随机过程的结果,即所有样本值都不是相互独立的,它们是遵循一定的内在规律的。因此地统计学就是要揭示这种内在规律,并进行预测。
(2)正态分布
在统计学分析中,假设大量样本是服从正态分布的,地统计学也不例外。在获得数据后首先应对数据进行分析,若不符合正态分布的假设,应对数据进行变换,转为符合正态分布的形式,并尽量选取可逆的变换形式。
(3)平稳性
对于统计学而言,重复的观点是其理论基础。统计学认为,从大量重复的观察中可以进行预测和估计,并可以了解估计的变化性和不确定性。对于大部分的空间数据而言,平稳性的假设是合理的。这其中包括两种平稳性:一是均值平稳,即假设均值是不变的并且与位置无关;另一类是与协方差函数有关的二阶平稳和与半变异函数有关的内蕴平稳。二阶平稳是假设具有相同的距离和方向的任意两点的协方差是相同的,协方差只与这两点的值相关而与它们的位置无关。内蕴平稳假设是指具有相同距离和方向的任意两点的方差(即变异函数)是相同的。二阶平稳和内蕴平稳都是为了获得基本重复规律而作的基本假设,通过协方差函数和变异函数可以进行预测和估计预测结果的不确定性。
2.2 区域化变量
当一个变量呈现一定的空间分布时,称之为区域化变量,它反映了区域内的某种特征或现象。区域化变量与一般的随机变量不同之处在于,一般的随机变量取值符合一定的概率分布,而区域化变量根据区域内位置的不同而取不同的值。而当区域化变量在区域内确定位置取值时,表现为一般的随机变量,也就是说,它是与位置有关的随机变量。在实际分析中,常采用抽样的方式获得区域化变量在某个区域内的值,即此时区域化变量表现为空间点函数:
ZxZxu,xv,xw
根据其定义,区域化变量具有两个显著特征:即随机性和结构性。首先,区域化变量是一个随机变量,它具有局部的、随机的、异常的特征;其次,区域化变量具有一定的结构特点,即变量在点x与偏离空间距离为h的点x+h处的值Z(x)和Z(x+h)具有某种程度的相似性,即自相关性,这种自相关性的程度依赖于两点间的距离h及变量特征。除此之外,区域化变量还具有空间局限性(即这种结构性表现为一定范围内)、不同程度的连续性和不同程度的各向异性(即各个方向表现出的自相关性有所区别)等特征。
2.3 变异分析
(1)协方差函数 协方差又称半方差,表示两随机变量之间的差异。在概率论中,随机变量X与Y的协方差定义为:
CovX,YEXEXYEY
借鉴上式,地统计学中的协方差函数可表示为:
1NhChZxiZxiZxihZxih Nhi1
其中,Z(x)为区域化随机变量,并满足二阶平稳假设,即随机变量Z(x)的空间分布规律不因位移而改变;h为两样本点空间分隔距离;Zxi为Z(x)在空间点处xi的样本值。
Zxih是Z(x)在处距离偏离h的样本值[i=1,2,…,N(h)];N(h)是分隔距离为h时的样本点对总数;Zxi和Zxih分别为Zxi和Zxih的样本平均数,即:
1nZxiZxi
ni1
1nZxihZxih
ni1
(2)半变异函数 半变异函数又称半变差函数、半变异矩,是地统计分析的特有函数。区域化变量Z(x)在点x和x+h处的值Z(x)与Z(x+h)差的方差的一半称为区域化变量Z(x)的半变异函数,记为r(h),2r(h)称为变异函数。
根据定义有:
1rx,hVar[Z(x)Z(xh)]
2112rx,hE[Z(x)Z(xh)]{E[Z(x)]E[Z(xh)]}2 22
区域化变量Z(x)满足二阶平稳假设,因此对于任意的h有:
E[Z(xh)]E[Z(x)]
因此,半变异函数可改写为:
1rx,hE[Z(x)Z(xh)]2
2由上式可知,半变异函数依赖于自变量x和h,当半变异函数r(x,h)仅仅依赖于距离h而与位置x无关时,r(x,h)可改写为r(x),即:
1rhE[Z(x)Z(xh)]2
2具体表示为:
1N(h)2rh[Z(xi)Z(xih)] 2N(h)i1
各变量的含义同前。也有将r(h)称为变异函数,两者使用上不引起本质上的差别。
(3)变异分析 半变异函数和协方差函数把统计相关系数的大小作为一个距离的函数,是地理学相近相似定理定量量化。
图10.1和图10.2显示,半变异值的变化随着距离的加大而增加,协方差随着距离的加大
而减小。这主要是由于半变异函数和协方差函数都是事物空间相关系数的表现,当两事物彼此距离较小时,它们是相似的,因此协方差值较大,而半变异值较小;反之,协方差值较小,而半变异值较大。此外,协方差函数和半变异函数随着距离的加大基本呈反向变化特征,它们之间的近似关系表达式为:
r(h)sillC(h)
半变异函数曲线图和协方差函数曲线反映了一个采样点与其相邻采样点的空间关系。此外,它们对异常采样点具有很好的探测作用,在ArcGIS地统计分析模块中可以使用两者的任意一个,一般采用半变异函数。在半变异曲线图中有两个非常重要的点:间隔为0时的点和半变异函数趋近平稳时的拐点,由这两个点产生四个相应的参数:块金值(Nugget)、变程(Range)、基台值(Sill)、偏基台值(Partial Sill)它们的含义表示如下:
块金值(Nugget):理论上,当采样点间的距离为0时,半变异函数值应为0,但由于存在测量误差和空间变异,使得两采样点非常接近时,它们的半变异函数值不为0,即存在块金值。测量误差是仪器内在误差引起的,空间变异是自然现象在一定空间范围内的变化。它们任意一方或两者共同作用产生了块金值。
基台值(Sill):当采样点间的距离h增大时,半变异函数人r(h)从初始的块金值达到一个相对稳定的常数时,该常数值称为基台值。当半变异函数值超过基台值时,即函数值不随采样点间隔距离而改变时,空间相关性不存在。
偏基台值(Partial Sill):基台值与块金值的差值变程(Range):当半变异函数的取值由初始的块金值达到基台值时采样点的间隔距离称为变程。变程表示了在某种观测尺度下,空间相关性的作用范围,其大小受观测尺度的限定。在变程范围内,样点间的距离越小,其相似性,即空间相关性越大。当h>R时,区域化变量Z(x)的空间相关性不存在,即当某点与已知点的距离大于变程时,该点数据不能用于内插或外推。
当限定的样本点间隔过小时,可能出现曲线图上曲线为一近似平行于横坐标的直线,此时半变异函数表现为纯块金效应。这是由于所限定的样本间隔内,点与点的变化很大,即各个样点是随机的,不具备空间相关性,区域内样点的平均值即是最佳估计值。此时只有增大样本间隔,才能反映出样本间的空间相关性。
空间相关性的强弱可由Partial_Sill/Sill来反映,该值越大,空间相关性越强,相应地,Nugget/Sill称为基底效应,表示样本间的变异特征,该值越大,表示样本间的变异更多得是由随机因素引起的。
2.4 空间估值
一个完整的地统计分析过程,或者说空间估值过程,一般为:首先是获取原始数据,检查、分析数据,找寻数据暗含的特点和规律,比如是否为正态分布、有没有趋势效应、各向异性等等;然后选择合适的模型进行表面预测,这其中包括半变异模型的选择和预测模型的选择;最后检验模型是否合理或几种模型进行对比。克里格插值
克里格插值(Kriging)又称空间局部插值法,是以变异函数理论和结构分析为基础,在有限区域内对区域化变量进行无偏最优估计的一种方法,是地统计学的主要内容之一。南非矿产工程师D.R.Krige(1951年)在寻找金矿时首次运用这种方法,法国著名统计学家G.Matheron随后将该方法理论化、系统化,并命名为Kriging,即克里格方法。
克里格方法的适用范围为区域化变量存在空间相关性,即如果变异函数和结构分析的结果表明区域化变量存在空间相关性,则可以利用克里格方法进行内插或外推;否则反之。其实质是利用区域化变量的原始数据和变异函数的结构特点,对未知样点进行线性无偏、最优估计。无偏是指偏差的数学期望为0,最优是指估计值与实际值之差的平方和最小。也就是说,克里格方法是根据未知样点有限邻域内的若干已知样本点数据,在考虑了样本点的形状、大小和空间方位,与未知样点的相互空间位置关系,以及变异函数提供的结构信息之后,对未知样点进行的一种线性无偏最优估计。
地统计分析的核心就是通过对采样数据的分析、对采样区地理特征的认识选择合适的空间内插方法创建表面。插值方法按其实现的数学原理可以分为两类:一是确定性插值方法,另一类是地统计插值,也就是克里格插值,如图所示。
确定性插值方法以研究区域内部的相似性(如反距离加权插值法)、或者以平滑度为基础(如径向基函数插值法)由已知样点来创建表面。地统计插值方法(例如克里格法)利用的则是已知样点的统计特性。地统计插值方法不但能够量化已知点之间的空间自相关性,而且能够解释说明采样点在预测区域范围内的空间分布情况。
确定性插值方法有可以分为两种:即全局性插值方法和局部性插值方法,如图10.4所示。全局性插值方法以整个研究区的样点数据集为基础来计算预测值,局部性插值方法则使用一个大研究区域内较小的空间区域内的已知样点来计算预测值。
克里格方法与反距离权插值方法有些类似,两者都通过对已知样本点赋权重来求得未知样点的值,可统一表示为:
Z(x0)iZ(xi)i1n
式中,Z(x0)为未知样点的值,Z(xi)为未知样点周围的已知样本点的值,λi为第i个已知样本点对未知样点的权重,n为已知样本点的个数。
不同的是,在赋权重时,反距离权插值方法只考虑已知样本点与未知样点的距离远近,而克里格方法不仅考虑距离,而且通过变异函数和结构分析,考虑了已知样本点的空间分布及与未知样点的空间方位关系。
空间插值方法根据是否能保证创建的表面经过所有的采样点,又可以分为精确性插值和非精确性插值。精确性插值法预测值在样点处的值与实测值相等,非精确性插值法预测值在样点处的值与实测值一般不会相等。使用非精确性插值法可以避免在输出表面上出现明显的波峰或波谷。反距离权插值和径向基插值属于精确性插值方法,而全局多项式插值、局部多项式插值,以及克里格插值都属于非精确性插值方法。
Zxi Zxi
Zxih Zxih
xi
第二篇:Arcgis使用总结
一、feature生成Tin
在3DAnalyst中-----Creat/modify TIN------Create TIN From Features----添加layer---Height source 高程字段
二、3D图
生成3D的其中一个条件是你的资料中有一个高度的属性打开ArcGIS中的ArcScene, 导入数据, 右选Screen Layers, 在当中的Properties-> Base Height中, 设定你的数据中的高度字段为数据高度如下
三、散点关系图
Tools-----graphs-----creatscatterplot matrix wizard
四、arcgis导出点XY坐标
ArcToolBox->Data Management Tools->Features->Add XY Coordinates工具就能自动在属性表中添加点的x,y坐标,然后将属性表导出就可以了
五、由点坐标生成点
1,先把点坐标信息(一般是经纬度)标准化,就是原来的度分秒表示的都要转换成度表示的;
2,将数据导入到Excel里面,总共有两列X,Y(列名可以随便取,但必须有列名),下面对应x,y坐标数据即可;
3,将文件保存成.csv文件。
当然我们也可以用记事本自己编写如下格式的文件:
x,y
86.578,46.689
87.433,45.654
保存成txt就可以了。
到这里数据的准备工作完成,下面开始导入:
1,ArcMAP下面,菜单tools-Add XY Data…,如下图:
坐标系统处,点edit,import,导入当前打开的坐标系统即可,当然也可以通过Select选择坐标系统!如果不添加的话,默认的是WGS84.2,点ok,这时会有一个提示,点确定即可
3,这时会形成一个新图层,所有的点都添加进来了,但现在添加进来的点由于没有objectID或者FID,现在图层不具备.shp图层的大部分功能,如点的选择,编辑,关联,属性等操作。还需进一步操作
4,在刚才生成的图层上点右键,选data-expot data…,导出成.shp文件,这时再把导出的文件添加进来即可。至此,已完成任务。
五、求多边形几何中心坐标
这个需要自己计算,首先在属性表里面加两列X,Y利用Geometery Calculator计算Xcenter,YCenter可以获得中心点的XY坐标,然后将属性表.dbf文件单独复制出来,利用ArcMAP的Display XY功能进行显示并且将显示图层输出保存为SHP文件即可,具体操作可以百度之,我这边只提供一个大概的思路
第三篇:Arcgis Engine开发总结集锦
1.目录
1.目录...................................................................................................................................................................................................................1 2.用ArcEngine的工具条添加图层要素...........................................................................................................................................................2 3.ArcEngine中对Feature的编辑......................................................................................................................................................................5 4.Feature的概念..................................................................................................................................................................................................7 5.如何实现经度纬度到平面坐标的相互转换?(转载).................................................................................................................................7 6.ArcEngine中使用上下左右键移动地图功能的实现....................................................................................................................................9 7.缓冲区的创建.................................................................................................................................................................................................11 8.C#制作鹰眼全过程(引自ESRI中国社区)...................................................................................................................................................13 9.ArcEngine中拓扑的使用-......................................................................................................................................................................86 26.基于AO/AE获取要素信息.......................................................................................................................................................................87 27.ArcEngine中拓扑的使用-..........................................................................................................................................100 IfeatureSelection:SelectFeatures方法介绍..............................................................................................................................................105 常用数据入sde库的代码........................................................................................................................................................................107 ArcEngine开发感想.................................................................................................................................................................................112 Geometry 对象浅析.................................................................................................................................................................................114 AE开发中的一些基本方法(1)数据连接................................................................................................................................................125 2.用ArcEngine的工具条添加图层要素
发现AE比起其它的组件GIS来要好用的多 但也有一些bt的地方
比如说AE没有提供图层编辑的工具条
但最近因为程序里要添加图元 必须得开发图层编辑的功能
于是去找了找资料
发现自带的帮助里有一个MapEditing的示例 但是从AO的示例改造而来 需要从按钮写起 想想如果这样搞的话 倒不如直接用AO算了
一直想省点事
在AE自带的工具条上做点文章
其实AE中也有一组相似的编辑按钮,是用于编辑Graphics的
自然就有了一个想法:能不能先生成一个Graphic,然后将其加载进来 代码分享
private void Form1_Load(object sender, System.EventArgs e){ //清空图层
this.axMapControl1.Map.ClearLayers();
//加载服务器SDE地图信息
ESRI.ArcGIS.esriSystem.IpropertySet Proset = new ESRI.ArcGIS.esriSystem.PropertySetClass();//属性集
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory Fact;//工作空间仓库
ESRI.ArcGIS.Geodatabase.IWorkspace Workspace;//工作空间
Proset.SetProperty(“Server”,“服务器名”);//服务器名
Proset.SetProperty(“Instance”,“端口”);//实例化端口
Proset.SetProperty(“user”,“用户名”);//SDE用户名
Proset.SetProperty(“password”,“密码”);//密码
Proset.SetProperty(“version”,“sde.DEFAULT”);//连接版本
Fact = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass();//实例化为SDE工作空间仓库 Workspace = Fact.Open(Proset,Int32.Parse(this.Handle.ToString()));//填入属性集
ESRI.ArcGIS.Geodatabase.IFeatureWorkspace FeatureWorkspace;FeatureWorkspace = Workspace as ESRI.ArcGIS.Geodatabase.IFeatureWorkspace;//传递给Feature工作空间
ESRI.ArcGIS.Geodatabase.IFeatureClass FeatureClass;FeatureClass = FeatureWorkspace.OpenFeatureClass(“SDE.BBBB”);//填充所需Feature集合
ESRI.ArcGIS.Carto.FeatureLayer FLayer = new ESRI.ArcGIS.Carto.FeatureLayerClass();FLayer.FeatureClass = FeatureClass;//将Feature加载到图层
axMapControl1.Map.AddLayer(FLayer);//加载图层 axMapControl1.Update();//更新空白区域
axMapControl1.Refresh();//刷新地图视窗 }
private void Form1_Closed(object sender, System.EventArgs e){ ESRI.ArcGIS.esriSystem.IAoInitialize aoi = new ESRI.ArcGIS.esriSystem.AoInitializeClass();aoi.Shutdown();}
private void button1_Click(object sender, System.EventArgs e){ IGraphicsContainerSelect GraphicsContainerSelect =(IGraphicsContainerSelect)axMapControl1.Map;
if(GraphicsContainerSelect.ElementSelectionCount ==0)//判断是否选中图斑
{ MessageBox.Show(“请选中欲导入图斑!”);return;} IWorkspaceEdit WorkspaceEdit;IFeatureLayer FeatureLayer;IFeatureClass FeatureClass;IFeature Feature;IDataset Dataset;
FeatureLayer =(IFeatureLayer)this.axMapControl1.get_Layer(0);//选中导入图层
FeatureClass = FeatureLayer.FeatureClass;//该图层的feature集
Dataset =(IDataset)FeatureClass;//该图层的数据集
WorkspaceEdit =(IWorkspaceEdit)Dataset.Workspace;//关联到编辑空间
WorkspaceEdit.StartEditing(true);//使之可编辑 WorkspaceEdit.StartEditOperation();//开始编辑
Feature = FeatureClass.CreateFeature();//创建空feature Feature.Shape = GraphicsContainerSelect.SelectedElement(0).Geometry;//仅导入最新选中图斑,即多选时只有一个可以导入
Feature.Store();WorkspaceEdit.StopEditOperation();
WorkspaceEdit.StopEditing(true);//结束编辑并保存
IGraphicsContainer GraphicsContainer =(IGraphicsContainer)GraphicsContainerSelect;
GraphicsContainer.DeleteAllElements();//删除graphic图层
axMapControl1.ActiveView.Refresh();//刷新当前视图
MessageBox.Show(“ok”);} 3.ArcEngine中对Feature的编辑
对Feature的编辑分为以下几个部分 1.新建 2.修改 3.删除
涉及到的接口有以下几个 IWorkspaceEdit IFeatureClass IFeatureCursor IFeature 其中IWorkspaceEdit用于启动编辑 开始编辑操作 结束编辑操作 结束编辑 IFeatureClass 是数据的所在地
IFeatureCursor 是一个游标 提供访问数据的接口和修改数据的接口 IFeature 是对象的代表 我们要编辑的目标 编辑的过程如下: 1.添加一个Feature //假设space是一个IWorkspaceEdit //参数表示是否需要使用Undo/Redo功能,该功能的粒度是EditOperator.spaceEdit.StartEditing(false);spaceEdit.StartEditOperator();//添加一个Feature IFeature newFea=feaClass.createFeature();//为Feature 添加属性 设置图形 newFea.Store();//保存属性和图形
spaceEdit.StopEditOperator();//结束编辑操作 //结束编辑过程
//参数表示是否保存编辑 spaceEdit.StopEditing(true);2.添加多个Feature 添加多个Feature也可以向上面一样 使用多次就可以了
当时也可以使用IFeatureCursor来添加数据 3.修改Feature 添加Feature中的修改属性和图形部分就是
每次修改后一定要调用Store方法 这样变化才可以保存下来 4.删除
IFeature 有一个方法Delete 可以用于删除 当时经过测试发现对Shapefile 会抛出异常来。
IFeatureCuror有一个DeleteFeature方法 可以用来删除当前的Feature,经测试
对所有的数据源类型都可以使用。
注意事项
1.不能设置Feature的OID 2.不能设置Feature的Area 3.不能设置Feature的Lenght 4.不能设置Feature的Shape字段,需要调用单独的方法来给Feature关联几何图形。4.Feature的概念
Feature是二次开发中最常用的对象,feature是featureclass中一个记录,从object中派生出来的,因此也具有属性和方法,object又是从row中派生的,所以featureclass其实一张表,featured就是表中的一条记录,feature可以保存空间数据对象,要素中的几何型体对象定义了要素的类型,它可以保存的几何型体对象有点、点集、多边形、多义线。这些都是些简单的要素对象,在有些情况下要素还可以参与拓扑、网络运算。Feature相关接口
Feature有派生出很多类,如:networkfeature、rastercatalogfeature、coverageannotationfeature、annotationfeature、dimensionfeature。feature的主要接口是Ifeature,其中的Extent用来返回要素对象的包络线,显示要素的空间范围;Featuretype返回要素的类型;Shape返回要素的几何型体对象;ShapeCopy得到几何型体对象的一个拷贝。IfeatureBuffer中的Shape得到缓冲要素的几何型体对象
IfeatureEdit中MoveSet、RotateSet、DeleteSet分别是移动、旋转、删除一个或者是多个要素组成的要素集上。Split主要是用来分割几何型体的,通过点分割线,通过多义线分割多边形,分割后旧的被删除,新的要素自动产生。因为每个要素都有对应的属性,要素改变了,其对应的属性也相应的要改变。Splitattributes就是用来分割要素属性字段中的值。该方法可以在Split方法执行后自动执行。IfeatureDraw中的InvalidArea属性得到一个绘画的区域。Draw在显示设备上绘制要素
IfeatureChanges中OriginalShape得到要素的最初几何类型,ShapeChanged指示要素的几何类型是否改变。IfeatureSimplify中SimplifyGeometry按照该元素的拓扑规则进行拓扑一致
5.如何实现经度纬度到平面坐标的相互转换?(转载)
分类:WebGIS网络地理信息系统研究
现在好多人在使用ArcObject的时候都可能需要作经纬度和平面坐标的相互转换。由于经纬度是球面坐标,平面坐标是X-Y的笛卡尔坐标系统,所以这是一个看起来比较难的问题。
好多人一上来就搬出地图学、地图投影学或者测绘学中的投影公式(如高斯投影 或 墨卡托投影),又是基准坐标又是角度的搞的人头都大了。
实际上要想实现这个功能非常easy。ARC Engine中的IPoint就可以进行投影和反投影运算了。投影过程(C#):
/// flatref 投影的坐标系统,这里的54013是世界投影,世界投影所有经纬度都可以转换为平面坐标,但是由于投影面积大失真也会比较大(相当于把整个地球劈成一片片的,然后拉伸最后贴到平面上,失真当然大了)。当然也可以选择精度更高的平面如:esriSRProjCS_Beijing1954GK_23N
对应数值21483 仅仅把北京附近的地球平面拉伸铺在平面上,由于投影面积变小,所以投影经度提高。但是由于面积变小,所以有些经度纬度不能转换,比如所美国的精度纬度用北京投影就投不了。
flatref = pfactory.CreateProjectedCoordinateSystem(54013);
//没什么说的,标准大地经纬度,可以将X-Y逆投影为经度和纬度
earthref = pfactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
/// 将经纬度点转换为平面坐标。
private IPoint GetProject(double x, double y)
{
IPoint pt = new PointClass();
pt.PutCoords(x, y);
IGeometry geo =(IGeometry)pt;
geo.SpatialReference = earthref;
geo.Project(flatref);
return pt;
}
/// 将平面坐标转换为经纬度。
private IPoint GetGeo(double x, double y)
{
IPoint pt = new PointClass();
pt.PutCoords(x, y);
IGeometry geo =(IGeometry)pt;
geo.SpatialReference = flatref;
geo.Project(earthref);
double xx = pt.X;
return pt;}实际上IPoint的投影和任何地图都没什么大关系,完全可以不用地图,直接调用IPoint进行投影的转换
6.ArcEngine中使用上下左右键移动地图功能的实现
//闪烁目标
public static void FlashFeature(AxMapControl mapControl,IFeature iFeature, IMap iMap){ IActiveView iActiveView = iMap as IActiveView;if(iActiveView!= null){ iActiveView.ScreenDisplay.StartDrawing(0,(short)esriScreenCache.esriNoScreenCache);//根据几何类型调用不同的过程
switch(iFeature.Shape.GeometryType){ case esriGeometryType.esriGeometryPolyline: FlashLine(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;case esriGeometryType.esriGeometryPolygon: FlashPolygon(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;case esriGeometryType.esriGeometryPoint: FlashPoint(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;default: break;} iActiveView.ScreenDisplay.FinishDrawing();} } //闪烁线
static void FlashLine(AxMapControl mapControl,IScreenDisplay iScreenDisplay,IGeometry iGeometry){ ISimpleLineSymbol iLineSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iLineSymbol = new SimpleLineSymbol();iLineSymbol.Width = 4;iRgbColor = new RgbColor();iRgbColor.Red = 255;iLineSymbol.Color = iRgbColor;iSymbol =(ISymbol)iLineSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} //闪烁面
static void FlashPolygon(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry){ ISimpleFillSymbol iFillSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iFillSymbol = new SimpleFillSymbol();iFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;iFillSymbol.Outline.Width = 12;iRgbColor = new RgbColor();iRgbColor.RGB = System.Drawing.Color.FromArgb(100, 180, 180).ToArgb();iFillSymbol.Color = iRgbColor;iSymbol =(ISymbol)iFillSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;iScreenDisplay.SetSymbol(iSymbol);mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} //闪烁点
static void FlashPoint(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry){ ISimpleMarkerSymbol iMarkerSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iMarkerSymbol = new SimpleMarkerSymbol();iMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;iRgbColor = new RgbColor();iRgbColor.RGB = System.Drawing.Color.FromArgb(0, 0, 0).ToArgb();iMarkerSymbol.Color = iRgbColor;iSymbol =(ISymbol)iMarkerSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} 7.缓冲区的创建
蓝蓝的小志 发表于 2005-6-5 10:07:08
本文以面图层为例,并且把创建的缓冲区就存储在面图层中,当然也可以把创建的缓冲区另存为一个新的图层。程序运行环境(.NET+AO)
代码如下:
Private Sub ITopologicalOperator_Buffer(ByVal pFeatLyr As ESRI.ArcGIS.Carto.IFeatureLayer, ByVal distance As Double, Optional ByVal pFeatClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = Nothing)'pFeatLyr 为面图层 'distance缓冲距离
Dim pFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass
Dim pTopoOper As ESRI.ArcGIS.Geometry.ITopologicalOperator
Dim pBufferPoly As ESRI.ArcGIS.Geometry.IPolygon
Dim pFeatCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor
Dim pFeature As ESRI.ArcGIS.Geodatabase.IFeature
Try
pFeatureClass = pFeatLyr.FeatureClass
pFeatCursor = pFeatureClass.Search(Nothing, False)
pFeature = pFeatCursor.NextFeature
Do
If Not(pFeature Is Nothing)Then
pTopoOper = pFeature.Shape()
pBufferPoly = pTopoOper.Buffer(distance)
'pFeature = pFeatClass.CreateFeature
pFeature.Shape = pBufferPoly
pFeature.Store()
pFeature = pFeatCursor.NextFeature()
End If
Loop Until(pFeature Is Nothing)
Catch
MsgBox(Err.Description, MsgBoxStyle.OKOnly, “错误提示”)
pFeature = Nothing
pFeatCursor = Nothing
pBufferPoly = Nothing
pTopoOper = Nothing
pFeatureClass = Nothing
pFeatLyr = Nothing
End Try
pFeature = Nothing
pFeatCursor = Nothing
pBufferPoly = Nothing
pTopoOper = Nothing
pFeatureClass = Nothing
pFeatLyr = Nothing
End Sub 8.C#制作鹰眼全过程(引自ESRI中国社区)
1.axMapControl1是主控件,axMapControl2是鹰眼控件
2.1.鹰眼地图资源载入
3.private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
4.{
5.//当主地图显示控件的地图更换时,鹰眼中的地图也跟随更换
6.axMapControl2.LoadMxFile(axMapControl1.DocumentFilename);
7.axMapControl2.Extent = axMapControl2.FullExtent;
8.}
9.2.绘制鹰眼矩形框
10.private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
11.{
12.// 得到新范围
13.IEnvelope pEnv =(IEnvelope)e.newEnvelope;
14.IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;
15.IActiveView pAv = pGra as IActiveView;
16.//在绘制前,清除axMapControl2中的任何图形元素
17.pGra.DeleteAllElements();
18.IRectangleElement pRectangleEle = new RectangleElementClass();
19.IElement pEle = pRectangleEle as IElement;
20.pEle.Geometry = pEnv;
21.//设置鹰眼图中的红线框
22.IRgbColor pColor = new RgbColorClass();
23.pColor.Red = 255;
24.pColor.Green = 0;
25.pColor.Blue = 0;26.pColor.Transparency = 255;27.//产生一个线符号对象
28.ILineSymbol pOutline = new SimpleLineSymbolClass();
29.pOutline.Width = 2;
30.pOutline.Color = pColor;
31.//设置颜色属性
32.pColor = new RgbColorClass();
33.pColor.Red = 255;
34.pColor.Green = 0;
35.pColor.Blue = 0;
36.pColor.Transparency = 0;
37.//设置填充符号的属性
38.IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
39.pFillSymbol.Color = pColor;
40.pFillSymbol.Outline = pOutline;
41.IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;
42.pFillShapeEle.Symbol = pFillSymbol;
43.pGra.AddElement((IElement)pFillShapeEle, 0);
44.pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
45.}
46.3.实现互动
47.private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
48.{
49.IPoint pPt=new PointClass();
50.pPt.PutCoords(e.mapX ,e.mapY);51.//改变主控件的视图范围
52.axMapControl1.CenterAt(pPt);
53.} 9.ArcEngine中拓扑的使用--
拓扑(ITopology)的使用包括 1.建立拓扑 2.验证拓扑
3.编辑过程中保证拓扑的正确 4.查询系统中存在的拓扑 1.首先 来看看建立拓扑
Topology实现了ITopology这个接口 但是给类是不能用来创建对象的。
必须要通过调用 ITopologyContainer::CreateTopology这个方法来建立一个Topology FeatureDataset 实现了ITopologyContainer这个接口。那么 这就是说拓扑只能在一个
FeatureDataset的范围内建立。而不能独立存在于Workspace中。这样做的原因是需要保证 参与同一个拓扑的FeatureClass具有同一个投影坐标系统。建立拓扑后需要将ObjectClass 加入到拓扑中去。这样这个拓扑就可以用来验证这几个ObjectClass 的对象之间的关系了。验证关系就要有规则,规则是由ITopologyRule来表达的。ITopologyRule必须要被 加入到一个ITopologyRuleContainer中去。而Topology实现了这个接口。一个ITopologyRule用来表达两个ObjectClass的对象之间的某个关系。具体代码参看接口就可以了。2.验证拓扑
ITopology有一个方法 ValidateTopology 用来验证指定区域内的拓扑。需要注意 没有版本 的拓扑可以在 任何时候验证。而有版本的拓扑必须在编辑回话中验证。3.拓扑编辑 1.移动共用点
1.首先需要打开拓扑 建立拓扑图(ITopologyGraph)代码如下:
//topoLayer 是一个打开的拓扑图层 ITopologyGraph pTG=topoLayer.Topology.Cache;pTG.Build(pA.Extent,false);2.然后 需要获得当前节点或者边 这个操作要使用拓扑图的点击测试 ITopologyElement topeEle pTG.HitTest(...ref topeEle);这个方法在点击测试成功的时候返回true.而且会通过topeEle这个ref 参数将选中的元素(点或者边)返回.3.还有一种获取节点的方法
首先调用拓扑图的Select方法 选中点击测试的元素(pTG.Select)然后可以查询拓扑图的选中节点集合 就可以找到该节点(pTG.NodeSelection)4.为该元素使用一个Feedback.//其中 pNode 就是当前节点 sr 是参考坐标系 可以使用null //还有给Feedback设置Display m_pNodeFeedback =pTG.GetSplitMoveNodeFeedback(pNode,false,sr);m_pNodeFeedback.Display= activeView.ScreenDisplay;5.在鼠标移动的时候 调用Feedback的MoveTo 方法。if(m_pNodeFeedback!=null){
//activeView 是活动的试图
//首先要把将点坐标转换为地图中的坐标。//然后调用MoveTo 方法
IPoint pt=activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);m_pNodeFeedback.MoveTo(pt);} 6.在鼠标释放的时候 //获取拓扑图
ITopologyGraph pTG=topoLayer.Topology.Cache;//转换坐标 IPoint pt=pA.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);//获得正在做拓扑编辑的元素
ITopologyNode pTN=(ITopologyNode)m_pTopoElement;//实施拓扑编辑
pTG.SplitMoveNode(pTN,pt,false);//提交拓扑编辑结果 IEnvelope pE;pTG.Post(out pE);4.查询系统中的拓扑
还是ITopologyContainer 这个接口 这个接口有FeatureDataset这个唯一的实现。CreateTopology 建立一个新的拓扑
DefaultClusterTolerance The default cluster tolerance as per the topology engine.MaximumClusterTolerance The maximal cluster tolerance as per the topology engine.MinimumClusterTolerance The minimal cluster tolerance as per the topology engine.Topology 通过索引打开拓扑.TopologyByID 通过ID打开拓扑.TopologyByName 通过名字打开拓扑
TopologyCount 拓扑的数目
10.为什么使用接口编程{转载}
进行接口的介绍,必须介绍一下程序语言发展的历史才行,鲁迅先生说过“治学先治史”,明白了程序语言发展的前世今生,才能知道为什么这么多语言为什么会这样,为什么么会那样?
计算机出现以后,科学家相继开发了多种语言,从smalltalk,Pascal,Basic,C语言,C++,java,.net等等,这些语言的发展步伐,可以看作是从面向过程向面向对象发展的一段历史。很多面向对象的书在介绍自己的历史的时候,都会给读者介绍这一段历史,并鼓吹OO编程是多么多么的优异。问题是,很多刚开始学程序的人根本不知道为什么要有这个转变,他们也很难理解OO语言中的虚函数,接口等概念到底为了什么而提出来。
我们在了解这一段历史以前,首先给大家介绍一个概念??“粒度”,什么是粒度?作者认为所谓粒度其实就是一个程序中使用代码单元的组合尺度,我们可以举一个例子,沙砾??砖块??房屋模板,我们设想去修建一座房子,其实有很多中修筑方法,如果你不闲麻烦,可以使用沙砾一点点地建筑,或者将沙砾烧制为砖块,用砖块来砌,甚至直接从工厂购买房屋的门,窗,墙组件来堆砌。这三种不同的方法代表了三种不同的组合尺度。沙砾是最小的单位,使用它搭建小的房子说不定还可以,但是毫无疑问,我们必须使用很多很多“沙砾”,不便于管理;砖块比沙砾聚合了一层,可以用来修建较大的房子了;房屋模板是最高的尺寸,使用它可以快速地搭建大规模的房屋。这三种尺度的区别和联系,与我们编写程序概念是有很大的相似之处的。
在早期学习Pascal,老师告诉我们这种面向过程语言的最基本的单元是过程和函数,它们是程序中的最小的组件。过程和函数可以实现最基本的代码重用,当我们把某些固定功能的代码使用过程和函数编写后,我们可以在程序中调用它们而不必在任何需要的地方都写上这样一段代码,这样的好处是显而易见的。在一些小型的程序里面,使用过程和函数是合适的,但是在大中型程序中,它们的弊端就显示出来,过程和函数的粒度太低了,如果我们一个系统,有10000个函数和过程,我们的程序员将不得不花费大量的时间去寻找和维护它们,10000个没有任何关系的函数和过程的管理难度是显而易见的,就好像10000个人的企业一样,如果没有部门和职务,这还不乱了套?!
面向对象语言的出现,就是为了解决这个问题,别听OO语言吹的天花乱坠,其实它出现就为一个理由??提高编程的粒度。面向对象语言的基本单位是类 CLASS,类封装了很多数据成员和成员函数,过程,将最小组件的提高了一个等级,我们需要直接操作的不是过程和函数了,而是一个个更高层次上的类。我们把10000人分了很多部门,不同的部门负责不同的事宜,这样公司终于可以走上正轨了。
做成了类CLASS是否就万事大吉了呢?不一定,新的问题随之而来,也许我们有一个部门的人很多,可以做很多事情,如何在部门内部实现更好的管理呢?好比我们有一个类,它提供了很多种方法和属性,这些方法和属性其实可以分为一堆堆,为不同的功能服务,但是我们的类并没有做这个管理。在AO种,map对象拥有很多功能,比如管理图层,管理元素,管理选择集,进行地图显示,每种不同的功能都有好多方法和属性,现在这些属性和方法是杂乱无章,没有任何区别堆积在一个类里面的,当我们的程序员需要寻找一个方法的时候,不得不一个个去寻找,很不方便。
这个时候,接口interface出现了,C++的发明者第一次提出纯虚函数(其实就是接口)概念的时候,遭到了很多抵制,很多人都不明白接口的意义何在,我们用虚函数好好的,何必又出来个啥东西都没有的空架子?说它是类吧,又不能实现产生一个对象;说它是对象吧,又没有方法体来使用。接口出来干了一件好事,就是将类内部进行分类。对于map对象,我们可以做好几个接口,这些接口中定义不同功能的方法,函数和属性,map类实现这些接口,这样我们可以使用接口定义,实现对象。因此,所谓接口就是一系列相关方法与属性集合的定义。
Dim pGraphicsContainer as iGraphicsContainer pGraphicsContainer=application.document.ActiveView.focusMap pGraphicsContainer可以使用的属性和方法就只能是它定义的那部分了,而不能使用管理元素等的接口定义的方法和属性,那我们如何使用其它的功能呢?这就是所谓的QI(Query Interface)功能。从一个接口查询另一个接口。
Dim pGeoFeatureLayer as iGeofeatureLayer pGeoFeatureLayer= pGraphicsContainer QI
好了,我们罗嗦了这么多,已经走进了COM的概念了,在正式介绍COM以前我们得最后罗嗦一点:计算机语言的发展历史,其实就是一部不断提高组件粒度的历史,不断提高代码重用的历史。以前我们使用过程和函数,后来我们使用类,现在我们使用接口,都是为了一个目的,让我们操作的组件在具体和抽象之间寻找一个平衡点。太具体了,如过程和函数,就没有了框架;太抽象,如类,就无法分别。
一个代码示例:
public interface IForm { void Show();void ShowDialog();}
public class A:IForm { public void Show(){ } public void ShowDialog(){ } }
public class B:IForm { public void Show(){ } public void ShowDialog(){ } }
public class FormFactory { public static IForm CreateInstance(string parm){
if(parm == “A”){ return new A();else if(parm == “B”)return new B();} return null;} } 这是逻辑的抽象 这是方法的具体 这就是编写程序的哲学.11.ArcEngine中闪烁目标
//闪烁目标
public static void FlashFeature(AxMapControl mapControl,IFeature iFeature, IMap iMap){ IActiveView iActiveView = iMap as IActiveView;if(iActiveView!= null){ iActiveView.ScreenDisplay.StartDrawing(0,(short)esriScreenCache.esriNoScreenCache);//根据几何类型调用不同的过程
switch(iFeature.Shape.GeometryType){ case esriGeometryType.esriGeometryPolyline: FlashLine(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;case esriGeometryType.esriGeometryPolygon: FlashPolygon(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;case esriGeometryType.esriGeometryPoint: FlashPoint(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);break;default: break;} iActiveView.ScreenDisplay.FinishDrawing();} } //闪烁线
static void FlashLine(AxMapControl mapControl,IScreenDisplay iScreenDisplay,IGeometry iGeometry){ ISimpleLineSymbol iLineSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iLineSymbol = new SimpleLineSymbol();iLineSymbol.Width = 4;iRgbColor = new RgbColor();iRgbColor.Red = 255;iLineSymbol.Color = iRgbColor;iSymbol =(ISymbol)iLineSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} //闪烁面
static void FlashPolygon(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry){ ISimpleFillSymbol iFillSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iFillSymbol = new SimpleFillSymbol();iFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;iFillSymbol.Outline.Width = 12;iRgbColor = new RgbColor();iRgbColor.RGB = System.Drawing.Color.FromArgb(100, 180, 180).ToArgb();iFillSymbol.Color = iRgbColor;iSymbol =(ISymbol)iFillSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;iScreenDisplay.SetSymbol(iSymbol);mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} //闪烁点
static void FlashPoint(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry){ ISimpleMarkerSymbol iMarkerSymbol;ISymbol iSymbol;IRgbColor iRgbColor;iMarkerSymbol = new SimpleMarkerSymbol();iMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;iRgbColor = new RgbColor();iRgbColor.RGB = System.Drawing.Color.FromArgb(0, 0, 0).ToArgb();iMarkerSymbol.Color = iRgbColor;iSymbol =(ISymbol)iMarkerSymbol;iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;mapControl.FlashShape(iGeometry, 3, 200, iSymbol);} 12.创建多个ArcSDE实例
编号: 000037 相关产品及版本: ArcSDE 3.x,8.x,9.0平台: N/A 提交时间: 2004-08-23
修改时间: 2004-08-31 提交人: 吴乐茂 内容摘要
有时候,我们需要有多于一个的ArcSDE实例同时运行。只要存在多个数据库实例,就可以实现这个目的。ArcSDE与RDBMS之间必须是一个一一对应的关系。ArcSDE会锁定版本表,以保证每个数据库实例只对应一个ArcSDE实例。
过程描述
对于Windows:
1.拷贝 %SDEHOME% 到一个新的位置。
2.用适当的RDBMS连接变量(如RACLE_SID)更新新的dbinit.sde 文件。3.用新的实例名、端口号和网络协议更新 %SDEHOME%etcservices.sde文件。
4.添加服务名、端口号和网络协议到 WINNTsystem32driversetcservices 文件中。须确认所用的端口号没有被用过。5.删除新的giomgr.log文件中的内容。
6.如果需要,更新新的giomgr.defs文件,以指定新实例的操作参数。
7.如果需要,更新新的dbtune.sde 文件,以指定参数给在新实例的数据库中创建数据时使用。
8.确认SDEHOME 变量指向正确的新ArcSDE实例位置,并运行给对应数据库使用的sdesetup 命令来创建新数据的存储表。9.使用 “sdeservice-o create” 命令创建新的ArcSDE服务。
对于UNIX:
1.给新实例创建一个新的工作目录。
2.拷贝 $SDEHOME 到新创建的工作目录。
3.用适当的RDBMS 连接变量(如ORACLE_SID)更新新的dbinit.sde 文件。4.用新的实例名、端口号和网络协议更新 $SDEHOME/etc/services.sde 文件。
5.添加服务名、端口号和网络协议到 /etc/services 文件。须确认所用的端口号没有被用过。6.删除新的giomgr.log文件中的内容。
7.如果需要,更新新的giomgr.defs文件,以指定新实例的操作参数。
8.如果需要,更新新的dbtune.sde 文件,以指定参数给在新实例的数据库中创建数据时使用。
9.确认SDEHOME 变量指向正确的新ArcSDE实例位置,并运行给对应数据库使用的sdesetup 命令来创建新数据的存储表。
常用ArcSDE命令 启动cmd 1.创建和删除ArcSDE服务操作命令(sdeservice)创建ArcSDE for oracle9i服务 sdeservice-o create-d oracle9i,sid-p sde-i esri_sde 删除ArcSDE for oracle9i服务 sdeservice-o delete-i esri_sde-d oracle9i,sid 注:-d 后面填写数据库类型及其SID sdeservice命令帮助 创建、删除SDE服务
2.ArcSDE 服务操作命令(sdemon)
检测服务状态命令: Sdemon-o status-I esri_sde 启动服务命令: Sdemon-o start-I esri_sde-p sde 停止服务命令: Sdemon-o shutdown-I esri_sde-p sde Sdemon命令帮助
更多操作命令,请查看路径“ArcSDEora9iexebin”下的“*.exe”文件
13.空间查询与空间分析功能
GIS的面向用户的应用功能不仅仅表现在它能提供一些静态的查询、检索数据,更有意义的在于用户可以根据需要建立一个应用分析的模式,通过动态的分析,从而为评价、管理和决策服务。这种分析功能可以在系统操作运算功能的支持下或建立专门的分析软件来实现,如空间信息量测与分析、统计分析、地形分析、网络分析、叠置分析、缓冲分析、决策支持等。系统本身是否具有建立各种应用模型的功能是判别它好坏的重要标志之一,因为这种功能在很大程度上决定了该系统在实际应用中的灵活性和经济效益。
空间查询和空间分析是从GIS目标之间的空间关系中获取派生的信息和新的知识,用以回答有关空间关系的查询和应用分析。
拓扑空间查询
在此操作中,用户将地图当作查询工具,而不仅仅是数据载体。空间目标之间的拓扑关系可以有两类:一种是几何元素的结点、弧段和面块之间的关联关系,用以描述和表达几何元素间的拓扑关系;另一种是GIS中地物之间的空间拓扑关系,可以通过关联关系和位置关系隐含表达,用户需通过特殊的方法查询。
这些空间关系主要有以下几项:面与面的关系,如检索与某个面状地物相邻的所有多边形及属性;线与线的关系,如检索与某一主干河相关联的所有支流;点与点的关系,如检索到某点一定距离内的所有点状地物;线与面的关系,如检索某公路所经过的所有县市或某县市内的所有公路;点与线的关系,如某河流上的所有桥梁;点与面的关系,如检索某市所有银行分布点。
缓冲区分析
缓冲区用以确定围绕某地要素绘出的定宽地区,以满足一定的分析条件。点的缓冲区是个圆饼,线的缓冲区是个条带状,多边形的缓冲区则是个更大的相似多边形。缓冲区分析是GIS中基本的空间分析功能之一,尤其对于建立影响地带是必不可少的。如道路规划中建立缓冲区以确定道路两边若干距离内的土地利用性质。
叠加分析
叠加分析提供根据两幅或两幅以上图层在空间上比较地图要素和属性的能力,通常有合成叠加和统计叠加之分,前者是根据两组多边形边界的交点建立具有多重属性的多边形,后者则进行多边形范围的属性特征统计分析(如图1-3所示)。合成叠加得到一张新的叠加图,产生了许多新多边形,每个多边形都具有两种以上的属性。统计叠加的目的是统计一种要素在另一种要素中的分布特征。
距离分析及相邻相接分析
距离分析提供了在地图上距离的功能,相邻分析确定哪些地图要素与其它要素相接触或相邻,而相接分析则结合距离和相邻分析两者的针对性,提供确定地图要素间邻近或邻接的功能。相邻和相接分析广泛应用于环境规划和影响评价的公共部门。大多数GIS软件目前不能直接进行相邻相接分析,而是通过先建立一定要求的缓冲区,再与其它图形要素进行叠置分析的间接方法解决。地形分析功能
通过数字地形模型DTM,以离散分布的平面点来模拟连续分布的地形,再从中内插提取各种地形分析数据,地形分析包括以下内容: 等高线分析
等高线图是人们传统上观测地形的主要手段,可以从等高线上精确地获得地形的起伏程度,区域内各部分的高程等。透视图分析
等高线虽然精确,但不够直观,用户往往需要从直观上观察地形的概貌,所以GIS通常具有绘制透视图的功能,有些系统还能在三维空间格网上着色,使图形更为逼真。坡度坡向分析
在DTM中计算坡度和坡向,派生出坡度坡向图供地形分析(如日照分析、土地适宜性分析等)。断面图分析
用户可以在断面图上考察该剖面地形的起伏并计算剖面面积,以便用于工程设计和工程量算。
地形表面面积和填挖方体积计算
利用DTM数据,可以比较容易地求出所需要地区的地形表面面积以及施工区域内填挖方的体积(土石方量)。
制图功能、地理数据库、空间查询与空间分析能力是GIS最具有独特吸引力所在。而系统是否具有良好的用户接口和各种应用分析程序的支持也是至关重要的,但是应由GIS开发人员和用户来共同完成的。
地理信息系统技术广泛应用于农业、林业、国土资源、地矿、军事、交通、测绘、水利、广播电视、通讯、电力、公安、社区管理、教育、能源等几乎所有的行业,并正在走进人们日常的工作、学习和生活中。
地理信息系统的主要任务是对与地理空间位置或区域有关的社会经济、人文景观、自然资源及环境等多种信息进行综合管理和分析,主要任务有以下三个方面.14.AO中的空间关系
最近在做AO的一些东西,有些空间关系让我搞不太懂,查到一个东西,还是很好的 名词解释:
Boundary(边界):
只有线和面才有边界。面的边界是指组成面的框架线;线的边界是指线的二个端点(即起点和终点,不包括中间部分的节点);点没有边界。Interior(内部):
除去边界后剩下的部分即是一个要素的内部。因此线的内部指除去端点后的部分;面的内部是指除去框架线后的部分;点的内部就是点本身。Exterior(外部):
除去该要素后的剩余的空间范围即是该要素的外部。空间关系具体描述(Queryable Spatial Relationships): 示意图:
空间关系:
1, esriSpatialRelTouches(邻接)应用范围:
除点与点之间的关系外,其它的要素之间都可以具有该关系。描述:
如果二个要素有相同的边界,且它们内部不相交的话,称这二个要素之间的关系是邻接的关系,图1-
1、2-
1、3-
1、3-2,注意图3-3中点与线是包涵的关系。
当查询要素和被查询要素具有该关系时,即spatialRel的值是esriSpatialRelTouches,则会返回查询要素。2, esriSpatialRelCrosses(交叉)应用范围:
线与面,线与线等。不能用于面与面(面与面相交部分是面,不能二个要素中的最高维数低一),面与点,点与线(二个要素的维数差2)。描述:
如果二个要素的相交部分不为空,并且相交部分形状的维数比两个要素中最高维数低1(即线面交叉是线,线线交叉是点)则称这二个要素具有交叉关系,图2-
4、4-1,图2-1中中二条线的关系属于邻接关系,而不属于交叉关系,因为它们的内部相交部分为空。当查询要素和被查询要素具有该关系时,即spatialRel的值是esriSpatialReCrosses,则会返回查询要素。3, esriSpatialRelOverlaps(重叠关系)应用范围:
线与线,面与面之间,其它的不具有该关系。描述:
二个同维的要素之间的相交部分的图形具有与这二个要素相同的维数的,且不与任何一个要素完全相同,则称这二个要素重叠。图1-
2、2-2均是重叠关系,但是2-3中的二条线不是重叠关系,因为相交的部分与黄色的线完全相同。
当查询要素和被查询要素具有该关系时,即spatialRel的值是esriSpatialRelOverlaps,则会返回查询要素。4,esriSpatialRelWithin和esriSpatialRelContains(包涵)应用范围:
所有要素类之间均具有该关系。描述:
该关系可细分为一个要素完全位于另一个要素的内部和一个要素完全包涵另外一个要素,它们是相对的关系。如果说要素1完全位于要素2的内部,则要素2完全包涵要素1。
当查询的要素完全位于被查询的要素内部的话(即spatialRel的值是esriSpatialRelWithin),则返回被查询的要素;同时如果查询的要素完全被被查询的要素包括时(即spatialRel的值是esriSpatialRelContains)则返回被查询的要素。5,esriSpatialRelIntersects(相交)描述:
相交关系是一个广义的关系,包括上述4种关系。因此如果spatialRel的值是esriSpatialRelIntersects关系的话,只要查询要素和被查询要素之间满足上述四种空间关系的任一种空间关系,即可返回被查询的要素。6,esriSpatialRelRelate 描述:
需要通过SpatialRelDescription属性对二个要素的空间关系进行定制,可以对二个要素的内部,外部,边界之间的相交的情况进行描述,例如:字符串'****T***'代表的是二个要素共享边界。
15.ArcGIS Engine 中的相交分析的实现
在ArcGIS Engine中实现点和面进行相交分析,应该是用IBasicGeoprocessor.Intersect方法,不知道对不对啊?
用点和面进行相交分析,主要目的是为了确定点在哪个区域内!比如可以用一个井的点图层和一个行政区划的面图层进行相交分析,得到的是一个井的点图层,而此图层的属性包含了两个图层的属性,从而通过对属性表的查询,来确定在某个区域内井的个数等等信息。以下代码编译通过,但是在运行时,就报错,说是参数错误,各位帮忙看看,谢谢!1
private void M_OverLayer_Click(object sender, System.EventArgs e)2
{ 3
try 4
{ 5
//分析层
ILayer pLayer=this.axMapControl1.get_Layer(0);7
IFeatureLayer pInputFeatLayer=pLayer as IFeatureLayer;
ITable pInputTable=pLayer as ITable;9
IFeatureClass pInputFeatClass=pInputFeatLayer.FeatureClass;10 11
15
21
26
31
//叠加表
pLayer=this.axMapControl1.get_Layer(1);ITable pOverlayTable=pLayer as ITable;//叠加分析表
IFeatureClassName pFeatClassName=new FeatureClassNameClass();pFeatClassName.FeatureType=esriFeatureType.esriFTSimple;pFeatClassName.ShapeFieldName=“shape”;pFeatClassName.ShapeType=pInputFeatClass.ShapeType;//工作空间名称
IWorkspaceName pNewWSName=new WorkspaceNameClass();pNewWSName.WorkspaceFactoryProgID = “esriDataSourcesFile.ShapefileWorkspaceFactory”;pNewWSName.PathName = @“C:temp”;//数据集名称
IDatasetName pDatasetName=pFeatClassName as IDatasetName;pDatasetName.Name=“ss”;pDatasetName.WorkspaceName=pNewWSName;//几何处理
IBasicGeoprocessor pBGP=new BasicGeoprocessorClass();IFeatureClass pOutputFeatClass=pBGP.Intersect(pInputTable,false,pOverlayTable,false,0.01,pFeatClassName);
//输出要素层设置
IFeatureLayer pOutputFeatLayer=new FeatureLayerClass();37
pOutputFeatLayer.FeatureClass=pOutputFeatClass;38
pOutputFeatLayer.Name=pOutputFeatClass.AliasName;39 40
this.axMapControl1.AddLayer((ILayer)pOutputFeatClass,0);41
axMapControl1.Update();42
} 43
catch(Exception ex)44
{ 45
MessageBox.Show(ex.Message);46
} 47
} 16.GIS基本概念集锦
1、地理信息系统(geographic information system,即gis)——一门集计算机科学、信息学、地理学等多门科学为一体的新兴学科,它是在计算机软件和硬件支持下,运用系统工程和信息科学的理论,科学管理和综合分析具有空间内涵的地理数据,以提供对规划、管理、决策和研究所需信息的空间信息系统。gis有以下子系统:数据输入子系统,数据存储和检索子系统,数据操作和分析子系统,报告子系统.信息系统
非空间的 空间的
管理信息系统 非地理学的 gis cad/cam 其他gis lis 社会经济,人口普查 基于非地块,基于地块的2、比较gis与cad、cac间的异同。
cad——计算机辅助设计,规则图形的生成、编辑与显示系统,与外部描述数据无关。cac——计算机辅助制图,适合地图制图的专用软件,缺乏空间分析能力。
gis——地理信息系统,集规则图形与地图制图于一身,且有较强的空间分析能力。
3、图层:将空间信息按其几何特征及属性划分成的专题。
4、地理数据采集——实地调查、采样;传统的测量方法,如三角测量法、三边测量法;全球定位系统(gps);现代遥感技术;生物遥测学;数字摄影技术;人口普查。
5、信息范例——传统的制图方法,称为信息范例,即假定地图本身是一个最终产品,通过使用符号、分类限制的选择等方式交换空间信息的模式。这个范例是传统的透视图方法,由于原始而受到很多限制,地图用户不能轻易获得预分类数据。也就是说,用户只限于处理最终产品,而无法将数据重组为更有效的形式以适应环境或需求的变化。
6、分析范例(整体范例)——存储保存原始数据的属性数据,可根据用户的需求进行数据的显示、重组和分类。整体范例是一种真正的用于制图学和地理学的整体方法。
7、栅格——栅格结构是最简单最直接的空间数据结构,是指将地球表面划分为大小均匀紧密相邻的网格阵列,每个网格作为一个象元或象素由行、列定义,并包含一个代码表示该象素的属性类型或量值,或仅仅包括指向其属性记录的指针。因此,栅格结构是以规则的阵列来表示空间地物或现象分布的数据组织,组织中的每个数据表示地物或现象的非几何属性特征。特点:属性明显,定位隐含,即数据直接记录属性本身,而所在的位置则根据行列号转换为相应的坐标,即定位是根据数据在数据集中的位置得到的,在栅格结构中,点用一个栅格单元表示;线状地物用沿线走向的一组相邻栅格单元表示,每个栅格单元最多只有两个相邻单元在线上;面或区域用记有区域属性的相邻栅格单元的集合表示,每个栅格单元可有多于两个的相邻单元同属一个区域。
8、矢量——它假定地理空间是连续,通过记录坐标的方式尽可能精确地表示点、线、多边形等地理实体,坐标空间设为连续,允许任意位置、长度和面积的精确定义。对于点实体,矢量结构中只记录其在特定坐标系下的坐标和属性代码;对于线实体,用一系列坐标对的连线表示;多边形是指边界完全闭合的空间区域,用一系列坐标对的连线表示。
9、“拓扑”(topology)一词来源于希腊文,它的原意是“形状的研究”。拓扑学是几何学的一个分支,它研究在拓扑变换下能够保持不变的几何属性——拓扑属性(拓扑属性:一个点在一个弧段的端点,一个点在一个区域的边界上;非拓扑属性:两点之间的距离,弧段的长度,区域的周长、面积)。这种结构应包括:唯一标识,多边形标识,外包多边形指针,邻接多边形指针,边界链接,范围(最大和最小x、y坐标值)。地理空间研究中三个重要的拓扑概念(1)连接性:弧段在结点处的相互联接关系;(2)多边形区域定义:多个弧段首尾相连构成了多边形的内部区域;(3)邻接性:通过定义弧段的左右边及其方向性来判断弧段左右多边形的邻接性。
10、矢量的实体错误——伪节点:即需要假节点进行识别的节点,发生在线和自身相连接的地方(如岛状伪结点——显示存在一个岛状多边形,这个多边形处于另一个更大的多边形内部),或发生在两条线沿着平行路径而不是交叉路径相交的地方(节点——表示线与线间连接的特殊点)。摇摆结点:有时称为摇摆,来源于3种可能的错误类型:闭合失败的多边形;欠头线,即结点延伸程度不够,未与应当连接的目标相连;过头线,结点的线超出想与之连接的实体。碎多边形:起因于沿共同边界线进行的不良数字化过程,在边界线位置,线一定是不只一次地被数字化。高度不规则的国家边境线,例如中美洲,特别容易出现这样的数字变形。标注错误:丢失标注和重复标注。异常多边形:具有丢失节点的多边形。丢失的弧。
11、空间分析方法——
1、空间信息的测量:线与多边形的测量、距离测量、形状测量;
2、空间信息分类:范围分级分类、邻域功能、漫游窗口、缓冲区;
3、叠加分析:多边形叠加、点与多边形、线与多边形;
4、网络分析:路径分析、地址匹配、资源匹配;
5、空间统计分析:插值、趋势分析、结构分析;
6、表面分析:坡度分析、坡向分析、可见度和相互可见度分析。
12、欧拉数——最通常的空间完整性,即空洞区域内空洞数量的度量,测量法称为欧拉函数,它只用一个单一的数描述这些函数,称为欧拉数。数量上,欧拉数=(空洞数)-(碎片数-1),这里空洞数是外部多边形自身包含的多边形空洞数量,碎片数是碎片区域内多边形的数量。有时欧拉数是不确定的。
13、函数距离——描述两点间距离的一种函数关系,如时间、摩擦、消耗等,将这些用于距离测量的方法集中起来,称为函数距离。
14、曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离因此曼哈顿距离又称为出租车距离,曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。
15、邻域功能——所谓邻域是指具有统一属性的实体区域或者焦点集中在整个地区的较小部分实体空间。邻域功能就是在特定的实体空间中发现其属性的一致性。它包括直接邻域和扩展邻域。
16、缓冲区分析——是指根据数据库的点、线、面实体基础,自动建立其周围一定宽度范围内的缓冲区多边形实体,从而实现空间数据在水平方向得以扩展的空间分析方法。缓冲区在某种程度上受控于目前存在的摩擦表面、地形、障碍物等,也就是说,尽管缓冲区建立在位置的基础上,但是还有其他实质性的成分。确定缓冲区距离的四种基本方法:随机缓冲区、成因缓冲区、可测量缓冲区、合法授权缓冲区。
17、统计表面——表面是含有z值的形貌,z值又称为高度值,它的位置被一系列x和y坐标对定义且在区域范围内分布。z值也常被认为是高程值,但是不必局限于这一种度量。实际上,在可定义的区域内出现的任意可测量的数值(例如,序数、间隔和比率数据)都可以认为组成了表面。一般使用的术语是统计表面,因为在考虑的范围内z值构成了许多要素的统计学的表述(robinson et al., 1995)。
18、dem——数字高程模型(digital elevation model)。地形模型不仅包含高程属性,还包含其它的地表形态属性,如坡度、坡向等。dem通常用地表规则网格单元构成的高程矩阵表示,广义的dem还包括等高线、三角网等所有表达地面高程的数字表示。在地理信息系统中,dem是建立数字地形模型(digital terrain model)的基础数据,其它的地形要素可由dem直接或间接导出,称为“派生数据”,如坡度、坡向。
19、空间插值——空间插值常用于将离散点的测量数据转换为连续的数据曲面,以便与其它空间现象的分布模式进行比较,它包括了空间内插和外推两种算法。空间内插算法:通过已知点的数据推求同一区域未知点数据。空间外推算法:通过已知区域的数据,推求其它区域数据。20、泰森多边形——通过数学方法定义、平分点间的空间并以直线相连结,在点状物体间生成多边形的方法。
21、线密度——用所有区域内的线的总长度除以区域的面积。
22、连通性——连通性是衡量网络复杂性的量度,常用γ指数和α指数计算它。其中,γ指数等于给定空间网络体节点连线数与可能存在的所有连线数之比;α指数用于衡量环路,节点被交替路径连接的程度称为α指数,等于当前存在的环路数与可能存在的最大环路数之比。
23、图形叠加——将一个被选主题的图形所表示的专题信息放在另一个被选主题的图形所表示的专题信息之上。
24、栅格自动叠加——基于网格单元的多边形叠加是一个简单的过程,因为区域是由网格单元组成的不规则的块,它共享相同的一套数值和相关的标注。毫无疑问,网格单元为基础的多边形叠加缺乏空间准确性,因为网格单元很大,但是类似于简单的点与多边形和线与多边形叠加的相同部分,由于它的简单性,因此可以获得较高的灵活程度和处理速度。
25、拓扑矢量叠加——如何决定实体间功能上的关系,如定义由特殊线相连的左右多边形,定义线段间的关系去检查交通流量,或依据个别实体或相关属性搜索已选择实体。它也为叠加多个多边形图层建立了一种方法,从而确保连结着每个实体的属性能够被考虑,并且因此使多个属性相结合的合成多边形能够被支持。这种拓扑结果称作最小公共地理单元(lcgu)。
26、矢量多边形叠加——点与多边形和线与多边形叠加使用的主要问题是,线并不总是出现在整个区域内。解决该问题的最强有力的办法是让软件测定每组线的交叉点,这就是所谓的结点。进行矢量多边形的叠加,其任务是基本相同的,除了必须计算重叠交叉点外,还要定义与之相联系的多边形线的属性。
27、布尔叠加——一种以布尔代数为基础的叠加操作。
28、制图建模——用以指明应用命令组合来回答有关空间现象问题的处理。制图模型是针对原始数据也包括导出数据和中间地图数据进行一系列交互有序的地图操作来模拟空间决策的处理。
29、地理模型的类型——类似统计同类的描述性模型和与推理统计技术相关的规则性模型。
30、常见模型——
1、注重样式与处理的问题长时间以来用于解释类似农业活动与运输成本间的关系——独立状态模型。
2、最初为预测工业位置点的空间分布的样式而设计的weber模型,进行改进后可使参与者寻找最佳商业和服务位置——位置-分配模型。
3、建立在吸引力与到潜在市场的距离呈反比这一基础上的经济地理模型——重力模型。
4、通过空间验证思想如今广泛用于生态群落,通过地理空间跟踪动植物运动——改进扩散模型。
31、专题地图——以表现某单一属性的位置或若干选定属性之间关系为主要目的的地图。专题图形设计的一般程序包括合适的符号和图形对象的选择、生成和放置,以明确突出研究主题的重要属性和空间关系,同时还要考虑参考系统。gis专题地图输出的规则:不但要有精美的图形,最重要的是去读图、分析地图和理解地图。
32、元数据——关于数据的数据,对数据库内容的全面描述,其目的是促进数据集的高效利用和充分共享。使用元数据的理由:性能上,完整性、可扩展性、特殊性、安全性;功能上,差错功能、浏览功能、程序生成。
33、聚合——将单个数据元素进行分类的大量数字处理过程。
34、克立金法——依靠地球自然表面随距离的变化概率而确定高程的一种精确内插方法。
35、四叉树——一种压缩数据结构,它把地理空间定量划分为可变大小的网格,每个网格具有相同性质的属性。
36、比较工具型地理信息系统和应用型地理信息系统的异同。
工具型地理信息系统:是一种通用型gis,具有一般的功能和特点,向用户提供一个统一的操作平台。一般没有地理空间实体,而是由用户自己定义。具有很好的二次开发功能。如:arcinfo、genamap、mapinfo、mapgis、geostar。
应用型地理信息系统:在较成熟的工具型gis软件基础上,根据用户的需求和应用目的而设计的用于解决一类或多类实际问题的地理信息系统,它具有地理空间实体和解决特殊地理空间分布的模型。如lis、cgis、ugis。
37、详细描述应用型地理信息系统的开发过程
1、系统总体设计:需求和可行性分析、数据模型设计、数据库设计、方法设计
2、系统软件设计:开发语言、用户界面、流程、交互
3、程序代码编写:投影、数据库、输入、编辑
4、系统的调试与运行:α调试、β调试
5、系统的评价与维护:功能评价、费用评价、效益评价
38、空间信息系统:以多媒体技术为依托,以空间数据为基础,以虚拟现实为手段的集空间数据的输入、编辑、存储、分析和显示于一体的巨系统,体由若干个子系统组成。
39、地理数据测量标准——命名(对数据命名,允许我们对把对象叫什么做出声明,但不允许对两个命名的对象进行直接比较)、序数(提供对空间对象进行逻辑对比的结果,但这种对比仅限于所谈论问题的范围内)、间隔(可以对待测项逐个赋值,能够更为精确地估计对比物的不同点)、比率(用途最广的测量数据标准,它是允许直接比较空间变量的惟一标准)。
40、根据样本进行推理的取样原则——未取样位置的数据可以从已取样位置的数据中推测出来;区域边界内的数据可以合并计算;一组空间单元中的数据能够转换成具有不同空间配置的另外一组空间单元数据。常用的方法:内插法:当有数值边界或知道缺失部分两端数值;外推法:当缺失的数据一侧有数值,而另一侧每一数值。
17.AE开发中矢量图层叠加求交分析
AE开发中矢量图层叠加求交分析: AE开发中,矢量图层叠加分析需要用到的主要类为BasicGeoprocessor,其主要接口为IBasicGeoprocessor。IBasicGeoprocessor接口提供了基本的空间数据处理的方法和属性,其中包括叠加求交(Interset)和叠加求和(Union)。下面提供叠加求交的开发实例: C#+AE9.1叠加求交示例代码:
private void M_OverLayer_Click(object sender, System.EventArgs e)2
{ 3
try 4
{ 5
//分析层
ILayer pLayer=this.axMapControl1.get_Layer(0);7
IFeatureLayer pInputFeatLayer=pLayer as IFeatureLayer;
ITable pInputTable=pLayer as ITable;9
IFeatureClass pInputFeatClass=pInputFeatLayer.FeatureClass;10 11
//叠加表
pLayer=this.axMapControl1.get_Layer(1);13
ITable pOverlayTable=pLayer as ITable;14 15
//叠加分析表
IFeatureClassName pFeatClassName=new FeatureClassNameClass();17
pFeatClassName.FeatureType=esriFeatureType.esriFTSimple;18
pFeatClassName.ShapeFieldName=“shape”;19
pFeatClassName.ShapeType=pInputFeatClass.ShapeType;20 21
26
31
40
//工作空间名称
IWorkspaceName pNewWSName=new WorkspaceNameClass();
pNewWSName.WorkspaceFactoryProgID = “esriDataSourcesFile.ShapefileWorkspaceFactory”;
pNewWSName.PathName = @“C:temp”;
//数据集名称
IDatasetName pDatasetName=pFeatClassName as IDatasetName;
pDatasetName.Name=“ss”;
pDatasetName.WorkspaceName=pNewWSName;
//几何处理
IBasicGeoprocessor pBGP=new BasicGeoprocessorClass();
IFeatureClass pOutputFeatClass=pBGP.Intersect(pInputTable,false,pOverlayTable,false,0.01,pFeatClassName);
//输出要素层设置
IFeatureLayer pOutputFeatLayer=new FeatureLayerClass();
pOutputFeatLayer.FeatureClass=pOutputFeatClass;
pOutputFeatLayer.Name=pOutputFeatClass.AliasName;
this.axMapControl1.AddLayer((ILayer)pOutputFeatClass,0);
axMapControl1.Update();} catch(Exception ex){
MessageBox.Show(ex.Message);46
} 47
} 最近在研究ae中实现overlay的方法,终于发现了2个方法。(针对shapefile)方法一:利用ITopology接口:
void COverlayDlg::Overlay(ILayerPtr inputLayer, ILayerPtr OverlayLayer,IFeatureClassPtr ipNewClass){ int mode=m_modeCombo.GetCurSel();IFeatureLayerPtr ipPutlayer(inputLayer);IFeatureClassPtr ipPutClass;ipPutlayer->get_FeatureClass(&ipPutClass);IFeatureClassPtr ipOutClass;IFeatureLayerPtr ipOverlayer(OverlayLayer);ipOverlayer->get_FeatureClass(&ipOutClass);IQueryFilterPtr ipQF(CLSID_QueryFilter);long number1,number2;ipPutClass->FeatureCount(ipQF,&number1);ipPutClass->FeatureCount(ipQF,&number2);IActiveViewPtr ipView=p_View->m_ctrlMap.GetActiveView();ITopologicalOperatorPtr ipTo;IFeaturePtr ipFeature1,ipFeature2;IGeometryPtr ipGeo1,ipGeo2,ipNew;for(long i=0;i for(long j=0;j { ipPutClass->GetFeature(i,&ipFeature1); ipOutClass->GetFeature(j,&ipFeature2); ipFeature1->get_Shape(&ipGeo1); ipFeature2->get_Shape(&ipGeo2); ipTo=ipGeo1; switch(mode) { case 0: ipTo->Intersect(ipGeo2,esriGeometry2Dimension,&ipNew); break; case 1: ipTo->Union(ipGeo2,&ipNew); break; case 2: ipTo->Difference(ipGeo2,&ipNew); } IFeaturePtr ipFeature; ipNewClass->CreateFeature(&ipFeature); ipFeature->putref_Shape(ipNew); ipFeature->Store(); }ipView->Refresh();} 这种方法是一个一个feature的创建,存入featureclass接口中。方法二:利用IBasicGeoprocess接口 //把第一个图层和第0个图层叠置 IFeatureLayerPtr ipFeaLay;IFeatureClassPtr ipFeaCls;HRESULT hr;ILayerPtr ipLay;IMapPtr ipMap(m_ctrlMap.GetMap());hr=ipMap->get_Layer(0,&ipLay); ipFeaLay=ipLay;if(ipFeaLay){ hr=ipFeaLay->get_FeatureClass(&ipFeaCls); if(FAILED(hr))return; } ITablePtr ipInPutTable(ipLay);hr=ipMap->get_Layer(1,&ipLay);ipFeaLay=ipLay;if(ipFeaLay!=0) hr=ipFeaLay->get_FeatureClass(&ipFeaCls); ITablePtr ipOverlayTable(ipLay); hr=ipDatasetName->putref_WorkspaceName(ipWSName);if(FAILED(hr))return; IBasicGeoprocessorPtr ipBGP(CLSID_BasicGeoprocessor);IFeatureClassPtr ipOutputFeaCls;hr=ipBGP->Intersect(ipInPutTable,VARIANT_FALSE,ipOverlayTable,VARIANT_FALSE,double(0),ipFeaClsName,&ipOutputFeaCls);IFeatureLayerPtr ipOutputFeaLay(CLSID_FeatureLayer);ipOutputFeaLay->putref_FeatureClass(ipOutputFeaCls);BSTR OutFeaClsAliName;hr=ipOutputFeaCls->get_AliasName(&OutFeaClsAliName);if(FAILED(hr))return;hr=ipOutputFeaLay->put_Name(OutFeaClsAliName);if(FAILED(hr))return;hr=ipMap->AddLayer(ipOutputFeaLay);if(FAILED(hr))return;IActiveViewPtr ipAV(ipMap);ipAV->Refresh();18.矢量数据分析 地图叠加:将两幅数字化地图的几何形状和属性结合在一起,生成输出地图的一种属性数据。点与多边形叠加:一种GIS操作,点状地图上的每个点被赋予点所落入的多边形内的属性数据。 线与多边形叠加:一种GIS操作,现状地图被叠加地图上的多边形边界所分割,输出地图上每个弧段结合了来自线状地图和所落入多边形的属性。 多边形与多边形叠加:一种GIS操作,其输出地图结合了来自输入地图和叠加地图的多边形边界,生成一套新的多边形,每个新的多边形携带了两幅地图的属性。 缓冲:一种GIS操作,将落在所选地图要素指定距离之内的区域与之外的区域分开。相交(Intersect):一种地图叠加方法,仅保留那些落在输入地图和叠加地图共同范围的要素。联合(Union):保留输入地图和叠加地图全部要素的一种多边形与多边形叠加方法。层叠置(Identity):一种地图叠加方法,仅保留那些落在由输入地图定义范围内的要素。模糊容差:用于GIS软件的距离容差,落在这一指定距离内的点和线被强制捕捉到一起。 破碎多边形:在地图叠加中沿着两个输入地图的共同边界出现的极小多边形。破碎多边形往往来自数字化误差。误差传递:由于输入地图的误差造成地图叠加输出中误差的产生。最小制图单元:由政府机构或组织所指定的最小面积单元。 19.GIS空间信息基本分析方法 www.xiexiebang.com 2001-6-29 远图开发室 地理信息系统(GIS)具有很强的空间信息分析功能,这是区别于计算机地图制图系统的显著特征之一。利用空间信息分析技术,通过对原始数据模型的观察和实验,用户可以获得新的经验和知识,并以此作为空间行为的决策依据。 空间信息分析的内涵极为丰富。作为GIS的核心部分之一,空间信息分析在地理数据的应用中发挥着举足轻重的作用。叠置分析(Overlay Analysis)覆盖叠置分析是将两层或多层地图要素进行叠加产生一个新要素层的操作,其结果将原来要素分割生成新的要素,新要素综合了原来两层或多层要素所具有的属性。也就是说,覆盖叠置分析不仅生成了新的空间关系,还将输入数据层的属性联系起来产生了新的属性关系。覆盖叠置分析是对新要素的属性按一定的数学模型进行计算分析,进而产生用户需要的结果或回答用户提出的问题。1)多边形叠置 这个过程是将两层中的多边形要素叠加,产生输出层中的新多边形要素,同时它们的属性也将联系起来,以满足建立分析模型的需要。一般GIS软件都提供了三种多边形叠置: (1)多边形之和(UNION):输出保留了两个输入的所有多边形。 (2)多边形之积(INTERSECT):输出保留了两个输入的共同覆盖区域。 (3)多边形叠合(IDENTITY):以一个输入的边界为准,而将另一个多边形与之相匹配,输出内容是第一个多边形区域内二个输入层所有多边形。 多边形叠置是个非常有用的分析功能,例如,人口普查区和校区图叠加,结果表示了每一学校及其对应的普查区,由此就可以查到作为校区新属性的重叠普查区的人口数。2)点与多边形叠加 点与多边形叠加,实质是计算包含关系。叠加的结果是为每点产生一个新的属性。例如,井位与规划区叠加,可找到包含每个井的区域。3)线与多边形叠加 将多边形要素层叠加到一个弧段层上,以确定每条弧段(全部或部分)落在哪个多边形内。网络分析(Network Analysis)对地理网络(如交通网络)、城市基础设施网络(如各种网线、电力线、电话线、供排水管线等)进行地理分析和模型化,是地理信息系统中网络分析功能的主要目的。网络分析是运筹学模型中的一个基本模型,它的根本目的是研究、筹划一项网络工程如何按排,并使其运行效果最好,如一定资源的最佳分配,从一地到另一地的运输费用最低等。其基本思想则在于人类活动总是趋向于按一定目标选择达到最佳效果的空间位置。这类问题在生产、社会、经济活动中不胜枚举,因此研究此类问题具有重大意义。网络中的基本组成部分和属性如下: (1)链(Links),网络中流动的管线,如街道,河流,水管等,其状态属性包括阻力(Impedence)和需求(Demand)。(2)障碍(Barriers),禁止网络中链上流动的点。 (3)拐角点(Turns),出现在网络链中所有的分割结点上,状态属性有阻力,如拐弯的时间和限制(如不允许左拐)。 (4)中心(Centers),是接受或分配资源的位置,如水库、商业中心、电站等,其状态属性包括资源容量,如总的资源量;阻力限额,如中心与链之间的最大距离或时间限制。 (5)站点(Stops),在路径选择中资源增减的站点,如库房、汽车站等,其状态属性有要被运输的资源需求,如产品数。 网络中的状态属性有阻力和需求两项,实际的状态属性可通过空间属性和状态属性的转换,根据实际情况赋到网络属性表中。1)路径分析 (1)静态求最佳路径:由用户确定权值关系后,即给定每条弧段的属性,当需求最佳路径时,读出路径的相关属性,求最佳路径。 (2)动态分段技术:给定一条路径由多段联系组成,要求标注出这条路上的公里点或要求定位某一公路上的某一点,标注出某条路上从某一公里数到另一公里数的路段。 (3)N条最佳路径分析:确定起点、终点,求代价较小的条路径,因为在实践中往往仅求出最佳路径并不能满足要求,可能因为某种因素不走最佳路径,而走近似最佳路径。 (4)最短路径:确定起点、终点和所要经过的中间点、中间连线,求最短路径。 (5)动态最佳路径分析:实际网络分析中权值是随着权值关系式变化的,而且可能会临时出现一些障碍点,所以往往需要动态地计算最佳路径。2)地址匹配 地址匹配实质是对地理位置的查询,它涉及到地址的编码(Geocode)。地址匹配与其它网络分析功能结合起来,可以满足实际工作中非常复杂的分析要求。所需输入的数据,包括地址表和含地址范围的街道网络及待查询地址的属性值。3)资源分配 资源分配网络模型由中心点(分配中心)及其状态属性和网络组成。分配有两种方式,一种是由分配中心向四周输出,另一种是由四周向中心集中。这种分配功能可以解决资源的有效流动和合理分配。其在地理网络中的应用与区位论中的中心地理论类似。在资源分配模型中,研究区可以是机能区,根据网络流的阻力等来研究中心的吸引区,为网络中的每一连接寻找最近的中心,以实现最佳的服务。还可以用来指定可能的区域。 资源分配模型可用来计算中心地的等时区,等交通距离区,等费用距离区等。可用来进行城镇中心,商业中心或港口等地的吸引范围分析,以用来寻找区域中最近的商业中心,进行各种区划和港口腹地的模拟等。缓冲区分析(Buffer Analysis)缓冲区分析是针对点、线、面实体,自动建立其周围一定宽度范围以内的缓冲区多边形。缓冲区的产生有三种情况:一是基于点要素的缓冲区,通常以点为圆心、以一定距离为半径的圆;二是基于线要素的缓冲区,通常是以线为中心轴线,距中心轴线一定距离的平行条带多边形;三是基于面要素多边形边界的缓冲区,向外或向内扩展一定距离以生成新的多边形。 缓冲区分析是地理信息系统重要的空间分析功能之一,它在交通、林业、资源管理、城市规划中有着广泛的应用。例如:湖泊和河流周围的保护区的定界,汽车服务区的选择,民宅区远离街道网络的缓冲区的建立等。空间统计分析(Spacial Analysis)1)常规统计分析 常规统计分析主要完成对数据集合的均值、总和、方差、频数、峰度系数等参数的统计分析。2)空间自相关分析 空间自相关分析是认识空间分布特征、选择适宜的空间尺度来完成空间分析的最常用的方法。目前,普遍使用空间自相关系数—— MoranI指数,其计算公式如下: 其中:N表示空间实体数目;xi表示空间实体的属性值;x是xi的平均值;Wij=1表示空间实体i与j相邻,Wij=0表示空间实体i与j不相邻I的值介于1与I之间,I=1表示空间自正相关,空间实体呈聚合分布;I=1表示空间自负相关,空间实体呈离散分布;I=0则表示空间实体是随机分布的。Wij表示实体i与j的空间关系,它通过拓扑关系获得。3)回归分析 回归分析用于分析两组或多组变量之间的相关关系,常见回归分析方程有:线性回归、指数回归、对数回归、多元回归等。4)趋势分析 通过数学模型模拟地理特征的空间分布与时间过程,把地理要素时空分布的实测数据点之间的不足部分内插或预测出来。5)专家打分模型 专家打分模型将相关的影响因素按其相对重要性排队,给出各因素所占的权重值;对每一要素内部进行进一步分析,按其内部的分类进行排队,按各类对结果的影响给分,从而得到该要素内各类别对结果的影响量,最后系统进行复合,得出排序结果,以表示对结果影响的优劣程度,作为决策的依据。 专家打分模型可分二步实现。第一步——打分:用户首先在每个feature的属性表里增加一个数据项,填入专家赋给的相应的分值;第二步——复合:调用加权符合程序,根据用户对各个feature给定的权重值进行叠加,得到最后的结果。 20.如何判断图形间的逻辑运算 本小节以Polyline(Polygon类似)为例, 讲解如何判断图形间的逻辑关系,主要用到的接口是IRelationalOperator。 在本例中,使用Relational Operator 对两个图形进行比较,返回一个布尔值来指出这两个图形间是否存在特定的关系。一些关系的判断是要求两个图形要有相同的维数的(如必须Polyline之间或Polygon之间),而另外一些对图形维数就没有太多限制。大多数已定义的关系操作符是互斥的。RelationalOperator的具体方法有: Contains:判断一个图形是否包含另外一个图形。Within:判断一个图形是否被另外一个图形所包含。 Crosses:判断两个图形是否在维数较少的那个图形的内部相交。Disjoint:判断两个图形间是否没有相同点。 Equals:判断两个图形是否是同一个类型并且在平面上的点是否是相同的位置。如果返回值为真,则它们应该包含(Contains)另外一个图形同时也被另外一个图形所包含(Within)。 Overlaps:判断两个图形的交集是否和其中的一个图形拥有相同的维数,并且他们交集不能和其中任何一个图形相等。该方法只使用与两个Polyline之间或者两个Polygon之间。 Touch:判断两个图形的边界是否相交,如果两个图形的交集不为空,但两个图形内部的交集为空,则返回值为真。下图为几个图形的边界(Boundary)和内部(Interior)概念的图解: 下面针对较易混淆的两个概念,Crosses和Touch进行举例说明(Polyline/Polyline): Crossess Touch Crossess Touch 21.AE中2种方式overlay 最近在研究ae中实现overlay的方法,终于发现了2个方法。(针对shapefile)方法一:利用ITopology接口: void COverlayDlg::Overlay(ILayerPtr inputLayer, ILayerPtr OverlayLayer,IFeatureClassPtr ipNewClass){ int mode=m_modeCombo.GetCurSel();IFeatureLayerPtr ipPutlayer(inputLayer);IFeatureClassPtr ipPutClass;ipPutlayer->get_FeatureClass(&ipPutClass);IFeatureClassPtr ipOutClass;IFeatureLayerPtr ipOverlayer(OverlayLayer);ipOverlayer->get_FeatureClass(&ipOutClass); IQueryFilterPtr ipQF(CLSID_QueryFilter);long number1,number2;ipPutClass->FeatureCount(ipQF,&number1);ipPutClass->FeatureCount(ipQF,&number2); IActiveViewPtr ipView=p_View->m_ctrlMap.GetActiveView();ITopologicalOperatorPtr ipTo;IFeaturePtr ipFeature1,ipFeature2;IGeometryPtr ipGeo1,ipGeo2,ipNew;for(long i=0;i for(long j=0;j { ipPutClass->GetFeature(i,&ipFeature1); ipOutClass->GetFeature(j,&ipFeature2); ipFeature1->get_Shape(&ipGeo1); ipFeature2->get_Shape(&ipGeo2); ipTo=ipGeo1; switch(mode) { case 0: ipTo->Intersect(ipGeo2,esriGeometry2Dimension,&ipNew); break; case 1: ipTo->Union(ipGeo2,&ipNew); break; case 2: ipTo->Difference(ipGeo2,&ipNew); } IFeaturePtr ipFeature; ipNewClass->CreateFeature(&ipFeature); ipFeature->putref_Shape(ipNew); ipFeature->Store(); } ipView->Refresh();} 这种方法是一个一个feature的创建,存入featureclass接口中。 方法二:利用IBasicGeoprocess接口 //把第一个图层和第0个图层叠置 IFeatureLayerPtr ipFeaLay;IFeatureClassPtr ipFeaCls;HRESULT hr; ILayerPtr ipLay;IMapPtr ipMap(m_ctrlMap.GetMap());hr=ipMap->get_Layer(0,&ipLay); ipFeaLay=ipLay;if(ipFeaLay){ hr=ipFeaLay->get_FeatureClass(&ipFeaCls); if(FAILED(hr))return; } ITablePtr ipInPutTable(ipLay);hr=ipMap->get_Layer(1,&ipLay); ipFeaLay=ipLay;if(ipFeaLay!=0) hr=ipFeaLay->get_FeatureClass(&ipFeaCls); ITablePtr ipOverlayTable(ipLay); hr=ipDatasetName->putref_WorkspaceName(ipWSName);if(FAILED(hr))return; IBasicGeoprocessorPtr ipBGP(CLSID_BasicGeoprocessor);IFeatureClassPtr ipOutputFeaCls;hr=ipBGP->Intersect(ipInPutTable,VARIANT_FALSE,ipOverlayTable,VARIANT_FALSE,double(0),ipFeaClsName,&ipOutputFeaCls); IFeatureLayerPtr ipOutputFeaLay(CLSID_FeatureLayer);ipOutputFeaLay->putref_FeatureClass(ipOutputFeaCls);BSTR OutFeaClsAliName;hr=ipOutputFeaCls->get_AliasName(&OutFeaClsAliName);if(FAILED(hr))return;hr=ipOutputFeaLay->put_Name(OutFeaClsAliName);if(FAILED(hr))return;hr=ipMap->AddLayer(ipOutputFeaLay);if(FAILED(hr))return;IActiveViewPtr ipAV(ipMap);ipAV->Refresh(); 22.ArcEngine中实现捕捉功能 捕捉功能主要使用ArcEngine中的两个接口 1.IHitTest用于作点击测试 2.IFeatureCache 用于建立做缓存 由于数据库中有多个FeatureClass,而每个FeatureClass又可以做多种点击测试 所以这里有会有好几种捕捉方案。 我们称呼每一个可以执行捕捉的对象叫捕捉代理,所有的代理在一个捕捉环境中 方案1:每个代理负责测试一种FeatureClass的一种点击方式 方案2:每个代理负责测试一种FeatureClass的所有点击方式 方案3:一代理负责测试所有的FeatureClass的一种点击方式 方案4:一个代理负责测试所有FeatureClass的所有点击方式 在实际使用过程中 我们使用的是第一种方案。但是我个人认为第二种方案比较好。当然这只是个人推测 没有测试数据证明。 下面给出第一种方案的代码: /// /// public interface IFeatureSnapAgent:ISnapAgent,ISnapAgentFeedback { IFeatureCache FeatureCache { get; } IFeatureClass FeatureClass { get; set; } esriGeometryHitPartType HitPartType { get; set; } /// /// 为捕捉连接事件,当捕捉发生的时候,就会触发事件。 /// /// void AddSnapedEventHandler(GeometrySnapedEventHandler handler); /// /// 不再监听捕捉事件 /// /// void RemoveSnapedEventHandler(GeometrySnapedEventHandler handler);} /// /// public class DefaultFeatureSnapAgent :IFeatureSnapAgent,IEditEvents,ESRI.ArcGIS.esriSystem.IPersistVariant { #region 构造函数 /// /// 为代理指定别名。注意该代理目前还没有关联到任何目标FeatureClass /// 要使得该代理起作用,必须要为他设置FeatureClass./// /// 名称(请确保唯一) public DefaultFeatureSnapAgent(string name):this(name,null) { } /// /// 将使用该FeatureClass的别名做代理的名称 /// /// public DefaultFeatureSnapAgent(IFeatureClass feaClass):this(feaClass.AliasName,feaClass) { } /// /// 完全初始化捕捉代理 /// /// 名称(请确保唯一) /// 目标FeatureClass public DefaultFeatureSnapAgent(string name,IFeatureClass feaClass) { m_snapAgentName=name; m_bCacheHasCreated=false; m_hitPartType=esriGeometryHitPartType.esriGeometryPartNone; this.m_isSnapWorking=true; this.m_featureClass=feaClass; this.m_snapFeedbackText=""; } #endregion #region IFeatureSnapAgent 成员 private event GeometrySnapedEventHandler m_snapSubsciber; /// /// FeatureClass缓冲区。 /// private IFeatureCache m_featureCache; /// /// 该代理将捕捉在该FeatureClass上的Feature.和Geometry /// private IFeatureClass m_featureClass; /// /// 点击测试的有效类型。 /// protected esriGeometryHitPartType m_hitPartType; /// /// 缓冲区对象是否已经被创建了。跟是否建立了缓冲没有关系。 /// private bool m_bCacheHasCreated; /// /// 缓冲区对象 /// public IFeatureCache FeatureCache { get { return m_featureCache; } } /// 1.要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关。 2.自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Snapping Environment对话框 捕捉设置中有3个选项,vertex edge end 分别是节点、终点、和边,选择end应该会捕捉端点 3.图斑面积计算及长度计算 应用工具CALCULATE AREA 或者使用VBA代码实现 新建字段并开启Advanced 写入代码,面积计算: Dim Output as double Dim pArea as Iarea Set pArea = [shape] 在最后的一个空格里面写入代码(即:字段名)pArea.area 长度计算: Dim Output as double Dim pCurve as ICurve Set pCurve = [shape] Output = pCurve.Length 4.剪切图斑 Task任务栏 cut polygon feature工具,需要sketch工具画线辅助完成 5.配准工具 Spatial Adjustment 工具 需要注意先要 set adjustment data 然后配准 6.影像校正 Georeferncing工具 7.要素变形 Task 工具条中的reshape feature 配合sketch工具 8.添加节点 Modify feature 在需要加点的地方右键单击insert vertex 也可单击右键选择properties 打开edit sketch properties对话框,在坐标点位置右键插入节点 9.共享多边形生成 Auto-complete polygon 工具生成共享边的多边形,配合snapping environment更好。 10.画岛图 1).使用任务栏中的sketch工具,当画完外面的一圈时,右键 选择finish part 然后画中间的部分 再右键finish sketch 2).分别画连个图斑然后应用Editor 工具栏中的工具先intersect(图斑重叠的地方创建一个新的图斑)然后Clip(剪切)即可。(补充其他工具:Union,把多个图斑联合起来并形成一个新的连接在一起的图斑,原图斑无变化,联合后的图斑不继承原任何图斑的属性;Merge,把多个图斑合并到其中一个图斑上并继承它的属性,原图斑变化;Split用于间断线段,但得知道具体的长度,如果不知道那么长度或者没必要那么精确就直接用Eeitor工具栏的Split tool工具) 11.连接外界属性数据(如:.xsl文件等) 利用JOIN 工具可以方便的实现与外界属性数据的关联,但这种关联是依赖于外界数据库本身的,需经过重新导出之后即完全保存在相应图层属性页。在做外联如EXCEL等的时候对数据有一些要求,确保第一行包含字段名,这些字段名不能超过十个字母,不能出现特殊字符。最好把EXCEL保存为.csv文件去除一些不兼容的内容再连接。 转载ESRI论坛Lucy1114帖子说明: 12.导出Shape格式为其他软件识别的打印格式如JEPG等格式 FILE/EXPORT MAP 然后选择相应的图片格式,此时也可设置答应的分辨率 pdi 13.建立注记层 方法一.carvert to Ananotation ,方法二.Draw工具条 方法三.从其他地方转换注记图层 14.查看特定区域范围内的某种地物分布情况 Selection / select by location 15.如何用面生成中线 先把数据转成coverage格式,workstion里有Centerline命令。 另外ArcToolBox->Data Management Tools->Generalization->Collapse Dual Lines To Centerline也行。不过以上做法要求边界是双线。你必须先把面转成线,特别是参数的设置。也可以尝试下sketch工具条中的midpoint tool 后面有详细的讲解过程。 16.根据坐标数据生成点 方法一.:[工具] >>[添加XY 数据],在“添加XY 数据”窗口中,选择已添加的 XY 数据表,指定X 坐标字段(东经)和Y 坐标字段(北纬),按“编辑”按钮,选择坐标系统。一般GPS系统采用的坐标系统为WGS_1984。 方法二.直接用TOOL工具下的ADD XY 可以单个加点 17.用任意多边形剪切栅格数据(矢量数据转换为栅格数据) 在ArcCatalog下新建一个要素类(要素类型为:多边形),命名为:ClipPoly.shp 在ArcMap中,加载栅格数据:Landuse、和ClipPoly.shp 打开 编辑器工具栏,开始编辑ClipPoly,根据要剪切的区域,绘制一个任意形状的多 边形。打开属性表,修改多边形的字段“ID”的值为1,保存修改,停止编辑。 打开 空间分析工具栏 GIS软件应用-ArcGIS 执行命令:<空间分析>-<转换>--<要素到栅格> 指定栅格大小:查询要剪切的栅格图 层Landuse 的栅格大小,这里指定为25 指定输出栅格的名称为路径 执行命令: <空间分析>-<栅格计算器> 构造表达式:[Landuse]*[polyClip4-polyclip4],执行栅格图层:Landuse 和 用以剪切 的栅格polyClip4 之间的相乘运算 GIS软件应用-ArcGIS 得到的结果即是以任意多边形剪切的Landuse数据 18.栅格重分类(Raster Reclassify) 通过栅格重分类操作可以将连续栅格数据转换为离散栅格数据 19.Eliminate合并破碎多边形 以下的操作将会把面积小于10000平方米的多边形合并到周围与之有最长公共 边的多边形中: 执行菜单命令[选择]>>[通过属性选择],查询”Area”<=10000(平方米)的图斑 被选中的多边形以高亮方式显示,这些小的图斑将会被合并到与之相邻且有最大公共边 的多边形。当然也可以选择合并到相邻的面积最大的多边形。 打开 Arctoolbox,执行 [消除] 命令 指定输入图层:tinSlopef, 输出要素类:TinSlopef_Elminate.shp Eliminate(合并破碎多边形)操作原理 20.重叠要素的选择切换 目标:在覆盖同一区域的多个要素中切换被选择要素 操作步骤: 1).在编辑环境中选中覆盖同一区域的多个要素中的一个要素 2).按下N键,被选要素就会自动地切换到另一个图层的要素上去(如图1) 3).重复操作,直到选中目标要素为止 21.编辑时一些常用的快捷键 一、公共快捷键(对所有编辑工具有效): 在编辑未完成时按快捷键E切换到选择的环境中去 Z 放大 X 缩小 C 漫游 V显示节点 Ctrl+Z 撤销Ctrl+Y 重做 SpaceBar 暂停捕捉 二、编辑工具: Shift:添加至/取消选择 Ctrl:移动选择锚 N:下一个被选要素 三、用于Edit工具的与注记相关的快捷键: E:在Sketch工具、Edit工具和Edit Annotation工具间切换; 四、Edit Annotation工具: Shift:添加至/取消选择 Ctrl:移动选择锚 N:下一个被选要素 R:切换至旋转模式/从旋转模式切换 F:切换至要素模式/从要素模式切换 E:在Sketch工具、Edit工具和Edit Annotation工具间切换 L:在跟踪要素模式下将选中的注记要素旋转180度 O:在跟踪要素模式下打开Follow Feature Options 对话框 Tab:在跟踪要素模式下对注记放置的位置进行左右边的切换 P:在跟踪要素模式下对注记放置的角度进行平行和垂直方向的切换。 E:在Sketch工具、Edit工具和Edit Annotation工具间切换 L:在跟踪要素模式下将选中的注记要素旋转180度 O:在跟踪要素模式下打开Follow Feature Options 对话框 Tab:在跟踪要素模式下对注记放置的位置进行左右边的切换 P:在跟踪要素模式下对注记放置的角度进行平行和垂直方向的切换。 五、Sketch工具: Ctrl+A:方位 Ctrl+F:偏转 Ctrl+L:长度 Ctrl+D:X,Y增量 Ctrl+G:方位/长度 Ctrl+P:平行 Ctrl+E:垂直 Ctrl+T:切线 Ctrl+Delete:删除草图 F2:完成草图 F6:绝对X,Y坐标 F7:线段偏转 T:显示容限 已经输入的命令可以通过Esc取消。 六.鼠标操作技巧 i.在使用【Pan】工具时,鼠标单击处将位于地图的中心。 ii.在使用【Zoom In / Zoom Out / Pan】工具时,按F6键可以循序在这3个工具间切换 iii.在TOC中按住Alt键,并单击图层,等效于缩放到图层(Zoom To Layer) 22.对线要素标注的增强 (对线要素进行标注时,如果标注在线上,标注和线会叠加显示,效果不理想,下面叫介绍一种可以在显示标注的地方把线断开的方法,这样效果会美观一些) 操作步骤: 1).把标注转成注记,保存在GDB中 2). 用ArcToolbox中的制图工具Cartography Tools->Masking Tools->Intersecting Layer Masks,为注记创建模版,模版的大小用参数Margin来决定 3).右键点击数据框,在环境菜单中选择高级绘制选项(Advanced Drawing Options),用注记的模版图层去遮盖线图层,确定 23.同一图层使用Clip实现图斑的无缝拼接 当一个图斑的边界确定,需要实现两个图斑的无缝拼接时,可以把图斑拉伸覆盖确定边界的图斑的一部分,然后用下面的图斑剪区上面的图斑。 方法二:图斑之间有小的缝隙,可以先在缝隙上任意补画一个图斑,然后合并(merge)图斑,最后再剪切(Clip)即可得到无缝的图斑。 如下图所示: 24.利用两个相交图斑创建新图斑。 两个图斑都选中然后 Eidtor 工具条intersect,此方法原图斑不会被接切。 25.属性表中选择集与非选择集的切换 Options/switch selection 26.快速把选择的要素另存为一个图层并加载进来。 先选责需要另存图层的要素(直接选择或者属性表),然后在图层上右键Selection/create Layer From Selected Features。 (以前都是直接export竟然没有发现) 27.利用Hyperlinks丰富数据库,为其添加超链接。 单击rowse工具栏中Identify按钮。单击地图中一个要素,在Identify Results窗口右击需要设置超链接的要素,然后点击Add Hyperlink菜单。若要将一个Web页加为超链接,单击项,并输入URL。要链接到一个文档,单击Link to a Document,并输入文档路径名。单击Tools工具栏中的Hyperlink工具,并单击图上某一个要素即可实现。 使用一个属性字段作为超链 在内容表中右击包含一个超链接字段的图层,然后点击properties ,单击Display选项卡。选中Supprt Hyper3.Hyperlinks using field选项,单击下拉箭头并点击一个字段。单击Document or URL。单击OK,单击Tools中的Hyperlink按钮,将鼠标指移到一要素上并单击以显示其超链接。 28.Arcmap中的SQL语言 当查询ArcInfo coverages, shape文件, INFO表以及dBASE表时,SQL表达式中的字段名必须用双引号扩起。如:“AREA”,如果查询的是个人地理数据库数据,则需要将字段名包含在方括号内,如:[AREA],如果查询的是ArcSDE地理数据库数据或是ArcIMS要素类或ArcIMS影象服务子层中的数据,则不需要将字段名括起,如:AREA 有些运算符和关键字也可能有所变化。 在查询表达式中,字符串必须加单引号,例如: [STATE_NAME]=‘California’ 除个人地理数据库要素类和表之外,查询表达式中的字符串是区分字母大小写的。如果搜索不需要区分大小写,可以使用SQL函数将所有的值都转换成大写或者小写。对于基于文件的数据源,例如shape文件或coverages,既可以使用UPPER函数,也可以使用LOWER函数。 例如下面这个查询将选出那些姓名的最后为Jones或JONES的顾客。 UPPER(“LAST_NAME”)= 'JONES' 可以用LIKE运算符(不是 = 运算符)与通配符一起构建部分字符串查询。 例如,表达式 [STATE_NAME] LIKE 'Miss*'将在美国州名中选择Mississippi和Missouri。 *表示多个字符。 还比如,查询表达式 [OWNER_NAME] LIKE '?atherine smith' 将找出Catherine Smith和Katherine Smith。 ?表示单个字符。通配符的使用依赖于不同的数据库。例子中使用的通配符只适用于个人地理数据库。 可以使用NULL关键字来选择那些在指定字段中值为NULL的要素和记录。通常,NULL关键字的前面总有IS或IS NOT。 29.Select by location小结 按位置查找要素的方法 使用按位置选择(Select By Location)对话框,可以根据要素间的相对空间位置进行查找。可以使用多种方法,查找在同一图层中或不同图层间相互邻近或叠置的点、线、多边形等要素。 被„跨越边界(Are crossed by the outline of) 利用这种方法,选择被另一图层要素覆盖的某个图层上的要素。例如,搜索道路跨越的荒地,得到的结果是道路跨越其边界的所有荒地。 相交(Intersect) 与Are crossed by the outline of类似,但是该方法可以选择与参照要素接连的要素。例如,选择与道路相交的荒地,选择的结果将包括该道路在其边界范围之内或在其边界之上的所有荒地。 在„距离范围内(Are within a distance of) 这一方法将选择同一图层或不同图层上相邻或邻近的要素。例如,现有一个包括清洁井和污染井的图层,使用该方法可以找出距离污染井500米范围内的所有清洁井。同样,也可以找出距离污染井500米范围内其他图层上的水库和农田。还可以用该选项选择与其他要素相毗邻的要素。例如,假如用户已选定了公司可能购买的地块,现在想获取邻近地块的信息。这种情况下,利用该选项选择选中地块零距离范围内的所有地块即可。 中心在„里(Have their center in) 这种方法选择某一图层上的要素,其中心点落在另一图层要素中。 完全在„内(Are completely within) 这种方法选择完全落在另一图层多边形内部的某一图层上的要素,例如,选择林区里面的湖泊。通过指定一个缓冲距离,可以选择落于多边形内部并距离多边形边界一定范围内的所有要素。例如,选择林区内部500米范围内的湖泊。 完全包含(Completely contain) 这种方法选择某一图层上完全包含另一图层上的要素的多边形。例如,选择内部包含湖泊的林区。通过指定一个缓冲距离,可以选择在其内部一定范围内包含要素的多边形。例如,对湖泊做缓冲区,可以选择距离湖泊500米范围内的林区。 与„有公共线段(Share a line segment with) 这种方法选择那些与其他要素具有公共线段、顶点或节点的要素。 与„等同(Are identical to) 这种方法选择与另一图层中某一要素具有同样几何形状的所有要素。这时,要素类型必须相同。举个例子:必须用多边形选择多边形,用线段选择线段,用点选择点。 包含(Contain) 这种方法选择某一图层中包含另一图层中要素的要素。这种方法与完全包含(Completely contain)方法的区别在于:要素间的边界可以接触。例如,使用包含(Contain)方法,即使湖泊的边界和包含该湖泊的森林的边界接触,森林也会被选中。但是在用完全包含(Completely contain)方法时,森林是不会选中的。 包含于(Are Contained by) 这种方法选择某一图层中被另一图层中要素包含的要素。例如,选择被乡村包围的城市。这种方法和完全包含于(Are completely within)方法的区别在于,要素的边界可以接触。 与„接触(Touch the boundary of) 如果使用包含线的图层来选择要素,则该方法将选择那些与此图层里的线有公共线段,顶点或端点(节点)的线和多边形要素。如果跨越了线,则这些线和多边形将不会被选中。 如果使用包含多边形的图层来选择要素,则该方法将选择那些与此图层里的多边形边界有公共线段或顶点的线和多边形要素。如果跨越了多边形边界,则这些线和多边形将不会被选中。 31.将选中的要素放大至整个窗口 在内容表中右击包含选中要素的图层,单击Selection菜单,并单击Zoom To Selected Features子菜单。 选中要素将放大至整个ArcMap窗口。 32.显示选中要素的属性 在内容表中右击选中要素所在图层,单击Open Attribute Table,单击Show Selected records。 窗口中显示出选中要素的属性记录。也可以打开属性表在select和all之间切换。 33.通过单击要素添加文本 1).在内容表中,右击需要添加标注的图层,单击Properties。 2).单击Labels选项卡。 3).单击Label Field下拉箭头,单击作为标注的字段。 4).单击OK。5).单击Draw工具条上的Label按钮。应该是只需单击下拉箭头选择Label按钮。 6).单击Place label at position clicked。如果选择了Automatically find best placement,ArcMap会自动的为标注寻找合适的位置。 7).单击Choose a style,然后单击需要的标注样式。 8).在需要标注的要素上单击鼠标,标注就添加上去了。 (先在Draw工具条下新建标注组方便管理,New Annotation Group) 34.标注工具条和标注管理器 如果图层中有一些要素需要指定特殊的标注属性,需要在标注管理器中生成其它的标注类。 点击左侧面板上的一个图层,在右侧面板上为其添加一个新的标注类。 个人认为此方法虽然没有转为注记后的标注灵活,但却可以方便的实现自动相对智能化的标注,相比之下更省心,提高效率。35.在进行地图查询或编辑的时候为什么会总是选中所有的图层 诀窍在这里(虽然是一点点小问题,但当我第一次遇到这个问题时却花费了我不少时间,甚至于怀疑自己的数据有问题) 36.建立拓扑关系检查图斑 先根据需要在Catalog中建立相应的拓扑关系规则,然后在Arcmap中进行拓扑处理,辅助工具条Topolygon,下图所示为重叠图斑检查。(也可以在Arctoolbox下的Data Management tools/topology来做) 有关geodatabase的topology规则 多边形topology 1).must not overlay:单要素类,多边形要素相互不能重叠 2).must not have gaps:单要素类,连续连接的多边形区域中间不能有空白区(非数据区) 3).contains point:多边形+点,多边形要素类的每个要素的边界以内必须包含点层中至少一个点 4).boundary must be covered by:多边形+线,多边形层的边界与线层重叠(线层可以有非重叠的更多要素) 5).must be covered by feature class of:多边形+多边形,第一个多边形层必须被第二个完全覆盖(省与全国的关系) 6).must be covered by:多边形+多边形,第一个多边形层必须把第二个完全覆盖(全国与省的关系) 7).must not overlay with:多边形+多边形,两个多边形层的多边形不能存在一对相互覆盖的要素 8).must cover each other:多边形+多边形,两个多边形的要素必须完全重叠 9).area boundary must be covered by boundary of:多边形+多边形,第一个多边形的各要素必须为第二个的一个或几个多边形完全覆盖 10).must be properly inside polygons:点+多边形,点层的要素必须全部在多边形内 11).must be covered by boundary of:点+多边形,点必须在多边形的边界上 线topology 1).must not have dangle:线,不能有悬挂节点 2).must not have pseudo-node:线,不能有伪节点 3).must not overlay:线,不能有线重合(不同要素间) 4).must not self overlay:线,一个要素不能自覆盖 5).must not intersect:线,不能有线交叉(不同要素间) 6).must not self intersect:线,不能有线自交叉 7).must not intersect or touch interrior:线,不能有相交和重叠 8).must be single part:线,一个线要素只能由一个path组成 9).must not covered with:线+线,两层线不能重叠 10).must be covered by feature class of:线+线,两层线完全重叠 11).endpoint must be covered by:线+点,线层中的终点必须和点层的部分(或全部)点重合 12).must be covered by boundary of:线+多边形,线被多边形边界重叠 13).must be covered by endpoint of:点+线,点被线终点完全重合 14).point must be covered by line:点+线,点都在线上 Topology工具条及功能介绍: 37.给多个要素同一赋值 选中你需要同一赋值的是所有图斑,然后点击Atrributes,此时出现属性修改对话框,点击根目录是对所有要素同一赋值,点击下面的支目录则可以分别赋值。(也可以用字段计算器实现)38.如何根据确定的点画出以他相应的点 例如:我在地图上已经指导了一个一直点,而其他的点在地图上都是以他为中心画出来的。学校 SE60度,140米 意思是学校在中心点南偏东60度,距离是140米,这样的点在arcmap中怎么加呢?我的方法有二分别如下。 1).确定已有一个点图层,其中有学校,然后: 对该图层开始编辑 选择工具栏editor---direction-distance tool 以中心点为中心,先画角度线(arcmap左下角会有角度提示),再画距离/半径(注:画的过程中点击A键可以输入角度值,点击D键可以输入距离值) 确定,即可 如果找不到direction-distance tool 的同志请看下面 Direction-distance tool is here 第二种方法就是直接编写代码实现 下面是一段示例的VBA代码(本段代码作者: Option Explicit Dim dPoint(2, 1)As Double Sub aaa() Call bbb Dim aa As IMxDocument Set aa = ThisDocument Dim pFLyr As IFeatureLayer GIS空间站 knight_sl) Set pFLyr = aa.FocusMap.Layer(0) Dim pFCsr As IFeatureCursor Dim pFt As IFeature Set pFCsr = pFLyr.FeatureClass.Update(Nothing, False) Set pFt = pFCsr.NextFeature Dim pPoint As IPoint Set pPoint = pFt.ShapeCopy Dim pNewPoint As IPoint Dim X0 As Double, Y0 As Double Dim X As Double, Y As Double Dim dAngle As Double Dim i As Long For i = 0 To UBound(dPoint, 1) Set pFt = pFLyr.FeatureClass.CreateFeature Set pNewPoint = New Point dAngle = dPoint(i, 0)* 3.14***3 / 180 pNewPoint.X = dPoint(i, 1)* Cos(dAngle)+ pPoint.X pNewPoint.Y = dPoint(i, 1)* Sin(dAngle)+ pPoint.Y Set pFt.Shape = pNewPoint pFt.Store Next Set pFLyr = Nothing Set pFCsr = Nothing Set pFt = Nothing Set pPoint = Nothing Set pNewPoint = Nothing End Sub Sub bbb() '定义新加三个点的角度和距离 dPoint(0, 0)= 10 dPoint(0, 1)= 150 dPoint(1, 0)= 30 dPoint(1, 1)= 170 dPoint(2, 0)= 120 dPoint(2, 1)= 200 End Sub 这中方法做起来需要一点编程经验,但是比上面那中一个一个的画的方法要先进多了,可以把所有的点录入同时画出来。 如果你不会VBA编程,请看下面: 这是ArcGIS VBA的程序,运行的方法: 1),运行ArcMap,加载所需图层; 2),Tools菜单/Macros(宏)/Visual Basic Editor(VB编辑器),这样打开VB编辑器 3),双击打开VB编辑器左上工程资源管理器中的Project/ArcMap对象/ThisDocument,把上面的代码粘进去。注意看首行 Option Explicit如果有两行,就删除一行。 4),点击VB编辑器工具栏的运行按钮运行(或菜单 运行/运行子过程),就可以了,再激活ArcMap可以看到发生了什么! 或者还有一种创建宏的方法(不过建议对ArcGIS VBA不大熟的同志不要用这种方法): 1),运行ArcMap,加载所需图层; 2),Tools菜单/Macros(宏)/Macros,这样打开宏编辑器 3),在宏名称中输入aaa,确定后,会打开VB编辑器,将看到有一个aaa的过程,没有实体。你把上面的aaa过程中的代码粘进去,然后在前面加上 Option Explicit(这个别重复了哈) Dim dPoint(2, 1)As Double 就可以。 4),点击VB编辑器工具栏的运行按钮运行(或菜单 运行/运行子过程),就可以了,再激活ArcMap可以看到发生了什么! 39.这里说道了工具的使用,那么就简单的再介绍下Sketch中的几个工具吧 Sketch construction tools的使用: Sketch tool:主要是用来创造线和面特征的节点,在你完成了草图之后,ArcMAP就会增加最后的线段,形成矢量图。 Arc tool:这个主要是帮你创造一个弧段的,选中这个工具后,先在弧段起点点一下,然后在弧段高度方向大致位置点一下(这个点是不可见的,只是给你确定弧段的高度),最后在弧段的终点点一下,就形成一条弧段了。Direction-distance tool:这个主要是从已知某一个方向和某一个距离来确定一个点。首先点一个已知方向的点,这是会有一条线出来,你确定好方向后,再点已知距离的点,这是出来一个圆,确定距离后,直线和圆有交点,这就是你要的点,再上面点一下就ok! Distance-distance tool:这个和上面的一样的道理,只是它都用距离来确定一个点,也就是两个圆确定你要的点。 Endpoint arc tool:这也是创造弧段用的,与Arc tool 工具不同的是,它是先在弧段的起点点一下,然后在弧段的终点点一下,再点一个点确定弧段的半径。个人认为这个工具要比Arc tool工具更精确些。 Intersection tool:就是利用两条直线确定一个点。很简单一用就会! Midpoint tool:确定中点的工具,比如马路的中点,你可以先点一边,再点马路另一边,这时马路的中点自动出现了。(画道路中线太可以试试,不过得是直线道路咯,^_^) Tangent tool:相切弧段工具,它能够在一条线段上画出一条切线,只有你用其他工具画了线段出来时你才可以用这个工具。 Trace tool: 主要是用来在跟踪已存在的特征,比如一栋房子,你要沿房子外围画一条线(比如围墙),那么你使用这个工具就非常方便,首先开始时你必须按O键,设置下跟踪的间距,如100,其中还有三个角点的方式:mitered是直角 bevelled 是钝角rounded是圆角。(感觉那效果有点像CAD的偏移咯) 40.如何标注多个字段的属性及分子式标注 Propertis/label field /expression 实例:“ 输出分数线 VbCrLf 换行 效果图: 引用GIS空间站 兔八哥文章详解 以前用ArcGIS Label一般也就在图层的Properties里面定义一下Label字体大小和粗细。这两天遇到一个问题,需要在Label中显示多个字段的内容,比如BlockName和CompanyName。其实这个本来不是很难的问题,因为Label中支持VBScript,使用[BlockName] & VbNewLine & [CompanyName]。就可以实现标注中第一行显示BlockName,第二行显示CompanyName.现在问题出来了,出图时候希望突出BlockName效果,希望加粗显示,而CompanyName使用一般字体。考虑了很长时间终于从ArcGIS帮助中找到了相关的内容,原来Label的VBScript里面支持类似于Html的VBScript标签,比如加粗就是用 “ 除了加粗,ArcGIS中还支持下面的文本格式标签: Font: “ “ “ “ “ Underline: “ “ Small caps: “ Superscript “” & [LABELFIELD] & “” Subscript: “” & [LABELFIELD] & “” Character spacing(%): “ Word spacing(%): “ Leading(pts): “ 需要注意的是,使用这些标签后,生成的Label语句在Verify按钮中是不生效的,只对最终的显示结果生效。其实问题还没有最终解决,使用VbNewLine生成的显示结果,上下两行缺省时居中对齐,现在希望它们左对齐显示,还没找到办法。还有一个问题,就是ArcGIS中对点的Label可以选择Label的位置,而对面没有,缺省是放置在中间,现在希望放置在左上角,还没有找到该怎么办。 下面是一个VBS的代码可以试试。 Function FindLabel([OBJECTID], [SHAPE_Area]) Dim nFMLength Dim nFZLength nFMLength = Len([SHAPE_Area]) nFZLength = Len([OBJECTID]) Dim strLeftSpace Dim strRightSpace strLeftSpace = ”“ strRightSpace= ”“ If nFMLength > nFZLength Then For i=0 To (nFMLength-nFZLength)/2 strLeftSpace =strLeftSpace +chr(32) strRightSpace =strRightSpace + chr(32) Next End If FindLabel = ” &strLeftSpace & [OBJECTID]&strRightSpace& [SHAPE_Area] End Function ”"&chr(13)&chr(10)& 41.用点构面 ArcToolBox->Samples->Data Management->Features->Create Features From Text File 点组成面,最重要的是点序的排列,因此对数据的组织有一定的要求。 42.几个常用的VBA代码 在ARCGIS属性表中增加需要的字段,并自动赋值 使用方法 1打开属性表,选择计算的字段,右点选择Calculate Values;2.选择“是”,进入Field Calculator; 2选择Advance选项; 在Pre-Logic VBA Script Code编辑框中输入VBA代码; 4在下面编辑框中输入赋值部分.1--点坐标X VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPoint As IPoint Set pPoint = pGeo 赋值部分: pPoint.X 2--点坐标Y VBA部分: 同上 赋值部分: pPoint.Y 坐标值为文件存储的固有值,和是否使用On the Fly坐标表示无关。返回当前显示的坐标值参看8,9 3--多边形周长 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo 赋值部分: pPolygon.Length 4--多边形面积 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo Dim pArea As IArea Set pArea = pPolygon 赋值部分: pArea.Area 5--多边形重心X VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo Dim pArea As IArea Set pArea = pPolygon Dim pPoint As IPoint Set pPoint = pArea.Centroid 赋值部分: pPoint.X 6--多边形重心Y VBA部分: 同上 赋值部分: pPoint.Y 7--Polyline长度 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolyline As IPolyline Set pPolyline = pGeo Dim pCurve As IPolycurve Set pCurve = pPolyline 赋值部分: pCurve.Length 8--表示点坐标X VBA部分: Dim pDoc As IMxDocument Set pDoc = ThisDocument Dim pSpRef As ISpatialReference Set pSpRef = pDoc.FocusMap.SpatialReference Dim pClone As IClone Set pClone = [Shape] Dim pGeo As IGeometry Set pGeo = pClone.Clone Dim pPoint as IPoint Set pPoint = pGeo pGeo.Project pSpRef 赋值部分: pPoint.X 9--表示点坐标Y VBA部分: 同上 赋值部分: pPoint.Y 坐标值为On the Fly显示的坐标,不是文件存储的固有坐标 10--连续编号 VBA部分: Static lCount as long lCount=lCount+1 赋值部分: lCount(从1开始) lCount-1(从0开始) 计算面的中点 崇德博智,扶危定倾。 2016-2017春季学期 地理信息系统 ARCGIS 教程 制作人:防灾科技学院 郭子恺 版权问题 禁止窃取 崇德博智,扶危定倾。 目录 一、安装----4 1.安装程序 (1)Desktop CN 安装过程(2)License Manager安装过程(3)安装汉化包 2.更改破解文件内容并完成后续更改(1)更改破解文件(2)后续更改 二、基础操作----19 1.进入arcgis软件 2.arcgis新建地图 3.连接到文件夹 4.添加底图 5.创建点文件、线文件、区文件 6.添加所需工作框 7.丢失的目录、内容列表和搜索 8.开始编辑和停止编辑 9.放大和缩小及拖动图层 三、绘图----30 1.点要素 (1)选择点的画出形式(2)绘画点及点的种类规划(3)标注 (4)点的拖动更改位置 2.线要素 (1)绘制线和构造工具的选择(2)线段的切割 (3)线段控制点的添加(4)绘画形式的选择(5)线的id赋予 崇德博智,扶危定倾。 3.区要素 (1)区的绘画和构造工具的选择(2)区的id赋予 四、图件的输出----57 1.查漏补缺 2.数据视图改为布局视图 3.插入图例、比例尺和指北针 4.导出地图 5.保存arcmap文档 崇德博智,扶危定倾。 一、安装 1.安装程序(两个主要程序及一个汉化包) 两个主要程序安装完成后都会弹出窗口关闭即可。 单机上图文件夹 分别点开Desktop CN文件夹和License Manager文件夹 分别点击此图标进行安装(一次只能安装一个文件夹里的程序,无前后顺序) (1)Desktop CN 安装过程(软件较大需耐心等待,不要点击取消退出安装) 点击下一步。崇德博智,扶危定倾。 点击我接受许可协议,然后点击下一步。 点击完全安装,然后点击下一步。崇德博智,扶危定倾。 可更改安装目录,无需更改则可直接点击下一步。 可更改安装目录,无需更改则可直接点击下一步。崇德博智,扶危定倾。 点击安装。 等待安装。崇德博智,扶危定倾。 点击完成。崇德博智,扶危定倾。(2)License Manager安装过程 点击next。 点击I accept the license agreement,然后点击next。崇德博智,扶危定倾。 可更改安装目录,或不更改然后直接点击next。 点击Install。崇德博智,扶危定倾。 等待安装。 点击Finish。崇德博智,扶危定倾。 点击ok,安装完成。崇德博智,扶危定倾。(3)安装汉化包 点击arcgis10.2破解文件 点击该图标进行安装。 等待安装完成后改程序自动退出。崇德博智,扶危定倾。 2.更改破解文件内容并完成后续更改 (1)更改破解文件 点开文件夹 打开service文件 出现图一 (图一) 将图二中选中部分更改为计算机全名 (图二) 崇德博智,扶危定倾。 提示:计算机全名找到(这里以win10系统为例) 点击更改设置 右键找到属性并打开 将选中位置复制到service文件中要替换的位置,保存并关闭文本。崇德博智,扶危定倾。 将改好后的这两个文件复制到Desktop CN和License Manager安装目录下的(2)后续更改 文件夹中。 在开始菜单中找到该图标打开 选中标记的属性,然后将最后一个标记改为自己的计算机全名,然后点击确定。崇德博智,扶危定倾。 点击确定退出。 在开始菜单中找到该图标打开 点击停止,然后再点击启动,再点击重新读取许可,点击确定退出。 安装完成。崇德博智,扶危定倾。 二、基础操作 1.进入arcgis软件 点击该图标进入arc软件 2.arcgis新建地图 绘图基本窗口 点击标记位置中新建地图下的我的模版,然后点击确定或回车。崇德博智,扶危定倾。 3.连接到文件夹 将光标放置在矩形标记位置目录出弹出目录栏。 然后单击右键文件夹连接下的连接到文件夹。 提醒:为了有一个良好的绘图习惯和遵循规律以及日后对所画图层的保存和备案,请先创建一个新的文件夹用来存放被绘图层和后期绘制的点线面文件。例如创建文件名为“图层”。崇德博智,扶危定倾。 在该图框中找到之前创建好的绘图文件夹 添加完成后如图所示。崇德博智,扶危定倾。 4.添加底图 拓展开图层文件夹,将图层.jpg文件左键拖入中央空白区域,添加图层。(注意:后面创建的点文件、线文件、区文件也可用这种方式添加) 或者点击该图标。崇德博智,扶危定倾。 点击文件夹连接。 点击标记处进入连接好的文件夹内。崇德博智,扶危定倾。 添加标记处的图层或者以后创建的点文件、线文件、区文件。 初次添加图层会提示构建金字塔,单机是通过。崇德博智,扶危定倾。 图层置入完成。崇德博智,扶危定倾。 5.创建点文件、线文件、区文件 如图右键连接好的“图层”文件夹,点击光标中的shapefile。 (注意:如果出现下图情况则重启arcgis软件则可去除该状况) 崇德博智,扶危定倾。 出现图框,根据标记中,可更改文件名称和要素类型。 如图所示更改所需要素,分别创建点、线、面要素,选择好后点击确定即可完成创建。崇德博智,扶危定倾。 如图创建好的点文件、线文件、区文件在此展现。 6.添加所需工作框 添加四处图标标记的工作框,为日后所需。崇德博智,扶危定倾。 7.丢失的目录、内容列表和搜索 若是不小心点掉三个内容的其中一个,则可在标记处添加回来。 8.开始编辑和停止编辑 点击开始编辑,则可开始绘图。开始编辑后停止编辑亮起,点击停止编辑则可以停止绘图。(注意:标记下方有保存编辑内容,一定要时时记得保存操作内容,以防软件崩溃,出现不可逆转的失误。) 崇德博智,扶危定倾。 9.放大和缩小及拖动图层 滚轮滑动即可放大和缩小,按住滚轮下移动鼠标即可改变操作位置。崇德博智,扶危定倾。 三、绘图 1.点要素 (1)选择点的画出形式 开始编辑后点击标记位置创建要素,并出现选择界面。 点击选择界面中的点文件,再在下方选择所需要的点类型。(注意:一般只需要点,很难用到线末端的点。)崇德博智,扶危定倾。 (2)绘画点及点的种类规划 即可点出所需要的点。 (注意:点有很多不同类型,所以需要画图前对图层进行浏览并分出几种不一样的点,对不同的点进行不同的标号,然后再同种类型的点统一绘画,然后更改id,再画下一种点,直至所有所需点都画完。) (注意:我们所绘制的点可以分为以下几种: 1.图形点 2.标记点)(注意:图形点中还存在不同的图形,所以仍需不一样的点给予不同的id) 如图对标记处点文件右键找到属性表。 崇德博智,扶危定倾。 属性表如图显示,在标记处可看到id序列,分别对已经画好的第一种点赋予id-01号,然后关闭属性表,再绘画第二种点。 绘画好第二种点后如上操作再赋予第二种点id-02号。 (注意:因为该图中图形点单一只有圆圈点一种,所以本图只存在一种图形点和不显示图形的标记点两种,所以只需要赋予两个id进行区分,若其他图件存在多种图形点,则就需要重复上面过程进行设置id号。) 崇德博智,扶危定倾。 进行id区分显示,点击标记处点文件右键打开属性。 点击符号系统,然后点击类别。 崇德博智,扶危定倾。 点击唯一值,再点击添加所有值,然后确定退出。 如图,不同id显示出来,可分别进行设置。 崇德博智,扶危定倾。 点击该位置更改点形状及其属性。 单击其中一个,出现符号选择器,然后可对点的形状和属性进行选择。 崇德博智,扶危定倾。 更改完成后,可看出各类id点自动改为设置好的样式。 (3)标注 停止编辑,然后点击标记处点文件选择属性表打开,点开标记处图标。 崇德博智,扶危定倾。 点击添加字段。 在标记名称处输入名称,并在字段类型中选择文本,然后点击确定。 崇德博智,扶危定倾。 如图所示文本字段“备注”显示。 如excel一样可对图标进行缩短拉长,方便后续操作。 (注意:点击编辑后才可进行属性表中备注文字的输入) 崇德博智,扶危定倾。 点击属性表标记处可看到对应点亮起,方便一一对应输入备注文字。 输入如下图,完成后关闭即可。 崇德博智,扶危定倾。 然后点击点文件右键选择属性。 进入属性图框后,点击标注,然后勾选标注此图层中的要素。 崇德博智,扶危定倾。 点击标记处,选择备注,再仿照word文档中的文字更改方式对文字进行更改,如大小、颜色、加粗、倾斜等。 点击放置属性。 崇德博智,扶危定倾。 出现放置属性图框,先择更改位置,可更改标注所出现在点的各个不同方向的位置。点击确定后标注显示。 标注显示如图。 崇德博智,扶危定倾。 (注意:如若需要标注不同大小和颜色的标注,打开标注图框后点击标记处。) (注意:然后点击添加,输入名称后可通过更改不同名称的标注来显示不同的标注类型。) 崇德博智,扶危定倾。 (4)点的拖动更改位置 用鼠标点住选中的点进行拖动即可更改位置 崇德博智,扶危定倾。 2.线要素 (1)绘制线和构造工具的选择 选择标注中的线文件,然后选择下面一种类型。 (注意:线的表达方式有很多种,可根据需求利用不同的形状线进行绘图,以便于节省时间和提高精度。) 绘制线过程中,左键单击画出不同段的线。 崇德博智,扶危定倾。 左键双击结束所画线。 如点的移动一样,可用标记处的图标,在选中线段后进行移动。 崇德博智,扶危定倾。 (2)线段的切割 通过该图标可进行线的切割。 (3)线段控制点的添加 该图标可在线段上增添新的控制点,改变线段形状。 (注意:该操作是为了成图有更好的观赏度来改变线的弯曲度。) 崇德博智,扶危定倾。 (4)绘画形式的选择 图中标注位置可更改线段绘画中的不同绘画形式。 标记的三种为常用类型。分别为:直线段、端点弧段、追踪。 崇德博智,扶危定倾。 (5)线的id赋予 图中存在多种类型的线段,同样跟点要素一样,可以赋予id,在一个线文件中显示多种不同样式的线要素。如图,设置不同id,效仿点要素中的操作。 崇德博智,扶危定倾。 如图,点击属性。 点击符号系统,类别,唯一值,再添加所有值,最后点击确定退出。第四篇:Arcgis中工具总结
第五篇:arcgis教案