大家好,本人最近在开发中碰到一个用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是否能正常工作??
麻烦大家支支招,这个问题困扰我好几天了。
------解决方案--------------------
你试了我的代码了吗?oSourceSRS和oTargetSRS变量应该都有值了吧
如果还没有,那可能是如下语句没有加入
GDALAllRegister();
OGRRegisterAll();