posts - 22, comments - 17, trackbacks - 0, articles - 7
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2010年2月4日

 

WGS 1984是3S应用的常用大地坐标系之一,和我们的生活息息相关,最典型的应用莫过于手持设备的GPS模块,无论是美国GPS全球卫星定位系统、俄罗斯 GLONASS、欧盟GALILEO,还是中国北斗,都提供了基于WGS 1984坐标系的定位,单位是度分秒,因此不少空间数据都是基于该坐标系,能够方便的进行GPS数据的叠加与分析。


    在WebGIS应用中,“GPS+基础地图服务”应用模式,使用WGS 1984坐标系是最方便了,但是更多的时候,特别是包含小比例尺地图时,我们需要将地图进行投影显示,投到一个平面上,否则,只能像Google Earth一样用球体显示世界地图。一种常规的投影方式是正轴等距圆柱投影,百度百科上的定义:
 
    正轴等距离圆柱投影又称“方块投影”、“方格投影”。圆柱投影中的一种。设圆柱投影面与赤道相切,按经线长度不变条件将经纬线网投影到圆柱面上,再沿一母线剖开展平。这种投影图上,纬线是一组等距平行直线,纬线间隔与实地等长;经线是与纬线垂直的等距平行直线,经线间隔在赤道上与实地相等,离赤道越远越放长;经线与纬线构成方格形(矩形)网格。沿经线方向无长度变形,其面积与角度的变形线与纬线平行,变形值由赤道向高纬度增大。适用于沿赤道或低纬度东西延伸地带的地图。
 
    如果不理解,拿个橙子做个实验就清楚了,典型的例子就是早期ArcGIS Online上的在线地图服务:

    地图学中老师说过,任何投影方式都有优点和缺点,在全球(国家或省级)基础地图服务或公共基础地图服务的应用领域,我们会发现里面存在两个隐蔽的问题,使正轴等距离圆柱投影的优点显得不痛不痒,甚至成为缺点:
 
    1.要利用其优点,研究区选择赤道周围地区。
    对于全球地图服务来说,赤道区域仅仅是其中很少的一部分,对于公共基础地图服务来说,仅需要低纬度地区且呈条带状东西延伸的应用非常有限。地图的角度变形大,无法正确进行地物之间方位的判断。
 
    2.经线逐步变形,纬线间隔与实地等长。
    全屏显示时,地图可以最大限度占据屏幕空间(地图长宽比是2:1),导致的结果是更多的数据量和硬盘存储空间。
 
    我们看美国大片、高清电影都喜欢宽屏,播放器左右长度占满整个显示器,视觉效果舒服。但对于地图服务来说,意味着大量的地图数据,以世界地图服务为例,大家试想,相同比例尺下,假如地图投影后是正方形(地图长宽比是1:1),同样能显示世界范围的地图服务,地图上下宽度占满显示器,那么地图左右将留出一片空白,相比前者能够节省出一半的空间。有人可能会疑问现在硬盘越来越便宜,存储量越来越大,存储问题还是问题吗?对于一般应用确实不必过于担心,但对于公共基础地图服务来说,长宽比从1:1变为2:1犹如蝴蝶效应,在大比例尺级别会带来巨大的数据量。
 
    举个小例子,一般情况下,采用WGS 1984坐标系和512×512切图,在L13(第十四级)将产生1,237,819张图片,而在切图大小相同的WGS 1984 Web Mercator投影坐标系下,L13图片数量将减少一半,这么多小图片,数量少一半还是有诱惑力的吧,并且还可以通过其他方法来进一步进行优化。说了这么多,这里才引出这篇文章的主题--Web Mercator投影,现在主流的在线地图使用的投影,如Google Map,Bing Map,MapABC等等。为什么采用这种投影方式呢?
 
    1.Web Mercator投影地图范围小一半,节省了50%空间。
    2.基于Web的应用需要关注客户端的用户体验,图片切片大容易造成传输缓慢,大片面积的图片无法及时响应,因此可以通过减少图片切片的大小改善用户体验。采用256×256切图,图片数量将增加4倍,综合第一点,图片数量整体增加2倍。在正轴等距离圆柱投影情况下,相比Web Mercator,使用256×256大小切片,将增加8倍的图片数量!
    3.Web Mercator投影地图在两极面积变形极大,并且无法显示高纬度的地图信息,这点在公共地图服务的应用中显得微不足道,南极和北极的人们不会在意你对他们的遗忘,但这些缺失却保证了地图方向和相互位置的正确性,在航海和航空中常常应用,用户在查询地物方向时也不会出错。
 
    ESRI在ArcGIS Online上新增了一系列Web Mercator投影的地图服务,这里还有一个原因:
 
    4.能够和主流的地图服务进行mashup

    所以有了现在的全球在线地图服务:
 
    更多的地图服务:
 
    用最精简的几句话概括WGS 1984 Web Mercator意义:
 
    相同情况下,地图范围更小,减少图片数量==>可以采用256×256切片大小,增加了图片数量,但提升了网络用户体验;
    保证地图方向和相互位置的正确性;
    主流地图服务相互mashup
 

    做公共地图服务,有更好的投影方式吗?

 

来自http://flyingis.cnblogs.com/ Flyingis 

posted @ 2010-02-04 17:27 niefer 阅读(54) 评论(0) 编辑

 

Web墨卡托投影

 

Google Maps、Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mercator,它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体。建议先对地图投影知识做一个基本的了解,《地图投影为什么》。

什么是墨卡托投影?

墨卡托(Mercator)投影,又名“等角正轴圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。从球到平面,有个转换公式,这里就不再罗列。

Google们为什么选择墨卡托投影?

墨卡托投影的“等角”特性,保证了对象的形状的不变行,正方形的物体投影后不会变为长方形。“等角”也保证了方向和相互位置的正确性,因此在航海和航空中常常应用,而Google们在计算人们查询地物的方向时不会出错。

墨卡托投影的“圆柱”特性,保证了南北(纬线)和东西(经线)都是平行直线,并且相互垂直。而且经线间隔是相同的,纬线间隔从标准纬线(此处是赤道,也可能是其他纬线)向两级逐渐增大。

但是,“等角”不可避免的带来的面积的巨大变形,特别是两极地区,明显的如格陵兰岛比实际面积扩大了N倍。不过要是去两极地区探险或科考的同志们,一般有更详细的资料,不会来查看网络地图的,这个不要紧。

 

(图片来源,Nelson Jhon)

为什么是圆形球体,而非椭球体?

这说来简单,仅仅是由于实现的方便,和计算上的简单,精度理论上差别0.33%之内,特别是比例尺越大,地物更详细的时候,差别基本可以忽略。

Web墨卡托投影坐标系

以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。

X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。

Y轴:由墨卡托投影的公式可知,同时上图也有示意,当纬度φ接近两极,即90°时,y值趋向于无穷。这是那些“懒惰的工程师”就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。

懒人的好处,众所周知,事先切好静态图片,提高访问效率云云。俺只是告诉你为什么会是这样子。因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。

对应的地理坐标系:

按道理,先讲地理坐标系才是,比如球体还是椭球体是地理坐标系的事情,和墨卡托投影本关联不大。简单来说,投影坐标系(PROJCS)是平面坐标系,以米为单位;而地理坐标系(GEOGCS)是椭球面坐标系,以经纬度为单位。具体可参考《坐标系、坐标参照系、坐标变换、投影变换》。

经度:这边没问题,可取全球范围:[-180,180]。

纬度:上面已知,纬度不可能到达90°,懒人们为了正方形而取的-20037508.3427892,经过反计算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.05112877980659,85.05112877980659]。其余的地区怎么办?没事,企鹅们不在乎。

因此,地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)。至于其中的Datum、坐标转换等就不再多言。

 

 

相关坐标计算

 

关于Google Maps等的组织方式——地图瓦片金字塔,估计我在这里重复一遍这玩意,怕也是没人看了。尽管原理都一样,但具体到写不同厂商不同数据源的代码时,你会发现,可缩放级别数不一样,最小级别不一样,编码方式不一样,比如GoogleQRST,微软的四叉树,OSGeoTMS等。

然而,你或许也不必这么麻烦,因为这些算法在网络上早已遍布朝野,你尽可从他人博客中获取,或是从开源软件里学习。这本身都不是秘密,微软自己也是公布的。

Tiles à la Google Maps 用交互性地方式可得到任一Tile的边界范围,各种流行编码方式等。该页面的链接都非常有价值,部分也是本文写作的重要参考。作者用python完成了下列坐标之间转换算法:经纬度(出现在KML中的坐标,WMSBBOX参数等),平面坐标XY(米,Web Mercator投影坐标系),金字塔的XYZ(即X轴的位置,Y轴的位置,和缩放级别ZoomLevel),每个Tile的编码Key值(QRST0123等)。转换时,还需要注意两个概念,Ground ResolutionMap Scale

(图片来源:Tiles à la Google Maps

 

Ground Resolution,地面分辨率,类似Spatial Resolution(空间分辨率),我们这里主要关注用象元(pixel size)表示的形式:一个像素(pixel)代表的地面尺寸()。以Virtual Earth为例,Level1时,图片大小为512*5124Tile),那么赤道空间分辨率为:赤道周长/512。其他纬度的空间分辨率则为 纬度圈长度/512,极端的北极则为0Level2时,赤道的空间分辨率为 赤道周长/1024,其他纬度为 纬度圈长度1024。很明显,Ground Resolution取决于两个参数,缩放级别Level和纬度latitude Level决定像素的多少,latitude决定地面距离的长短。地面分辨率的公式为,单位:米/像素:

ground resolution = (cos(latitude * pi/180) * 2 * pi * 6378137 meters) / (256 * 2level pixels)

Map Scale,即地图比例尺,小学知识,图上距离比实地距离,两者单位一般都是米。在Ground Resolution的计算中,由Level可得到图片的像素大小,那么需要把其转换为以米为单位的距离,涉及到DPIdot per inch),暂时可理解为类似的PPIpixelper inch),即每英寸代表多少个像素。256 * 2level / DPI 即得到相应的英寸inch,再把英寸inch除以0.0254转换为米。实地距离仍旧是:cos(latitude * pi/180) * 2 * pi * 6378137 meters; 因此比例尺的公式为,一般都化为1XXX,无单位:

map scale = 256 * 2level / screen dpi / 0.0254 / (cos(latitude * pi/180) * 2 * pi * 6378137)

= 1 : (cos(latitude * pi/180) * 2 * pi * 6378137 * screen dpi) / (256 * 2level * 0.0254)

其实,Map Scale Ground Resolution存在对应关系,毕竟都和实地距离相关联,两者关系:map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch

Virtual Earth Tile System》列举了Virtual Earth在赤道上,Level、像素数、地面分辨率、地图比例尺的对应关系,同时本文也简单介绍了Mercator投影和上述两个概念,推荐。

此外,《Addressing Google Maps image tiles》应用程序,输入经纬度和缩放级别,即可缩放到相应的Google Maps位置,而且可以显示出查找过程的QRSTJavaScript实现的算法,也可以抓下来和《Tiles à la Google Maps》对比下,从经纬度到Tile编码的转换。

 

来自http://hi.baidu.com/liongg/blog 青梅猪马

posted @ 2010-02-04 17:14 niefer 阅读(165) 评论(0) 编辑