经纬度到屏幕像素点的换算方法

转自http://blog.csdn.net/hanghwp/archive/2008/11/24/3361900.aspx

经纬度到屏幕像素点的换算方法
最近做的项目中有个机能:由给出的经纬度坐标,在屏幕描绘相应的位置点,以此作出简易地图。之前在网上找过,相关内容不是很具体贴和。今天就自己做的,做个总结贴上来。
相关问题点:1)地球是不规则的球体,两极扁,赤道鼓。不能简单地作为圆球体来计算。2)每纬度在地理位置上的距离是一致的(约111公里),但是每经度之间的距离是不同的(越往两极,东西方向上的距离就越小),不能直接转换为直角坐标系。3)给出的经纬度坐标发生变化后,需要动态的缩放所显示地图的大小。
开发环境:.NET 2003 (MFC)
解决方法:
1.   定出动态参照原点的经纬度。
    举个例子,如果设定窗体的显示方式是默认的MM_TEXT(即左上点为原点,X轴向右Y轴向下为正),就应找到其中纬度的最大值,经度的最小值,以定出最西最北的参照点,将其作为屏幕显示时的原点。例:
    找到的值为N36.5563     E139.0155。这样做,就能解决上面的第三个问题,并为下面实际点的描画做准备。
2. 将参照点经纬度转化为弧度,并得到之后计算横轴纵轴上距离的中间量。
    1)m_refLaRadian = refLatitude*M_PI/180;
        m_refLoRadian = refLongitude*M_PI/180;
     以上面的点为例:refLatitude = 36.5563     refLongitude = 139.0155
           36.5563*3.14/180 = 0.6380rad 139.0155*3.14/180 = 2.4263rad
     2)m_refY = POLAR_RADII + (EQUATOR_RADII - POLAR_RADII)*(90 - refLatitude)/90;
        m_refX = m_refY*cos(m_refLaRadian);
          #define POLAR_RADII      6356752   //北極[南極]の半径
        #define EQUATOR_RADII  6378137   //赤道の半径
       例: 纵轴参照距离: m_refY = 6356752  + (6378137 - 6356752 )*(90 - 36.5563)/90 = 6369450.8090185188
           横轴参照距离: m_refX = 6369450.8090185188 *COS( 0.6380) = 5116399.2044743169
3.  计算已知点到这个参照点(原点)的X轴Y轴地理距离
    1) 将已知点的经纬度转换成弧度
       laRadian = (latitude.Degree + latitude.Mintue/60 + latitude.Second/3600) *  M_PI/180
       loRadian = (longitude.Deree + longitude.Mintue/60 + longitude.Second/3600) *  M_PI/180;
        以大宫为例:N35.54.10.8 E139.37.37
       laRadian  = (35 + 54/60 + 10.8/3600) * 3.14 /180 = 0.6266rad
        loRadian  = (139 + 37/60 +37/3600)   * 3.14 /180 = 2.4369rad
    2) 计算地理位置上离开参照点的X轴Y轴距离
         double dx =  (loRadian - m_refLoRadian)*m_refX;
         double dy = -(laRadian - m_refLaRadian)*m_refY;
         以大宫为例:
         横轴方向上地理距离: dx = ( 2.4369rad  - 2.4263rad ) * 5116399.2045 = 54598.2928米
      纵轴方向上地理距离: dy = -(0.6266rad -  0.6380rad) * 6369450.8090 = 72629.6869米
4. 换算成像素点,以供屏幕显示.
       point.x = dx/DIVISOR;       
       point.y = dy/DIVISOR;
         // DIVISOR为地理位置距离和像素点距离换算的系数,大小可根据情况自己定夺.
     以大宫为例:
     横轴方向上像素点位置: point.x = 54598.2928米/27 = 2022
        纵轴方向上像素点位置: point.y = 72629.6869米/27 = 2689 
   经过以上几步,即可得到各已知经纬度的位置点到一个动态参照点的X轴Y轴上相距的屏幕像素点数量。给之后的描画提供方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值