首页 / 浏览问题 / 组件GIS / 问题详情
c# 如何加载DEM
15EXP 2017年10月09日
我是菜鸟一枚,使用iobjects.net开发一个可以加载DEM的功能。烦请大虾们简单介绍下加载步骤。或者给一个思路。谢谢

1个回答

您好,首先你得有一个Dem数据,如果你现在已经有了DEM的外部数据,使用DataImport 类将外部数据导入为超图的栅格数据集,或者如果你有带高程的点,线数据集,也可以通过TerrainBuilder.BuildTerrain 方法来构建DEM数据集。有了DEM数据集之后,就可以将其通过添加到地图或者三维场景中显示,分析,分别是map.layers.add方法和scene.layers.add方法。
5,985EXP 2017年10月09日
谢谢您~我去试一试,再请教您个问题,是关于超图数据集的。有没有工具去编辑超图的数据集?类似PLSQL Developer去处理oracle一样~如果没有,那数据集里的数据怎样录入进去呢?谢谢~
通过iobjects.net也可以自己向数据集里面加数据,另外也有现成的桌面软件idesktop来编辑数据
胡工,您好,再请教您个问题。如何处理容量比较大的DEM文件?我这里有个DEM文件大小是3G,使用超图提供的工具加载到udb文件大概用了4个小时(可能是因为我的电脑性能低),加载后udb文件大小达到了22G,以后还有更大的DEM文件,如果也按照这个办法去操作,时间太长,请问您有没有遇到这样的情况?是否能提供一个好的处理方案?谢谢~
您好,请问你的DEM原始数据是什么类型的,另外是通过导入数据集的方式导入到UDB数据源里面的吗,是导入的时候就花了4个小时吗?如果条件允许的话,建议使用数据库型数据源来存储大数据,性能会比文件型的UDB数据源好
您好,我的数据是.TIF的,不知道是不是您说的类型。导入数据确实是您说的,通过导入数据集的方式,确实是导入的时候花了4个小时。我导入的时候数据集类型选的栅格类型,导入后貌似还有问题。所以我现在再尝试以影像的数据集类型导入一次,看看效果。

我也去试试用PG存储,存入PG后读取模式和从UDB读取是一样的吧。谢谢~O(∩_∩)O~
使用方式是一样的,需要先新建数据源,另外你导入后的具体问题是什么?如果你的tif含高程信息的话,建议还是导入成栅格数据,不含高程信息,只作为影像使用的话,就可以导入成影像数据。

tif文件是含有高程信息的。栅格数据打开后 变成这样的效果了~~

建议你直接以打开文件型数据源的方式来查看一下原始tif,选择原始tif文件,看看是不是正确的

您好,用您这个方法尝试了一下,超图提供的工具提示需要45个小时crying。我先慢慢倒入吧。再请教您个问题,向您说的不用udb文件,而是保存到数据库里,那用什么数据类型呢?blob?谢谢~

数据库的话建议使用Oracle这种分布式数据库性能比较好
好的,多谢啦~非常感谢您的帮助~我研究研究~
胡工,您好,在请教您两个问题。

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);
}
我说的是两种方法不是两个步骤。第一种方法用于在二维地图中展示三维效果
...