|
@@ -39,6 +39,14 @@
|
|
|
#include "service_roi_xodr.h"
|
|
|
#include "ivservice.h"
|
|
|
|
|
|
+#include "proj.h"
|
|
|
+
|
|
|
+
|
|
|
+PJ_CONTEXT *C;
|
|
|
+ PJ *P;
|
|
|
+ PJ *norm;
|
|
|
+
|
|
|
+
|
|
|
OpenDrive mxodr;
|
|
|
xodrdijkstra * gpxd;
|
|
|
bool gmapload = false;
|
|
@@ -52,6 +60,8 @@ bool gbExtendMap = true;
|
|
|
static bool gbSideEnable = false;
|
|
|
static bool gbSideLaneEnable = false;
|
|
|
|
|
|
+static std::string gstrcdata;
|
|
|
+
|
|
|
static void * gpa;
|
|
|
static void * gpasrc;
|
|
|
static void * gpmap;
|
|
@@ -311,6 +321,8 @@ void CalcLatLon(const double lat0,const double lon0,const double hdg0,
|
|
|
const double x,const double y,const double xyhdg,
|
|
|
double &lat,double & lon, double & hdg)
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
double x0,y0;
|
|
|
GaussProjCal(lon0,lat0,&x0,&y0);
|
|
|
double x_gps,y_gps;
|
|
@@ -324,6 +336,16 @@ void CalcLatLon(const double lat0,const double lon0,const double hdg0,
|
|
|
|
|
|
while(hdg < 0)hdg = hdg + 360;
|
|
|
while(hdg >= 360)hdg = hdg - 360;
|
|
|
+
|
|
|
+ if(gstrcdata.length()>3)
|
|
|
+ {
|
|
|
+ PJ_COORD cp;
|
|
|
+ cp.enu.e = x;
|
|
|
+ cp.enu.n = y;
|
|
|
+ cp = proj_trans(P, PJ_INV, cp);
|
|
|
+ lon = cp.lp.lam;
|
|
|
+ lat = cp.lp.phi;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class xodrobj
|
|
@@ -1218,6 +1240,41 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
std::string strsidelaneenable = xp.GetParam("sidelaneenable","false");
|
|
|
|
|
|
+ gstrcdata = xp.GetParam("cdata","");
|
|
|
+
|
|
|
+ std::cout<<" cdata: "<<gstrcdata.data()<<std::endl;
|
|
|
+
|
|
|
+ if(gstrcdata.length()>3)
|
|
|
+ {
|
|
|
+ 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",
|
|
|
+ NULL);
|
|
|
+
|
|
|
+
|
|
|
+ if (0 == P) {
|
|
|
+ std::cout << "Failed to create transformation object." << stderr << std::endl;
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
glat0 = atof(strlat0.data());
|
|
|
glon0 = atof(strlon0.data());
|