c# 如何加载DEM

0 投票
338 浏览
我是菜鸟一枚,使用iobjects.net开发一个可以加载DEM的功能。烦请大虾们简单介绍下加载步骤。或者给一个思路。谢谢
最新提问 10月 9, 2017 分类:  338次浏览 | 用户: sweet173 才疏学浅 (14 分)

1个回答

0 投票
 
已采纳
您好,首先你得有一个Dem数据,如果你现在已经有了DEM的外部数据,使用DataImport 类将外部数据导入为超图的栅格数据集,或者如果你有带高程的点,线数据集,也可以通过TerrainBuilder.BuildTerrain 方法来构建DEM数据集。有了DEM数据集之后,就可以将其通过添加到地图或者三维场景中显示,分析,分别是map.layers.add方法和scene.layers.add方法。
最新回答 10月 9, 2017 用户: 胡林 名扬四海 (5,626 分)
采纳于 10月 23, 2017 用户:sweet173
胡工,您好,在请教您两个问题。

1.如何从DEM文件里取出高程数据?

2.DEM文件以栅格加载后,是否就是一个平面的影响?我看网上有人加载dem文件后,是立体的效果,不知道是不是我的设置问题?

谢谢

DEM提取高程点有如下方法

1.通过ConversionAnalystParameter 类实现,高程可保存在指定的字段中

2.直接读DatasetGrid每个单元格的栅格值,栅格值也就是高程值

立体效果如下方案实现

1.对于平面地图可对栅格数据生成正射三维影像,使用CalculationTerrain.CalculateOrthoImage 方法实现

2.直接将DEM添加到三维场景中,即可看见三维立体效果,如下图所示:

感谢感谢~ 我按照您的思路去试试。

下面这段代码是我加载DEM的程序段,受累您看下我的思路有没有问题。

1.使用超图工具将DEM文件以栅格模式导入到123.udb文件里(里面有两个图层)

DatasourceConnectionInfo datasourceConInfo = new DatasourceConnectionInfo();
datasourceConInfo.Server = @"F:\98.C#Test\SuperMapTest\SM\123.udb";
datasourceConInfo.EngineType = EngineType.UDB;

2.使用您说的方法加载到scene的图层里

Layer3DSetting ls = new Layer3DSettingImage();
m_workspace.Datasources.Open(datasourceConInfo);
foreach (Dataset temp in m_workspace.Datasources[0].Datasets)
{
   DatasetGrid gd = temp as DatasetGrid;
   DatasetImage dimage = CalculationTerrain.CalculateOrthoImage(gd, GetColorDic(), Color.Black, m_workspace.Datasources[0], "test1");
   scene.Layers.Add(dimage, ls, true);
 }

但是在超图的iDesktop里打开123.udb,里面已经有了test1图层数据,但是什么都没有。

谢谢~
胡工,您好,我用下面这个方法把dem加载进去了,出来3D的效果了。没有用您说的CalculationTerrain这个类。这是为什么呢?

foreach (Dataset temp in m_workspace.Datasources[0].Datasets)
{
    DatasetGrid gd = temp as DatasetGrid;
    scene.Layers.Add(gd, ls, true);
    scene.TerrainLayers.Add(gd, true);
}
我说的是两种方法不是两个步骤。第一种方法用于在二维地图中展示三维效果
...