阅读:2038回复:0
[原创]MAPGIS平台点线面符号数据导出与绘制
<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> |
|