mapgis明码文件转为点线面文件_MAPGIS平台点线面符号数据导出与绘制

为实现数据共享,有导出和采用MAPGIS、ARCGIS等平台符号的任务。而MAPGIS等平台提供了明码文件导出等功能,可以到达目标。而完成此任务前,需要仔细阅读帮助文件,以弄清楚操作步骤和文件中各行数据的详细意义。具体操作步骤:

1) 分别从点线面符号库中逐个提取符号,分别存储成点原子,线原子和面原子3个文件。

2) 利用导出转换工具,以上面生成的3个原子文件为数据来源,导出生成明码文件。生成的文件不可能总是与来源一一对应的3个明码文件,因为有的符号中可能没有点或线或面原子。

3) 仔细阅读帮助文件,分别弄清楚各原子文件中各行数据的含义。如面原子文件中,封闭区域的弧段在顶点对数据之前,就有一行数据分别表示:线型号、辅助线型号、线色、线宽、X系数、Y系数、辅助色、图层和透明输出等

4) 依次读取明码文件,绘制点,线和面等要素。其中需要注意:符号的尺寸可能与自身的绘制环境不一致,此时需使用缩放因子。若符号没有居中的话,需要使用平移系数。另外,MAPGIS平台的颜色系统使用索引,并采用CMYK着色,需转换成RGB色系

参考代码:

_demfile.open(watDataFilePath);         //读取*.wap读取文件

if(_demfi                                //如果文件句柄有效

{

_demfile>>title                          //读取文件中第一行的标题

int iPointnumbers = -1;                  //定义点的个数

_demfile>>iPointnumbers;                 //读取文件中的点个数

for (int j=0;j

{

int num = 0;

int iID;

int iType = -1;      //表示此点数据的类型,圆或圆弧或文本等

double dRadio;       //定义圆的半径

double dStartAngle,dEndAngle;    //定义圆弧开始的角度和结束的角度

int iOutColorNum;    //轮廓颜色代号

int iColorNum;

int iFilled;

double dLineWidth;

_demfile>>str1;          //此行数据为:x1 y1 ID type1(点类型)

token = strtok( str1, "," );

while (token != NULL)

{

if(num==0) dXPos = atof(token);          //记下X轴数值

if(num==1) dYPos = atof(token);          //记下Y轴数值

if(num==2) iID = atoi(token);                 //记下ID数值

if(num==3) iType = atoi(token);          //记下type数值

if(iType == 2)                       //2代表圆

{

///半径 轮廓颜色 线宽填充(1)或不填充(0)标志颜色 图层透明输出

if(num==4) dRadio = atof(token);         //记下半径

if(num==5) iOutColorNum = atoi(token);        //轮廓颜色

if(num==6) dLineWidth = atof(token);     //线宽

if(num==7) iFilled = atoi(token);             //填充(1)或不填充

if(num==8) iColorNum = atoi(token);           //颜色

}

if(iType == 3)                                    //3代表圆弧

{

///半径 起始角度 终止角度 线宽 颜色图层透明输出

if(num==4) dRadio = atof(token);         //记下半径

if(num==5) dStartAngle = atof(token);    //记下开始角度

if(num==6) dEndAngle = atof(token);           //记下终止角度

if(num==7) dLineWidth = atof(token);     //线宽

if(num==8) iColorNum = atoi(token);           //颜色

}

token = strtok( NULL, "," );

num++;                                                //计数器加上

}

double ColorRGB[3];

m_pDEMColor->MapgisColorNumtoRGB(iColorNum,ColorRGB);//MAPGIS颜色转换成RGB

f (iType == 2)                           //如果是圆

{

geoAtomEllipse[j]->SetCenterPoint(iXaddition+iScale*dXPos,iYaddition+iScale*dYPos);

geoAtomEllipse[j]->SetRadio (dRadio*10);

geoAtomEllipse[j]->SetStartAngleRad(0.0);

geoAtomEllipse[j]->SetEndAngleRad(6.2832);            //360角度与弧度的换算

if(iFilled == 1)

{

COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);

geoAtomEllipse[j]->SetFilledColor(cr);            //填充整个圆的颜色

}

else

{

geoAtomEllipse[j]->SetFilled(false);

COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);

geoAtomEllipse[j]->SetColor(cr);              //圆圈的颜色

}

}

if (iType == 3)                                           //如果是圆弧

{

geoAtomEllipse[j]->SetCenterPoint(iXaddition+iScale*dXPos,iYaddition+iScale*dYPos);

geoAtomEllipse[j]->SetStartAngleRad(0.017453*dStartAngle);

geoAtomEllipse[j]->SetEndAngleRad(0.017453*dEndAngle);

COLORREF cr = RGB(ColorRGB[0],ColorRGB[1],ColorRGB[2]);

geoAtomEllipse[j]->SetColor(cr);              //圆弧的颜色

}

geoSymPoint[folds]->AddAtom(geoAtomEllipse[j]);   //将点要素添加到这个符号中

}                                    //结束点原子数据的循环

_demfile.close();                    //关闭文件

_demfile.clear();

}

}

效果图:

符号明码文件下载: http://files.cnblogs.com/wuhanhoutao/MapGIS6.7LegendExport.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值