重读地图代码

为了来到这,我们先详细介绍了官网API文档,那重新回味创建地图的代码:

        // 新建一个地图
      new ol.Map({
            // 定义地图显示图层集合
            layers: [
              // 新建一个使用Open Street Map地图源的瓦片地图图层
              new ol.layer.Tile({source: new ol.source.OSM()})
            ],
            // 新建显示地图的视图
            view: new ol.View({
              center: [0, 0],    // 定义地图显示中心于经度0度,纬度0度处
              zoom: 2            // 并且定义地图显示层级为级别2
            }),
            // 设置id为map的dom元素来作为地图的容器
            target: 'map'    
        });

Map对应的就是ol.Map类了,参数是一个对象,layers可以是ol.Collection,也可以是Javascript数组,此处用了数组。数组里面只有一个元素,就是ol.layer.Tile的实例,从API文档上看,数组里面的元素应该是ol.layer.Base类型才是,为什么可以用ol.layer.Tile呢?因为ol.layer.Tile继承于ol.layer.Layer,而ol.layer.Layer又继承于ol.layer.Base

那么ol.layer.Tile又是什么呢,首先看包名,我们可以推断出它是一个layer,属于地图层总的一种。但具体代表什么,我们可以通过前面所学,查看官网API来详细了解:它是一种应用瓦片图片作为地图源的地图层。构造函数的参数里包含一个必须设置值的属性:source,用于设置地图源,类型为ol.source.Tile,但是我们的代码里面使用的是ol.source.OSM,为什么可以呢?这个问题留给你自行去解答吧。

由此可见,layer是为source服务的,每一个layer都必须要有source,且source起决定因素,他们需要配套使用。为此在查看需要使用什么layer时,我们应该先看一下有什么source可用。如何查?在官网API中输入ol.source即可查看到现有哪些不同类型的source,然后挨个查看,直到找到需要的source类。假设找到了ol.source.Test,那么要找layer就简单了,一般情况下,都会有ol.layer.Test,就是它了。 如果没有,请查找ol.source.Test的父类对应的layer,以此类推。

View对应ol.View类,请自行查阅官网API了解详细信息,顺便详细看看构造参数中设置的centerzoom表示什么?View至关重要,后续会更加详细的说明相关的用处。