|
|
#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 = 3, const int zoneWidth = 6);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//功能:求解高斯投影反变换,高斯平面直角坐标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 = 3, const int zoneWidth = 6);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//功能:求解两点之间的水平距离和方位角
|
|
|
|
|
|
//输入: 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 |