牟乃夏ArcEngine教程-第11章 三维分析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建一个TriangleFan样式的棱锥 创建Triangles样式的多个三角片 创建一个Ring样式的迷宫 创建四个Ring样式的正方形环 拉伸一个正方形为棱柱 创建一个综合的房子样式
详细代码见程序
2. MultiPatch
• MultiPatch编辑 • MultiPatch有多种编辑操作,常用的主要有移动、旋转和缩放等。 MultiPatch的编辑需要用到ITransform3D接口,通过该接口的 Move3D、RotateVector3D和Scale3D等方法实现。实现思路如下:
2. MultiPatch
实例按钮功能介绍 按钮名称 创建axes 按钮功能 创建一个带有箭头的三维坐标轴
创建TriangleStrip
创建TriangleFan 创建Triangles 创建Ring 创建RingGroup Extrusion Composite
创建一个TriangleStrip样式的阶梯
1. 三维数据模型
• 三维数据(X,Y,Z)的定义中包含一个额外的维度:Z值。Z值具有 测量单位,同传统的二维数据(X,Y)相比,它能存储和显示更多 的信息。Z值可表示很多内容,如:海拔高度、深度、温度、化 学物浓度、噪声指数等。Z值是二维数据成为三维数据的标志。 • ArcGIS中三维数据有3D要素数据和表面数据两种形式。
• 在ArcGIS中,不能通过ArcGIS Desktop产品来创建MultiPatch,只能通过以 下几种方法创建: • 1)通过某些地理处理(Geoprocessing)工具创建,例如Extrude Between、 Layer 3D to Feature Class等。 • 2)通过从已有的模型中导入ArcGIS创建,例如SketchUp、COLLADA、3D Studio Max或OpenFlight等。 • 3)通过在ArcGIS Engine中编写代码创建。
• 3D要素数据
• 3D要素数据用来表示离散的对象,每个对象的信息都存储在要素的几何和属性中。 • 3D要素数据又分为三维点数据、三维线数据和多面体(MultiPatch)数据。 • 多面体数据根据组成方式的不同又分为Triangle Strip、Triangle Fan和Ring三种类 数据是指具有空间连续特征的地理要素的集合,表示地球表 面某部分或整体范围内的地理要素或现象。在ArcGIS中,常用的 表面数据有
• 栅格表面 • 不规则三角网(TIN) • Terrain数据集等。
2. MultiPatch
• MultiPatch几何类型又叫多面体数据类型,是ESRI公司于1997年推 出的一种数据模型,主要用来定义3D对象的描述性外壳。 MultiPatch通过地理数据库和ShapeFile文件来存储3D要素,如建 筑物、地质体等。 • MultiPatch创建
3. TIN数据
• TIN表面分析 • 基于TIN表面可以做各种表面分析,如计算TIN的体积、表面积和投影 面积,获取TIN表面某点的三维坐标、坡度、坡向、等高线和最陡路径, 也可以生成TIN图层表面坡度和坡向图层,绘制TIN表面的剖面线。 • 计算TIN的体积、表面积和投影面积 • 计算TIN的体积、表面积和投影面积,需要用到ISurface接口,通过 ISurface接口的GetVolume方法、GetSurfaceArea方法和GetProjectedAre 方法获得相应结果。实现思路如下:
2. MultiPatch
• 左图显示的是两个多面体要素 差异后的结果,在进行多面体 差异、相交和联合之前,要设 置输出结果的保存路径。
3. TIN数据
• TIN是表示三维表面非常有效的工具,常用于表示地球自然表面、 各类现象的趋势面等。由于TIN能较好地表示地理现象的三维可视 化,所以在GIS的三维地形可视化领域中有着广泛的应用。 • 加载TIN数据
• (1)得到某一图层的某个3D要素,并通过要素的Shape属性得到要素的几 何形状; • (2)将该几何对象转换为ITransform3D类型对象; • (3)运用ITransform3D中的方法对得到的对象进行相应的编辑; • (4)开始编辑,将要素的Shape设置为编辑后的几何要素; • (5)保存、停止编辑。
2. MultiPatch
• MultiPatch之间的差异、相交、联合
• 多面体的差异计算是求出两个闭合多面体要素的几何交集,然后从一个 要素中剪除两要素类的交集,并将结果保存到新输出的要素类中。 • 多面体相交是计算两个或多个多面体要素的几何交集,将重叠的要素输 出为新要素。 实现思路如下: • 多面体联合是计算重叠多面体的几何交集,然后将多面体几何联合在一 (1)根据需要,选择GP工具,这里调用Analyst3DTools类库中 起,存储到新的多面体要素类中。 的Difference3D、Intersect3D和Union3D三个工具; (2)为每个工具设置输入参数和输出参数; • 在ArcGIS Engine中,进行多面体之间的差异、相交、联合等三维要素分析 (3) 执行GP工具,显示所有结果。 需要通过调用Analyst3DTools 类库中的 GP(Geoprocessing,地理处理工具) 工具实现,只需要设置相应工具的输入参数即可。
• TIN数据集的加载需要用到ITINWorkspaceFactory接口、ITINWorkspace接口、 ITIN接口和ITINLayer接口。实现思路如下: • (1)获取TIN数据的文件路径; • (2)使用IWorkspaceFactory的Creat方法实例化一个 TinWorkspaceFactoryClass对象、使用ITinWorkspace、ITin、ITINLayer等接 口将TIN中的数据提取,并转化为一个图层(Layer); • (3)将图层(Layer)添加进SceneControl,刷新SceneControl以显示该TIN。
牟乃夏 ArcGIS Engine 地理 信息系统开发教程 配套PPT--第11章 三维分析
目录
• 1. • 2. • 3. • 4. • 5. • 6. 三维数据模型 MultiPatch TIN数据 SceneControl三维可视化 GlobeControl三维可视化 实例:基于GlobeControl的三维数字校园
3. TIN数据
左图显示的是由离散点图层创建TIN的结果, 生成TIN前要先选择点图层和设置TIN的保 存路径;点数据创建TIN则是在代码中新建 三维点创建TIN。
3. TIN数据
• 由栅格数据创建TIN
• 由栅格数据创建TIN,需要用到 ITINEdit接口,通过该接口的 AddFromPixelBlock方法加载栅格单 元创建TIN,然后调用该接口的 SaveAs方法将创建的TIN数据保存。
• (1)从某一个图层中获得一个具有多面体结构的要素(Feature),通过要素的 Shape属性获得该多面体几何形状; • (2)通过QI(Query Interface)得到IArea3D接口的Area属性和IVolume接口的 Volume属性; • (3)将得到的结果显示。
2. MultiPatch
• (1)获得SceneControl中的某个TIN图层,并通过ISurface接口得到表面; • (2)设置基本高度和投影方向; • (3)获取结果显示。
3. TIN数据
TIN的体积、表面积和投影面积
3. TIN数据
• 获取TIN表面某点三维坐标、坡度和坡向 • 获得TIN表面某点的三维坐标信息、坡度信息和坡向信息,需要调 用ISurface接口,通过ISurface接口的GetElevation方法、 GetSlopeDegrees方法和GetAspectDegrees方法获取相应信息。实 现思路如下:
2. MultiPatch
• ArcGIS Engine提供了创建MultiPatch几何对象的类和接口,主要用到两 个接口,分别是IGeometryCollection和IConstructMultiPatch。 实现思路如下: • 这两个接口创建 MultiPatch的方式略有不同: (1)使用IPoint接口生成新的点对象,用IPointCollection接口的AddPoint方法将 点对象添加进集合,并用 IGeometryCollection接口的AddGeometry方法或 • IGeometryCollection 接口是通过添加各个组件的组成部分来创建 接口的ConstructExtrudeFromTo方法将PointCollection对 MultiPatchIconstructMultiPatch ; 象转换为一个Geometry对象; (2)使用IElement 接口实例化一个元素对象,并将该元素对象的 Geometry 属性设置对 • IConstructMultiPatch 接口是通过操作 Geometry对象,如拉伸 Polyline 为步骤 得到的Geometry 对象,并设置元素对象显示时使用的Symbol (符号);。 象(拉伸为墙 )和1Polygon 对象(拉伸为多面体)等来创建 MultiPatch (3)使用IGraphicsContainer3D的AddElement方法把步骤2产生的元素添加到视图中 去,刷新视图,让元素显示出来。 • 这两种方法的创建步骤相似,将要创建的 MultiPatch显示出来需要用到 IGeometryCollection、IGraphicsContainer3D、IPoint、IPointCollection、 IGeometry、IElement 等接口。
3. TIN数据
• 加载TIN数据
3. TIN数据
• TIN数据创建 • 在ArcGIS中,创建TIN的方式有三种,分别是:由矢量要素创建 TIN、由栅格要素创建TIN和由Terrain数据集创建TIN。 • 矢量数据创建TIN
• 由矢量数据创建TIN需要用到ITINEdit接口,在该接口中有两种方法来创建 TIN。一种是通过AddPointZ方法加载有限个三维点数据创建TIN,另一种 是通过AddFromFeatureClass方法加载矢量数据图层创建TIN,最后都调用 ITINEdit接口的SaveAs方法将创建的TIN数据保存。
• 判断MultiPatch相连与邻接 • 判断两个MultiPatch是否相连及在某个值范围是否邻接需用到 IRelationalOperator3D2接口,实现思路如下:
• (1)从某一图层或多个图层中获得两个多面体要素(Feature),通过要素 的Shape属性获得两个多面体的几何形状; • (2)通过IRelationalOperator3D2接口的Disjiont3D方法判断其是否相连,或 者通过输入一个距离容差判断是否邻接; • (3)显示结果。
2. MultiPatch
• 左图中展示的是将MultiPatch在X、Y、 Z方向以1:1:3的比例变换后的结果, 可以输入相应的参数进行MultiPatch 的平移、旋转和缩放操作。
2. MultiPatch
• MultiPatch分析 • MultiPatch的分析主要有:获取体积、表面积,判断两个MultiPatch之 间是否相连及在某一值范围内是否临近,MultiPatch之间的相交、差异、 联合等运算分析。 • 获取MultiPatch的体积和表面积 • 获取MultiPatch的表面积和体积需要用到IArea3D接口和IVolume接口, 实现思路如下:
• (1)获取某个TIN图层,并通过ISurface接口得到表面; • (2)点击TIN表面一点,通过ISurface接口的GetElevation方法、 GetSlopeDegrees方法和GetAspectDegrees方法获得该点信息; • (3)显示该点信息。
3. TIN数据
详细代码见程序
2. MultiPatch
• MultiPatch编辑 • MultiPatch有多种编辑操作,常用的主要有移动、旋转和缩放等。 MultiPatch的编辑需要用到ITransform3D接口,通过该接口的 Move3D、RotateVector3D和Scale3D等方法实现。实现思路如下:
2. MultiPatch
实例按钮功能介绍 按钮名称 创建axes 按钮功能 创建一个带有箭头的三维坐标轴
创建TriangleStrip
创建TriangleFan 创建Triangles 创建Ring 创建RingGroup Extrusion Composite
创建一个TriangleStrip样式的阶梯
1. 三维数据模型
• 三维数据(X,Y,Z)的定义中包含一个额外的维度:Z值。Z值具有 测量单位,同传统的二维数据(X,Y)相比,它能存储和显示更多 的信息。Z值可表示很多内容,如:海拔高度、深度、温度、化 学物浓度、噪声指数等。Z值是二维数据成为三维数据的标志。 • ArcGIS中三维数据有3D要素数据和表面数据两种形式。
• 在ArcGIS中,不能通过ArcGIS Desktop产品来创建MultiPatch,只能通过以 下几种方法创建: • 1)通过某些地理处理(Geoprocessing)工具创建,例如Extrude Between、 Layer 3D to Feature Class等。 • 2)通过从已有的模型中导入ArcGIS创建,例如SketchUp、COLLADA、3D Studio Max或OpenFlight等。 • 3)通过在ArcGIS Engine中编写代码创建。
• 3D要素数据
• 3D要素数据用来表示离散的对象,每个对象的信息都存储在要素的几何和属性中。 • 3D要素数据又分为三维点数据、三维线数据和多面体(MultiPatch)数据。 • 多面体数据根据组成方式的不同又分为Triangle Strip、Triangle Fan和Ring三种类 数据是指具有空间连续特征的地理要素的集合,表示地球表 面某部分或整体范围内的地理要素或现象。在ArcGIS中,常用的 表面数据有
• 栅格表面 • 不规则三角网(TIN) • Terrain数据集等。
2. MultiPatch
• MultiPatch几何类型又叫多面体数据类型,是ESRI公司于1997年推 出的一种数据模型,主要用来定义3D对象的描述性外壳。 MultiPatch通过地理数据库和ShapeFile文件来存储3D要素,如建 筑物、地质体等。 • MultiPatch创建
3. TIN数据
• TIN表面分析 • 基于TIN表面可以做各种表面分析,如计算TIN的体积、表面积和投影 面积,获取TIN表面某点的三维坐标、坡度、坡向、等高线和最陡路径, 也可以生成TIN图层表面坡度和坡向图层,绘制TIN表面的剖面线。 • 计算TIN的体积、表面积和投影面积 • 计算TIN的体积、表面积和投影面积,需要用到ISurface接口,通过 ISurface接口的GetVolume方法、GetSurfaceArea方法和GetProjectedAre 方法获得相应结果。实现思路如下:
2. MultiPatch
• 左图显示的是两个多面体要素 差异后的结果,在进行多面体 差异、相交和联合之前,要设 置输出结果的保存路径。
3. TIN数据
• TIN是表示三维表面非常有效的工具,常用于表示地球自然表面、 各类现象的趋势面等。由于TIN能较好地表示地理现象的三维可视 化,所以在GIS的三维地形可视化领域中有着广泛的应用。 • 加载TIN数据
• (1)得到某一图层的某个3D要素,并通过要素的Shape属性得到要素的几 何形状; • (2)将该几何对象转换为ITransform3D类型对象; • (3)运用ITransform3D中的方法对得到的对象进行相应的编辑; • (4)开始编辑,将要素的Shape设置为编辑后的几何要素; • (5)保存、停止编辑。
2. MultiPatch
• MultiPatch之间的差异、相交、联合
• 多面体的差异计算是求出两个闭合多面体要素的几何交集,然后从一个 要素中剪除两要素类的交集,并将结果保存到新输出的要素类中。 • 多面体相交是计算两个或多个多面体要素的几何交集,将重叠的要素输 出为新要素。 实现思路如下: • 多面体联合是计算重叠多面体的几何交集,然后将多面体几何联合在一 (1)根据需要,选择GP工具,这里调用Analyst3DTools类库中 起,存储到新的多面体要素类中。 的Difference3D、Intersect3D和Union3D三个工具; (2)为每个工具设置输入参数和输出参数; • 在ArcGIS Engine中,进行多面体之间的差异、相交、联合等三维要素分析 (3) 执行GP工具,显示所有结果。 需要通过调用Analyst3DTools 类库中的 GP(Geoprocessing,地理处理工具) 工具实现,只需要设置相应工具的输入参数即可。
• TIN数据集的加载需要用到ITINWorkspaceFactory接口、ITINWorkspace接口、 ITIN接口和ITINLayer接口。实现思路如下: • (1)获取TIN数据的文件路径; • (2)使用IWorkspaceFactory的Creat方法实例化一个 TinWorkspaceFactoryClass对象、使用ITinWorkspace、ITin、ITINLayer等接 口将TIN中的数据提取,并转化为一个图层(Layer); • (3)将图层(Layer)添加进SceneControl,刷新SceneControl以显示该TIN。
牟乃夏 ArcGIS Engine 地理 信息系统开发教程 配套PPT--第11章 三维分析
目录
• 1. • 2. • 3. • 4. • 5. • 6. 三维数据模型 MultiPatch TIN数据 SceneControl三维可视化 GlobeControl三维可视化 实例:基于GlobeControl的三维数字校园
3. TIN数据
左图显示的是由离散点图层创建TIN的结果, 生成TIN前要先选择点图层和设置TIN的保 存路径;点数据创建TIN则是在代码中新建 三维点创建TIN。
3. TIN数据
• 由栅格数据创建TIN
• 由栅格数据创建TIN,需要用到 ITINEdit接口,通过该接口的 AddFromPixelBlock方法加载栅格单 元创建TIN,然后调用该接口的 SaveAs方法将创建的TIN数据保存。
• (1)从某一个图层中获得一个具有多面体结构的要素(Feature),通过要素的 Shape属性获得该多面体几何形状; • (2)通过QI(Query Interface)得到IArea3D接口的Area属性和IVolume接口的 Volume属性; • (3)将得到的结果显示。
2. MultiPatch
• (1)获得SceneControl中的某个TIN图层,并通过ISurface接口得到表面; • (2)设置基本高度和投影方向; • (3)获取结果显示。
3. TIN数据
TIN的体积、表面积和投影面积
3. TIN数据
• 获取TIN表面某点三维坐标、坡度和坡向 • 获得TIN表面某点的三维坐标信息、坡度信息和坡向信息,需要调 用ISurface接口,通过ISurface接口的GetElevation方法、 GetSlopeDegrees方法和GetAspectDegrees方法获取相应信息。实 现思路如下:
2. MultiPatch
• ArcGIS Engine提供了创建MultiPatch几何对象的类和接口,主要用到两 个接口,分别是IGeometryCollection和IConstructMultiPatch。 实现思路如下: • 这两个接口创建 MultiPatch的方式略有不同: (1)使用IPoint接口生成新的点对象,用IPointCollection接口的AddPoint方法将 点对象添加进集合,并用 IGeometryCollection接口的AddGeometry方法或 • IGeometryCollection 接口是通过添加各个组件的组成部分来创建 接口的ConstructExtrudeFromTo方法将PointCollection对 MultiPatchIconstructMultiPatch ; 象转换为一个Geometry对象; (2)使用IElement 接口实例化一个元素对象,并将该元素对象的 Geometry 属性设置对 • IConstructMultiPatch 接口是通过操作 Geometry对象,如拉伸 Polyline 为步骤 得到的Geometry 对象,并设置元素对象显示时使用的Symbol (符号);。 象(拉伸为墙 )和1Polygon 对象(拉伸为多面体)等来创建 MultiPatch (3)使用IGraphicsContainer3D的AddElement方法把步骤2产生的元素添加到视图中 去,刷新视图,让元素显示出来。 • 这两种方法的创建步骤相似,将要创建的 MultiPatch显示出来需要用到 IGeometryCollection、IGraphicsContainer3D、IPoint、IPointCollection、 IGeometry、IElement 等接口。
3. TIN数据
• 加载TIN数据
3. TIN数据
• TIN数据创建 • 在ArcGIS中,创建TIN的方式有三种,分别是:由矢量要素创建 TIN、由栅格要素创建TIN和由Terrain数据集创建TIN。 • 矢量数据创建TIN
• 由矢量数据创建TIN需要用到ITINEdit接口,在该接口中有两种方法来创建 TIN。一种是通过AddPointZ方法加载有限个三维点数据创建TIN,另一种 是通过AddFromFeatureClass方法加载矢量数据图层创建TIN,最后都调用 ITINEdit接口的SaveAs方法将创建的TIN数据保存。
• 判断MultiPatch相连与邻接 • 判断两个MultiPatch是否相连及在某个值范围是否邻接需用到 IRelationalOperator3D2接口,实现思路如下:
• (1)从某一图层或多个图层中获得两个多面体要素(Feature),通过要素 的Shape属性获得两个多面体的几何形状; • (2)通过IRelationalOperator3D2接口的Disjiont3D方法判断其是否相连,或 者通过输入一个距离容差判断是否邻接; • (3)显示结果。
2. MultiPatch
• 左图中展示的是将MultiPatch在X、Y、 Z方向以1:1:3的比例变换后的结果, 可以输入相应的参数进行MultiPatch 的平移、旋转和缩放操作。
2. MultiPatch
• MultiPatch分析 • MultiPatch的分析主要有:获取体积、表面积,判断两个MultiPatch之 间是否相连及在某一值范围内是否临近,MultiPatch之间的相交、差异、 联合等运算分析。 • 获取MultiPatch的体积和表面积 • 获取MultiPatch的表面积和体积需要用到IArea3D接口和IVolume接口, 实现思路如下:
• (1)获取某个TIN图层,并通过ISurface接口得到表面; • (2)点击TIN表面一点,通过ISurface接口的GetElevation方法、 GetSlopeDegrees方法和GetAspectDegrees方法获得该点信息; • (3)显示该点信息。
3. TIN数据