卫星影像地理坐标系的转换

影像地理坐标获取以及坐标系之间的坐标转换

    GDALAllRegister();
	CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");//支持中文路径!
	///读入输入影像
	const char * pszFile = imgfile.c_str();
	GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);//使用只读方式打开图像 
	if (poDataset == NULL)
	{
		printf("File: %s不能打开!\n", pszFile);
	}
	GDALRasterBand *pBand_temp = NULL;
	pBand_temp = poDataset->GetRasterBand(1);
	///获取四角点经纬度
	double adfGeoTransform[6];
	if (poDataset->GetGeoTransform(adfGeoTransform) == CE_Failure)
	{
		printf("获取仿射变换参数失败");
	}
	std::cout << "仿射变换参数:" << endl << adfGeoTransform[0] << endl << adfGeoTransform[1] << endl << adfGeoTransform[2] << endl << adfGeoTransform[3] << endl << adfGeoTransform[4] << endl << adfGeoTransform[5] << endl;
	double X1 = adfGeoTransform[0] ;//经度
	double Y1 = adfGeoTransform[3];//纬度
	double X2 = adfGeoTransform[0] + iw * adfGeoTransform[1];
	double Y2 = adfGeoTransform[3];
	double X3 = adfGeoTransform[0] + iw  * adfGeoTransform[1];
	double Y3 = adfGeoTransform[3] + ih  * adfGeoTransform[5];
	double X4 = adfGeoTransform[0];
	double Y4 = adfGeoTransform[3] + ih * adfGeoTransform[5];
	/输出影像四个角点的地理坐标
	std::cout << Y1 << endl << X1 << endl;
	std::cout << Y2 << endl << X2 << endl;
	std::cout << Y3 << endl << X3 << endl;
	std::cout << Y4 << endl << X4 << endl;
	double X[4] = { X1, X2, X3 ,X4};
	double Y[4] = { Y1, Y2, Y3, Y4};
	int* flag = NULL;
	///若坐标系为非GWS84,则进行空间坐标系转化
	OGRSpatialReference obj_OSRS;
	obj_OSRS.SetWellKnownGeogCS("WGS84");

	const char* spr=poDataset->GetProjectionRef();
	OGRSpatialReference OSRS(spr);
	if (obj_OSRS.IsSame(&OSRS) == TRUE)
	{
		std::cout << "数据为GWS84地理坐标系统" << std::endl;
		///地理边界
		dataxml.topleft_latitude = Y1;
		dataxml.topleft_longitude = X1;
		dataxml.topright_latitude = Y2;
		dataxml.topright_longitude = X2;
		dataxml.bottomright_latitude = Y3;
		dataxml.bottomright_longitude = X3;
		dataxml.bottomleft_latitude = Y4;
		dataxml.bottomleft_longitude = X4;
	}
	else
	{
		OGRCoordinateTransformation *transf1=OGRCreateCoordinateTransformation(&OSRS, &obj_OSRS);
		if (transf1 == NULL)
		{
			std::cout << "数据不支持转化" << std::endl;
		}
		else
		{
			std::cout << "支持坐标系统之间转化" << std::endl;
		}
		transf1->TransformEx(4, X, Y, NULL, flag);
		///地理边界
		dataxml.topleft_latitude = Y[0];
		dataxml.topleft_longitude = X[0];
		dataxml.topright_latitude = Y[1];
		dataxml.topright_longitude = X[1];
		dataxml.bottomright_latitude = Y[2];
		dataxml.bottomright_longitude = X[2];
		dataxml.bottomleft_latitude = Y[3];
		dataxml.bottomleft_longitude = X[3];
		OGRCoordinateTransformation::DestroyCT(transf1);
	}
	
	/*if (OSRS.IsGeographic() == TRUE)
	{
		cout << "镶嵌数据为地理坐标系统" << endl;
	}
	if (OSRS.IsProjected()==TRUE)
	{

		cout << "镶嵌数据为投影坐标系统" << endl;
	}*/
	
	/*std::string srs_txt = srcdata + "\\" + dataname + ".txt";
	ofstream out_sr(srs_txt);
	out_sr << spr;
	out_sr.close();*/
	
	/*OGRSpatialReference::DestroySpatialReference(&obj_OSRS);
	OGRSpatialReference::DestroySpatialReference(&OSRS);*/

	/输出影像四个角点的地理坐标
	std::cout << Y[0] << endl << X[0] << endl;
	std::cout << Y[1] << endl << X[1] << endl;
	std::cout << Y[2] << endl << X[2] << endl;
	std::cout << Y[3] << endl << X[3] << endl;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月微暖寻春笋

赠人玫瑰手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值