#ifndef  MAP_PRJ_H
#define  MAP_PRJ_H



#ifdef MAPPRJ_EXPORTS
#define MAPPRJ_API __declspec(dllexport)
#else
#define MAPPRJ_API __declspec(dllimport)
#endif






/*
* 文件名称:MapPrj.h
* 文件标识:
* 摘 要:地图坐标转换动态链接库,实现如下的功能:
*        1)地理坐标(经纬度)与高斯平面直角坐标之间的转换,包括正变换、反变换和换代计算;
*        2)空间大地坐标(L、B、H)与空间大地直角坐标(X、Y、Z)之间的相互变换;
*        3)不同大地坐标之间的转换,转换模型包括:三参数、四参数、和布尔莎七参数;
*        4)两点之间的水平距离、倾距和方位角的计算;
*        5)目标坐标的计算,已知一点经纬度,另一点相对它的方位角和距离,计算另外一点的经纬度坐标
*        6)不同平面直角坐标系之间的坐标转换,基于仿射变换的四参数模型
*
* 当前版本:1.0
* 作 者:郭新平
* 完成日期:2011年5月11日
* 修改时间:1)2013年11月10日,修改内容:按照标准DLL函数输出格式,提供包含DLL接口函数的头文件
*           2)增加平面直角坐标系之间的变换 
*/










//功能:求解高斯投影正变换,大地坐标LB转高斯平面直角坐标XY
//输入:	L	大地坐标的经度,以°为单位,经度范围【-180,180】
//			B	大地坐标的纬度,以°为单位
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系       
//			zoneWidth   投影带宽,分6°带和3°带

//输出:	X	高斯平面直角坐标系的北向坐标,以m为单位
//			Y	高斯平面直角坐标系的东向坐标,以m为单位
MAPPRJ_API void LB2XY(double &X, double &Y, 
				 	  const double L, const double B, 
					  const int coordType, const int zoneWidth);





//功能:求解高斯投影反变换,高斯平面直角坐标XY转大地经纬度L、B

//输入:	X	高斯平面直角坐标系的北向坐标,以m为单位
//			Y	高斯平面直角坐标系的东向坐标,以m为单位,注意:y包含投影带信息
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系       
//			zoneWidth   投影带宽,分6°带和3°带
   
//输出:	L	大地坐标系的经度,以°为单位,经度范围【-180,180】
//			B	大地坐标系的纬度,以°为单位
MAPPRJ_API void XY2LB(double &L, double &B, const double X, const double Y, 
					  const int coordType, const int zoneWidth);




//功能:求解两点之间的水平距离和方位角

//输入:	fromPtLon	起始点的经度,以°为单位
//			fromPtLat	起始点的纬度,以°为单位
//			toPtLon		终止点的经度,以°为单位
//			toPtLat		终止点的纬度,以°为单位
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系

//输出:	distance    两点之间的水平距离,	     以m为单位
//          azAngle		起始点到终止点的方位角,	 以°为单位
MAPPRJ_API void CalculateTwoPtsDistanceAzimuth(double &distance, double &azAngle, const double fromPtLon, const double fromPtLat, 
											   const double toPtLon, const double toPtLat, const int coordType);






//功能:求解两点连线的方位角

//输入:	fromPtLon	起始点的经度,以°为单位,,经度范围【-180,180】
//			fromPtLat	起始点的纬度,以°为单位
//			toPtLon		终止点的经度,以°为单位,,经度范围【-180,180】
//			toPtLat		终止点的纬度,以°为单位
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系

//输出:	azAngle		起始点到终止点的方位角,	 以°为单位,范围【0,360】
MAPPRJ_API void CalculateTwoPtsAzimuth(double &azAngle, 
												 const double fromPtLon, const double fromPtLat, 
												 const double toPtLon,   const double toPtLat, 
												 const int coordType);





//功能:求解两点间的水平距离

//输入:	fromPtLon	起始点的经度,以°为单位,经度范围【-180,180】
//			fromPtLat	起始点的纬度,以°为单位
//			toPtLon		终止点的经度,以°为单位,经度范围【-180,180】
//			toPtLat		终止点的纬度,以°为单位
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系
//输出:	dis			起始点到终止点的距离,	 以m为单位
MAPPRJ_API void CalculateTwoPtsDistance(double &dis, 
												 const double fromPtLon, const double fromPtLat, 
												 const double toPtLon,   const double toPtLat, 
												 const int coordType);






//功能:求解两点间的斜距

//输入:	ptForm[0]	起始点的经度,以°为单位,经度范围【-180,180】
//			ptForm[1]	起始点的纬度,以°为单位
//			ptForm[2]	起始点的高度,以m为单位

//输入:	ptTo[0]		结束点的经度,以°为单位,经度范围【-180,180】
//			ptTo[1]		结束点的纬度,以°为单位
//			ptTo[2]		结束点的高度,以m为单位
//          coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系


//输出:	dis			起始点与终止点的斜距,	 以m为单位
MAPPRJ_API void CalculateTwoPtsSlopeDistance(double &dis, 
													  const double *ptForm,  const double *ptTo, 
													  const int coordType);







//功能:计算目标点的经纬度

//输入:	fromPtLon	起始点的经度,以°为单位
//			fromPtLat	起始点的纬度,以°为单位
//			azAngle		起始点到目标点的方位角,以°为单位
//			distance	起始点与目标点的水平距离,以m为单位
//			coordType   坐标系类型:1为BJ54坐标,2为xian80坐标系,3为wgs84坐标系

//输出:	targetPtLon		目标点的经度,以°为单位
//			targetPtLat		目标点的纬度,以°为单位
MAPPRJ_API void CalculatePtCoordinate(double &targetPtLon, double &targetPtLat, 
												const double fromPtLon, const double fromPtLat, 
												const double azAngle, const double distance, 
												const int coordType);




//功能:同一个椭球体的空间直角坐标系转大地坐标系
//输入:空间直角坐标系,椭球体类型type(1为北京54坐标系,2为西安80坐标系,3为WGS84坐标系)
//输出:经纬高

//功能:WGS84坐标系转北京54坐标系,单点转换

//输入:	XYZ	    空间直角坐标,其中: 
//											  XYZ[0]------X,以m为单位
//											  XYZ[1]------Y,以m为单位
//											  XYZ[2]------Z,以m为单位
//			type	椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84

//输出:	LLA  	大地坐标,其中: 
//											  LLA[0]------经度,以°为单位
//											  LLA[1]------纬度,以°为单位
//											  LLA[2]------高度,以m为单位
MAPPRJ_API void XYZ2LLA(double *LLA, const double *XYZ, const int type);










//功能:同一个椭球体的大地坐标系转空间直角坐标系

//输入:	LLA  	大地坐标,其中: 
//											  LLA[0]------经度,以°为单位
//											  LLA[1]------纬度,以°为单位
//											  LLA[2]------高度,以m为单位
//			type	椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84

//输出:	XYZ	    空间直角坐标,其中: 
//											  XYZ[0]------X,以m为单位
//											  XYZ[1]------Y,以m为单位
//											  XYZ[2]------Z,以m为单位
MAPPRJ_API void LLA2XYZ(double *XYZ, const double *LLA, const int type);








//功能:北京54坐标系转WGS84坐标系,单点转换

//输入:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几

//输出:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
MAPPRJ_API void Bj54ToWGS84_SevenParameter(double *wgs84, const double *bj54, const double *sevenParameter);







//功能:北京54坐标系转西安80坐标系,单点转换

//输入:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几

//输出:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
MAPPRJ_API void Bj54ToXian80_SevenParameter(double *xian80, const double *bj54, const double *sevenParameter);








//功能:WGS84坐标系转北京54坐标系,单点转换

//输入:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几

//输出:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
MAPPRJ_API void WGS84ToBj54_SevenParameter(double *bj54, const double *wgs84, const double *sevenParameter);







//功能:WGS84坐标系转西安80坐标系,单点转换

//输入:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,	 尺度比ppm,百万分之几

//输出:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
MAPPRJ_API void WGS84ToXian80_SevenParameter(double *xian80, const double *wgs84, const double *sevenParameter);








//功能:西安80坐标系转北京54坐标系,单点转换

//输入:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几

//输出:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
MAPPRJ_API void Xian80ToBj54_SevenParameter(double *bj54, const double *xian80, const double *sevenParameter);









//功能:西安80坐标系转WGS84坐标系,单点转换

//输入:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
//			sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几

//输出:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
MAPPRJ_API void Xian80ToWgs84_SevenParameter(double *wgs84, const double *xian80, const double *sevenParameter);









//功能:北京54坐标系转WGS84坐标系,单点转换

//输入:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
//			ThreeParameter	三参数数值,其中:
//											  ThreeParameter[0]------dX,以m为单位
//											  ThreeParameter[1]------dY,以m为单位
//											  ThreeParameter[2]------dZ,以m为单位

//输出:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
MAPPRJ_API void Bj54ToWGS84_ThreeParameter(double *wgs84, const double *bj54, const double *ThreeParameter);









//功能:WGS84坐标系转北京54坐标系,单点转换

//输入:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
//			ThreeParameter	三参数数值,其中:
//											  ThreeParameter[0]------dX,以m为单位
//											  ThreeParameter[1]------dY,以m为单位
//											  ThreeParameter[2]------dZ,以m为单位

//输出:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
MAPPRJ_API void WGS84ToBj54_ThreeParameter(double *bj54, const double *wgs84, const double *ThreeParameter);














//功能:计算不同大地坐标系间转换的参数,采用布尔莎七参数模型

//输入:	nowLLA  	当前坐标系的大地坐标,其中nowLLA的数组长度为3*ptNum: 
//											  nowLLA[0+3*i]------经度,以°为单位
//											  nowLLA[1+3*i]------纬度,以°为单位
//											  nowLLA[2+3*i]------高度,以m为单位
//                                            0<= i < ptNum
//			nowType 	当前坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84
//      	aimLLA  	目标坐标系的大地坐标,其中的数组长度为3*ptNum:  
//											  aimLLA[0+3*i]------经度,以°为单位
//											  aimLLA[1+3*i]------纬度,以°为单位
//											  aimLLA[2+3*i]------高度,以m为单位
//                                            0<= i < ptNum
//			aimType 	目标坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84
//          ptNum       控制点的个数(即在当前坐标系和目标坐标系都有坐标的点的个数)


//输出:	sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之几
MAPPRJ_API void CalculateSevenParameters(double *sevenParameter, const double *nowLLA, const int nowType, 
												   const double *aimLLA, const int aimType, const int ptNum);








//功能:计算不同大地坐标系间转换的参数,采用布尔莎七参数模型

//输入:	nowXYZ  	当前坐标系的空间直角坐标,其中nowXYZ的数组长度为3*ptNum: 
//											  nowXYZ[0+3*i]------X,以m为单位
//											  nowXYZ[1+3*i]------Y,以m为单位
//											  nowXYZ[2+3*i]------Z,以m为单位
//                                            0<= i < ptNum
//			aimXYZ  	目标坐标系的空间直角坐标,其中aimXYZ的数组长度为3*ptNum: 
//											  aimXYZ[0+3*i]------X,以m为单位
//											  aimXYZ[1+3*i]------Y,以m为单位
//											  aimXYZ[2+3*i]------Z,以m为单位
//                                            0<= i < ptNum
//          ptNum       控制点的个数(即在当前坐标系和目标坐标系都有坐标的点的个数)

//输出:	sevenParameter	七参数数值,其中:
//											  sevenParameter[0]------dX,以m为单位
//											  sevenParameter[1]------dY,以m为单位
//											  sevenParameter[2]------dZ,以m为单位
//											  sevenParameter[3]------eX,以秒为单位
//											  sevenParameter[4]------eY,以秒为单位
//											  sevenParameter[5]------eZ,以秒为单位
//											  sevenParameter[6]------k,  尺度比ppm,百万分之一
MAPPRJ_API void CalculateSevenParameters(double *sevenParameter, const double *nowXYZ, const double *aimXYZ,  const int ptNum);











//功能:计算不同大地坐标系间转换的参数,采用三参数模型

//输入:	nowLLA  	当前坐标系的大地坐标,其中: 
//											  nowLLA[0]------经度,以°为单位
//											  nowLLA[1]------纬度,以°为单位
//											  nowLLA[2]------高度,以m为单位
//			nowType 	当前坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84
//      	aimLLA  	目标坐标系的大地坐标,其中:  
//											  aimLLA[0]------经度,以°为单位
//											  aimLLA[1]------纬度,以°为单位
//											  aimLLA[2]------高度,以m为单位
//			aimType 	目标坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84

//输出:	dx      	X轴的坐标平移量,以m为单位
//      	dy      	Y轴的坐标平移量,以m为单位
//      	dz      	Z轴的坐标平移量,以m为单位
MAPPRJ_API void CalculateThreeParameters(double &dx, double &dy, double &dz, const double *nowLLA, const int nowType,
												   const double *aimLLA, const int aimType);









//功能:计算不同大地坐标系间转换的参数,采用三参数模型

//输入:	nowXYZ  	当前坐标系的空间直角坐标,其中: 
//											  nowXYZ[0]------X,以m为单位
//											  nowXYZ[1]------Y,以m为单位
//											  nowXYZ[2]------Z,以m为单位
//			aimXYZ  	目标坐标系的空间直角坐标,其中:
//											  aimXYZ[0]------X,以m为单位
//											  aimXYZ[1]------Y,以m为单位
//											  aimXYZ[2]------Z,以m为单位

//输出:	dx      	X轴的坐标平移量,以m为单位
//      	dy      	Y轴的坐标平移量,以m为单位
//      	dz      	Z轴的坐标平移量,以m为单位
MAPPRJ_API void CalculateThreeParameters(double &dx, double &dy, double &dz,  const double *nowXYZ, const double *aimXYZ);










//功能:计算不同平面直角坐标系间转换的参数,采用四参数模型

//输入:	nowXY  	当前坐标系的空间直角坐标,其中nowXY的数组长度为2*ptNum: 
//											  nowXYZ[0+2*i]------X,以m为单位
//											  nowXYZ[1+2*i]------Y,以m为单位
//                                            0<= i < ptNum
//			aimXY  	目标坐标系的空间直角坐标,其中aimXYZ的数组长度为2*ptNum: 
//											  aimXYZ[0+2*i]------X,以m为单位
//											  aimXYZ[1+2*i]------Y,以m为单位
//                                            0<= i < ptNum
//          ptNum       控制点的个数(即在当前坐标系和目标坐标系都有坐标的点的个数)

//输出:	fourParameters	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位
MAPPRJ_API void CalculateFourParameters(double *fourParameters,  const double *nowXY, const double *aimXY, const int ptNum);










//功能:计算不同平面直角坐标系间转换的参数,采用四参数模型

//输入:	nowLLA  	当前坐标系的大地坐标,其中nowLLA的数组长度为2*ptNum: 
//											  nowXYZ[0+2*i]------经度,以°为单位
//											  nowXYZ[1+2*i]------纬度,以°为单位
//                                            0<= i < ptNum
//			nowType 	当前坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84
//			aimLLA  	目标坐标系的大地坐标,其中aimLLA的数组长度为2*ptNum: 
//											  aimLLA[0+2*i]------经度,以°为单位
//											  aimLLA[1+2*i]------纬度,以°为单位
//                                            0<= i < ptNum
//			aimType 	目标坐标系的椭球体类型,其中:
//											  1------北京54
//											  2------西安80
//											  3------WGS84
//          ptNum       控制点的个数(即在当前坐标系和目标坐标系都有坐标的点的个数)

//输出:	fourParameters	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

MAPPRJ_API void CalculateFourParameters(double *fourParameters,  const double *nowLLA, const int nowType,
												   const double *aimLLA, const int aimType, const int ptNum);








//功能:北京54坐标系转WGS84坐标系,单点转换

//输入:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
MAPPRJ_API void Bj54ToWGS84_FourParameter(double *wgs84, const double *bj54, const double *fourParameter);












//功能:北京54坐标系转西安80坐标系,单点转换

//输入:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
MAPPRJ_API void Bj54ToXian80_FourParameter(double *xian80, const double *bj54, const double *fourParameter);










//功能:WGS84坐标系转北京54坐标系,单点转换

//输入:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
MAPPRJ_API void WGS84ToBj54_FourParameter(double *bj54, const double *wgs84, const double *fourParameter);








//功能:WGS84坐标系转西安80坐标系,单点转换

//输入:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位

MAPPRJ_API void WGS84ToXian80_FourParameter(double *xian80, const double *wgs84, const double *fourParameter);








//功能:西安80坐标系转北京54坐标系,单点转换

//输入:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	bj54	北京54坐标系下的经纬高,其中: 
//											  bj54[0]------经度,以°为单位
//											  bj54[1]------纬度,以°为单位
//											  bj54[2]------高度,以m为单位
MAPPRJ_API void Xian80ToBj54_FourParameter(double *bj54, const double *xian80, const double *fourParameter);







//功能:西安80坐标系转WGS84坐标系,单点转换

//输入:	xian80	西安80坐标系下的经纬高,其中: 
//											  xian80[0]------经度,以°为单位
//											  xian80[1]------纬度,以°为单位
//											  xian80[2]------高度,以m为单位
//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	wgs84	WGS84坐标系下的经纬高,其中: 
//											  wgs84[0]------经度,以°为单位
//											  wgs84[1]------纬度,以°为单位
//											  wgs84[2]------高度,以m为单位

MAPPRJ_API void Xian80ToWgs84_FourParameter(double *wgs84, const double *xian80, const double *fourParameter);







//功能:不同平面直角坐标之间的变换,单点转换

//输入:	pFromCoord	一个平面直角坐标系下的X、Y坐标,其中: 
//											  pFromCoord[0]------X坐标,以m为单位
//											  pFromCoord[1]------Y坐标,以m为单位

//			fourParameter	四参数数值,其中:
//											  fourParameters[0]------xo,X方向坐标平移量,以m为单位
//											  fourParameters[1]------yo,Y方向坐标平移量,以m为单位
//											  fourParameters[2]------p,比例系数,无单位
//											  fourParameters[3]------q,比例系数,无单位

//输出:	pToCoord	目标平面直角坐标系下的X、Y坐标,其中:  
//											  pToCoord[0]------X坐标,以m为单位
//											  pToCoord[1]------Y坐标,以m为单位
MAPPRJ_API void PlaneCoordTransform_FourParameter(double *pToCoord, const double *pFromCoord, const double *fourParameter);






#endif