三种开源库实现GIS坐标转换

1 Proj.4

通过坐标系proj4字符串创建projPJ类型坐标系,调用pj_transform函数实现。

其中坐标系proj4字符串可在PROJ4-data文件夹中的epsg文件中搜索得到。

double x = dblSrcX;
double y = dblSrcY;
double z = dblSrcZ;

projPJ fRef, tRef;
tRef = pj_init_plus(strDstProj.c_str());
fRef = pj_init_plus(strSrcProj.c_str());

pj_transform(fRef, tRef, 1, 1, &x, &y, &z);

 

2 GDAL

GDAL底层坐标转换对Proj.4接口进行了封装,设置坐标系的方式变得更加多样。支持常用名、EPSG码、WKT、Proj4等多种方式。对坐标转换功能也进行了面向对象封装。

double dbx = dbLon;
double dby = dbLat;
double dbz = dbHgt;

OGRSpatialReference fRef, tRef;
fRef.SetWellKnownGeogCS("WGS84");
//EPSG::4547 CGCS2000 / 3-degree Gauss-Kruger CM 114E 
tRef.importFromEPSG(4547);

OGRCoordinateTransformation *coordTrans;
coordTrans = OGRCreateCoordinateTransformation(&fRef, &tRef);
coordTrans->Transform(1, &dbx, &dby, &dbz);

3 osgEarth

osgEarth坐标转换进一步调用了GDAL的坐标转换接口,使用更加方便。

osg::ref_ptr pSrcSRS;
osg::ref_ptr pDstSRS;

pSrcSRS = osgEarth::SpatialReference::createFromPROJ4(strSrcProj);
pDstSRS = osgEarth::SpatialReference::createFromPROJ4(strDstProj);

osg::Vec3d vecOut;
pSrcSRS->transform(vecPositon, pDstSRS, vecOut);

以上三种GIS开源库都可方便实现坐标转换。具体实践过程中,可根据项目开源库的依赖情况灵活选用。

 

 

 

你可能感兴趣的:(GIS)