zoukankan      html  css  js  c++  java
  • Google Earth & Google Map ——数据存储、管理、表现及开发机制 转载

    一、    Google Earth(Map) 介绍
    1.1    Google Earth介绍
    在众多的地理信息服务提供商中,Google是较早提供服务的一个,其他有如ESRI这样的巨头,也有中国的灵图。但凭借着提供优质、高效、高性价比服务的理念和Google自身的巨大影响力,Google推出的Google Earth和Google Map平台已经成为全球影响力最大的互联网空间信息服务平台。
    Google Earth具有十分突出的三个特点[1],一是可以显示矢量数据地标,包括点、线、面等几何类型;二是具有栅格图像叠加的功能,允许用户将本机上或从网上下载下来的地图图片叠加到Google Earth上,并且可以调整加载图片的透明度,此功能可以方便用户进行深入的观察和分析;三是具有三维虚拟模型,提供了一些城市的三维模型,允许用户使用三维对象。
    Google Earth使用商用卫星相片[2],主要来自Digital Globe公司的Quick Bird、美国IKONOS及法国SPOTS,高分辨率高。Google Earth只有地球的真彩色数据,但图层多而详细、如地势、边界、道路、铁路、水道、地震、火山、学校、教会、公园、加油站、高尔夫球场、犯罪统计…等, 北美地区数据比较全。通过影响分层分块切片组织管理、图片数据流常数等技术让用户浏览的高分辨率数据通过网络实时传输。
    虽然OGC(Open Geospatial Consortium)组织中有许多已经开始进入地理信息服务提供商中这个角色中,如雅虎、微软、ERSI、NASA。在中低端市场中Google仍然是一个霸主地位,它有着比其他像Arc Objects、World Wind那样的平台更加明显的优势。那就是他优秀的数据存储、管理、表现及开发机制。而且它的三个版本个人免费版、Plus版、Pro版为不同的用户群提供了不同的服务,满足了各个层次人的需求。Google Earth的API是基于Ajax(Asynchronous JavaScript and XML)的JavaScript API,所以人们可以很容易的利用Google Earth所开源的API进行地图服务扩展或利用Google Earth所提供的各种信息来开发新的系统和其他的应用。
    1.2    Google Earth与Google Map的区别
    Google Earth和Google Map用的实际上是同一种数据,只不过是表现形式不一样而已。Google Earth采用的是Google在04年收购Keyhole的 KML(Keyhole Markup Language)标记语言来描述和保存地理信息,而Google Map则是采用HTML页面和图片的形式来表现数据的。如图1-1所示,我们可以看到其实Google Earth也是像Google Map那样当个浏览器,只不过Google Map浏览的网页是HTML格式的文件,而Google Earth浏览的是KML的压缩格式KMZ格式的文件,它们都是通过网络传输的方式传给用户的。因为采用的是Ajax技术传输的地图,所以用户可以方便的再地图上放大,缩小,移动而不用再次传输数据,这就是所谓的异步,它极大地提高了用户的体验性。不像同步传输,每次设置都得再从网上传输数据。但Google Earth和Google Map都有一个共同的缺点它们的内容都是静态的,或者说是相对静态的,不会实时更新数据,就像World Wind那样可以研究飓风或是地震对整个区域的影响。
    1.3    Google带来的影响
    总体而言,Google Earth是Google在04年推出的一项跨历史性的产品,它的出现带来了GIS(Geographic Information System)和地理信息服务提供的巨大
    飞跃,这就像是“鲶鱼效应”,在平静多年的地理界掀起了一个技术和发展的狂潮,所以说Google是伟大的。正如ESRI的创始人兼总裁Jack Dangermond所说的“正是Google打开了我们的世界,GIS行业正在趋于繁荣” [3]。下面就一起来看看Google空间信息服务平台的奇妙吧。

    二、    Google的数据存储和管理
    2.1    Google的投影方式
    Google Map采用的是墨卡托投影[5],
    即等角正轴圆柱投影,但它不是将地球模拟为椭球体,而是圆球体。采用墨卡托投影能够保证南北(纬线)和东西(经线)都是平行直线,并且相互垂直。而且经线间隔是相同的,纬线间隔从标准纬线(此处是赤道,也可能是其他纬线)向两级逐渐增大。所以能使Google在计算人们查询地物的方向时不会出错。

    2.2    Google的影像分割
    Google Map的图片组织方式是地图瓦片金字塔(Tile Map Image),首先预生成规矩的瓦片地图存储于硬盘目录下,地图以链接图片的方式快速定制。传统的WebGIS是实时请求地图服务器传输地图的,反应了地图的现势性。TMI方式的地图响应要比传统的具有更加明显的优势,不仅表现在响应速度方面,还有地图服务器的负载方面。[7]
    Google的地图分为三大类,即普通地图、卫星地图以及合成地图,其中合成地图有由卫星地图和底色透明的普通地图叠加而成。每块地图的URL格式为[8]:
    普通地图
    http://mt1.google.com/mt?n=404&v=w2.33&x=?&y=?&zoom=?
    卫星地图
    http://kh.google.com/kh?n=404&v=13&t=?
    合成地图
    http://mt1.google.com/mt?n=404&v=w2t.34&x=?&y=?zoom=?
    其中x表示经度方向图片编号,y表示纬度方向图片编号,x、y的取值范围0-217-zoom。
    Zoom为缩放因子,其范围大于等于0小于等于17,这是由Google公司所确定的影像层级。


    2.3    Google的数据管理
    Google地图采用两种不同的算法对影像块的位置进行编码[10][11]。对地图数据而言,获取摸个地图块URL的例子为:
    http://mt1.google.com/mt?n=404&v=w2.12&x=130&y=93&zoom。当zoom等于17时,整个地球的影像将会显示在一个地图块内,此时x=y=0,每当缩放因子减少1时,每个地图块将再次被分割成4小块。
    对影像数据而言,URL具有一定的差别,如
    http://kh0.google.com/kh?n=404&v=8&t=trtqtt。其中参数t用来表示编码影像块的位置,而次参数的长度则表示缩放因子的级别。在观察全球影像时,参数t的值为t,此时只有一个影像块。在下一级缩放因子处,全球影像被分成4个象限,按顺时钟方向从左上开始,其编码分别为tq、tr、ts、tt。

    无论对地图数据还是影像数据,Google各使用4台服务器来进行负载平衡。对地图数据而言,4台地图服务器的名称分别为mt0、mt1、mt2和mt3;而对影像数据而言,4台地图服务器的名称分别为kh0、kh1、kh2和kh3。可以打开http://ditu.google.cn/谷歌中国地图的源代码看看,可以看到http://mt0.gmaptiles.co.kr/mt/v=kr1.11\x26hl=zh-CN\x26gl=cn\x26这样的uris。


    但是Google的大量的图形数据是如何存储的呢?一直让人感觉很神秘。Google的存储为GFS(Google file system)分布式存储文件系统[12],多读少写的数据如大索引文件,Google Map地图文件,静态网页等采用分布式表(bigtable)来存储,bigtable是一种弱关系型存储系统,建立在GFS之上,字段并不满足关系数据库范式中的原子性等,而是根据时间戳来存储单个数据的多版本,分为列簇(column family),可把一系列相关的列定义为一个列簇。GFS的数据存储是分块(block) 存储的,一个文件被分成64M/block的若干块,可同时往多个数据服务器插入,而下载时,可同时从多个数据服务器拿一个文件的不同部分,这就提高了数据的吞吐效率。
    此外GFS的文件采用分段压缩机制,即若干block作为一个压缩单元进行压缩,而非整个文件进行全压缩,这样可以在读取文件时边读边解压 缩。bigtable中也可以建立列的索引,理想情况下一次I/O预先加载索引,然后再一次I/O定位磁盘中的数据,然后作顺序读来载入数据。这样比一般关系数据库的载入速度要快。

    三、    Google的表现和开发
    3.1    Web2.0介绍
    一般来说Web2.0 是相对Web1.0 的新的一类互联网应用的统称[13]。Web1.0 的主要特点在于用户通过浏览器获取信息。Web2.0 则更注重用户的交互作用,用户既是网站内容的浏览者,也是网站内容的制造者。所谓网站内容的制造者是说互联网上的每一个用户不再仅仅是互联网的读者,同时也成为互联网的作者;不再仅仅是在互联网上冲浪,同时也成为波浪制造者;在模式上由单纯的“读”向“写”以及“共同建设”发展;由被动地接收互联网信息向主动创造互联网信息发展,从而更加人性化!
    Google采用了web2.0的许多相关技术来表现和展示数据给用户。Web2.0可以利用更多的元数据来提高网页缓存和其他方面的效率,提高网页加载的利用率[14]。
    Web2.0提高用户的浏览速度主要表现在Ajax技术上[15]还有它的mash-up技术[16]。
    3.2    Ajax技术应用

    Ajax之父Jesse James Garrett在2005.2.18发表的文章写道:Ajax不是一项技术,它是几种各自发展的技术的有力集合,Ajax包括:使用XHTML与CSS(Cascading Style Sheets)来组织页面;使用DOM(Document Object Model)进行动态显示与交互;使用XML and XSLT进行数据交换与操作;使用XMLHttpRequest进行异步数据传输;使用JavaScript将所有这些绑在一起[17]。
    Google桌面信息平台的客户端采用了Ajax,实现了数据在网络上的异步传输,避免了每次提交都要重复刷新整个页面,提高了下载速度,因为用户与Ajax引擎的互动和Ajax引擎与服务器的互动被分离开来,用户可以几乎无等待的进行自己的各种动作,提供给用户更为友好的界面和极大改善了用户的体验。
    基于Ajax技术,客户端可以与服务器进行异步多线程的数据交互[19]。Google的地图分块技术就是充分的利用了这点,有Ajax引擎负责这些地图方块的无缝拼接、整体移动和地图填充。当用户做出一定的地图动作时,Ajax引擎根据一定的算法计算出需要新加载的小块地图,并异步多线程的向服务器发出请求。最后,当地图贴片传回用户端时,再由Ajax引擎无刷新的无缝拼接成用户浏览器界面中的大地图。并且,利用浏览器缓存,如果已经取得该小块地图,下次使用时则不用向服务器再次请求,直接利用缓存中的图片就可。这使得当回到以前曾经访问过的地图时,显示速度非常快。

    3.3    Mashup技术应用
    Mashup是一种交互式Web应有程序[19],它利用外部数据源检索到得内容来创建全新的创新服务。它是将多种web应有给糅合在一起为用户提供服务,搜集大量有关事务和行为的数据,具有位置注释信息。由右图可以看得出基于电子地图的Mashup所占的市场份儿最多。
    Mashup发展的一种主要动力就是Google公开了自己的Google Maps API。这让web开发人员可以再地图中包涵所有类型的数据。而Google Map也把这种Mashup用到了极致,在Google Map上,你可以看到自己周围的建筑物照片,可以看到哪儿有市场卖东西,还可以看到达目的所要走的路线,可以查到每一条公交线路。让用户感到十分的方便,舒心。
    3.4    KML语言的使用
    另外Google Earth数据的导入与导出是有KML实现的[22],KML是Google Earth上的一种数据交换格式,它是一种基于XML语法与文件格式的文件。他可以描述与保存Google Earth中所有的地理信息类型,如点、线、多段线、面、图片等。
    Google Earth中的地图数据是以KML格式来保存与交换的。在Google Earth中不论是地理基础数据还是企业自有数据,都是用以下6种方式来表达的:点、线/折线、多边形/立体多边形、种表达方式,可实现不同的表示效果。
    在2007年春季[23],Google向OGC递交了Google Earth所使用的KML2.1,以期获得批准,是KML成为一个OGC标准。不久之后,OGC将KML认定为最优办法,并将其整合到现有的地理标识语音GML中。OGC将负责维护和扩展这个标准。
    Google一脚KML技术的拥有权反映了Google致力于开发标准的决心。从根本上说,Google的兴趣不是要控制信息,而是鼓励普及信息。事实上,通过使KML文件成为一个国际性标准,能够与其他的GIS数据格式交换和共享信息,为Google空间信息平台渗入其他GIS平台扫清一个巨大的障碍。

    四、    总结
    本文只是介绍了Google数据存储、管理、表现及开发机制的一部分,Google Earth与Google Map另外中还有许多的技术和创新没有说明。Google Earth和Google Map在中国也有一些重要的功能没有实现,如Geocoding,地址查询经纬度,这对于开发基于GIS的应用系统十分的重要,不过中国已经有许许多多聪明的厂商们解决了这个问题,具有代表性的是北京灵图公司的51map。中国还有许多网络巨头也进入了地理信息服务供应商的行列,如百度,搜狗等。希望他们能再接再厉,做的更好,为中国的GIS明天做出更大的贡献。
  • 相关阅读:
    [笔记] 深入java虚拟机 类型的生命周期
    xml笔记
    Python笔记
    Effective C++ 笔记(2)
    [笔记] 深入java虚拟机 连接模型
    javascript对象成员访问权限
    [笔记] 深入java虚拟机 java class文件(2)
    STL笔记(3) Effective STL
    STL笔记(1)容器
    [IOS笔记] objecttivec基础知识
  • 原文地址:https://www.cnblogs.com/hl3292/p/1942933.html
Copyright © 2011-2022 走看看