|
@@ -5,19 +5,19 @@
|
|
|
|
|
|
#include <math.h>
|
|
|
//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)
|
|
|
-static void GaussProjCal(double longitude, double latitude, double *X, double *Y)
|
|
|
+void GaussProjCal(double longitude, double latitude, double *X, double *Y)
|
|
|
{
|
|
|
int ProjNo = 0; int ZoneWide; ////带宽
|
|
|
- double longitude1, latitude1, longitude0, X0, Y0, xval, yval;
|
|
|
+ double longitude1, latitude1, longitude0, latitude0, X0, Y0, xval, yval;
|
|
|
double a, f, e2, ee, NN, T, C, A, M, iPI;
|
|
|
iPI = 0.0174532925199433; ////3.1415926535898/180.0;
|
|
|
ZoneWide = 6; ////6度带宽
|
|
|
a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数
|
|
|
- ////a=6378140.0; f=1/298.257; //80年西安坐标系参数
|
|
|
+ ////a=6378140.0; f=1/298.257; //80年西安坐标系参数
|
|
|
ProjNo = (int)(longitude / ZoneWide);
|
|
|
longitude0 = ProjNo * ZoneWide + ZoneWide / 2;
|
|
|
longitude0 = longitude0 * iPI;
|
|
|
- //latitude0 = 0;
|
|
|
+ latitude0 = 0;
|
|
|
longitude1 = longitude * iPI; //经度转换为弧度
|
|
|
latitude1 = latitude * iPI; //纬度转换为弧度
|
|
|
e2 = 2 * f - f * f;
|
|
@@ -26,13 +26,12 @@ static void GaussProjCal(double longitude, double latitude, double *X, double *Y
|
|
|
T = tan(latitude1)*tan(latitude1);
|
|
|
C = ee * cos(latitude1)*cos(latitude1);
|
|
|
A = (longitude1 - longitude0)*cos(latitude1);
|
|
|
- M = a * ((1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256)*latitude1 -
|
|
|
- (3 * e2 / 8 + 3 * e2*e2 / 32 + 45 * e2*e2*e2 / 1024)*sin(2 * latitude1)
|
|
|
- + (15 * e2*e2 / 256 + 45 * e2*e2*e2 / 1024)*sin(4 * latitude1) -
|
|
|
- (35 * e2*e2*e2 / 3072)*sin(6 * latitude1));
|
|
|
+ M = a * ((1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256)*latitude1 - (3 * e2 / 8 + 3 * e2*e2 / 32 + 45 * e2*e2
|
|
|
+ *e2 / 1024)*sin(2 * latitude1)
|
|
|
+ + (15 * e2*e2 / 256 + 45 * e2*e2*e2 / 1024)*sin(4 * latitude1) - (35 * e2*e2*e2 / 3072)*sin(6 * latitude1));
|
|
|
xval = NN * (A + (1 - T + C)*A*A*A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee)*A*A*A*A*A / 120);
|
|
|
yval = M + NN * tan(latitude1)*(A*A / 2 + (5 - T + 9 * C + 4 * C*C)*A*A*A*A / 24
|
|
|
- + (61 - 58 * T + T * T + 600 * C - 330 * ee)*A*A*A*A*A*A / 720);
|
|
|
+ + (61 - 58 * T + T * T + 600 * C - 330 * ee)*A*A*A*A*A*A / 720);
|
|
|
X0 = 1000000L * (ProjNo + 1) + 500000L;
|
|
|
Y0 = 0;
|
|
|
xval = xval + X0; yval = yval + Y0;
|
|
@@ -40,6 +39,8 @@ static void GaussProjCal(double longitude, double latitude, double *X, double *Y
|
|
|
*Y = yval;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
ivmapview::ivmapview()
|
|
|
{
|
|
|
image = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);//画布的初始化大小设为300*300,使用32位颜色
|
|
@@ -150,6 +151,7 @@ void ivmapview::paint()
|
|
|
double k1, k2;
|
|
|
|
|
|
|
|
|
+ // qDebug("y: %f ",xnavigation_data[1].gps_y);
|
|
|
//路径点的预处理
|
|
|
for (int i = 0; i < sizeN; i++)
|
|
|
{
|
|
@@ -196,9 +198,12 @@ void ivmapview::paint()
|
|
|
// lng[0] = DataUI->mInfo.gps_inshead;
|
|
|
// }
|
|
|
GaussProjCal(xgpsimu.lon(), xgpsimu.lat(), &gps_x, &gps_y);
|
|
|
+ // qDebug("now lon:%f lat:%f %f %f ",xgpsimu.lon(),xgpsimu.lat(),xnavigation_data[0].gps_lng,xnavigation_data[0].gps_lat);
|
|
|
x0[0] = gps_x;
|
|
|
y0[0] = gps_y;
|
|
|
lng[0] = xgpsimu.heading();
|
|
|
+
|
|
|
+// qDebug("%f %f %f %f",xnavigation_data[1].gps_x, xnavigation_data[1].gps_y,xnavigation_data[0].gps_lng,xnavigation_data[0].gps_lat);
|
|
|
//根据标定原点的选取,对路径点进行转化
|
|
|
for (int i = 1; i < sizeN; i++)
|
|
|
{
|
|
@@ -216,6 +221,8 @@ void ivmapview::paint()
|
|
|
y2[i] = y0[i] - k2 * 5;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
double kx = (double)(600) / (abs(y_max - y_min));//x轴的系数
|
|
|
double ky = (double)(600) / (abs(y_max - y_min));//y方向的比例系数
|
|
|
|
|
@@ -357,8 +364,19 @@ int ivmapview::GetType()
|
|
|
|
|
|
void ivmapview::setmap(std::vector<iv::MAP_GPS_INS> xnavigation_data)
|
|
|
{
|
|
|
+ unsigned int i;
|
|
|
+ for(i=0;i<xnavigation_data.size();i++)
|
|
|
+ {
|
|
|
+ double x,y;
|
|
|
+ GaussProjCal(xnavigation_data[i].gps_lng,xnavigation_data[i].gps_lat,&x,&y);
|
|
|
+ xnavigation_data[i].gps_x = x;
|
|
|
+ xnavigation_data[i].gps_y = y;
|
|
|
+ // qDebug("x %f y %f ",xnavigation_data[i].gps_lng,xnavigation_data[i].gps_lat);
|
|
|
+ }
|
|
|
mMutexMap.lock();
|
|
|
mnavigation_data = xnavigation_data;
|
|
|
+ mnTimeGPSUpdate = QDateTime::currentMSecsSinceEpoch();
|
|
|
+ qDebug("map updata.");
|
|
|
mMutexMap.unlock();
|
|
|
}
|
|
|
|