欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
国家标准地球空间数据交换格式 (简称CNSDTF)DEM读取
07-11-29 00:00:00 作者:3DGIS 出处:3DGIS.cnblogs.com
在南京城市地质调查项目中需要读取CNSDTF DEM数据,这种格式与美国USGS DEM数据格式相比较,有些简单,不包含椭球体,投影方式等元数据,实际上就是投影后的平面格网数据,所以读取入系统不困难.以后将介绍ERDAS IMG格式的读取,这个就显得有些复杂了.
    

std::locale::global(std::locale(""));

   ifstream _demfile;           //DEM文件流
   _demfile.open(lpszPathName);        //读取文件
  
   string sDataName,sCNDataName;
   string sVersion;float iVersion;
   string sAlpha;float fAlpha;
   string sUnit; string sUnitName;
   string sCompress; float dCompress;
   string sX0; double dX0;
   string sY0; double dY0;
   string sDX; double dDX;
   string sDY; double dDY;
   string sRow; int iRows;
   string sColumn; int iColumns;
   string sValueTypeName; string sValueType;
   string sHzoom; int iHzoom;
   string sMinV;
   string sMaxV;

   if(_demfile)
   {
    _demfile>>sDataName>>sCNDataName;
    _demfile>>sVersion>>iVersion;
    _demfile>>sAlpha>>fAlpha;
    _demfile>>sUnit>>sUnitName;
    _demfile>>sCompress>>dCompress;
    _demfile>>sX0>>dX0;
    _demfile>>sY0>>dY0;
    _demfile>>sDX>>dDX;
    _demfile>>sDY>>dDY;
    _demfile>>sRow>>iRows;
    _demfile>>sColumn>>iColumns;
    _demfile>>sValueTypeName>>sValueType;
    _demfile>>sHzoom>>iHzoom;
    _demfile>>sMinV;
    _demfile>>sMaxV;

   }
   else
   {
    AfxMessageBox("无法读取文件数据头!");
    return false;
   }
     dY0 = dY0 - dDY*iRows;              //从文件中读取的dYO记录的是最大数值
   long index = 0,PointsTotalNumber = 0;
   int i,j;
   double tmpHeight = 0;
  
   POINT3d* p3dDEMGridPoint = new POINT3d[iRows*iColumns];       //准备读文件中数据
  
   double dNodata =   -99999;
   double dZMin = 9999,dZMax = -9999;
   for(j=iRows-1;j>=0;j--)               //由于此文件记录Y数值的方法与其他不同,需要翻转数据
   {
    for(i=0;i<iColumns;i++)
    {
     index =   j*iColumns+i;
     _demfile>>tmpHeight;
     if(iHzoom != 0) tmpHeight = tmpHeight/iHzoom;      //原始的缩放因子
     p3dDEMGridPoint[index][2] = tmpHeight;
    
     if( tmpHeight > -9999)            //也就是不等于 dNodata
     {
      if(dZMin > tmpHeight) dZMin = tmpHeight;       //记录高程上的最小数值
      if(dZMax < tmpHeight) dZMax = tmpHeight;       //记录高程上的最大数值
     }
    
    }
}


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号