墨卡托和等距正圆柱投影

2010-09-02 09:58:40

在为thefactor.e的项目中,我一直在将经纬度坐标转换成X/Y位置。这件事听起来很简单,就是研究不同的投影方式和公式。 这篇文章将总结两种最常用的投影,墨卡托和等距离正圆柱投影。 [img]download.asp?id=106[/img] 墨卡托投影是一种圆柱投影,它是由比利时弗兰德的地理学家和地图制作家格拉德·墨卡托在1569年创造的。 由于方位线或恒向线在图上为直线而被认为是海图的标准投影方式。投影图上,任意点各个方向的局部比例尺相等,因此无限小的目标的的角度和形状是与实物相似的(等角投影的由来),但是从赤道到极点的比例尺是逐渐增大的,墨卡托投影会改变大目标的大小和形状。(来源于Wiki) 在我看来是最简单直观的投影,但是还要用古德曼函数来计算X和Y的位置。 在as3中的代码 [code]public function mercator_position(lat:Number, lng:Number):Point{ // longitude: just scale var newX:Number = (map_width * (180 + lng) / 360) % map_width; // latitude: using the Mercator projection var radlat:Number = lat * Math.PI / 180; // convert from degrees to radians var newY:Number = Math.log(Math.tan((radlat/2) + (Math.PI/4))); // do the Mercator projection (w/ equator of 2pi units) newY = (map_height / 2) - (map_width * newY / (2 * Math.PI)); // fit it to our map return new Point(newX,newY); }[/code] [img]download.asp?id=107[/img] equirectangular投影是一种很简单的地图投影,它是由泰尔的Marinus创造的,据托勒密说是公元100年发明的投影方式。这种投影的地图经线都是垂直的直线,纬线圈都是平衡伸展的水平直线。 这种投影既不是等积的也不是等角的。由于这种投影会引起变形,所以很少用在航海和地籍测绘图上,主要用在主题地图上。事实上,由于地图上一个像素点的位置和在地球上相对应的地理位置之间的对应关系很简单,所以它已经成为电脑应用程序处理全局地图的标准,Celestia和NASA的天气查看软件都是用的这种标准。(来源于Wiki) 这种方法比墨卡托简单的多,但是不直观。 下面是AS3的代码: [code]public function equirectangular_position(lat:Number, lng:Number):Point{ var newX:Number = ((lng + 180) * (map_width / 360)); var newY:Number = (((lat * -1) + 90) * (map_height / 180)); return new Point(newX,newY); }[/code] [url=http://labs.gerbenrobijn.nl/code-examples/latlng/]演示程序[/url] 参考:http://labs.gerbenrobijn.nl/2010/08/30/as3-latitude-and-longitude-positioning-in-a-mercator-and-equirectangular-projection/