免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 6448|回复: 16
收起左侧

[二次开发] vc mapgis6.7 源码系列_等高线提取数字高程为文本

  [复制链接]

11

主题

1132

铜板

95

好友

高级工程师

MAPGIS二次开发(矿产、数字城市

Rank: 9Rank: 9Rank: 9

积分
787
发表于 2010-12-14 19:25 | 显示全部楼层 |阅读模式
实现功能 :
将已经矢量化的线文件(高程字段名为“高程”,区别断层和等高线的是断层字段,断层字段为0则为等高线,不为0则为断层)
1.jpg 3.jpg
运行程序后 将等高线点以及高程值批量导出
2.jpg 4.jpg   代码如下:
  1.     if (IDYES != AfxMessageBox("请确认\n当前操作的线文件中存在1.高程,2.断层属性字段(必须)",MB_YESNO))
  2.         return ;
  3.     long logN,n ;
  4.     _GetLinNum(curlin,&logN,&n) ;
  5.     D_DOT *dat ;
  6.     long len ;
  7.     LIN_INFO inf_lin ;
  8.     CATT_STRU *stru_lin ;
  9.     char *att ;
  10.     char pbuff[100] ;
  11.     CString  m_sduanceng ;
  12.     CArray<dem_m,dem_m&> m_cadem ;
  13.     CArray<duanlie_m,duanlie_m&> m_caduanlie ;
  14.     m_cadem.RemoveAll() ;
  15.     dem_m  _vdem_m ;
  16.     duanlie_m _vduanlie_m ;
  17.     CString m_sgaocheng ;
  18.     for (long i = 1 ; i <n; i++)
  19.     {
  20.         if (1 !=_GetLin(curlin,i,&dat,&len,&inf_lin))
  21.         continue ;
  22.         _GetLinAtt(curlin,i,&stru_lin,&att) ;
  23.         if (1 != _CvtFldToString1(stru_lin,att,"断层",pbuff,100,NULL,NULL))
  24.         {
  25.             AfxMessageBox("没有断层字段") ;
  26.             m_cadem.RemoveAll() ;
  27.             m_caduanlie.RemoveAll() ;
  28.             return ;
  29.         }
  30.         m_sduanceng = pbuff ;
  31.         //如果断层 = 0 ;则xyz
  32.         if ("0" == m_sduanceng)
  33.         {
  34.             if (1 != _CvtFldToString1(stru_lin,att,"高程",pbuff,100,NULL,NULL))
  35.             {
  36.                 AfxMessageBox("没有高程字段") ;
  37.                 m_cadem.RemoveAll() ;
  38.                 m_caduanlie.RemoveAll() ;
  39.                 return ;
  40.             }
  41.             m_sgaocheng = pbuff ;
  42.             for (long i=0; i <len; i++)
  43.             {
  44.                 _vdem_m.x = dat[i].x ;
  45.                 _vdem_m.y = dat[i].y ;
  46.                 _vdem_m.z = atof(m_sgaocheng) ;
  47.                 m_cadem.Add(_vdem_m) ;
  48.             }        
  49.         }
  50.         else
  51.         {
  52.         //否则  xyzv
  53.             if(1 != _CvtFldToString1(stru_lin,att,"高程",pbuff,100,NULL,NULL))
  54.             {
  55.                 AfxMessageBox("没有高程字段") ;
  56.                 m_cadem.RemoveAll() ;
  57.                 m_caduanlie.RemoveAll() ;
  58.                 return ;
  59.             }
  60.             m_sgaocheng = pbuff ;
  61.             for (long i=0; i <len; i++)
  62.             {
  63.                 _vduanlie_m.x = dat[i].x ;
  64.                 _vduanlie_m.y = dat[i].y ;
  65.                 _vduanlie_m.z = atof(m_sgaocheng) ;
  66.                 _vduanlie_m.name = m_sduanceng ;
  67.                 m_caduanlie.Add(_vduanlie_m) ;
  68.             }   
  69.         }
  70.     }
  71.     //获取当前文件操作的路径 将结果写在当前文件路径下
  72.     //命名法则为 XX高程.txt   XX断层.txt
  73.     CString m_sroad,m_sflod,m_sfilename ;
  74.     //_PRJGetName()
  75.     short curlinno = _PRJGetCurNo(this->GetDocument()->m_Prj,LIN) ;
  76.     m_sroad = _PRJGetItemName(this->GetDocument()->m_Prj,curlinno) ;
  77.     _PRJGetItemName1(this->GetDocument()->m_Prj,curlinno,m_sfilename.GetBuffer(m_sfilename.GetLength())) ;
  78.     m_sflod = m_sroad.Left(m_sroad.ReverseFind('\\')) ;
  79.     CString m_sgcroad, m_sdcroad ;
  80.     m_sgcroad = m_sflod + "\\高程.txt" ;
  81.     m_sdcroad = m_sflod + "\\断层.txt" ;
  82.     //生成文件
  83.     CStdioFile File ;
  84.     CString m_str ;
  85.     File.Open(m_sgcroad,CFile::modeCreate|CFile::modeWrite) ;
  86.     _StartClockCursor() ;
  87.     for (i = 0 ; i <m_cadem.GetSize(); i++)
  88.     {
  89.         _GoingClockCursor() ;
  90.         m_str.Format("%d,%f,%f,%f\n",i+1,m_cadem.GetAt(i).x,m_cadem.GetAt(i).y,m_cadem.GetAt(i).z) ;
  91.         File.WriteString(m_str) ;
  92.     }
  93.     _EndClockCursor() ;
  94.     File.Close() ;
  95.     File.Open(m_sdcroad,CFile::modeCreate|CFile::modeWrite) ;
  96.     _StartClockCursor() ;
  97.     for (i = 0 ; i <m_caduanlie.GetSize(); i++)
  98.     {
  99.         _GoingClockCursor() ;
  100.         m_str.Format("%ld,%f,%f,%f,%s\n",i+1,m_caduanlie.GetAt(i).x,m_caduanlie.GetAt(i).y,m_caduanlie.GetAt(i).z,m_caduanlie.GetAt(i).name) ;
  101.         File.WriteString(m_str) ;
  102.     }
  103.     _EndClockCursor() ;
  104.     File.Close() ;
  105.     CString res ;
  106.     res.Format("属性导出完成,高程.txt 断层.txt 生成在%s 文件夹下 ",m_sflod) ;
  107.     if (IDYES == AfxMessageBox(res,MB_YESNO))
  108.     {
  109.         ShellExecuteA(this->m_hWnd,"open",m_sflod,NULL, NULL, SW_SHOWNORMAL) ;
  110.     }
复制代码
--------------------------------------------------分割线---------------------------------------------------------------
   用过mgt6程序的朋友是不是想起了线折点转换成excel里面的坐标类似的功能,大致原理如上。在此之前我没有研究过mgt6,可能是我用得不多吧,我想按xyz导出的时候还是有点小问题,要是能指定属性导出就好了。我的程序也不见得是很精彩的东西,我发于这里的目的其一:希望大家能有兴趣学习这种数据处理的工具,在现有软件不能解决实际生产中遇到的问题时,可以解决。其二:对于编程,我也是初学者,希望大家能多提意见,尤其是中肯的意见,我将虚心的接纳,继而能写出功能更加实用,更加稳健的程序。其三:我不希望看到帖子需要什么等级限制才可浏览,因为,我觉得这违背了我之前的目的与论坛管理者建立技术经验交流平台的目的。
  大家多提意见,是对我发源码的最好支持。谢谢

评分

参与人数 1铜板 +2 收起 理由
yczcc + 2 感谢提供!

查看全部评分

MAPGIS二次开发(矿产、数字城市)

11

主题

1132

铜板

95

好友

高级工程师

MAPGIS二次开发(矿产、数字城市

Rank: 9Rank: 9Rank: 9

积分
787
 楼主| 发表于 2010-12-14 19:43 | 显示全部楼层
沙发先自己坐
MAPGIS二次开发(矿产、数字城市)

7711

主题

31万

铜板

892

好友

超级版主

地信网论坛贵宾

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

积分
128745

宣传勋章优秀斑主灌水勋章活跃勋章贡献勋章童话节勋章

QQ
发表于 2010-12-14 21:08 | 显示全部楼层
谢谢楼主提供源码,支持了
该会员没有填写今日想说内容.

14

主题

13万

铜板

143

好友

VIP会员

mapgis

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
7575

精华勋章宣传勋章

QQ
发表于 2010-12-15 06:48 | 显示全部楼层
希望楼主多多提供原码,感谢对地信网的支持.
锄禾日当午,签到好辛苦!...

11

主题

1132

铜板

95

好友

高级工程师

MAPGIS二次开发(矿产、数字城市

Rank: 9Rank: 9Rank: 9

积分
787
 楼主| 发表于 2011-2-16 20:21 | 显示全部楼层
今天研究了一下k9学习版和6.7版本兼容问题,顺利解决。
大家能不能讨论一下啊
MAPGIS二次开发(矿产、数字城市)

0

主题

1202

铜板

0

好友

助理工程师

Rank: 5Rank: 5

积分
162
发表于 2011-4-22 18:16 | 显示全部楼层
谢谢楼主提供源码,支持了

1

主题

1311

铜板

6

好友

高级工程师

知识也像女人怀孕一样,要过一段

Rank: 9Rank: 9Rank: 9

积分
1039
QQ
发表于 2011-4-23 00:41 | 显示全部楼层
好好研究学习一下啊

17

主题

3万

铜板

51

好友

黄金会员

wigi

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4847
发表于 2011-11-26 23:31 | 显示全部楼层
强烈支持楼主!!!
开开心心
回复 支持 反对

使用道具 举报

0

主题

66

铜板

0

好友

实习生

Rank: 1

积分
14
发表于 2012-2-20 15:02 | 显示全部楼层
LZ  能发下你的程序源文件不? 想看看 谢谢了 邮箱792675545@qq.com
回复 支持 反对

使用道具 举报

0

主题

66

铜板

0

好友

实习生

Rank: 1

积分
14
发表于 2012-2-20 15:04 | 显示全部楼层
LZ 能看下的 源文件不? 谢谢了 邮箱:792675545@qq.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表