小秋的家

home

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 91 Stories :: 17 Comments :: 0 Trackbacks
     刚接触到这个东东,确实头晕!什么地理坐标,投影坐标,屏幕坐标等等.......哎....地理知识中学学过(都不知道咋学的),数学貌似N多年不用也都还给老师了!确实悲哀.....唉....终于认真的研究了一下才算明白是怎么回事了!其实不要管什么地理坐标,投影坐标还是屏幕坐标,搞的你是非要知道天文地理似的才能去动手去做这个东东!原理掌握一个,那就是只用弄明白地理坐标和屏幕坐标的定义规则就OK了...
    地理坐标定义规则: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;

  呼呼......终于写完了,由于要赶着睡觉,因为明天还要早起上班,可能写的还不够清楚,大家再仔细研究一下就能够明白了!   
posted on 2009-04-30 00:41 棋剑小秋 阅读(3956) 评论(5)  编辑  收藏 所属分类: GIS

Feedback

# re: 地理(投影)坐标与屏幕坐标的转换! 2009-05-21 16:50 huiai
感觉好像不太对哦!
我的msn: huiai_zhang@hotmail.com  回复  更多评论
  

# re: 地理(投影)坐标与屏幕坐标的转换! 2009-05-26 16:20 棋剑小秋
@huiai
是对的,我代码实现了。公式基本上是这个公式,如果地图要拖动那么公式需要发生一点变化的。
lon = (x - stripPx(innerDiv.style.left)) * scaleX / 3600 + minLon;
lat = maxLat + (stripPx(innerDiv.style.top) - y )*scaleX/3600;
stripPx()这个方法就是去掉"px"字符串的  回复  更多评论
  

# re: 地理(投影)坐标与屏幕坐标的转换! 2009-12-08 07:59 weichen
高手  回复  更多评论
  

# re: 地理(投影)坐标与屏幕坐标的转换![未登录] 2012-06-22 18:44 aaron
当地图比例尺发生变化时,又该怎么算  回复  更多评论
  

# re: 地理(投影)坐标与屏幕坐标的转换![未登录] 2012-07-26 14:11 过客
scaleX = h/((maxLon-minLon)*3600) ----------X轴上每像素代表的经度秒数;
这个就不对了吧??


反了吧  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: