楼主: VR_user_happy

地形DEM的等高程分级色彩渲染

[复制链接]

该用户从未签到

 楼主| 发表于 2013-10-17 12:00:47 | 显示全部楼层
本帖最后由 VR_user_happy 于 2014-1-10 15:47 编辑

这次谈谈:地形文件相对应的GIS的shp文件中的几何特征对象的利用

一、如果直接把shp文件转换为Image图片,则由于像素的原因,放大时会出现锯齿边缘,很粗糙,同时失去了几何向量的特征。

二、考虑到OSG的三维特性,很显然可以很容易的对2维特性的几何特征进行扩展和利用,可以把shp文件中的几何特征对象的提取出来,转化为OSG中的3维几何体对象。
1.首先利用GDAL中的OGR对SHP文件进行几何特征对象的提取OGRGeometry
2.再根据得到的OGRGeometry解析几何对象可以得到shp文件中的OGRPolygon对象,及其他几何对象;
3.根据得到的OGRGeometry几何对象如OGRPolygon对象,再得到2维点OGRPoint集合
4.将2维点集合转换为3维点集合
5.根据不同的几何体对象变成OSG的几何体对象osg:: Geometry,进行几何体绘制(点,线段,闭合线。。。)
6.几何体对象变成节点添加到场景,或者写出生成对应的*.IVE文件;


下面就将osgearh,提供的SHP文件进行解析得到其中的几何体对象变成osg的节点对象放到场景中,如下图:
对于中国省界及岛屿地形chinashp.shp提取的几何特征对象

shp_china_1.jpg

shp_china_2.jpg

对于美国周界及岛屿usa.shp提取的几何特征对象

shp_usa_1.jpg



是不是OSG结合GDAL可以做很多GIS中不能做到的功能呢?呵呵!

该用户从未签到

 楼主| 发表于 2013-10-18 14:05:36 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-18 16:19 编辑

很抱歉上面传的中国地图发错了现在重发:

1.中国地图边界:(从SHP文件提取几何特征的IVE)

china_shp_001.jpg

chinashp_grp.rar (387.85 KB, 下载次数: 38)

该用户从未签到

 楼主| 发表于 2013-10-18 22:54:43 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-18 23:26 编辑

从SHP 中提取出的几何特征转换为OSG的IVE模型:


china_shp_com2.jpg

1.
中国地市级以上居民地

China_res2_4m_grp.rar (2.42 KB, 下载次数: 19)

该用户从未签到

 楼主| 发表于 2013-10-19 11:37:10 | 显示全部楼层
下面再谈谈SHP文件的特征中文本字体对应点对象的提取:

1.找到SHP中的特征对象OGRFeature

2.提取OGRFeature中的OGRField字符串域对应的char *名称

3.匹配对应的几何特征点OGRPoint,转换为对应的3D空间OSG的点

4.将char *以字节BIT形式记录的字符串,转换为wchar_t *对应的字符串,然后转换成可显示的string类型;

5.将string类型的名称与字体对象关联,并放置在对应的3D空间点位置;

6.将字体对象添加到组节点后,就可写成生成*.ive的模型了。

China_shp_txt_1.jpg

China_shp_txt_2.jpg

将含字体的转换的中国地市级以上居民地的SHP文件特征提取的文本地名名称ive文件打包如下:

China_res2_4m_grp.rar (10.48 KB, 下载次数: 27)

该用户从未签到

发表于 2013-10-19 19:39:04 | 显示全部楼层
Cool !

该用户从未签到

 楼主| 发表于 2013-10-21 09:23:37 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-21 09:39 编辑

SHP文件转换成ive模型的工具:
在原来的地形工具中增加了SHP文件处理模块

shp_tool_01.jpg

1.几何体颜色可以自己定义

shp_color_txt_002.jpg

2.有点几何体存在的特征,可以设置中文字体,及字体颜色,字体的显示对齐方式(默认值为“Z轴”,即是字体与XOY平面对齐,同理“Y轴”表示XOZ平面对齐)
字体默认为“黑体”
A.用选取方式打开c:\windows\fonts\目录下其它字体(必需修改字体文件属性,可以显示后缀名)
B.如果不想修改c:\windows\fonts\目录下其它字体文件属性,则可直接在文本编辑框中更改字体名称如:SIMHEI.TTF  直接改为 SIMFANG.TTF

shp_TxtColor_01.jpg

3.几何体默认的3D空间Z值为0.0;

shp_Point_01.jpg

4.除了必需有要处理的shp文件外,还必需包含同名称的其它2个文件*.shx ,*.dbf,放在同一目录下;

5.既然已经提取了几何体点的坐标和中文或英文文本信息(目前保存在临时数组中);当然可以通过对数据库的操作,保持到数据库中(以后再实现此功能);


地形shp文件处理转换为IVE模型工具:


TerrainTool_FreeGragonBird_v01_01_01.rar (425.84 KB, 下载次数: 81)

该用户从未签到

 楼主| 发表于 2013-10-21 14:55:42 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-21 14:59 编辑

现在谈谈将SHP文件中的几何体点的坐标和文本信息保存到数据库中:

1.将转换的点几何坐标及文本信息保存到临时数组

2.建立数据库连接ODBC ,由控制面板创建数据源的数据链接

3.通过CDatabase类建立访问数据库对象

4.利用SQL语句联合数据库访问类及字符串处理C++函数,实现CDatabase类对象对数据库的访问,并创建表格,同时添加记录到新建立的表中。

5.实例,建立一个ACESS数据库osg_Simulation_01.mdb,控制面板创建数据源sss 并测试链接是否成功。数据osg_Simulation_01.mdb原有数据表格ModelList1;
   

工具中添加处理保存到数据库的RadioButton项:

shp_convert_tool_saveToDB_01.jpg

数据链接:

shp_convert_tool_saveToDB_02.jpg

shp_convert_tool_saveToDB_03.jpg

结果输出:

shp_convert_tool_saveToDB_04.jpg

shp_convert_tool_saveToDB_05.jpg    


6.数据库链接可以保存,当然也可以读取:

同样可以把数据库中的表格中存储的给定点名称、坐标读取出来,创建ive模型,这只是个逆向过程。

该用户从未签到

发表于 2013-10-21 21:31:05 | 显示全部楼层
顶一个

该用户从未签到

发表于 2013-10-27 15:57:12 | 显示全部楼层
赞一个!

该用户从未签到

 楼主| 发表于 2013-10-28 10:06:39 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-28 12:24 编辑

地形DEM高程文件的分割
   当高程DEM文件较大是,由于地形渲染耗费的内存比较大,当1个地形文件像素尺寸大于3800*3800时,实验表明XP系统最大的3G多的内存基本就耗尽了。如果想用等高分级方式渲染,还需要一些额外的内存。
    我们常常从如:srtm.csi.cgiar.org下载的地形DEM文件,大多是一个区块的DEM文件,而且都是像素尺寸大于4096*4096;刚刚超出了XP的内存可以一次全部渲染的能力。
   解决方案:   
第一种方式:
     使用非系统Terrain的地形文件比例采样,压缩数据,如本人的地形工具中,采用X 比例采样=2,Y比例采样=2;就可正常进行地形的渲染和输出。好处是地形整体形状不受影响,但这种地形渲染的坏处是损失了一半的原数据(二分之一间隔采样),如果想得到数据某个点(经纬度)的高程的较为准确值,可能会有一点点偏差。
第二种方法:(自制实现的地形分割工具,不采用任何GIS工具)
    就是将大地形进行切割,分成小块,然后对分割出来的小块进行独立的渲染并生成模型。(好处是保证了原始数据一点都不丢失)

实例:
    从SRTM Data 下载的DEM 地形文件srtm_57_06.tif
像素尺寸: 4096*4096

第一种方法:
    放大比例=5
    等高分级方式,高程最小值=330, 高程间距=300,分级=20级
    采样比例X=2,Y=2
渲染图如下:

srtm_57_06_r1.jpg

第二种方式:
使用地形分割工具,如下图
  X方向均分数量=2
  X方向均分数量=2

Terrain_tool_division_01.jpg

得到分割的4个子地形DEM文件:
srtm_57_06_X0_Y0.tif,srtm_57_06_X0_Y1.tif,srtm_57_06_X1_Y0.tif,srtm_57_06_X1_Y1.tif

srtm_57_06_X0_Y0_1.jpg

srtm_57_06_X0_Y1_2.jpg

srtm_57_06_X1_Y0_3.jpg

srtm_57_06_X1_Y1_4.jpg


最新自制地形工具(含地形分割): osgTerrianTool_V01_02_01
(只发可执行程序,插件在前面的版本中下载)
osgTerrianTool_V01_02_01.rar (191.25 KB, 下载次数: 85)

该用户从未签到

 楼主| 发表于 2013-10-29 15:48:00 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-10-29 16:25 编辑

再谈谈对大地坐标系的转换

利用gdal/ogr,可以很轻松的实现各种大地坐标系之间的转换;

1.获取各个不同坐标系的相关参数;
XIAN80(西安80)坐标系
80大地参数:
    参考椭球体:IAG 75
    长半轴:6378140
    短半轴:6356755.2882
    扁率:298.257000
BJ54(北京54)坐标系
54大地参数:
    参考椭球体:Krasovsky_1940
    长半轴:6378245
    短半轴:6356863.0188
    扁率:298.3

WGS84坐标系
84大地参数:
    参考椭球体:WGS 84
    长半轴:6378137
    短半轴:6356752.3142
    扁率:298.257224

2.设定参考,并用OGRCoordinateTransformation 类实现各种坐标系之间的转换。

ConvertCoordSystem_01.jpg

3.得到属性字符串:
PROJCS["Beijing_1954_3_Degree_GK_CM_75E",GEOGCS["GCS_Beijing_1954",DATUM["D_Beijing_1954",SPHEROID["Krasovsky_1940",6378245.0,298.3]],PRIMEM
["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gauss_Kruger"],PARAMETER["False_Easting",500000.0],PARAMETER
["False_Northing",0.0],PARAMETER["Central_Meridian",75.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
可以看出各个参数的设置值。

该用户从未签到

 楼主| 发表于 2013-11-6 10:10:01 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-11-7 18:39 编辑

用OSG结合数据库实现三维地理信息动态Map管理

OSG的3D特性,可以计算和查看3D空间的距离、体积、空间坐标、姿态等;OSG的动画、声音功能、粒子特效,可以表现很多的视觉效果;OSG时间管理,可以很轻易实现时间触发事件;再结合数据库,可实现更多强大的功能。

Road_select_07.gif
用数据库管理模型(列表加载不同层次的模)
Road_select_11.gif

1.用数据库管理SHP文件中提取的文本,和点坐标信息

SelectedPathRoad-2.jpg

2.用osg管理SHP文件中的不同层的几何体信息(几何体转化)

SelectedPathRoad-3.jpg

SelectedPathRoad-4.jpg

3.用osg和数据库实现Map地图的动态管理
  a 可以实现城市路网不同地名的2个点之间的自动选取最优通行道路
   
Road_select_09.gif

  路径最短寻路,可以看出红色线路最先到达、然后依次是黄山、前白色、蓝色

用文本和数据结构体处理点网的2个点间的通路连接关系

SelectedPathRoad-1.jpg

  其中:每个点包含:本结点索引、与其联通的节点个数、连接点索引号

  b.还可实现其他如:
    公交线路查询,城市交通路况查询
   线路的里程,和运行时间,查询,路径的地名和车站(可加载声音文件)

Road_select_13.gif

  c.其他,如火灾报警,交通故障报警,11O报警等等
  可以通过快速切换OSG的对象观察小窗口,了解观察监督点的具体情况;

Road_select_10.gif

d. 矿区的生产管理,和突发安全事故监督和处理,3D生产通道线路查看,安全事故火警点监督等

e.其他,如军事作战地图中的目前行进线路和位置,及进攻路线和进攻动用的地面部队、空中部队,不同时间点触发的动画(如坦克、军车在某一时间沿某个线路运动,飞机从某个时间从某地沿某个飞行线路飞行)。

f.天气预报(动画粒子系统)

Road_select_12.gif    

该用户从未签到

 楼主| 发表于 2013-11-12 15:52:45 | 显示全部楼层
自制的统计绘图直方图、圆饼图
Draw_Axe_Squre_CirclePercent_02.gif

Draw_Axe_Squre_CirclePercent_01.gif

该用户从未签到

 楼主| 发表于 2013-11-12 15:59:41 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-11-12 16:12 编辑

地形上种植模型:
1单点
2.直线差分点
3.圆弧线差分点
4.矩形区域随机点

模型可以是任意模型,种植在给定地形表面,随地形高程保持一致的!(这里指把地形当做种植的目标节点,当然目标节点不一定只限于地形,也可以是场景其他节点)

Plant_M_4.jpg

圆弧线上的点(可以是整个圆、也可是一段弧线上的点)
Plant_M_1.jpg

矩形区域内随时生成的点
Plant_M_2.jpg

OsgViewer打开保存的种植点模型

Plant_M_3.jpg

自制的种植模型工具
Plant_M_5.jpg

对于模型的地形场景布置应该说是个有利的自制工具了,呵呵

该用户从未签到

发表于 2013-11-17 23:16:05 | 显示全部楼层
你的高程数据和贴图在哪下的?求教啊!

该用户从未签到

发表于 2013-11-17 23:18:25 | 显示全部楼层
楼主,请问你的高程数据和影像图在哪下的?求教啊!

该用户从未签到

 楼主| 发表于 2013-11-18 17:23:26 | 显示全部楼层
前面提到过2个地方:
第一个: srtm.csi.cgiar.org 不需要注册就可免费下

第2个:
   国际科学数据服务平台,自己搜一下(要简单注册登录)

该用户从未签到

 楼主| 发表于 2013-12-9 12:28:01 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-12-9 12:36 编辑

地形体渲染

osg的体渲染提供了一个简单的利用IMGAGE 对象实现对另类地形的渲染!好处是可以创建很多意想不到的地形体效果!
用不同模式实现的体渲染:

Volume_01.jpg   

Volume_02.jpg

Volume_03.jpg

采用不同透明度

Volume_05.jpg

Volume_04.jpg

采用多立体贴图

Volume_06.jpg

Volume_07.jpg

volume_08.jpg

volume_09.jpg

volume_10.jpg

对图片对相的处理不同,得到的体渲染效果也会不同(重点是对图片对象的处理)

该用户从未签到

 楼主| 发表于 2013-12-14 01:50:29 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-12-14 02:11 编辑

全球地形平铺概貌地形DEM:

wordTerrain_1.jpg

wordTerrain_2.jpg

wordTerrain_3.jpg

全球概貌地形IVE打包文件:

Trrn_ear_tif.part1.rar (1000 KB, 下载次数: 42)

该用户从未签到

 楼主| 发表于 2013-12-15 00:07:43 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-12-15 00:37 编辑

三峡大坝地形DEM

ThreeDamp_1.jpg

地形ive打包文件
Trrn_threeDamp_tif.part01.rar (1000 KB, 下载次数: 21)

该用户从未签到

发表于 2013-12-18 11:30:42 | 显示全部楼层
VR_user_happy 发表于 2013-9-9 12:57
呵呵,谢谢大家的支持
现在再说一下高程文件中地形的某个点对应的经纬度和高程:
1.地形的高程范围:

这个地形分层设色是怎么实现的啊,能给点思路吗?

该用户从未签到

发表于 2013-12-18 11:35:07 | 显示全部楼层
VR_user_happy 发表于 2013-9-9 18:46
好了,我现在就给大家发一款第一版的地形工具吧:
   比较简陋,单功能还行,目前还不是很完善!
  说明 ...

为什么一读取高程文件就死机呢?

该用户从未签到

 楼主| 发表于 2013-12-18 13:51:38 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-12-18 14:10 编辑

1.首先,插件是否完全
2.再选取地形文件后(一般地形文件都比较大),等上10几秒钟看地形文件尺寸(会自动更新像素尺寸);
3,如果地形文件在3600*3600的尺寸范围内就不用比例采样!
如果尺寸接近3600*3600,一般地形会等待渲染的时间较长70~90秒,越小尺寸等待渲染时间越少,比例采样等待时间也少,用X=2,Y=2,一般也要等20~30秒;
4.一般都是假死机状态,用空格键后复原视点(要等一段时间后地形文件才会出现),如果屏幕不动,请耐心等待,等屏幕跳转后,过一定时间就会显示地形!

3600*3600=12960000个高程点的数据,就是将近1千多万个点,每个点要渲染,必然要花费一定的时间!

5.另外,机器如果是2G的内存,那就最好不要使用颜色分层, 除非是很小的尺寸地形文件(像素尺寸)!
   我的机器配置(4G内存,独行显卡).

该用户从未签到

发表于 2013-12-18 15:36:27 | 显示全部楼层
VR_user_happy 发表于 2013-12-14 01:50
全球地形平铺概貌地形DEM:

你好,全球地形平铺概貌地形DEM这个效果是用dem数据渲染得到的吗,怎么做到的啊?效果非常好!

该用户从未签到

 楼主| 发表于 2013-12-18 16:25:44 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-12-18 17:06 编辑

1.全球平铺概貌地形的DEM地形文件
解压后,贴图也用同一个tif 文件
长宽比例自己设定如:高10000,宽20000
ear0xuu2.part1.rar (1000 KB, 下载次数: 25)

该用户从未签到

 楼主| 发表于 2014-2-20 16:44:01 | 显示全部楼层
本帖最后由 VR_user_happy 于 2014-2-20 16:48 编辑

用osg实现对GPS数据的处理和显示:
   osg的三维功能可以轻松的将2维的矢量图形和数据轻松转换;

GPS的原始数据gpx文件
用osgDB:: XmlParser对文件进行解析,可以得到其中的经纬度、时间、高程等数据
然后将经纬度、高程转换成对应的几何点,再利用绘图图元进行表达,就可得到3维的几何体了

原始GPS的文件*.GPX打包文件

Sh2010_50KM.zip (21.27 KB, 下载次数: 13)

该用户从未签到

 楼主| 发表于 2014-2-21 15:46:22 | 显示全部楼层
现在把GPS文件中的时间要素,解读出来,再关联追踪路径点,看看GPS的时间关联的动态运动轨迹数据

gpx_time_track_02.gif

这里的小车是我随意加的,用作参考
你可以观察GPS数据中,某些特定的坐标点,如追踪目标在某个地点做了停留停车

该用户从未签到

发表于 2014-2-28 17:52:38 | 显示全部楼层
好详细,赞一个!

该用户从未签到

 楼主| 发表于 2014-3-12 19:39:29 | 显示全部楼层
本帖最后由 VR_user_happy 于 2014-3-14 12:35 编辑

马来西亚失联飞机的3D飞行线路仿真与搜救方案的分析

一、飞行线路及地形三维仿真
1.利用地形工具,生成飞行区域线路3维地形;
2.根据导航记录的GPS数据,解析生成对应的时间点,经纬度,高程,还原模拟生成飞行仿真动画
mlxy_plane_gpx_2.jpg

Mlxy_Pl_los_5.jpg

Mlsy_Pl_los_2.jpg

Mlsy_Pl_los_1.jpg

动画压缩文件:
MLxy_PlaneLost4.rar (880.34 KB, 下载次数: 13)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表