在OpenLayer 3中如何使用层概念?

时间:2016-01-14 11:42:24

标签: javascript openlayers-3

我是JavaScript的新手,我正在评估将 OpenLayer 3 用于项目。

我正在研究关于这个库的一些教程,我对层概念有以下疑问。

所以,根据我所理解的(如果我做错了断言,请纠正我)来渲染一个简单的“Hello World”地图示例我可以这样:

var view = new ol.View2d({
    center: [0,0],
    zoom: 0
});

var map = new ol.Map({
    target: map,        // map is the id of the element in the DOM where the map will be putted
    layers: [layer],
    view: view          // Use the previous defined view object for the settings of this map
});

我还没有在我的电脑上测试这个例子,我从这个视频教程中得到了它:https://www.youtube.com/watch?v=SPPhpLTkWX8

所以似乎地图和**视图*分开了

  • 地图:是用户与之互动的主要对象(点击,拖放,绘制,执行操作)。

  • 查看包含与地图的呈现方式相关的设置(在这种情况下,它是一个二维地图,指定地图居中的位置)当它显示和缩放时。

因此,根据我的理解,存在这种分离关注,因为我可以使用不同的查看对象以不同的方式显示单个地图

这种推理是正确的还是我错过了什么?

并不是第一个大疑问:在教程中显示前面的代码会在浏览器中显示一个地图。好的,但从哪里拿这张地图?它是GoogleMap地图还是什么?这对我来说非常模糊......

然后教程继续并显示图层概念

因此,它显示了创建 Open Street Map 图层(https://www.openstreetmap.org)的代码:

var osm = new ol.layer.Tile({
    source: new ol.source.OSM();
});

然后我认为要使用此图层,我必须将其作为元素添加到图层对象中定义的先前图层:[图层] 数组中。这是对的吗?

现在我脑子里还没有那么清楚的事情是。

什么是图层?它是否类似于在特定地图上添加的附加信息,或者它是一种特殊的地图(例如Google地图或从其他地图提供商处获得的其他类型的地图)。

我认为这是第一个(有些数据显示为地图上的图层,实际上是地图对象我有一个图层数组作为字段,其中我想我可以添加更多的图层来显示此地图上的不同信息。)

但我有这个疑问,因为我无法理解谁是OpenLayer中的地图提供者(谷歌地图或什么?),如果我还可以指定特定的地图提供者。

这个疑问也是因为我看到使用OpenLayer我可以使用 Bing Map 作为图层,但据我所知 Bing Map 是地图提供者替代< strong> Google地图。

var bing= new ol.layer.Tile({
    source: new ol.source.BingMaps({
        key: API KEY,
        style: setted style
    })
});

那究竟是如何运作的?

1 个答案:

答案 0 :(得分:2)

这是很多问题,让我试着回答一下:

  

所以根据我的理解,存在这种分离的关注,因为我可以使用不同的View对象以不同的方式显示单个Map。

     

这种推理是正确的还是我错过了什么?

实际上它是相反的。不同的地图可以共享相同的view。这是一个例子: http://openlayers.org/en/master/examples/side-by-side.html

  

好的,但从哪里拿这张地图?它是GoogleMap地图还是什么?这对我来说非常模糊......   ...   什么是图层?

地图是图层的集合。并且层是地理数据集/数据源的可视表示(例如,矢量要素,栅格图块和图像)。例如:

var osm = new ol.layer.Tile({
    source: new ol.source.OSM();
});

这定义了一个使用OpenStreetMap图块图像作为源的图块层。如果您使用ol.source.BingMaps替换来源,则您的图层将使用Bing中的平铺图像。

  

但我有这个疑问,因为我无法理解谁是OpenLayer中的地图提供者(谷歌地图或什么?),如果我还可以指定特定的地图提供者。

     

这个疑问也产生了,因为我看到使用OpenLayer我可以使用Bing Map作为图层,但据我所知,Bing Map是地图提供者替代谷歌地图。

OpenLayers是一个用于创建交互式地图的库。 OpenLayers不是数据提供者,但它允许使用来自不同提供者的数据,例如来自OpenStreetMap或Bing的图块。

Google有一个JavaScript库,即Google Maps JavaScript API,但Google也是其街道地图和卫星图像图块的数据提供商。

我希望这会让它更清晰一些。我建议您查看OpenLayers 3 Workshop以及mapschool.io和/或Learning Lunches: How to Make a Map ,以便更好地了解基础知识。