OGR坐标变换
利用GDAL/OGR进行投影变化(VC++中),相关的函数都在ogr_srs_api.h中了。
Lilin大虾写得是关于phython中进行转换的,所以他利用的是这样的。
ct = osr.CoordinateTransformation(osrobj,osrobj3)
ct.TransformPoint(590000,4928000)
在vc中,利用OGRSpatialReference对象的Transform()或TransformEx()方法可以实现不同投影系统之间以及投影坐标和地理坐标之间的转换(两者的区别我还不知道)。
OGRSpatialReference * ShpSpf;//
OGRSpatialReference Raster_spf;
ShpSpf=polayer->GetSpatialRef(); //获取矢量图像的投影信息
Raster_spf=poDataset->GetProjectionRef();//获取栅格图像的投影信息
OGRCoordinateTransformation *poCT;
if (!(ShpSpf->IsProjected()))//判断是否经过投影
{
if(ShpSpf->IsGeographic())//判断是否有地理坐标信息
{
AfxMessageBox("没有投影信息,只有地理信息!");
return;
}
else
{
AfxMessageBox("没有地理坐标和投影信息!");
return;
}
}
int spf_flag=ShpSpf->IsSame(&Raster_spf);//spf_flag标示两个投影是否一致,如果一样则为1,反之为0
1、不同投影系统之间转换:
poCT=OGRCreateCoordinateTransformation(ShpSpf,&Raster_spf);
// poCT->TransformPoint();
if((poCT==NULL))
{
AfxMessageBox("不支持该类型的坐标转换!");
shape=3;//不再画这一层数据
return;
}
if(!poCT->TransformEx(ipoints,Arrayx,Arrayy))
{
AfxMessageBox("坐标转换失败!");
shape=3;//不再画这一层数据
return;
}
2、投影坐标到地理坐标的转换:
OGRSpatialReference *tempsp;
tempsp=Raster_spf.CloneGeogCS();//获取投影系统中的地理坐标信息
OGRCoordinateTransformation *poCT1;
//投影坐标向地理坐标转换。
poCT1=OGRCreateCoordinateTransformation(&Raster_spf,tempsp);
//&Raster_spf,tempsp顺序颠倒过来就是从地理坐标向投影坐标转换了
if(poCT1->TransformEx(1,&Arrayx[1],&Arrayy[1]))
{
}