gis二次开发几何形体对象Geometry共71页文档
GIS二次开发第五章空间分析

Geometry
Curve
Envelope
Point
*
MultPoint
Segment
*
Elliptic Arc
Path
PolyCurve
Circula rArc Line
Ring
Polyine
Polygon
Bezier Curve
第5章 空间分析
5.2 空间几何图形集合运算
5.2.4 关系运算
第5章 空间分析
5.3 空间查询
5.3.1 基于属性信息查询
字符型字段查询
基于字符型字段的语句通常用“=”和“LIKE”进 行SQL查询;
如果查询字段值确定,可用“=”,如: ”Name”=“AA”
如果查询字段值不确定,可用“LIKE”,如: "NAME" LIKE '四%'
第5章 空间分析
pBase.AddSegment pLine1 pComparison.AddSegment pLine2 If pRelOp.Contains(pComparison) Then Label14.Caption = "A包含B!" Else Label14.Caption = "A不包含B!" End If
GIS二次开发
第5章 空间分析
5.4 缓冲区分析
程序代码:
第一步:界面设计;
程序代码:
第二步:数据添加;
程序代码:
第三步:缓冲区分析;
程序代码:
第四步:调试、运行;
GIS二次开发
第5章 空间分析
5.5 叠置分析
叠置分析是将不同层的地物要素相重叠,使得一些 要素或属性相叠加,从而获取新信息的方法。包括合
GIS二次开发05

2011.04.01
主要内容
几何对象 坐标系统和空间参考 空间变换
几何对象
GeometryEnvironment
创建几何对象,并且控制几何方法的实现方式 单键对象,不管new多少次,都只有一个实例对象 几何对象的外包矩形 空间投影与几何对象的空间投影相同
坐标系统与空间参考
ISpatialReferenceFactory接口包含三类方 法
返回单个对象 返回相同类型的一系列对象 从prj文件或prj字符串中导入或导出空间投影对象的 方法
第二种方法
private void PrintPreDefinedProjections() { ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISet projectionSet = spatialReferenceFactory.CreatePredefinedProjections(); System.Windows.Forms.MessageBox.Show("Number of predefined Projections = " + projectionSet.Count); projectionSet.Reset(); for (int i = 0; i < projectionSet.Count; i++) { IProjection projection = projectionSet.Next()as IProjection; System.Windows.Forms.MessageBox.Show(); } }
GIS二次开发

基本函数
控件
控件或称为OLE控件、ActiveX控件,控件是一种实现若 干标准接口的COM对象。二十世纪九十年代末各个GIS厂 商也相应开发出了各自的GIS控件,如ESRI的MapObjects, 武汉吉奥公司的GeoMap等,它们是一个功能复杂的控件 和自动化对象的集合体。 利用控件进行二次开发,用户可以根据开发的需要,选 择一种自己熟悉的二次开发语言来进行开发,开发周期 短、难度小。但控件一般封装得比较简单,开放性和可 扩展性有所欠缺,不适于大型的工程应用开发。
(3)其重用性主要表现在以下的使用场合: COM 组件并不是专为一种Windows平台而设计的,同一 COM组件可以在Win95、Win98、Workstation及NT上使 用。组件既可以被嵌入动态Web页面,又可以在LAN或 桌面环境的VB和VC等应用中使用。 COM 组件之间是彼此独立的。当应用需求发生变更时, 可能需要更换中间层的个别COM组件,但这并不会影响 其他组件的继续使用。 COM 组件具有若干对外接口(属性和方法),相当于芯片 的“管脚”。根据不同的应用需求,可以有选择地使用 不同的管脚。即使某些管脚被“废弃”,COM组件本身 仍然可继续使用。 同一COM组件可以在不同的应用环境中重复使用。 COM组件不一定是为专门的系统而设计,可以有较宽的 应用领域,不会因为某一系统的"过时"而被"废弃"。
组件式GIS
组件式GIS综合了模块式GIS、核心式GIS的优点, 将GIS功能划分为不同的功能模块,这些模块之间以 及与其它系统之间通过标准的通信接口实现交互,不 仅解决了异构系统的交互问题,而且开发成本低、易 于掌握。
万维网GIS
Internet技术的发展使得网络化成为GIS发展的必 然趋势,因此WebGIS应运而生WebGIS的发展使得 Internet用户可以通过万维网浏览空间数据、制作专题 图以及进行各种空间检索和空间分析。
gis二次开发 几何形体对象Geometry

Path几何对象 Path是连续的Segment的集合,除了路径的第一个Segment和最后一个 Segment外其余的Segment的起始点都是前一个Segment的终止点,即 Path对象的中的Segment不能出现分离,Path可以是任意数的Segment 子类的组合。
Path几何对象 该Path对象有很多我们经常用到的方法,如平滑曲线,对曲线抽稀等操作, 如下图: 。
IEnvelope接口
• 属性
– 空间坐标XMax XMin YMax YMin Height Width – 四个角点的坐标:UpperLeft UpperRight LowerLeft LowerRight – – – – – – – PutCoords:构造包络线的方法 QueryCoords:查询包络线的 Expand:按比例缩放包络线的范围 offset:偏移包络线本身 CenterAt:改变包络线的中心点 Intersect:两个包络线相交的方法 Union:两个包络线对象的并集
Polyline几何对象 Polyline是有序path组成的集合,可以拥有M、Z和ID属性值,Polyline对象的 IPointCollection接口包含了所有的节点信息,IGeometryCollection接口可以获取 polyline的paths,ISegmentCollection接口可以获取 polyline的segments。 一个Polyline对象必须满足以下准则: 1.组成Polyline对象的所有Path对象必须是有效的。 2.组成Polyline对象的所有Path对象不能重合,相交或自相交。 3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。 4.Path对象的长度不能为0. IPolyline是Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象为 一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。 Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该 接口需注意以下情况: 1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。 2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。 3.为了保证Polyline是有效的,可以创建完Polyline对象后使用 ITopologicalOperator接口的Simplify方法。
GIS地理信息系统二次开发

1 gis软件技术经理了五个阶段:集成式GIS、模块式GIS、核心式GIS、组件式GIS、万维网GIS2 gis由4个要素组成:硬件、软件、数据、人员3 gis分为工具性软件(GIS二次开发平台、am/fm专用开发平台软件、其他工具性软件)应用型软件(制图软件、资源调查、信息管理、空间分析与预测)4 gis用户分为:最终用户、GIS专业人员、GIS开发商/系统集成商5 gis自身的特点:(1)GIS处理的是空间数据,具有数据量庞大、实体种类繁多、实体间的关联复杂等特点(2)GIS设计以空间数据为驱动(3)GIS工程投资大、周期长、风险大、涉及部门繁多6 gisS设计的理论思想:GIS工程学思想7GIS工程学体系主要由任务(运用系统论的理论和方法实现GIS工程的最优设计、最优管理和最有运行,以求得到系统总体的最优化)、基础理论(系统学、地理信息科学、系统工程学)和方法论组成8地理信息科学是研究地球信息的本质和运动规律的一门学科,其研究对象是地理信息。
他通过对地理信息技术中的一般性问题和规律性问题进行研究,对GIS工程学提供指导。
9 地理信息科学体系划分为三个层次:;理论地理信息科学、市局地理信息科学和应用地理信息科学10gis设计与一般信息系统设计的差异:设计重心(GIS处理的是海量空间数据,数据库设计在GIS设计中尤其重要,一般系统设计的中心是软件功能)数据库建设(gis不仅要进行属性数据库的设计,更要进行空间数据库的设计,包括空间数据结构、存储方式、管理机制。
而一般的只需要建立属性数据库)设计方法(GIS以业务需求为导向、异空间数据为驱动进行系统设计,而一般的以业务需求为导向,以功能为驱动进行系统设计)11gis设计包括软件设计和数据库设计12 实现地理信息资源共享,必须具备:(啊)数据资源储备(2)有技术支撑系统的保障(3)共享规则的制定,被广泛采纳和遵循13标准化是空间信息共享和系统集成的重要前提,也是GIS产业化和社会化的必经之路。
GIS二次开发7

4.2.3 地理坐标系, 投影坐标系
投影对象关系图
地理坐标系:
MapObjects2.GeoCoordSys
地理坐标系使用基于经 纬度坐标的坐标系统描 述地球上某一点所处的 位置。某一个地理坐标 系是基于一个基准面来 定义的, 在MO中有对 应的属性Datum与之对 应。经度为0的经线称 为本初子午线, 在MO 中是由相应的属性 PrimeMeridian来定义
MO预定义了296种基准面
moDatum_Beijing1954
6214
moDatum_WGS1984
6326
Beijing 1954 WGS 1984
基准面是利用特定椭球体对特定地区地球表面的逼近, 因此每 个国家或地区均有各自的基准面, 我们通常称谓的北京54坐标 系、西安80坐标系实际上指的是我国的两个大地基准面。
moProjection_TransverseMercator 43006 Transverse Mercator = 4300
MapObjects2.Projection对象
属性: Name :String Type:ProjectionConstants Custom :Unknow IsCustom: Boolean
4.1.2 地图坐标(Map Coordinate)
图层数据采用地图坐标系。遵循笛卡尔坐 标系原则。 不同于Visual Basic窗体的控件坐标系( 左上角永远是0,0)地图控件内显示的地 图坐标范围, 时常在应用期间改变。 每 次当你移动某一地图区时, Map控件内地 图坐标范围就会变化。
控件坐标与地图坐标间的区别:
4.
对象MapObjects2.Strings
4.2.1 球坐标系与平面坐标系
ArcGIS Engine二次开发文档

1.1简单的A rcGIS Engine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。
并介绍MapControl、ToolbarControl、TOCControl的应用,1.1.1创建一个新的工程首先打开Microsoft Visual Studio 2010,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。
图1新建项目对话框选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text 属性为“地图浏览”,图2窗体命名1.1.2添加控件及引用点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。
用同样的方法,再将LicenseControl添加到Form1中。
图 3 打开工具箱图4工具箱如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。
首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。
如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾)。
GIS二次开发

• TrackCancel: ITrackCancel
• 使用TrackCancel对象提供用户按下ESC戒空格键来中止绘制地图的 能力
• VisibleRegion: Igeometry
• 通过几何对象设定地图的可见范围,叧有落在该几何对象区域内的图 的局部才显示出来.
• Rotation: Double
• 确定地图被旋转的角度
• ShowMapTips:bool
• 设置地图提示是否显示,地图提示文档来自 IActiveView::TipText 属性
• ShowScrollbars:bool
• 确定是否显示地图控件的滚动轴
• SpatialReference: ISpatialReference
• 获取戒设置地图控件的鼠标指针样式
• Object: Object
• 在某些开发环境下,因为控件被包含在一个封装的对象中,因此丌 支持基于控件其它COM接口的的查询。 在这种情况下使用Object .
• ReferenceScale:Double
• 以分数表示的参考比例尺,是指向 IMap::ReferenceScale的快捷 方式,地图中的符号戒文本的尺寸不此关联。
• C#
• IGeometry geometry = point; // 这是一种隐式的数据转换 • IGeometry geometry = point as IGeometry; // 是作为一种操作。
接口转换Casting
• Casting in C#
在 C#, 实现接口强制转换的最好方式是使用”as” 操作符. 相对于 直接转换,使用“as”操作符是比较好的实现策略,因为在转换失败 后得到的是一个NULL值,而丌是产生一个异常。 比较以下代码:第一种方式使用的是直接转换,如果你已经确定某对 象实现了某两个接口,则可以使用这种方式,但是,假如对象并没有 实现你希望转换的接口,.NET会引发一个异常。 比较安全的方法是使用”AS“ 操作符,如果对象丌能返回对希望的 接口的一个引用则会返回一个NULL值,而丌是引发异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
世界的本质是物质,对于GIS来说,点就应该是矢量数 据的本质,点生线,线生面……,如此组合,构成了GIS 世界中的矢量空间。
构建Multipoint对象private object pMissing = Type.Missing; public IGeometry GetMultipointGeometry() { const double MultipointPointCount = 25; IPointCollection pPointCollection = new MultipointClass(); for (int i = 0; i < MultipointPointCount; i++) { pPointCollection.AddPoint(GetPoint(), ref pMissing, ref pMissing); } return pPointCollection as IGeometry; } private IPoint GetPoint() { const double Min = -10; const double Max = 10; Random pRandom = new Random(); double x = Min + (Max - Min) * pRandom.NextDouble(); double y = Min + (Max - Min) * pRandom.NextDouble(); return ConstructPoint(x, y); }
本章内容
• 6.1 Geometry模型 • 6.2 Point和MultiPoint对象 • 6.3 Segment,Path,Ring和Polyline对象 • 6.4 Polyline对象和曲线Curve • 6.5 Geometry集合接口 • 6.6 动态跟踪 • 6.7 空间参考 • 6.8 程序开发实例
IGeometry.SpatialReference用于返回该几何对象的空间参考信息。 IGeometry.Project方法用于对该几何对象做参考系的转换。
包络线Envelope
• 包络线Envelope是一个矩形区域 • 它是作为任何一个几何形体的最小边框
区域而存在的 • 每一个Geometry对象都拥有一个
第三节 Segment,Path, Ring和Polyline对象
Segment几何对象
Segment对象是一个有起点和终点的“线“,也就是说Segement只有两 个点,至于两点之间的线是直的,还是曲的,需要其余的参数定义。所以 Segment是由起点,终点和参数三个方面决定的。Segment有4个子类, 它的4个子类(直线,圆弧,椭圆弧,贝赛尔曲线)如下图:
第一节 Geometry模型
• Geometry是ArcObjects中使用最广泛的对象 集之一
– 新建、删除、编辑和进行地理分析 – 空间选择、要素着色制作专题图、标注编辑
• Geometry模型中,几何形体对象被分为两个 层次
– 高级几何对象 – 构件几何对象
而在ArcGIS Engine中和这个模型对应的对象如下:
Path几何对象
Path是连续的Segment的集合,除了路径的第一个Segment和最后一个 Segment外其余的Segment的起始点都是前一个Segment的终止点,即 Path对象的中的Segment不能出现分离,Path可以是任意数的Segment 子类的组合。
第二节 Point和MultiPoint 对象
创建一个点的代码: IPoint pPoint = new PointClass(); pPoint.PutCoords(x, y);
MultiPoint对象是一系列无序的点的群集,这些点具有相同的属性信息。 例如可以用一个点集来表示整个城市天然气调压站。如下图所示:一个 Multipoint对象由8个Point对象组成。
Envelope对象,即使是Envelope本身 • 它也常常作为地图的视图或地理数据库
的范围和用户交互操作的结果而返回
IEnvelope接口
• 属性
– 空间坐标XMax XMin YMax YMin Height Width – 四个角点的坐标:UpperLeft UpperRight
LowerLeft LowerRight
在这上面的模型图中,位于最上面的Geomtry是一个抽象的对象,因 而在使用它的时候需要由其子类完成实例,在ArcGIS Engine中 Geometry类实现IGometry接口,而IGeometry接口定义了所有几何 对象通用的属性和方法,如投影,获取空间参考等,IGeometry接口 的方法和属性如下:
• 方法
– PutCoords:构造包络线的方法 – QueryCoords:查询包络线的 – Expand:按比例缩放包络线的范围 – offset:偏移包络线本身 – CenterAt:改变包络线的中心点 – Intersect:两个包络线相交的方法 – Union:两个包络线对象的并集
第二节 Point和MultiPoint 对象
其中IGeometry.Dimቤተ መጻሕፍቲ ባይዱnsion属性获取几何对象的拓扑唯度,如返回0 就表示该几何对象为点对象或者多点多线,1表示该对象为多线,具体 的可参看下图:
IGeometry.Envelope返回一个IEnvelope对象, Envelope是所有几何 对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象都 有一个Envelope对象,IEnvelope是Envelope对象的主要接口,通过 它可以获取几何对象的XMax,XMin,YMax,YMin,Height, Width属性,下图为不同几何对象的Envelope: