MapGIS 67中MAP_PARA结构体用于管理空间数据的投影参数,为一个MAP_PARA类型的变量赋值主要有两种方式,一种是定义变量后,对结构体中的各个字段直接赋值,一种是从现有空间数据中读取投影参数并赋给MAP_PARA类型的变量。
直接赋值的方式需要对MAP_PARA结构体定义有明确了解,其完整定义如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | typedef struct MAP_PARAstruct { char type; //空间数据水平坐标系类型 char unit; //空间数据水平坐标单位, double mapw; //空间数据图幅理论宽 type坐标系,unit单位. double maph; //................高 type坐标系,unit单位. char projType; //空间数据投影类型 char earthParam; //空间数据参考椭球体参数类型 double jd0; //空间数据数据左下角经度 , 数据单位统一采用UNIT_DMS格式 double wd0; //空间数据数据......纬度 , 数据单位统一采用UNIT_DMS格式 double djd; //空间数据数据经度跨度, 数据单位统一采用UNIT_DMS格式 double dwd; //空间数据数据纬度跨度, 数据单位统一采用UNIT_DMS格式 double rate; //空间数据数据水平比例尺倒数, 无单位 double lon; //空间数据中央经线经度 , 数据单位统一采用UNIT_DMS格式 double lon1; //空间数据双经线1 经度 , 数据单位统一采用UNIT_DMS格式 double lon2;//空间数据双经线2 经度 , 数据单位统一采用UNIT_DMS格式 double lat; //空间数据投影原点纬度 , 数据单位统一采用UNIT_DMS格式 double lat1; //空间数据双纬线1 纬度 , 数据单位统一采用UNIT_DMS格式 double lat2;//空间数据双纬线2 纬度 , 数据单位统一采用UNIT_DMS格式 double dx; //空间数据图纸坐标原点在投影坐标系中的X偏移值 ,type坐标系,unit单位. double dy; //....................................Y偏移 ,type坐标系,unit单位. char levelType; //空间数据大地水准面类型 double h; //空间数据大地水准面与参考椭球面之间的高差, 单位为 double H; //空间数据投影平面与大地水准面的高差, 单位为 double vRate; //空间数据垂向比例尺倒数 char vUnit; //空间数据垂向数据单位 char TICtype; //TIC点理论坐标系类型 char TICunit; //TIC点理论坐标单位 char infoUnit; //图形显示参数单位 double infoRatex; //图形显示参数单位值相对于当前数据单位值的x比例系数, 初始值必须赋0或1 double infoRatey; //........................................y比例系数, 初始值必须赋0或1 }MAP_PARA; |
其中,earthParam和projType数据项需要按照标准值定义进行赋值,MapGIS二次开发文件中通过定义宏的方式将这些标准值一一列出,在进行赋值时只需要填写宏名称,详细参数如下所示:
参考椭球体参数类型(MAP_PARA结构的earthParam字段值)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #define EP_UnDefine 0 //未指定"参考椭球体参数类型" #define EP_Beijing54 1 //" 1:北京54/克拉索夫斯基(1940年)椭球", //"Krasovsky" #define EP_Krasovsky 1 //" 1:北京54/克拉索夫斯基(1940年)椭球", //"Krasovsky" #define EP_Xian80 2 //" 2:西安80/1975 年I.U.G.G推荐椭球 ", #define EP_IUGG1975 2 //" 2:西安80/1975 年I.U.G.G推荐椭球 ", #define EP_IUGG1979 3 //" 3:1979 年I.U.G.G推荐椭球 ", #define EP_IUGG1983 4 //" 4:1983 年I.U.G.G推荐椭球", #define EP_UserDefine 5 //" 5:新的椭球参数(自定义) ", #define EP_IUGG1967 6 //" 6:1967 年I.U.G.G推荐椭球", #define EP_WGS84 7 //" 7:WGS-84 ", #define EP_GRS80 8 //" 8:GRS-80 ", #define EP_WGS72 9 //" 9:WGS-72 ", #define EP_Australia1965 10 //" 10:澳大利亚1965年椭球", #define EP_ 11 //" 11:海福特1910年椭球", #define EP_ 12 //" 12:克拉克1880年椭球", #define EP_ 13 //" 13:克拉克1866年椭球", #define EP_ 14 //" 14:白塞尔1841年椭球" |
投影类型(MAP_PARA结构的projType字段)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #define PRJ_LonLat 0 //地理坐标系(经纬度) #define PRJ_UTM 1 //通用横向墨卡托投影坐标系(UTM)", #define PRJ_Albers_Conical_EQ_Area 2 //亚尔勃斯等积圆锥投影坐标系",ALBERS CONICAL EQUAL AREA #define PRJ_Lambert_Conformal_Conic 3 //兰伯特等角圆锥投影坐标系",LAMBERT CONFORMAL CONIC #define PRJ_Mercator 4 //墨卡托(正轴等角圆柱)投影坐标系",MERCATOR #define PRJ_Gauss_Kruger 5 //高斯-克吕格(横切椭圆柱等角)投影",GAUSS-KRUGER #define PRJ_Polyconic 6 //普通多圆锥投影坐标系",POLYCONIC #define PRJ_EQ_Dist_Conic 7 //等距圆锥投影坐标系",EQUIDISTANT CONIC #define PRJ_Transverse_Mecator 8 //横向墨卡托(横切圆柱等角)投影",TRANSVERSE MECATOR #define PRJ_StereoGraphic 9 //球面投影(视点在球面)坐标系",STEREOGRAPHIC #define PRJ_Lambert_Azimuthal_EQ_Area 10 //兰伯特等积方位投影坐标系",LAMBERT AZIMUTHAL EQUAL_AREA #define PRJ_Azimuthal_EQ_Dist 11 //等距方位投影坐标系",AZIMUTHAL EQUIDISTANT #define PRJ_Gnomonic 12 //心射切面(球心)投影坐标系",GNOMONIC #define PRJ_Orthographic 13 //正射投影(视点无穷远)坐标系",ORTHOGRAPHIC #define PRJ_General_VER_NS_Perspective 14 //通用垂直近距透视(外心)投影",GENERAL VERTICAL NEAR_SIDE PERSPECTIVE #define PRJ_Sinusoidal 15 //正弦投影(伪圆柱)坐标系",SINUSOIDAL #define PRJ_Equirectangular 16 //等距离切圆柱(方格)投影坐标系",EQUIRECTANGULAR #define PRJ_Miller_Cylindrical 17 //米勒圆柱(透视正圆柱)投影坐标系",MILLER CYLINDRICAL #define PRJ_V_D_Grinten_I 18 //范德格林顿I投影坐标系",VAN DER GRINTEN I #define PRJ_Oblique_Mercator 19 //斜轴墨卡托投影坐标系",OBLIQUE MERCATOR (HOTINE) #define PRJ_Polar_Srereographic 20 //极点球面投影坐标系",POLAR SREREOGRAPHIC |
第二种赋值方式可以通过MapGIS提供的二次开发函数来实现,代码示例如下所示:
1 2 3 | MAP_PARA *LayerTYCS = new MAP_PARA; //图件的投影参数 short sArea = _PRJGetItemArea(m_mapPrj, nLayerIndex);// 图层工作区号 _GetMapParam(sArea, LayerTYCS); |
LayerTYCS就是从目标图层上获取的投影参数。