地理坐标、经纬度坐标与屏幕坐标的转换!

地理坐标定义规则:X轴(代表经度)向右递增,Y轴(纬度)向上递增,就好比小学学过的平面坐标(貌似又忘了,要重读小学了)吧?向左,向下的规则,这个不用我再阐述了吧

    屏幕坐标定义规则:X轴向右递增,Y轴向下递增..
    可以看出,地理坐标和屏幕坐标的区别仅仅只是在于Y轴递增方向是相反的…(这就是不同).
    好了,现在我们开始转换他们吧.  这里强调一点的就是为了保证精度,地理坐标的度*3600换算成秒,所有的取值用double来计算,最后的结果再转换成int


    1.已知道屏幕的高(y)和宽(h),地理坐标区域的范围(maxLon,minLon,maxLat,minLat)..这里我们知道了这些已知的参数…


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


    3.很简单的一步了,那就是算出该地理坐标区域中的任何一点(lon,lat)在屏幕上的坐标了,怎么算?下面来讲:
       公式:screenX = lon*3600/scaleX;  ———屏幕坐标X轴坐标
       公式:screenY = lat*3600/scaleY; ———-屏幕坐标Y轴坐标,        怎么样?很简单吧?这里我们就算出地理坐标上任何一点转到屏幕上的坐标是多少了……
        还有最后一步,那就是我们要把该地理区域占满占个屏幕该怎么办呢?


   4. 接着我们需要该地理区域占满占个屏幕该怎么办呢
        公式:minX = minLon*3600/scaleX;    区域左边置最左端
        公式:minY = minLat*3600/scaleY;     区域上面置最上端


   5. 当地地理范围区域占满整个屏幕时,我们需要用到第三步计算出来的 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;     至于为什么是这个公式,我想大家仔细想想就明白了..


  6.总结:
        经纬度转屏幕坐标的最终公式如下:
        公式: X = (lon – minLon)*3600/scaleX;  
        公式: Y =  (maxLat – lat)*3600/scaleY;
        接着我们由上面的公式可以推出屏幕坐标转经纬度坐标公式如下:
   公式:lon = X * scaleX/3600 + minLon;
        公式:lat = maxLat – y* scaleY/3600;

程序代码共享下载 http://www.3g2y.com

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值