wuhanht
路人甲
路人甲
  • 注册日期2007-05-24
  • 发帖数12
  • QQ
  • 铜币175枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1903回复:0

[原创]MAPGIS平台点线面符号数据导出与绘制

楼主#
更多 发布于:2007-12-21 15:28
<FONT face=宋体>    为实现数据共享,有导出和采用</FONT>MAPGIS、ARCGIS等平台符号的任务。而MAPGIS等平台提供了明码文件导出等功能,可以到达目标。而完成此任务前,需要仔细阅读帮助文件,以弄清楚操作步骤和文件中各行数据的详细意义。具体操作步骤:
<P >1) 分别从点线面符号库中逐个提取符号,分别存储成点原子,线原子和面原子3个文件。</P>
<P >2) 利用导出转换工具,以上面生成的3个原子文件为数据来源,导出生成明码文件。生成的文件不可能总是与来源一一对应的3个明码文件,因为有的符号中可能没有点或线或面原子。</P>
<P >3) 仔细阅读帮助文件,分别弄清楚各原子文件中各行数据的含义。如面原子文件中,封闭区域的弧段在顶点对数据之前,就有一行数据分别表示:线型号、辅助线型号、线色、线宽、X系数、Y系数、辅助色、图层和透明输出等</P>
<P >4) 依次读取明码文件,绘制点,线和面等要素。其中需要注意:符号的尺寸可能与自身的绘制环境不一致,此时需使用缩放因子。若符号没有居中的话,需要使用平移系数。另外,MAPGIS平台的颜色系统使用索引,并采用CMYK着色,需转换成RGB色系</P>
<P>参考代码:</P>
<P  align=left>_demfile.open(watDataFilePath);         //读取*.wap读取文件</P>
<P  align=left>        if(_demfi                                //如果文件句柄有效</P>
<P  align=left>        {</P>
<P  align=left>            _demfile>>title                          //读取文件中第一行的标题</P>
<P  align=left>            int iPointnumbers = -1;                  //定义点的个数</P>
<P  align=left>            _demfile>>iPointnumbers;                 //读取文件中的点个数</P>
<P  align=left>            for (int j=0;j<iPointnumbers;j+               //对每个点数据进行循环</P>
<P  align=left>            {</P>
<P  align=left>                 int num = 0;</P>
<P  align=left>                 int iID;</P>
<P  align=left>                 int iType = -1;      //表示此点数据的类型,圆或圆弧或文本等</P>
<P  align=left>                 double dRadio;       //定义圆的半径</P>
<P  align=left>                 double dStartAngle,dEndAngle;    //定义圆弧开始的角度和结束的角度</P>
<P  align=left>                 int iOutColorNum;    //轮廓颜色代号</P>
<P  align=left>                 int iColorNum;</P>
<P  align=left>                 int iFilled;</P>
<P  align=left>                 double dLineWidth;</P>
<P  align=left>                 _demfile>>str1;          //此行数据为:x1 y1 ID type1(点类型)</P>
<P  align=left>                 token = strtok( str1, "," );</P>
<P  align=left>                 while (token != NULL)</P>
<P  align=left>                 {</P>
<P  align=left>                     if(num==0) dXPos = atof(token);          //记下X轴数值</P>
<P  align=left>                     if(num==1) dYPos = atof(token);          //记下Y轴数值</P>
<P  align=left>                     if(num==2) iID = atoi(token);                 //记下ID数值</P>
<P  align=left>                     if(num==3) iType = atoi(token);          //记下type数值</P>
<P  align=left>                     </P>
<P  align=left>                     if(iType == 2)                       //2代表圆</P>
<P  align=left>                     {</P>
<P  align=left>                         ///半径 轮廓颜色 线宽填充(1)或不填充(0)标志颜色 图层透明输出</P>
<P  align=left>                         if(num==4) dRadio = atof(token);         //记下半径</P>
<P  align=left>                         if(num==5) iOutColorNum = atoi(token);        //轮廓颜色</P>
<P  align=left>                         if(num==6) dLineWidth = atof(token);     //线宽</P>
<P  align=left>                         if(num==7) iFilled = atoi(token);             //填充(1)或不填充</P>
<P  align=left>                         if(num==8) iColorNum = atoi(token);           //颜色</P>
<P  align=left>                     }</P>
<P  align=left>                     if(iType == 3)                                    //3代表圆弧</P>
<P  align=left>                     {</P>
<P  align=left>                         ///////半径 起始角度 终止角度 线宽 颜色图层透明输出</P>
<P  align=left>                         if(num==4) dRadio = atof(token);         //记下半径</P>
<P  align=left>                         if(num==5) dStartAngle = atof(token);    //记下开始角度</P>
<P  align=left>                         if(num==6) dEndAngle = atof(token);           //记下终止角度</P>
<P  align=left>                         if(num==7) dLineWidth = atof(token);     //线宽</P>
<P  align=left>                         if(num==8) iColorNum = atoi(token);           //颜色</P>
<P  align=left>                     </P>
<P  align=left>                     }</P>
<P  align=left>                     token = strtok( NULL, "," );</P>
<P  align=left>                     num++;                                                //计数器加上</P>
<P  align=left>                 }</P>
<P  align=left>                 double ColorRGB[3];</P>
<P  align=left>                 m_pDEMColor->MapgisColorNumtoRGB(iColorNum,ColorRGB);//MAPGIS颜色转换成RGB</P>
<P  align=left>                 f (iType == 2)                           //如果是圆</P>
<P  align=left>                 {</P>
<P  align=left>                     geoAtomEllipse[j]->SetCenterPoint(iXaddition+iScale*dXPos,iYaddition+iScale*dYPos);</P>
<P  align=left>                    geoAtomEllipse[j]->SetRadio (dRadio*10);</P>
<P  align=left>                    geoAtomEllipse[j]->SetStartAngleRad(0.0);</P>
<P  align=left>                    geoAtomEllipse[j]->SetEndAngleRad(6.2832);            //360角度与弧度的换算</P>
<P  align=left>                     if(iFilled == 1) </P>
<P  align=left>                     {</P>
<P  align=left>                     COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);</P>
<P  align=left>                         geoAtomEllipse[j]->SetFilledColor(cr);            //填充整个圆的颜色</P>
<P  align=left>                     }</P>
<P  align=left>                     else</P>
<P  align=left>                     {</P>
<P  align=left>                         geoAtomEllipse[j]->SetFilled(false);</P>
<P  align=left>                         COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);</P>
<P  align=left>                         geoAtomEllipse[j]->SetColor(cr);              //圆圈的颜色</P>
<P  align=left>                     }</P>
<P  align=left>                 }</P>
<P  align=left>                 if (iType == 3)                                           //如果是圆弧</P>
<P  align=left>                 {</P>
<P  align=left>                     geoAtomEllipse[j]->SetCenterPoint(iXaddition+iScale*dXPos,iYaddition+iScale*dYPos);</P>
<P  align=left>                     geoAtomEllipse[j]->SetStartAngleRad(0.017453*dStartAngle);</P>
<P  align=left>                    geoAtomEllipse[j]->SetEndAngleRad(0.017453*dEndAngle);</P>
<P  align=left>                      COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);</P>
<P  align=left>                        geoAtomEllipse[j]->SetColor(cr);              //圆弧的颜色</P>
<P  align=left>                 }</P>
<P  align=left>                    geoSymPoint[folds]->AddAtom(geoAtomEllipse[j]);   //将点要素添加到这个符号中</P>
<P  align=left>                 </P>
<P  align=left>            }                                    //结束点原子数据的循环</P>
<P  align=left>            _demfile.close();                    //关闭文件</P>
<P  align=left>            _demfile.clear();</P>
<P  align=left>        }</P>
<P  align=left>     }  </P>
<P  align=left> </P>
<P><IMG src="http://www.cnblogs.com/images/cnblogs_com/wuhanhoutao/116501/r_legend.jpg" border=0></P>
<P><FONT face=新宋体>符号明码文件下载: <FONT size=2> </FONT></FONT><FONT face="Courier New"><FONT face="Courier New"><FONT size=2>http://www.cnblogs.com/Files/wuhanhoutao/MapGIS6.7LegendExport.rar</FONT></FONT></FONT></P>
喜欢0 评分0
游客

返回顶部