zoukankan      html  css  js  c++  java
  • ArcEngine 9.3 学习笔记(一):几何对象与空间参考(Point、MultiPoint、Path、Ring、PolylinePolygon的创建)

      断断续续地把《ArcObjects GIS应用开发-基于C#》看完了,几百页,还是晚上看的,也就有个概念,这几天找了本 《TM_A_090420_ArcGIS Engines9.3 基础开发教程》,感觉内容偏向实战,在看的过程中为了集中注意力,一边看,一边敲,等看完了,发现抄了几千行的内容。于是乎想放上来留个纪念;这本书应该是某个ESIR的员工很早前写的,也能在网上搜到不少转载的文章。这里就再引用下吧。

    第一章 创建第一个ArcGIS Engine桌面应用程序

      ::: 这章主要是一个列子,用来让大家熟悉下AE的开发方式,演示了几个工具条的使用,使用的也是AE提供的封装好的控件,这里就略过了。主要应用的控件有:ToolBarControl、TocControl、LicenseControl、MapControl。

    第二章 几何对象与空间参考

    目标:

    1. 熟悉ArcGIS Engine Geometry模型,通过程序构建常用几何对象。

    2. 熟悉空间参考。

    3. 通过野外测量点构建一个polygon几何要素功能开发。

    2.3 Geomerty 主要几何对象模型图

                      我觉得这个图,把AE中所有几何对象的关系够反映出来,就接上来了。

      Geometry是ArcGIS Engine中使用最为广泛的对象之一,用户在创建、删除、编辑和进行地理分析的时候,就是处理一个包含几何形体的矢量对象;除了显示要素以外,控件对象选择,要素符号化,标注要素,编辑要素都需要Geometry参与。

    2.4 几何对象

    2.4.1 Point和MultiPoint几何对象

    2.4.1.1 Point几何对象

      Point:是一个0维的几何图形,具有X,Y坐标值,以及一些可选的属性:如高程值(Z值),度量值(M值)和ID号,点对象用于描述精确定位的对象,例如一个电话亭在一个城市的精确位置以下代码演示如何创建一个Point对象。

      IPoint pPoint = new PointClass();

      pPoint.X=100;

      pPoint.Y=100;

    2.4.1.2 MultiPoint 几何对象

      MultiPoint:点集对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用一个点集来表示整个城市天然气调压站。

      以下代码用于创建一个点集(就是创建一个点的集合,然后转换为点集对象):

     1      /// <summary>
     2         /// 创建点集
     3         /// </summary>
     4         /// <returns></returns>
     5         public Multipoint CreateMultipoint()
     6         {
     7             // 定义第一个点
     8             IPoint pPoint1 = new PointClass();
     9             pPoint1.X = 100;
    10             pPoint1.Y = 100;
    11 
    12             // 定义第二个点
    13             IPoint pPoint2 = new PointClass();
    14             pPoint2.X = 200;
    15             pPoint2.Y = 200;
    16             // .....继续构建其他点
    17 
    18             IPointCollection pMultIPoint = new MultipointClass();
    19             object o = Type.Missing;
    20             // 添加第一个点,不需要设置点的顺序,参数设置为Type.Missing
    21             pMultIPoint.AddPoint(pPoint1, ref o, ref o);
    22             // 添加第二个点,不需要设置点的顺序,参数设置为Type.Missing
    23             pMultIPoint.AddPoint(pPoint2, ref o, ref o);
    24 
    25             return (Multipoint)pMultIPoint;
    26         }

    2.4.2 Segment几何对象

      Segment :有起点、终点和参数定义三个方面定义。它的子类包括:Line(二维线段) ,CircularArc(圆弧),EllipticArc(椭圆弧),BezierCurve(贝塞尔曲线)。

    2.4.3 Path和Ring几何对象

    2.4.3.1 Path几何对象

    Path 是连续的Segment集合,除了路径的第一个segment和最后一个Segment外,其余的segment的起始点都是前一个segment的终止点,Path对象中的Segment不能出现分离,Path可以是任意个数,任意类型的Segment子类对象的组合。用于构建path的对象可以是任何属于segment的对象,比如Line,Circularc,Ellipticarc和BezierCurve。

    2.4.3.2 Ring几何对象

     Ring 是一个封闭的Path ,即起始点和终止点有相同的坐标值;它有内部和外部的属性;一个或多个Ring对象组成一个Polygon对象。

    2.4.4 Polyline和Polygon几何对象

    2.4.4.1 Polyline几何对象

       Ployline:是由一个或多个相连或者不相连的path对象的有序几何,1.它可以是单个Path对象组成,2.也可以是多个相连的Path对象组成,3.或者是多个分离的Path组成.

      Polyline通常用来代表线状地物如道路、河流、管线等等。

       一个Polyline对象必须满足以下准则:
             1、组成Polyline对象的所有Path对象必须是有效的;
             2、组成Polyline对象的所有Path对象不能重合,相交或者自相交;
             3、组成Polyline对象的多个Path对象可以连接于某一点,也可以分离;
             4、Path对象的长度不能为0.


      IPolyline是Polyline类的主要接口,IPolyline的reshape方法可以使用一个Path对象为一个Polyline对象整形;
      IPolyline的SimplifyNetWork方法用于简化网络;
      Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建.

      IPolyline 是Polyline类的主要接口,IPolyline的Reshape方法,可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需要注意以下情况:

      1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。

      2.由于Polyline是Path对象的有序集合,所有添加Path对象时必须注意顺序和方向。

      3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator接口的Simplify方法。

      以下代码片段为使用IGeometryCollection接口创建一个Polyline对象:

     1      /// <summary>
     2         /// 创建IPolyline对象:
     3         /// a. 创建Line对象(也可是其他Segment对象),
     4         /// b. QI到Segment对象
     5         /// c. 创建Path对象,通过Path的addSegment,将最初的Line添加进Path中
     6         /// d. 创建GeometryCollection对象,通过AddGeometry,将path添加进GeometryCollection中
     7         /// e. 将GeometryCollection QI到 IPolyline
     8         /// </summary>
     9         /// <returns></returns>
    10         public IPolyline CreatePolyline()
    11         {
    12             // 定义第一个点
    13             IPoint pPoint1 = new PointClass();
    14             pPoint1.X = 100;
    15             pPoint1.Y = 100;
    16             // 定义第二个点
    17             IPoint pPoint2 = new PointClass();
    18             pPoint2.X = 200;
    19             pPoint2.Y = 200;
    20             // 创建一个Line对象
    21             ILine pLine = new LineClass();
    22             // 设置LIne对象的起始终止点
    23             pLine.PutCoords(pPoint1, pPoint2);
    24             // QI到ISegment
    25             ISegment pSegment = pLine as ISegment;
    26             // 创建一个Path对象
    27             ISegmentCollection pPath = new PathClass();
    28             object o = Type.Missing;
    29             // 通过Isegmentcoletcion接口为Path对象添加Segment对象
    30             pPath.AddSegment(pSegment, ref o, ref o);
    31 
    32             // 创建一个Polyline对象
    33             IGeometryCollection pPolyline = new PolylineClass();
    34             pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o);
    35 
    36             IPolyline pPLine = pPolyline as IPolyline;
    37             return pPLine;
    38         }

    2.4.4.2 Polygon几何对象

      Polygon对象是由一个或多个ring对象的有序集合,它可以是由单个Ring对象构成,也可以使用多个Ring组成。其中Ring可以分为OuterRing(外环)和InnerRIng(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。

      Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。

     1         /// <summary>
     2         /// 构建一个Polygon对象:
     3         /// a. 创建一个或多个Ring对象
     4         /// b. 将Ring对象添加进IGeometryCollection集合中
     5         /// c. 将IGeometryCollection集合QI 到 IPolygon对象
     6         /// </summary>
     7         /// <returns></returns>
     8         public IPolygon CreatePolygon()
     9         {
    10             //创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象,进而QI回Ring
    11             IRing pRing = CreateRing();
    12 
    13             // 使用Ring对象构建Polygon对象
    14             IGeometryCollection pGeometryColl = new PolygonClass();
    15             object o = Type.Missing;
    16             pGeometryColl.AddGeometry(pRing, ref o, ref o);
    17 
    18             IPolygon pPolygon = pGeometryColl as IPolygon;
    19             return pPolygon;
    20         }

    先在这里打个断点吧,排版真麻烦,之前文本都写成注释了...

    ArcObjects GIS应用开发-基于C#

  • 相关阅读:
    jquery 读取file 图片文件的宽高
    log4net配置要点
    js 公用插件,教科书级的写法
    mvc4 发布,遇到 403.14 问题,并且iis提示打开目录浏览。。。解决办法
    js 处理 html 标签转义 处理json中含有的ascii 编码
    sqlserver ,left join 不仅可以join表,还可以是一个结果集
    .net MVC3 页面和 action 传值问题
    java web工程 数据库操作报驱动类找不到的错误
    MySQL快速构造百万数据
    python之eval函数的应用实例
  • 原文地址:https://www.cnblogs.com/cloud915/p/ArcEngine_Develop.html
Copyright © 2011-2022 走看看