在做坐标转换时通常会涉及到:3 度带、6 度带、中央子午线经度的计算,下面使用两种方法对其进行展开计算;
1、什么是3°带?
三度带就是地球的一周(360度)按照经度方向三度一个划分为120份;
2、什么是6°带?
六度带则是划分成60份。三度带的经度需要进行换算,主要是找到带区名,如12区,代表其经度从36起算,折成六度带,就是6区;
一、常规推理法
1、已知投影坐标,判断投影坐标是 3 度带还是 6 度带坐标
如(4231898,21655933)其中21即为带号,同样所定义的东伪偏移值也需要加上带号,如21带的东伪偏移值为21500000米。假如你的工作区经度在120度至126度范围,则该坐标系为6度带坐标系,该带的中央经度为123度。关注并星标《测绘之家》微信公众号,获取更多测绘测量技术干货!
如(2949320,36353822)其中36即为带号,已知该地点位于贵阳市附近,而从地图上我们看到贵阳大概的经度是东经108度左右,因此可以36*3=108,所以该坐标系为3度带坐标系,该带的中央经度为108度。而不可能为6度带:36*6=216。
注:(4231898,21655933)、(2949320,36353822)都是指投影坐标;
2、已知投影坐标,计算中央子午线经度
通过上述操作判断出该投影坐标是 3 度带还是 6 度带后即可计算中央子午线经度;
int N, L0;
//y是投影坐标中的纵坐标
N = (int)(y / 1000000.0); //当地带号,y坐标对1000000(常量)取整
//如果是6°带
L0 = N * 6 - 3; //中央子午线经度
//如果是3°带
L0 = N * 3;
二、使用 gdal 直接从 .tif 影像中读取
GDALAllRegister();
GDALDataset* podataset = (GDALDataset*)GDALOpen("..\\testImage\\wgs1.tif", GA_ReadOnly);
//获取投影
const char* proj = podataset->GetProjectionRef();
OGRSpatialReference* _geos = nullptr; //WKT地理坐标
OGRSpatialReference _proj; //WKT投影坐标
_proj.SetFromUserInput(proj);
//投影方式
const char* proj_ = _proj.GetAttrValue("PROJCS");
//作用类似于判空
if (_proj.IsLocal())
{
proj_ = _proj.GetAttrValue("LOCAL_CS");
}
cout << proj_ << endl;
//直接获取中央子午线经度
double L0 = _proj.GetProjParm("central_meridian", 0.0);