大家好,本人最近在开发中碰到一个用gdal库做动态投影时调用失败的问题,烦请大家帮忙支支招
源码如下:
//资源环境切换
AFX_MANAGE_STATE(AfxGetStaticModuleState());
OGRSpatialReference oSourceSRS;
OGRSpatialReference oTargetSRS;
OGRCoordinateTransformation* poCT = NULL;
CString strFilePath = CCommon::GetAppPath() + "Data
CPLSetConfigOption("GDAL_DATA", strFilePath );";//设置gdal环境路径
CString ssss = "wgs84坐标系";//坐标参考字符串太长,就写个意思一下的
char* TransName1[2] = {NULL, NULL};
TransName1[0] = ssss.GetBuffer();
TransName1[1] = NULL;
int err = oTargetSRS.importFromESRI(TransName1);//此处返回值为0,说明环境设置没问题
//int err = oTargetSRS.importFromEPSG(atoi(strTRFCode));
strTransName = "西安80坐标系";
char* TransName[2] = {NULL, NULL};
TransName[0] = strTransName.GetBuffer();
TransName[1] = NULL;
err = oSourceSRS.importFromESRI(TransName);//此处返回值也为0,说明环境设置没问题
poCT = OGRCreateCoordinateTransformation(&oSourceSRS, &oTargetSRS);
poCT 的值死活都是为空,上网查原因,有一个说法是可能是gdal内部不支持这种转换,但是我可以肯定地排除不是这个原因毕业论文 ,因为同样的代码,我写在一个对话框程序里,poCT的返回是有值的。另外,看到一个也转换不成功的例子,是因为proj动态库没有导入所致,可是我该导入的都导入了,测试程序中执行是没问题的。
我是在一个com组件中暴露出来的方法中调用gdal的坐标转换的功能的,不知在com组件中,gdal是否能正常工作??
麻烦大家支支招,这个问题困扰我好几天了。
我把我的代码给你一份参考一下吧
为了不泄露本地坐标的投影,我用*****替换了具体数值。
importFromESRI这个方法 我没用过。我都是构建坐标投影字符串来转换的
C/C++ code12345678910111213 CString strPrj = _T("PROJCS[\"TRANSVERSE\",GEOGCS[\"OOO\",DATUM[\"GCS_Krasovsky_1940\",SPHEROID[\"KRASOVSKY\",6378245.0,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120.583333],PARAMETER[\"scale_factor\",1.0],PARAMETER[\"false_easting\",******],PARAMETER[\"false_northing\",-******],UNIT[\"meter\",1]]"); char* pPrj = T2A(strPrj); oSourceSRS.importFromWkt(&pPrj); oTargetSRS.SetWellKnownGeogCS("WGS84"); poCT = OGRCreateCoordinateTransformation( &oSourceSRS, &oTargetSRS ); _poCT = OGRCreateCoordinateTransformation
oSourceSRS和oTargetSRS变量应该都有值了吧
如果还没有,那可能是如下语句没有加入
GDALAllRegister();
OGRRegisterAll();