经纬度、坐标系定义,在GDAL中地理坐标转换及屏幕显示

(经纬度坐标系,空间直角坐标系,天文坐标系,地理坐标系(大地坐标系),参心坐标系,地心坐标系,投影坐标系,一般读者多有困扰,上述坐标系各有侧重点以及不同的参照或者对照形式。应该说经纬度坐标系与空间直角坐标系更多层次上是从数学上建立两种不同坐标系;天文坐标系,地理坐标系更多从是否以地球为参照建立两种不同坐标系;而参心坐标系、地心坐标系则以坐标系原点是否在地球质心建立两种不同坐标系;如果经纬度坐标系和空间直角坐标系表现为三维的维度,那么经纬度坐标系、空间直角坐标系和投影坐标系更多是从三维到二维转换建立坐标系,倘若是三维新增加的维度,还有大地高、正高、正常高、球心到点的距离等区别,具体表现形式也需要以实际情况为准)。

经线:

        经线也称子午线,是人类为度量方便而假设出来的辅助线,定义为地球表面连接南北两极的大圆线上的半圆弧。任两根经线的长度相等,相交于南北两极点。每一根经线都有其相对应的数值,称为经度。经线指示南北方向。

本初子午线 :

       本初子午线又称“首子午线”或“零子午线”,是计算东西经度的起点,以经过英国伦敦东南格林尼治的经线为本初子午线,作为计算地理的起点和世界标准“时区”的起点。本初子午线以东为东经,以西为西经,全球经度测量均以本初子午线与赤道的交点E点作为经度原点。

 子午线命名的由来:

      某一天体视运动轨迹中,同一子午线上的各点该天体在上中天(午)与下中天(子)出现的时刻相同。

纬线:

    纬线是人类为度量方便而假设出来的辅助线,定义为地球表面某点随地球自转所形成的轨迹。纬线平行于赤道,经线垂直于赤道,任何一根纬线都是圆形而且两两平行。纬线的长度是赤道的周长乘以纬线的纬度的余弦,所以赤道最长,离赤道越远的纬线,周长越短,到了两极就缩为0。纬线指示东西方向。

北回归线(23°26' 22" N)

      太阳在北半球能够直射到的离赤道最远的位置,其纬度值为黄赤交角,是一条纬线,大约在北纬23度26分的地方。

赤道(0°N)

     通过地球中心划一个与地轴成直角相交的平面,在地球表面相应出现一个和地球的极距离相等的假想圆圈。赤道的纬度是0°。是地球表面的点随地球自转产生的轨迹中周长最长的圆周线,赤道半径 6378.137Km ;两极半径 6359.752Km;平均半径 6371.012Km ;赤道周长 40075.7Km。如果把地球看做一个绝对的球体的话,赤道距离南北两极相等,是一个大圆。它把地球分为南北两半球,其以北是北半球,以南是南半球,是划分纬度的基线,是南北纬线的起点。

南回归线(23° 26' 22" S)

       太对应于北回归线,阳在地球上的直射点在一年内到达的最南点所在的纬线。

经度:

     是地球上一个地点离一根被称为本初子午线的南北方向走线以东或以西的度数。它是通过某地的经线面与本初子午面所成的二面角,在本初子午线以东的经度叫东经,在本初子午线以西的叫西经。东经用“E”表示,西经用“W”表示。比如:E116.33533°,W116.33533°.经度的每一度被分为60角分,每一分被分为60秒。也可以用小数点位表示。有时西经也被写成负数,如:-116.33533°。

纬度

      是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N;位于赤道以南的点的纬度称南纬,记为S。

纬度数值在0至30度之间的地区称为低纬度地区;纬度数值在30至60度之间的地区称为中纬度地区;纬度数值在60至90度之间的地区称为高纬度地区。赤道是0°纬线,北纬度的最大值为90°,即北极点;南纬度的最大值为90°,即南极点。

地面法线

     垂直于某地参考椭球体表面的线。

经纬度(地理)坐标系       

经纬度是经度与纬度的合称,组成一个经纬度坐标系统。如果特指地球,又称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。若以球心与地球质心重合的地球椭球面为基准面所建立的大地坐标系则为地心大地坐标系。

        一个经度、一个纬度、一个球心到点的距离,一起确定地球上一个地点的精确位置。一个完整的图面地理坐标系统由一个完整的参考椭球体系和一个完整的投影体系组成。

        在地理坐标系中,球体被分为多个均等的部分,通常称为度;在一些国家也使用百分度。一个圆是 360°或 400 百分度。每度可细分为 60 分,每分包含 60 秒。

        地理坐标系包含纬线和经线。各条经线朝南北方向延伸,用于测量本初子午线东西的度数。值的范围介于 -180 到 +180°之间。纬线朝东西方向延伸,用于测量赤道南北的度数。值的范围介于 +90°(北极点)到 -90°(南极点)之间。

        赤道位于 0 度纬线上。通常,北半球具有正的纬度测量值,而南半球具有负的纬度测量值。经度用于测量东西方向的角度。经度测量值通常基于本初子午线,它是一条从北极点通过英格兰格林尼治并一直延伸到南极点的假想线。此角度是 0 经度。本初子午线往西通常记为负经度,往东记为正经度。例如,加利福尼亚州洛杉矶的纬度约为“正 33 度,56 分”,经度约为“负 118 度,24 分。”

 空间直角坐标系

空间任意选定一点O,过点O作三条互相垂直的数轴Ox,Oy,Oz,它们都以O为原点且具有相同的长度单位。这三条轴分别称作x轴(横轴),y轴(纵轴),z轴(竖轴),统称为坐标轴。它们的正方向符合右手规则,即以右手握住z轴,当右手的四个手指x轴的正向以  角度转向y轴正向时,大拇指的指向就是z轴的正向。这样就构成了一个空间直角坐标系,称为空间直角坐标系O-xyz。定点O称为该坐标系的原点。若使用地球质心作为坐标系的原点,则为地心空间直角坐标系。

天文坐标系和大地坐标系

       由经线和纬线构成两组互相正交的曲线坐标网叫地理坐标网。由经纬度构成的地理坐标系统又叫地理坐标系。按照是否原点是否在地球上,坐标系可分为天文坐标和大地地理坐标。天文坐标是用天文测量方法确定的,大地地理坐标是用大地测量方法确定的。我们在地球椭球面上所用的地理坐标系属于大地地理坐标系,简称大地坐标系。大地坐标系的确立包括选择一个椭球,对椭球进行定位和确定大地起算数据。一个形状、大小和定位、定向都已确定的地球椭球叫参考椭球。参考椭球一旦确定,则标志着大地坐标系已经建立。

参心坐标系

参心坐标系是以参考椭球的几何中心为原点的大地坐标系。“参心”意指参考椭球的中心。54坐标系,80坐标系都有着自己的参考椭球,他们是参心坐标系。随之而来的,也便有参心大地坐标系和参心空间直角坐标系。

地心坐标系

 地心坐标系以地球质心为原点建立的空间直角坐标系,或以球心与地球质心重合的地球椭球面为基准面所建立的大地坐标系。CGCS2000原点在地球质心,属于地心坐标系。

当然,你原本就不知道原点与地球质心是不是重合,在你眼里,它是参心还是地心也就不重要了。

经纬度网

       大地坐标系是以椭球面为基准面的坐标,地面点P的位置用大地经度L、大地纬度B和大地高H表示。当点在椭球面上时,仅用大地经度和大地纬度表示。虽然如此,但是,大地坐标系与经纬度网并不一致,大地坐标系以球面的形式描述了真实的地球坐标,而经纬度网有时在制图时,为满足平面作图的需要(即地图投影),参照一定的投影公式制作成平面地图,并在图上套上经纬线。

投影坐标系

        在球面坐标上进行测量非常困难,所以地理数据通常都要投影到平面坐标上。投影坐标系统是定义在一个二维平面的坐标系统,与地理坐标系统不同的是,投影坐标系统在二维平面上有着恒定的长度、角度和面积,投影坐标系统总是基于地理坐标系统,而地理坐标系统又是基于球体或椭球体。在投影坐标系统中,以网格中心为原点,使用x,y坐标来定位,每个位置用两个值确定(水平方向和垂直方向)。

 

常用作世界地图的投影有墨卡托投影、高尔投影、摩尔威特投影、等差分纬线多圆锥投影、格灵顿投影、桑森投影、乌尔马耶夫投影等。而横轴墨卡托投影即为高斯-克吕格投影,这是我国各省区常用的一种坐标体系。

 高斯-克吕格投影体系

       它是一种横轴、椭圆柱面、等角投影。其投影过程可简述如下:椭圆柱面与地球椭球在某一子午圈上相切,这条子午圈叫做投影的中央子午线,又称轴子午线,它也是高斯投影后的平面直角坐标系的纵轴(一般定义为x轴);地球的赤道面与椭圆柱面相交成一条直线,这条直线与中央子午线正交,它是平面直角坐标系的横轴(y轴);把椭圆柱面展开,就得出以(x,y)为坐标的平面直角坐标系。按一定经差将地球椭球面划分成若干投影带,这是高斯投影中限制长度变形的最有效方法。分带时既要控制长度变形使其不大于测图误差,又要使带数不致过多以减少换带计算工作,据此原则将地球椭球面沿子午线划分成经差相等的瓜瓣形地带,以便分带投影。通常按经差6度或3度分为六度带或三度带。六度带自0度子午线起每隔经差6度自西向东分带,带号依次编为第1、2…60带。三度带是在六度带的基础上分成的,它的中央子午线与六度带的中央子午线和分带子午线重合,即自1.5度子午线起每隔经差3度自西向东分带,带号依次编为三度带第 1、2…120带。我国的经度范围西起73°东至135°,可分成六度带十一个,各带中央经线依次为75°、81°、87°、……、117°、123°、129°、135°,或三度带二十二个。

 

经纬度格式

经纬度格式分为三种:度、度-分、度-份-秒

1.   ddd.ddddd °【度 . 度 格式】的十进制小数部分(5位)

2.   ddd°mm.mmm’ 【度 . 分 . 分 格式】的十进制小数部分(3位)

3.  ddd°mm’ss’’ 【度 . 分 . 秒 格式】

转换公式

度分转换:
将度分单位数据转换为度单位数据
度=度+分/60
例如:
经度 = 116°20.12’
纬度 = 39°12.34’
经度 = 116 + 20.12 / 60 = 116.33533°
纬度 = 39 + 12.34 / 60 = 39.20567°

度分秒转换:
将度分秒单位数据转换为度单位数据
度 = 度 + 分 / 60 + 秒 / 60 / 60
例如:
经度 = 116°20’43”
纬度 = 39°12’37”
经度 = 116 + 20 / 60 + 43 / 60 / 60 = 116.34528°
纬度 = 39 + 12 / 60 + 37 / 60 / 60 = 39.21028°

在实际的处理中,计算相应像元点的地理坐标:

GDAL数据集有两种模式描述栅格位置(用点/线坐标系)以及地理参考坐标系之间的关系:首要的也是最普遍的是使用仿射转换,另一种则是GCPs(多控制点定位方式)

 

仿射变换

1用GDAL获取四个角点的地理坐标

GDALDataset::::GetGeoTransform()

声明一个存储变量:

double        geoTransform[6];

geoTransform[0]是左上角像元的东坐标;

geoTransform[3]是左上角像元的北坐标;

geoTransform[1]是影像宽度上的分辨率;

geoTransform[5]是影像高度上的分辨率;

geoTransform[2]是旋转, 0表示上面为北方;

geoTransform[4]是旋转, 0表示上面为北方;

2相应的放射变换公式:

Xp = geoTransform [0] +Xpixel*geoTransform [1]+Yline*geoTransform [2];

Yp = geoTransform [3] + Xpixel*geoTransform [4] + YlineL*geoTransform [5];

其中Xpixel、YlineL分别地物表示单纯地影像上图像遍历时(x,y)坐标表示,点/线坐标系是从左上角(0,0)点到右下角,也就是坐标轴从左到右增长,从上到下增长的坐标系。

2 GCPs控制点坐标变换:

int nGCPs=poDataset->GetGCPCount();   //获得控制点数目

const GDAL_GCP* pGCPs = poDataset->GetGCPs(); //获得GCP控制点,是一个字段

double  *geoTransform  ;//与前面的仿射变换的相似
GDALGCPsToGeoTransform( nGCPs, pGCPs, geoTransform, TRUE ); //由GCPs获得仿射变换参数

int x,y;//任意点影像行列数

double xx,yy; //任意点影像对应的地理坐标

double ex[nGCPs];//不同控制点算出的地理坐标X
double ey[nGCPs];//不同控制点算出的地理坐标Y

double pRadio[nGCPs]; //任意点相对与控制点的权值

double total=0; //权值和

double sx=0; //pRadio[i]*ex[i]
double sy=0; //pRadio[i]*ey[i]

for(int num=0;num<nGCPs;num++)
   {
        double gX,gY,tX,tY;
        tX=pGCPs[num].dfGCPPixel; //GCP位置X
        tY=pGCPs[num].dfGCPLine;  //GCP位置Y
        gX=pGCPs[num].dfGCPX;     //地理位置X
        gY=pGCPs[num].dfGCPY;     //地理位置Y

        pRadio[num]=1/(double)(sqrt((tX-x)*(tX-x)+(tY-y)*(tY-y)));
        total+=pRadio[num];

        ex[num]=gX+(x-tX)*geoTransform[1];
        ey[num]=gY+(y-tY)*geoTransform[5];

        sx+=pRadio[num]*ex[num];
        sy+=pRadio[num]*ey[num];
     }

xx=sx/total;

yy=sy/total;

 

屏幕显示

对于遥感图像而言,如果想显示在屏幕上,由于图像过大或者屏幕的关系,常常做成金字塔影像,或者拉伸图像数据,使图像产生变形以此来满足显示的需求。

假如已经将经纬度转换成小数点位,即以度为单位,已知道屏幕的高(y)和宽(h),地理坐标区域的范围(maxLon,minLon,maxLat,minLat)..这里我们知道了这些已知的参数

我们可以算出每像素所代表的经度和纬度(有人称这个为比例因子):
        公式:scaleX = h/((maxLon-minLon)*3600)  ----------X轴上每像素代表的经度秒数;
        公式:scaleY = y/((maxLat-minLat)*3600)  -----------Y轴上每像素代表的纬度秒数;

算出该地理坐标区域中的任何一点(lon,lat)在屏幕上的坐标

公式:screenX = lon*3600/scaleX;  ---------屏幕坐标X轴坐标
公式:screenY = lat*3600/scaleY; ----------屏幕坐标Y轴坐标,  

lon和lat为任意地点的地理坐标,前面的仿射变换已经算出

假如需要占满整个屏幕:

 公式:minX = minLon*3600/scaleX;    区域左边置最左端
公式:minY = minLat*3600/scaleY;     区域上面置最上端

当地地理范围区域占满整个屏幕时,我们需要用到第三步计算出来的 screenX和screenY两个参数
该区域中的任何一点的公式如下:   
 公式:X = screenX - minX = (lon - minLon)*3600/scaleX;     
由于纬度的方向和屏幕Y轴是相反的, 
 公式:screenMaxLat = (maxLat - minLat)*3600/scaleY;
 公式:screenLat = (lat - minLat)*3600/scaleY;
公式:Y = screenMaxLat - screenLat = (maxLat - lat)*3600/scaleY; 

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值