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

经纬度到屏幕像素点的换算方法
最近做的项目中有个机能:由给出的经纬度坐标,在屏幕描绘相应的位置点,以此作出简易地图。之前在网上找过,相关内容不是很具体贴和。今天就自己做的,做个总结贴上来。
相关问题点 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.  算已知点到个参照点(原点)的XY地理距
    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) 计算地理位置上离参照点的XY距离
         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 
   经过以上几步,即可得到各已知经纬度的位置点到一个动态参照点的XY轴上相距的屏幕像素点数量。给之后的描画提供方便。
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值