﻿ - 0.0.4.4 优化了判断切片是否可见的算法，使用经纬度判断法(isTileVisible2)取代了老式的计算方法(isTileVisible)

 - 0.0.4.5 继续优化isTileVisible算法，许多参数从函数外面传递进来，比如geoExtent和projViewMatrix，循环传递使用，减少了生成这两个变量所调用函数的次数；引入了World.Globe，将一些处理逻辑放到了Globe中，比如讲renderer中的updateGlobe方法迁移到Globe中的refresh方法，尽量只对二次开发人员暴露World.Globe的接口，更合理一些，从而将版本从0.0.4.4升级到0.0.4.5

 - 0.0.4.6 不再通过ajax获取vertexShader和fragmentShader的文本内容，而是将其以字符串的形式直接放入到World.js文件中(World.ShaderContent)，从而减少了对于其他GLSL文件的依赖，并因此将World.js的版本升级到0.0.4.6

 - 0.0.4.7 新增了World.TiledLayer类型，取消掉了World.NokiaTile等类型，图层都继承自World.TiledLayer，并重写其中的getImageUrl方法，所有的切片都放到World.TiledLayer中进行管理，结构化明确，更加面向对象，因此将版本升级到0.0.4.7

 - 0.0.5.0 从0.0.4.7直接升级到0.0.5.0,在TiledLayer的基础上又增加了SubTiledLayer类，并在此基础上优化了诸多算法，包括通过添加isvisible判断是否渲染，完善了camera的getCurrentGeoExtent算法，结构更合理，访问速度更快，故升级到0.0.5.0

 - 0.0.5.1 优化了各种TiledLayer的getImageUrl的算法

 - 0.0.5.2

   - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);

   - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);

   - 通过执行以上命令消除了两个切片之间的白线问题

 - 0.0.5.3 从0.0.5.2升级到0.0.5.3:globe中增加了calculateCameraMoveInfo方法，在大比例尺下移动视图也比较正常

 - 0.0.5.4 升级到0.0.5.4：在World.Object3D的destroy方法中释放了显卡中的各种buffer和texture资源

 - 0.0.5.5 在render方法中计算了viewMatrix并赋值给camera作为其中的一个属性，这样就只调用一次getViweMatrix方法，不用在draw(camera)中再多次计算

 - 0.0.5.6 在创建level为1的subTiledLayer的时候就全部创建其下的四个切片，并且从不删除该subTiledLayer;将自动更新时间设置为750毫秒

 - 0.0.5.7 添加了World.BingTiledLayer，支持微软Bing地图渲染（有三种风格:a、r、h）

 - 0.0.5.8 添加了World.SosoTiledLayer，支持soso地图

 - 0.0.5.9 添加了World.TiandituTiledLayer，支持天地图

 - 0.0.6.0 通过添加代理页proxy.jsp可以加载ArcGIS的切片地图，包括ArcGISOnline以及捷泰地图，或其他ArcGIS Server发布的地图服务

 - 0.0.6.1 通过代理方式支持高德地图

 - 0.0.6.2 用bind方式代替闭包实现World.TextureMaterial.prototype.setImageUrl中handleLoadedTexture操作texture

 - 0.0.6.3 在Matrix和Object3D中加入对worldScale和localScale的支持

 - 0.0.6.4 在Matrix和Object3D中加入对localRotateByVector的支持

 - 0.0.6.5 修复了在层级比较大的情况下切片不能完全正常匹配的问题，解决办法是取消掉了对切片范围的一像素扩容

 - 0.0.6.6 将World.Scene继承自World.Object3DComponents,减少冗余代码，结构也更合理，也因此调整了World.js中各代码块的位置

 - 0.0.6.7 在拖动鼠标时，鼠标拖动点与经纬度进行了绑定，实现定点拖动

 - 0.0.6.8 将CanvasEventHandler.js中的事件代码移植到World.Event中，以后在html页面中只需要引入World.js一个js文件即可

 - 0.0.6.9 修改了camera中的isLonVisible方法，将其精简完善，从而解决了在伦敦中央经线附近在14级时一片漆黑的问题

 - 0.0.7.0 修改了无法删除canvas的onMouseMove事件的问题

 - 0.0.7.1 修改了将视图缩放到中国区域范围的时候，camera.getGeoExtent()获取的经纬度不准确的问题，原因是在计算由于地球自身视线遮挡的经度范围时，只是简单的在中心经度上加减偏移量，对于如果中心点的纬度为0时是正确的，只要中心点纬度不为0，这种简单的加减经度偏移量是不准确的

 - 0.0.7.2 完善了各种坐标系之间坐标的换算

 - 0.0.7.3 基本完成camera.getExtentInfo的编写,准备用其替换camera.getGeoExtent方法，并添加了camera.isGeoVisibleInCanvas方法

 - 0.0.7.4 继续晚上camera.getExtentInfo方法，在沿着经线上下偏移纬度时不准确，比如65+40=105>90，导致其超出[-90,90]的范围，现在会确保其范围是正确的，但是有可能把范围算大了

 - 0.0.7.5 完成camera.getExtentInfo方法的重写，并对老旧代码删除，用新代码替换老代码

 - 0.0.7.6 以前为了优化效率，在很多地方设置了SubTiledLayer的isvisible和Tile的isvisible都为false，但是体验效果却不好，经常会拿level1来作为保底图层；现在只要camera变化了就将所有SubTiledLayer和Tile的isvisible都设置为true，体验效果好，只有在camera位置没有发生变化，且level最大的那级图层的所有切片都已加载的情况下（即SubTiledLayer.checkIfLoaded为true）时才会将无需显示的那些SubTiledLayer的isvisible属性置为false

 - 0.0.7.7 将MAX_LEVEL、CURRENT_LEVEL、BELOW_LEVEL、OLD_POSITION属性从World中迁移如World.Globe中，更合理

 - 0.0.7.8 完善了onMouseMove事件代码，提供与Google New Map一样的体验

 - 0.0.7.9 修改完善了getPickDirectionByNDC方法，ndcZ传入0.1而非0.5,0.5在某些情况下会导致计算的w为0

 - 0.0.8.0 将ndcZ最终改为0.499,没发现问题；并且在camera.isTileVisible方法内通过判断切片斜对角线的长度是否均小于0.1来决定不可见或可见，这对于倾斜视角下很有用，会剔除掉那些面积很小的切片，直接用面积比较不如用斜对角线长度比较实用，并因此在任意时刻都渲染全部的切片，去掉了checkIfLoaded的优化代码

 - 0.0.8.1 打算重写算法，添加了两个重要的方法camera.getVisibleTilesByLevel和getTileVisibleInfo，直接从第level级获取可见的切片，无需从第0级依次遍历

 - 0.0.8.2 重写了算法，不再根据经纬度依次从第1级开始判断，直接通过camera.getVisibleTilesByLevel获取第level级别的可见切片，即使缩放到20级，内存也在170M左右，而且很流畅，删除了以前的老代码，实现重大升级

 - 0.0.8.3 加入World.Elevation代码，用于请求高程数据，开始改造Object3D和Tile的相关方法，使其能根据传入的vertice等信息动态更改buffer

 - 0.0.8.4 实现最最基础的三维地形图

 - 0.0.8.5 上一版本的World.Elevation.getElevationByCache有问题，现在已修改完善，正确计算切片高程的起点索引值

 - 0.0.8.8 重写了Tile.handleTile方法，将老的方法命名为handTile2，但没有删除，新的handleTile方法从左上角至右下角遍历，并且多个三角形公用同一个顶点

 - 0.1.0 将Globe.js拆分成多个AMD模块，AMD代码放在js目录下；并将AMD代码用TypeScript重新实现，放到ts目录下，并对原有AMD的代码进行微调：解除了Vertice与Vector之间的相互引用，解除了Math与TileGrid之间的相互引用；通过gulp分别实现了对AMD和TypeScript代码进行编译压缩，通过requirejs均可加载相应bundle代码

 - 0.1.1 在js和ts中均修复了在两极地区抖动的问题：world/Event#moveGeo()

 - 0.2 引入World.js中的许多类的设计理念，包括Program、GraphicGroup、Graphic、Geometry、Material、VertexBufferObject等，现在SubTiledLayer和TiledLayer都继承自GraphicGroup，并且让Tile继承自于Graphic

 - 0.2.1 修复了在leve 15及以上的情况下，拖动地图导致地图空白的问题，见issue#9

 - 0.2.2 删除高程相关代码

 - 0.2.3 将world/geometries/Geomtry重命名为world/geometries/Mesh，并在package.json中添加了多个npm scripts，对应gulp中定义的tasks

 - 0.2.4 之前EARTH_RADIUS的值为6378137，特别大，导致了深度值计算有问题，从而使得深度测试不能正常进行。将EARTH_RADIUS改成14000，使得深度测试可以正常进行。并加入了Poi和PoiLayer这两个类。

 - 0.3.0
   - 将EARTH_RADIUS从14000改为500，在0-10级的时候，通过改变Camera的position实现缩放，在10级之后通过改变fov实现缩放。
   - Camera中所有的计算（比如计算视野中的可见切片）都是基于matrix、viewMatrix、projMatrix和projViewMatrix。
   - 但是实际传递给shader用于绘图的是projViewMatrixForDraw。Camera.getPickCartesianCoordInEarthByCanvas()方法也是基于projViewMatrixForDraw系列矩阵的。
   - 该版本提高了深度值的精度，基本解决了z值精度问题。在update()方法中会计算projViewMatrixForDraw系列矩阵。

 - 0.3.1 使得Globe.animateToLevel()可以在0.3.0的版本上运行，解决办法是引入了camera.animationLevel，其值是非整数。

 - 0.3.2 优化了Camera.update()方法，只有发生用户交互的情况下才实际进行计算。

 - 0.3.3 优化了Globe.refresh()方法，只有发生用户交互的情况下才重新计算可见切片。

 - 0.3.4 增加了Atmosphere效果。

 - 0.3.5 优化了切片加载的算法：
   - 当MeshTextureMaterial执行destroy的时候，取消掉原有的图片请求；
   - 当缩放的时候，不会请求父级别以及父父级别的切片。比如缩放到第15级的时候，不再请求第13和14级的切片，但是会请求12级及以前的切片，减少了图片请求的数量。

 - 0.3.6
   - 使得PoiLayer能基本搜索POI并将其显示；
   - 为IE11等浏览器添加ES6方法的polyfill；
   - 在Matrix中用Float64Array存储数据，并同时提供getFloat32Array()方法以便给Shader传递Float32Array类型的数据（Shader不支持Float64Array）。

 - 0.3.7 删除Poi类，并让PoiLayer继承自Graphic，每次OnDraw()的时候将所有poi点的坐标动态赋值给buffer，大幅减少了绘图命令的调用，提高了FPS。

 - 0.3.8 在TiledLayer中为program中的uniform变量设置值，减少了WebGL命令的调用次数。

 - 0.3.9 用webpack代替gulp作为打包工具

 - 0.3.10 每次渲染之前都会检查Camera是否发生变化，如果变化则更新切片列表，并且保证Canvas八个角点都有保底的可见切片，不再从level1全部渲染切片，减少WebGL绘图命令

 - 0.3.11 修复了0.3.10里面的一个bug

 - 0.3.12 使得GoogleTiledLayer可以使用，并且为GoogleTiledLayer和OsmTiledLayer增加了多种Style

 - 0.3.13 添加LabelLayer和AutonaviLabelLayer，叠加GoogleTiledLayer，取得了较好的效果

 - 0.3.14 在移动端浏览器上面可以通过手势缩放

 - 0.3.15 添加了TrafficLayer、SosoTrafficLayer、QihuTrafficLayer，可以查看实时交通

 - 0.3.16 使得QihuTrafficLayer可以运行

 - 0.3.17 添加Location模块，监听位置变化

 - 0.3.18 在Camera中增加了resolution相关的方法，并可以通过Camera.getBestDisplayLevel()方法获取当前摄像机位置下最优的显示层级的切片

 - 0.4.0
   - 去除了level和lastLevel的概念，只保留一个概念：renderingLevel，renderingLevel即相当于之前的lastLevel，表示最后渲染切片的级别；
   - 增加了calculateDistance2EarthOriginByResolution()和calculateResolutionAndBestDisplayLevelByDistance2EarthOrigin()等相关方法，并依据这些方法完成Camera位置与renderingLevel之间的映射

 - 0.4.1 将renderingLevel重命名为level，将set/getRenderingLevel()重命名为set/getLevel()

 - 0.4.2 重命名Camera中的相关方法

 - 0.4.3 向Camera添加isEarthFullOverlapScreen()等方法

 - 0.4.4 默认显示当前位置

 - 0.4.5 添加Travis CI服务，在每次push代码的时候进行测试，在README.md中添加了各种Badge

 - 0.4.6 增加了GlobeOptions类，为Globe构造函数传递参数

 - 0.4.7 修复Camera中setDeltaPitch的bug

 - 0.4.8 使用Webpack加载图片、分离JavaScript与CSS、基于文件内容生成hash

 - 0.4.9 当level>=10时可以进行POI搜索，并且当地图范围变化时会重新动态搜索

 - 0.4.10 开发模式下，启用SourceMap

 - 0.4.11
   - 分离core和webapp目录，基本搭建起了webapp的路由机制，基本完成首页界面
   - 将所有服务都放入到Service类中，并添加searchNearby接口
   - 将core中的import require改成import from

 - 0.4.12 使用更加快速的城市级别的定位服务，明显缩短定位时间

 - 0.4.13
   - 添加MultiPointsGraphic类，并让PoiLayer继承自该类
   - 通过配置tsconfig.json删除了很多无用的import和变量

 - 0.4.14
   - versions.txt -> versions.md
   - 基本完成附近搜索功能，将搜索结果分页显示

 - 0.4.15
   - 阻止隐藏地址栏
   - 处理文本框和软键盘
   - 对nearby/Search和nearby/Result的UI做了增强

 - 0.4.16 从Kernel中删除了globe和canvas属性

 - 0.4.17
   - 设置Globe的构造函数为私有方法，只能通过静态方法getInstance获取其单例
   - 将Globe包装成React组件

 - 0.4.18
   - 优化定位逻辑
   - 将附近搜索的结果在地图中显示

 - 0.4.19
   - 使用WebGLRenderingContext引用WebGL静态常量
   - 在绘制PoiLayer时禁用深度测试

 - 0.4.20
   - 在Service中添加searchByCurrentCity接口
   - 为Globe添加pause和resume方法，在React组件中调用

 - 0.4.21
   - 添加RouteComponent，所有routes目录下的Component均继承自它，异步操作会显示loading
   - 对附近搜索无结果的情况进行友好显示

 - 0.4.22
   - 继续完善index/Nav页面
   - 添加了路线规划相关的服务

- 0.4.23
   - 完善Service.gaodeRouteByDriving()方法
   - MeshGraphic => MeshTextureGraphic
   - 添加MeshColorGraphic

 - 0.4.24 RouteLayer基本可以实现固定宽度的Polyline

 - 0.4.25 更新webpack.config.js

 - 0.4.26 Camera中添加centerTo和animateTo方法

 - 0.4.27 Camera中添加setExtent和animateToExtent方法

 - 0.4.28 通过判断道路拐点解决"箭头道路"的问题

 - 0.4.29 可以在nav/Paths页面中直接切换出行方式重新进行路线规划

 - 0.4.30 在RouteComponent中添加getPreviousLocation()方法，并在nearyby/Result中使用

 - 0.4.31 在公交导航中支持火车出行

 - 0.4.32 通过http://fontello.com/ 自定义FontAwesome

 - 0.4.33 Globe构造函数支持pauseRendering参数，可以实现切片延迟加载

 - 0.4.34 searchByBuffer和searchByCity支持SearchType参数，可以智能判断类型，并且可以在查询无结果的情况下改变SearchType再次查询，优化查询体验

 - 0.4.35 iOS系统中的浏览器不能访问类WebGLRenderingContext的静态常量，将所有用到WebGLRenderingContext的地方重新改成Kernel.gl的形式，用实例常量访问即可修复iOS中无法渲染的严重bug

 - 0.4.36 更新webpack.config.js文件，在生产环境中配置new webpack.DefinePlugin，将NODE_ENV配置为production，使得压缩打包后的React体积减小88KB，参见https://facebook.github.io/react/docs/optimizing-performance.html#use-the-production-build

 - 0.5.0 为搜索框添加搜索图标，方便搜索

 - 0.5.1 更新README.md，发布新版本

 - 0.5.5 修复了Camera中计算出的实际分辨率总是真实值的1.3倍的bug

 - 0.5.6 可以点击拾取PoiLayer

 - 0.5.7 Graphic支持attributes属性，优化PoiLayer拾取逻辑，修复Service.ts中Promise导致TypeScript报错的问题

 - 0.5.8 重新修改了resolutionFactor1和resolutionFactor2的值，确保图片是256大小显示，并且确保getResolution()和getResolutionInWorld()方法用于让其他类调用获取实际的分辨率

 - 0.5.9
   - 使得Globe支持resolutionFactor参数，并且在webapp.html中设置值为1.2
   - 优化了webapp.html搜索体验，支持“当前位置”

 - 0.6.0 更新README.md和图片，发布新版本

 - 0.6.1 修复VertexBufferObject中无法重用Buffer的Bug