为实现数据共享,有导出和采用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