-
ArcGIS Engine
的三维开发
第八章
ArcGIS
Engine
的三维开发
8.1
ArcGIS
三维分析及其控件简介
8.1.1
ArcGIS
三维分析简介
ArcG
IS
三维分析提供了对表面数据有效的可视化和分析。
使用三<
/p>
维分析,
可以从多个角度来浏览表面数据,
查询表面,从表面上一选
定的位置来确定什么对象可见,
以及
通过叠加栅格和矢量数据来创建
一幅逼真的透视图。
三维分析
(
3D
Analyst
)
添加了两个专用的三维可视化应用程序:
ArcScene
和
ArcGlobe
,它们扩展了
ArcGIS
Desk
top
的功能,并且扩展
了
ArcCa
talog
和
ArcMap
的三维功能
。
ArcScene
允许用户制作具
有透视效果的场景,
在这个场景中可以
对地理信息系统数据进行
浏览和交互。
用户可以在表面上叠加栅格和
矢量数据,
并从矢量数据源创建线、
面和体。
用户也可以使
用
ArcScene
中的三维分析工具创建和分析表面。
ArcGlobe
提供在标准计算机硬件上
对巨型三维栅格、
地形和矢量
数据集进行实时漫游和缩放,
p>
在此过程中基本不会感觉到速度上的问
题。这主要是依靠一种新引入
的索引和快速检索数据的方法实现的。
利用三维分析扩展
p>
ArcCatalog
,
从而实现对三维数
据的管理并且
创建具有三维视觉属性的图层。用户可以在
Arc
Catalog
中使用与
ArcScene
中相同的浏览工具预览三维场景和数据。
利用三维分析扩
展
ArcMap
,从而可以由
GIS<
/p>
数据生成新的表面,
以及分析表面、
查询
表面某一位置的属性值和分析表面不同位置的可
见性。
用户还可
以计算表面面积和表面之上或者表面之下的体积,
并
沿表面上的
三维线生成剖面。
1
ArcGIS
Engine
的三维开发
8.2
ArcGIS
三维显示简介
ArcGIS Desktop
中,可用于三维场景展示的程序
为
ArcGlobe
和
ArcScen
e
,
由于两者的差别,
在三维场景展示
中适用的情况有所不同。
由于
Engine
与
Desktop
底层技术都是基于
AO
的,因此该比较结果在功
能性和整体效率方面同样适用与
GlobeControl
和
Scen
eControl
。
ArcScene
简介:
ArcScene
是一个适合于展示三维透视场景的平台,
可以在三维场
景中漫游并与三维矢量与栅格数据进行交互。
ArcScene
是基于
OpenGL
的,支持
TIN
数据显示。显示场景时,
< br>ArcScene
会将所有数据加载到
场景中,
矢量数据以矢量形式显示,
栅格数据默认会降低分辨率来显
示以提高效率。
图
1
ArcScene
界面
ArcGlobe
简介:
ArcGlobe
是
ArcGIS9.0
之后出现的新产品,设计用于展示大数据
量的场景,
支持对栅格和矢量数据无缝的显示。
ArcGlobe
基于
全球视
2
ArcGIS
Engine
的三维开发
野,所有数据均投影到全球立方投影
(World Cube
Projection)
下,
并对数据进行分级分块显示。
p>
为提高显示效率,
ArcGlobe
按需将
数据
缓存到本地,矢量数据可以进行栅格化。
图
2
ArcGlobe
界面
ArcGlo
be
和
ArcScene
的主要区别:
(
1
)投影
坐标系统的不同:
ArcGlobe
将所有数据投影到球体表面上,
使场景显示更接近现实
世界。适
合于全市,全省,全国甚至全球大范围内的数据展示。
Arc
Scene
将所有数据投影到当前场景所定义的空间参考中,
默
认
情况下,场景的空间参考由所加入的第一个图层空间参考决定。
ArcScene
中场景表现为平面投影,适合于小范围内精细场景刻画。
(
2
)缓存与内存管理
机制的不同:
ArcGlobe
和<
/p>
ArcScene
最重要的区别在于此。
ArcGlobe
设计用于海
量数据展示,所以为提高显示效率
而进行数据缓存是很必要的。
3
ArcGIS
Engine
的三维开发
ArcGl
obe
将数据分块并按级别建立缓存和索引,才使得即使在
Ar
cGlobe
中显示海量数据仍可以高速的展示与漫游。
p>
ArcScene
会将所有数据读入场景中完全显示,
因此会占用大量显
存,
物理内存和虚拟内存,
这也是
ArcScene
适于小数据量小场景
精细
展示的原因之一。
(
3
)分析功能的不同:
ArcGlobe
可以极好的展示大数据的场景,同时提供高速的漫游。
但
ArcScene
对传统的三维分析功能支持的更好
。例如
Desktop
中
3D
Analyst
工具条在
ArcScene<
/p>
中被很好的支持,并支持
Tin
模型的显
示。
ArcGlobe
不支持
Tin<
/p>
的显示,但支持其作为高程数据加入场景。
ArcGlobe
p>
支持
Terrain
数据集但
ArcScene
不支持。
(
4
)显示差别
< br>ArcGlobe
中用户可以选择是否将矢量数据栅格化后显示,
该功能
对注记数据的显示也有很大帮助。
用户可以选择
将注记
(Annotation)
附着显示于地球表面或像广告
牌一样面向当前用户。
ArcScene
中不支
持注记
(Annotation)
数据的显示。
在
ArcGlobe
中矢量数据栅格化后可<
/p>
以大幅提高显示效率,我们在
ArcGlobe
场景建设中采取“能够栅格
化的矢量数据尽量栅格化”的策略也来自于此。
p>
1.
ArcGIS
三维系统的设计
p>
该系统分为四个模块,
分别是文件的操作、场景的浏览、点查询
p>
和矢量文件生成
TIN
。下面分别对这四个
模块做详细介绍,其参考代
码请参阅“例子程序”中的
Chap
ter8
。
2.1
文件操作
该模块包括打开工程文件(
打开
sxd
文件)、打开栅格文件(打
开
Raster
文件)和保存图片文件。所用到的控件有:
p>
SceneControl
4
ArcGIS
Engine
的三维开发
控件(用于
显示打开的工程文件和栅格文件)、
Button
控件、
OpenFileDialog
控件、
Sav
eFileDialog
控件、
TabControl
控件(页面
布局控件)、
TOCControl
控件(用于显示图层)。其布局如下:
图
3
文件操作的界面布局(红线内的)
表
1
控件的名称和类型对照表
控件类型
SceneControl
TOCControl
Button
Button
Button
Text
属性
无
无
p>
打开
sxd
文件
控件名称
mSceneControl
mTOCControl
OpenSxdFile
备注
显示数据
显示图层
打开工程的文件
打开栅格的文件
抓图
分为两个页面,“基
本操作”和“图层”
打开
Raster
文件
OpenRasterFile
保存图片文件
SaveImage
tabControl1
TabControl
两个页面分别为
“基本操作”和
“图层”
除了上述表所列出的属性需要设置,另外还要将
TOCControl
的
5
ArcGIS
Engine
的三维开发
Buddy
属性设置为
mSceneControl,
其方法如下:
(
1
)
p>
选中
TOCControl
控件,右击弹出
菜单并选择“属性”。
(
2
)
p>
弹出对话框,选择
General
页面,并
找到
Buddy
复选框,选
择
mSceneControl
,如下图。
图
4
设置
TOCControl
控件的
Budd
y
属性
将控件的属性设置完毕之后,
为三个
Button
控件添加
Click
事件,
并添加以下处理代码:
OpenSxdFile
按钮控件的
Click
事件代码:
/*********************************************** *************************/
/*
打开
sxd
文件
按钮按下事件<
/p>
*/
/*******************
**************************************************
***/
//
打开
sxd
工程文件
private
void
OpenSxdFile_
Click
(
object
sender
,
EventArgs
e
)
{
//
文件过滤
mOpenFileDialog<
/p>
.
Filter
=
< br>
文件
|*.sxd
;
//
打开文件对话框打开事件
if
(<
/p>
mOpenFileDialog
.
Sh
owDialog
() ==
DialogResult
p>
.
OK
)
{
//
< br>从打开对话框中得到打开文件的全路径
,
并将该路径传入
到
mSceneControl
中
mSceneContro
l
.
LoadSxFile
(
mOpenFileDialog
.
FileN
ame
);
6
ArcGIS
Engine
的三维开发
}
}
OpenRasterFile
按钮控件的
Click
事件代码:
< br>
/**********
**************************************************
************/
/*
打开
Raster
文件
按钮按下事件
*/
/****************
**************************************************
******/
//
向工程中添加栅格数据
private
void
OpenRasterFi
le_Click
(
object
sender
,
EventArgs
e
)
{
string
sFileName
=
null
;
//
新建栅格图层
IRasterLayer
pRasterLayer
=
null
;
pRasterLayer
=
new
RasterLayerClass
();
//
取消文件过滤
mOpenFileDialog<
/p>
.
Filter
=
< br>
所有文件
|*.*
;
//
打开文件对话框打开事件
if
(<
/p>
mOpenFileDialog
.
Sh
owDialog
() ==
DialogResult
p>
.
OK
)
{
//
< br>从打开对话框中得到打开文件的全路径
sFileName
=
mOpen
FileDialog
.
FileName
;
//
创建栅格图层
pRasterLayer
.
CreateFromFilePath
(
sFileName
);
//
将图层加入到控件中
mSceneContro
l
.
Scene
.
AddLayer
(
pRasterLayer
,
true
);
//
将当前视点跳转到栅格图层
ICamera
pCamera
=
mSceneC
ontrol
.
Scene
.
SceneGraph
.
ActiveView
er
.
Camera
;
//
得到范围
IEnvelope
pEenvelop
=
pRast
erLayer
.
VisibleExtent
;
//
添加
z
轴上的范围
pEenvelop
.
ZMin
=
m
SceneControl
.
Scene
.
Extent
.
ZMin
;
pEe
nvelop
.
ZMax
=
mSceneControl
.
Scene<
/p>
.
Extent
.
ZMax
;
//
设置相机
pCamera
.
SetDefaultsMBB
(
pEenvelop
);
mSceneControl
.
Ref
resh
();
}
}
SaveImage
按
钮控件的
Click
事件代码:
7
ArcGIS
Engine
的三维开发
/**************************************
**********************************/
/*
保存图片文件
p>
按钮按下事件
*/
/****************
**************************************************
******/
//
抓图,将场景保存成图片文件
private
void
SaveImage_Cl
ick
(
object
sender
,
EventArgs
e
)
{
string
sFileName
=
;
//
保存对话框的标题
mSaveFileDialog<
/p>
.
Title
=
保存图片
;
//
保存对话框过滤器
mSaveFileDialog<
/p>
.
Filter
=
< br>
图片
|*.bmp|JPG
图片
|*.jpg
;
//
图片的高度和宽度
int
Width
=
mSceneCon
trol
.
Width
;
int
Height
=
mSceneCo
ntrol
.
Height
;
if
( <
/p>
mSaveFileDialog
.
Sh
owDialog
() ==
DialogResult
p>
.
OK
)
{
sFileName
=
mSave
FileDialog
.
FileName
;
if
(
mSaveFileDialog
.
FilterIndex
== 1)
//
保存成
BMP
格式的文件
{
mSceneControl
.
Sce
neViewer
.
GetSnapshot
< br>(
Width
,
Height
,
esri3DOutputImageType
.
BMP
,
sFileName
);
}
else
//
保存成
JPG
格式的文
件
{
mSceneCo
ntrol
.
SceneViewer
.
GetSnapshot
(
Widt
h
,
Height
,
esri
3DOutputImageType
.
JPEG
,
sFileName
);
}
MessageBox
.
Show
p>
(
保存图片成功!
);
mSceneControl
.
Refresh
();
}
}
2.2
场景浏览
有两种方法定制场景的浏览
,第一种方法是利用
arcgis
的向导,
定制常用的浏览方法,如漫游、放大、缩小等等,该方法简单,并且
不需要编写代码
,第二种方法是通过添加代码的方法更改场景的
CurrentTool
属性,从而实现场景浏览的功能,下面对以上两种方法
一一介绍:
8
ArcGIS
Engine
的三维开发
第一种方法
:
第一步:添加
ToolbarControl
控件,该控件位于“工具箱”中的
“
ArcGIS Windows Forms
”选项中,把它的名字设置
为
”<
/p>
mToolbarControl
”
,<
/p>
将
“
Dock
”
属性设置为
“
Top
< br>”
,
并将其
Buddy
属性设置为
mSceneControl,
设置
方法与
mTOCControl
控件相同。
第二步:进入“
mToolbarControl
”属性对话框中的“
items
”页
面,
并单击
“
Add<
/p>
…
”
按钮。
弹出
Control
Commands
对
话框,
在
Control
Comma
nds
对话框中选中“
Category
”列表框中的“
Scene
”选项,在
“
Commands
”列表中就会出现与“
< br>Scene
”关联的命令,双击命令就
可以将该命令加入
到“
mToolbarControl
”工具条中,如下图:<
/p>
图
5
p>
mToolbarControl
属性对话框
9
-
-
-
-
-
-
-
-
-
上一篇:七年级英语试题【含解析】
下一篇:Sandy3D 官方教程中文翻译