倾斜摄影模型技术文档
SuperMap iObjects.NET
7C Sp2 技术文档 ——倾斜摄影
北京超图软件股份有限公司
中国·北京
目录
1. 概述 ............................................................................................................................... 3 2. 倾斜摄影建模技术 ......................................................................................................... 4
2.1 2.2 2.3
倾斜摄影建模 ............................................................................................................... 4 倾斜国内外关注度 ....................................................................................................... 7 倾斜摄影建模的优势 ................................................................................................... 7
3. 超图技术解决方案 ......................................................................................................... 9
3.1
模型加载 ....................................................................................................................... 9 3.1.1 3.1.2 3.1.3 3.2
OSGB文件 ....................................................................................................... 9 OSGB索引工具 ............................................................................................... 9 场景展示 ......................................................................................................... 12
组件功能 ..................................................................................................................... 15 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9
图查属性 ......................................................................................................... 15 属性查图 ......................................................................................................... 16 周边查询 ......................................................................................................... 17 专题图制作 ..................................................................................................... 18 压平功能 ......................................................................................................... 19 模型参与地表开挖 ......................................................................................... 21 地形修改 ......................................................................................................... 22 添加水面 ......................................................................................................... 24 2.5D地图数据生成 ....................................................................................... 24
1. 概述
随着测绘技术的不断发展,新的GIS基础数据生产方式不断涌现,三维模型的生产工艺也日新月异,倾斜模型就是一个很好的例子,为了降低人工成本,提高生产效率,城市级别的模型建设任务逐渐被倾斜摄影方式所代替,超图顺应时代的步伐,提供倾斜摄影模型的支撑平台SuperMap iObjects .NET 7C sp2,该版本及后续版本提供支持该模型。
通过本文的学习,您可以掌握以下内容: 1. 倾斜建模技术
1) 倾斜摄影建模 2) 国内外关注度 3) 倾斜摄影建模的优势 2. 超图技术解决方案
1) 倾斜模型数据加载 2) 倾斜模型功能说明
2. 倾斜摄影建模技术
倾斜摄影建模:多角度航拍带有倾斜角度的影像,通过专业的建模处理软件,全自动的生成模型的过程(仅需要倾斜影像)。
2.1 倾斜摄影建模
要了解倾斜摄影建模首先得了解倾斜摄影,倾斜摄影(oblique image)是指由一定倾斜角的航摄相机所获取的影像。倾斜摄影技术是国际测绘遥感领域近年发展起来的一项高新技术,通过在同一飞行平台上搭载多台传感器,同时从垂直、倾斜等不同角度采集影像,获取地面物体更为完整准确的信息。仅由倾斜模型生成三维模型的过程就是倾斜摄影建模,如图 1所示。
图 1
倾斜摄影有以下特点:
1)可以获取多个视点和视角的影像,从而得到更为详尽的侧面信息。 2)具有较高的分辨率和较大视场角。 3)同一地物具有多重分辨率的影像。 4)倾斜影像地物遮挡现象较突出。
倾斜摄影测量技术一般包含以下处理流程,如图 2所示:
图 2
倾斜摄影自动化生成的模型本质上是mesh模型,自动化软件一般经过几何校正、联合平差等处理流程,可运算生成基于真实影像的超高密度点云,并以此生成基于真实影像纹理的高分辨率实景三维模型。 点云效果图,如图 3所示:
图 3
点云构建TIN模型,如图 4、图 5所示:
图 4
图 5
纹理映射构建真实三维模型,如图 6所示:
图 6
2.2 倾斜国内外关注度
目前国内外比较流行的倾斜摄影自动建模软件如下:
1) 法国Acute3D公司的Smart3DCapture。基于图形运算单元GPU的快速三维场景运算软件,可运算
生成基于真实影像的超高密度点云,它能无需人工干预地从简单连续影像中生成逼真的三维场景模型。 国内使用该软件的公司单位(腾讯、广州红鹏、上海航遥、四维数创、河北测绘院、四川测绘院、湖南第二测绘院等)。
2) 法国INFOTERRA公司的像素工厂(Pixel Factory)StreetFactory子系统通过对获得的倾斜影像进行
几何处理、多视匹配、三角网构建,提取典型地物的纹理特征,并对该纹理进行可视化处理,最终得到三维模型。
3) 美国苹果公司收购C3公司所采用自动建模技术。
4) 美国Pictometry公司的Pictometry倾斜影像处理软件提供了EFS(Electronic Field Study)
5) 国内有多家企业及单位对倾斜模型也有比较深入的研究,形成自己独特的模型工艺流程。
2.3 倾斜摄影建模的优势
倾斜摄影获取多个视角影像,全方位获取地物信息,相比传统建模方式更为快捷获取建筑物的顶部及侧面纹理信息,通过专业的数据处理软件能够快速生成三维模型,还原真实世界。传统建模与倾斜摄影模型对比,如图 7所示:
图 7
图 8
3. 超图技术解决方案
根据倾斜模型的特点,超图三维结合自身的二维GIS优势,实现了倾斜摄影模型二三维一体化GIS解决方案。下面将从倾斜模型加载及实时渲染和倾斜模型的GIS基础功能两个方面具体的展示。
3.1 模型加载
SuperMap 7C sp2 .NET组件提供新的三维图层Layer3DOSGBFile,该图层可以加载osgb格式的倾斜模型,由于osgb文件较多,我们采用索引文件(*.scp)的方式加载。下面将详细的介绍模型的加载及倾斜模型在超图三维场景中的效果。
3.1.1 OSGB文件
倾斜摄影自动建模可以生成多种数据格式的模型,包括obj、osg(osgb)、dae等通用的兼容格式,超图支持OSGB格式的倾斜模型文件,它自带超过20级金字塔级别的模型精度等级,充分利用LOD结构,加载速度快,我们支持任意剖分格式的倾斜建模,包括四叉树、八叉树、任意。如图 9所示:
图 9
3.1.2 OSGB索引工具
为了更方便的加载osgb模型数据,我们提供了osgb索引文件生成器,通过简单的操作即可生成场景缓存加载的*.scp文件(如图 10)。双击OSGB索引文件生成器.exe工具,输入osgb文件夹路径,按下回车键即可生成*.scp文件(如图 11)。
图 10
图 11
该文件包含xml文件头、倾斜模型插入点位置、每个模型tile的根节点的相对路径。 手动修改插入点坐标(如图 12):
图 12
桌面加载倾斜模型数据(如图 13、图 14):
图
13
图 14
3.1.3 场景展示
直接加载OSGB原始文件,实时渲染帧率达60帧左右,数据承载力强、稳定性高。桌面、组件(iObject)及客户端(iclient)都完美支持倾斜摄影模型数据(如图 15、图 16、图 17、图 18)。目前测试最大面积400平方公里倾斜模型数据,数据量300GB,理论上还可以支持更大的倾斜摄影模型数据。 桌面及组件效果:
图
15
图 16
图 17
客户端效果:
图 18
3.2 组件功能
倾斜摄影模型GIS基础功能分为以下部分: 1. 二三维一体化GIS功能
结合二维GIS优势,我们采用叠加二维矢量面的方式来解决倾斜模型一些基本GIS功能:图查属性、属性查图、周边查询、专题图制作等。矢量面的高度模式采用新版本提供的依对象(ClampToObject)高度模式。 2. 压平倾斜模型
为了满足规划等一些行业的应用,压平倾斜模型即可达到拆除建筑物的效果,再置换成用户的规划数据满足行业应用。 3. 倾斜模型参与地表开挖
实现地上地下GIS应用,倾斜摄影模型也参与地表开挖。
4. 地形修改
为了解决地形与模型的套合问题,sp2版本及后续版本提供并完善地形修改功能。地形修改高度模式为修改地形(ModifyTerrain)。 5. 添加水面
倾斜模型水面区域经常有破洞,超图三维水面符号可以补充,参数化的水面填充符号可以满足不同区域的水体效果。 6. 2.5D地图生成
下面将详细介绍每个功能使用方法。
3.2.1 图查属性
实现倾斜摄影模型的选中高亮并查询其属性(如图 19所示)。具体操作方法如下: 1)首先准备与倾斜模型底面匹配的矢量面文件并将其导入SuperMap的UDB文件。
2)把矢量面数据集添加到场景中,并设置其图层的选择集风格(Layer3D.Selection.Style)的高度模式为依对象(ClampToObject)。
图
19
关键代码
//设置矢量图层的选择集风格高度模式
m_Layer3DVector.Selection.Style.AltitudeMode = AltitudeMode.ClampToObject; 选中的其实是矢量图层(数据集、缓存两种),查询矢量图层属性代码如下: //查询叠加的矢量属性信息 数据集属性查询
DatasetVector ObjDV=selections[0].Layer. Dataset as DatasetVector; FieldInfos fieldInfos=ObjDV.FieldInfos;
Recordset recordset = ObjDV.GetRecprdset(false,CursorType.Dynamic); recordset.MoveTo(selections[0][0]-1); //遍历每个字段的值
for (int i = 0; i
recordset.GetFieldValue(i); }
矢量缓存属性查询
Layer3DVectorFile layer3DVectorFile= selections[0].Layer as Layer3DVectorFile; FieldInfos fieldInfos= layer3DVectorFile. GetFieldInfos(); //遍历每个字段的值
for (int i = 0; i
layer3DVectorFile.GetFieldValueOfSelectedObject(i) }
3.2.2 属性查图
实现属性查图,也必须有叠加的矢量面图层,并设置其图层的选择集风格为依对象,根据SQL查询条件语句(例如:name=”大剧院”),查询并返回对象SmID添加到选择集中,如图 20所示:
图
20
关键代码 //SQL查询
//设置矢量图层的选择集风格高度模式
m_Layer3DVector.Selection.Style.AltitudeMode = AltitudeMode.ClampToObject; m_sceneControl.Scene.Layers[“矢量数据集”]. Selection.Add(int id); m_sceneControl.Scene.Layers[“矢量数据集”]. Selection.UpdateData();
3.2.3 周边查询
倾斜摄影模型支持周边查询,通过叠加的矢量数据,实现buffer查询,并将查询结果id添加到场景中的矢量图层选择集中。注:目前只支持二维矢量面buffer查询,三维面转成二维面即可,如图 21所示:
关键代码
//设置矢量图层的选择集风格高度模式
m_Layer3DVector.Selection.Style.AltitudeMode = AltitudeMode.ClampToObject;
/// 选中一个对象,查询方圆200米所有对象。 ///
public void BufferQuery() {
//获取叠加矢量面的数据集。 DatasetVector m_srcDatasetVector;
//缓冲区面数据集 DatasetVector
//buffer查询参数设置
BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
bufferAnalystParam.EndType = BufferEndType.Round;
bufferDataset
=
m_workspace.Datasources[0].Datasets.Create(new
DatasetVectorInfo(bufferName, DatasetType.Region));
图 21
bufferAnalystParam.LeftDistance = 200; if (m_selectRegion == null) {
Int32 id = (m_sceneControl.Scene.FindSelection(true))[0][0];
m_selectRegion = m_srcDatasetVector.Query("SmID=" + id.ToString(), CursorType.Dynamic); }
//创建buffer(bufferDataset)
Boolean isTrue = SuperMap.Analyst.SpatialAnalyst.BufferAnalyst.CreateBuffer(m_selectRegion, bufferDataset, bufferAnalystParam, false, true);
//进行叠加分析 矢量数据集中与bufferDataset相交的面 QueryParameter para = new QueryParameter(); para.SpatialQueryMode = SpatialQueryMode.Intersect; para.SpatialQueryObject = bufferDataset;
Recordset recordset = m_srcDatasetVector.Query(para);
//将查询结果添加到场景矢量图层选择集中 while (!recordset.IsEOF) {
m_sceneControl.Scene.Layers[“矢量数据集”]. Selection.Add(recordset.GetID()); recordset.MoveNext(); }
m_sceneControl.Scene.Layers[“矢量数据集”]. Selection. UpdateData(); }
3.2.4 专题图制作
倾斜摄影模型支持各种类型专题图制作,标签专题图、单值专题图、分段专题图制作。通过矢量数据制作各种类型专题图,并设置其图层风格高度模式为依模型高度模式(如图 22所示)。
图
22
关键代码
设置专题图层高度模式为依对象。注意:是图层的高度模式,并非图层的选择集高度模式。 以分段专题图为例:
void MakeThemeRange3D(Dataset dataset, SceneControl m_sceneControl) {
Theme3DRange theme=new Theme3DRange(); //构造分段子项
Theme3DRangeItem item1=new Theme3DRangeItem(); item1.Start=double.MinValue; ……
item1.Style.AltitudeMode=AltitudeMode. ClampToObject; item1.IsModellingStyleEnabled=true; …..
Theme3DRangeItem item6=new Theme3DRangeItem(); item6.Start=120; ……
item6.Style.AltitudeMode=AltitudeMode. ClampToObject; item6.IsModellingStyleEnabled=true; //设置分段表达式
theme.RangeExpression=””; theme.AddToTail(item1); ……
theme.AddToTail(item6);
m_sceneControl.Scene.Layers.add(dataset,theme,true,”LayerThemeRange”); }
3.2.5 压平功能
为满足规划等行业应用提供OSGB模型的压平接口,新增Layer3DOSGBFile(基类Layer3D)该类型提供压平OSGB模型的接口,通过添加压平区域即可实现OSGB模型“修改”模型的功能,置换用户规划模型数据,满足行业应用,如图 23、图 24、图 25所示: 方法字段:
public int AddFlattenRegion(SuperMap.Data.Geometry geometry, string tag) 添加压平区域,压平区域内模型,返回区域索引号,tag不能为null。
public void ClearFlattenRegions() 清除所有压平区域,回复模型初始状态。
public SuperMap.Data.Geometry GetFlattenRegion(int index) 根据索引号返回压平区域对象
public string GetFlattenRegionTag(int index)根据索引号返回区域tag。 public int IndexOfFlattenRegion(string tag)根据tag返回区域索引号。 public bool RemoveFlattenRegion(int index)移除指点压平区域
public bool SetFlattenRegionTag(int index, string tag)设置压平区域tag。 public int FlattenRegionCount { get; } 获取压平区域的个数。
图 23
图
24
图 25
相关代码
参考Layer3DOSGBFile类
public int AddFlattenRegion(SuperMap.Data.Geometry geometry, string tag) 添加压平区域,压平区域内模型,返回区域索引号,tag不能为null。 置换模型添加到场景中:
m_sceneControl.Scene.Layers.add(dataset, Layer3DType.Dataset, Layer3DType.Dataset,false); m_sceneControl.Scene.Layers.add(“dataName”, Layer3DType.Dataset, Layer3DType.KML,false);
3.2.6 模型参与地表开挖
为了满足地上地下GIS功能应用(地下管网等),倾斜模型参与地表开挖(如图 26、图 27所示)。
图
26
图 27
相关代码
//设置场景地下可见
m_sceneControl.Scene.Underground.IsVisible = true; //添加开挖区域
m_sceneControl.Scene.GlobalImage.AddExcavationRegion(geometry, string.Format("{0}", Index));
3.2.7 地形修改
倾斜模型是数字地表模型,它本身包含了真实的地形高度,叠加早期的地形数据会出现地形与模型不匹配的问题,7C sp2版本提供新的高度模式来解决这个问题。
在cad数据集图层中编辑多边形区域,设置其Style3D高度模式为ModifyTerrain,并设置其底部高程值,即可修改区域内地形,地形修改可以参照如下代码实现,如图 28、图 29所示: 相关代码如下:
void TrackedHandler(DatasetVector dataset, Tracked3DEventArgs e,double m_bottomAltitude) {
//获取绘制的压平面
Geometry3D geometry = e.Geometry;
GeoRegion3D region = (geometry as GeoRegion3D);
Recordset recordset = dataset.GetRecordset(false, CursorType.Dynamic); GeoStyle3D style3D = new GeoStyle3D(); //设置绘制面对象高度模式为修改地形
style3D.AltitudeMode = AltitudeMode.ModifyTerrain; //设置面对象的底部高程值来修改地形 if (m_bottomAltitude != 0) {
style3D.BottomAltitude = m_bottomAltitude;
}
region.Style3D = style3D; recordset.AddNew(region); recordset.Update(); recordset.Dispose();
m_sceneControl.Scene.Refresh(); }
图 28
图
29
3.2.8 添加水面
水面可以参照如下代码实现,在cad数据集图层中编辑添加面对象,并设置其风格为水面风格(如图 30所示)。
图 30
相关代码如下:
void TrackedHandler(DatasetVector dataset, Tracked3DEventArgs e) {
Geometry3D geometry = e.Geometry;
GeoRegion3D region = (geometry as GeoRegion3D);
Recordset recordset = dataset.GetRecordset(false,CursorType.Dynamic); GeoStyle3D m_geoStyle3D = new GeoStyle3D();
//水面填充 100指填充水面的符号ID,如果不存在,在工作空间的资源符号库中创建三维水面填充符号
m_geoStyle3D.FillSymbolID = 100;
m_geoStyle3D.AltitudeMode = AltitudeMode.Absolute; region.Style3D = m_geoStyle3D; recordset.AddNew(region); recordset.Update(); dataset.Append(recordset); recordset.Dispose();
m_sceneControl.Scene. Refresh(); }
3.2.9 2.5D地图数据生成
三维需要在三维场景中显示,对显卡等有一定的要求,而且数据量非常大,为满足不同用户的需求,超图三维场景提供生成2.5维地图功能,这样在地图控件中就可以看到三维场景中的效果,传统模型及倾斜摄影模型都支持该功能。设置出图范围及场景的俯仰角(tilt)和方位角(heading
)即可生成用户指定
角度的2.5维地图(如图 31、图 32、图 33所示)。
三维场景效果:
图 31
2.5维地图效果
图 32
2.5维地图发布REST地图服务,在二维客户端展示效果
图 33
相关代码如下:
SuperMap.Realspace.Scene成员方法 public
path:出图位置路径
insertPoint:插入点位置(倾斜摄影模型采取*.scp文件中的插入点,3ds max建模采取导入udb数据集使用max插件中的插入点) bounds:三维场景中出图范围 heading:俯仰角,单位:度 tilt:倾斜角,单位:度
bool
Output25DMap(string
path,
SuperMap.Data.Point3D
insertPoint,
SuperMap.Data.Rectangle2D bounds, double resolution, double heading, double tilt)