ソースを参照

change driver_map_xodrload. comment proj.

yuchuli 2 年 前
コミット
87ddf7ec4c

+ 1 - 1
src/driver/driver_gps_hcp2/driver_gps_hcp2.pro

@@ -47,7 +47,7 @@ if(contains(DEFINES,USE_UTM)){
 LIBS += -lGeographic
 }
 
-LIBS += -lproj
+#LIBS += -lproj
 
 
 

+ 10 - 56
src/driver/driver_gps_hcp2/main.cpp

@@ -11,71 +11,25 @@ iv::Ivfault *gfault = nullptr;
 
 #include "gnss_coordinate_convert.h"
 
-#include "proj.h"
+
 
 int main(int argc, char *argv[])
 {
 
 
-    PJ_CONTEXT *C;//用于处理多线程程序
-        PJ *P;//初始化投影目标
-        PJ *norm;//初始化投影目标
-        PJ_COORD ap, bp,cp;//初始化投影坐标
-
-
-        C = proj_context_create();//创建多线程,由于本示例为单线程,此处为展示作用
-
-
-        P = proj_create_crs_to_crs (C,
-                                    "WGS84",
-                                    "+proj=tmerc +ellps=WGS84 +datum=WGS84 +units=m +lat_0=28.3252659663377 +lon_0=117.810536087614 +no_defs", /* or EPSG:32632 */
-                                    NULL);
-  //      P = proj_create(C,"+proj=tmerc +ellps=WGS84 +datum=WGS84 +units=m +lat_0=28.3252659663377 +lon_0=117.810536087614 +no_defs");
-
-        if (0 == P) {
-            std::cout << "Failed to create transformation object." << stderr << endl;
-            return 1;
-        }//如果P中两个投影的字符串不符合proj定义,提示转换失败
-
-        norm = proj_normalize_for_visualization(C, P);
-
-            if (0 == norm) {
-
-                fprintf(stderr, "Failed to normalize transformation object.\n");
-
-                return 1;
-
-            }
-
-            proj_destroy(P);
-
-            P = norm;
-
-
-        ap = proj_coord(117.8080745, 28.3220144, 0, 0);//设定待转换的投影坐标,此处分别为经度,纬度,高程,时间
-        /* transform to UTM zone 32, then back to geographical */
-        bp = proj_trans(P, PJ_FWD, ap);//投影转换,fwd代表源投影转换成目标投影,INV代表目标投影转换为源投影
-        std::cout << "East: " << bp.enu.e << "; North:" << bp.enu.n <<endl;;//经纬度转化为xy坐标
 
-        bp.enu.e = 0;
-        bp.enu.n = 0;
-        bp = proj_trans(P, PJ_INV, bp);//xy坐标转化为经纬度坐标
-        std::cout << "Longitude: " << bp.lp.lam << "; Latitude: " << bp.lp.phi <<endl;;//lam为经度,phi为纬度
 
-        cp.enu.e = 0;
-        cp.enu.n = 0;
-        cp = proj_trans(P, PJ_INV, cp);//xy坐标转化为经纬度坐标
-    double lat1 = 28.3252660;
-    double lon1 = 117.8105351;
-    double xv1,yv1;
-    GaussProjCal(lon1,lat1,&xv1,&yv1);
+//    double lat1 = 28.3252660;
+//    double lon1 = 117.8105351;
+//    double xv1,yv1;
+//    GaussProjCal(lon1,lat1,&xv1,&yv1);
 
-    double lat2 = 28.3220144;
-    double lon2 = 117.8080745;
-    double xv2,yv2;
-    GaussProjCal(lon2,lat2,&xv2,&yv2);
+//    double lat2 = 28.3220144;
+//    double lon2 = 117.8080745;
+//    double xv2,yv2;
+//    GaussProjCal(lon2,lat2,&xv2,&yv2);
 
-    qDebug("relx: %f rely::%f ",xv2-xv1,yv2-yv1);
+//    qDebug("relx: %f rely::%f ",xv2-xv1,yv2-yv1);
 
     showversion("driver_gps_hcp2");
     QCoreApplication a(argc, argv);

+ 8 - 1
src/driver/driver_map_xodrload/driver_map_xodrload.pro

@@ -85,6 +85,13 @@ if(contains(DEFINES,USE_UTM)){
 LIBS += -lGeographic
 }
 
-LIBS += -lproj
+
+#DEFINES += USE_TMERS
+if(contains(DEFINES,USE_TMERS)){
+INCLUDEPATH += /home/nvidia/Downloads/proj-8.2.1/src
+LIBS += /home/nvidia/Downloads/proj-8.2.1/build/lib/libproj.so.22
+}
+
+#LIBS += -lproj
 
 

+ 16 - 0
src/driver/driver_map_xodrload/main.cpp

@@ -39,13 +39,19 @@
 #include "service_roi_xodr.h"
 #include "ivservice.h"
 
+
+#ifdef USE_TMERS
 #include "proj.h"
 
+//#include "projects.h"
+
 
 PJ_CONTEXT *C;//用于处理多线程程序
     PJ *P;//初始化投影目标
     PJ *norm;//初始化投影目标
 
+#endif
+
 
 OpenDrive mxodr;
 xodrdijkstra * gpxd;
@@ -337,6 +343,7 @@ void CalcLatLon(const double lat0,const double lon0,const double hdg0,
     while(hdg < 0)hdg = hdg + 360;
     while(hdg >= 360)hdg = hdg - 360;
 
+#ifdef USE_TMERS
     if(gstrcdata.length()>3)
     {
         PJ_COORD cp;//初始化投影坐标
@@ -346,8 +353,13 @@ void CalcLatLon(const double lat0,const double lon0,const double hdg0,
         lon = cp.lp.lam;
         lat = cp.lp.phi;
     }
+
+#endif
+
 }
 
+
+
 class xodrobj
 {
 public:
@@ -1244,6 +1256,8 @@ int main(int argc, char *argv[])
 
     std::cout<<" cdata: "<<gstrcdata.data()<<std::endl;
 
+
+#ifdef USE_TMERS
     if(gstrcdata.length()>3)
     {
         C = proj_context_create();//创建多线程,由于本示例为单线程,此处为展示作用
@@ -1275,6 +1289,8 @@ int main(int argc, char *argv[])
             P = norm;
     }
 
+#endif
+
 
     glat0 = atof(strlat0.data());
     glon0 = atof(strlon0.data());