openlayers原理小故事(1)

办公室来了一个新同事,女的,挺漂亮,名叫柳飘飘。做了多年孤寡老人的王大锤仿佛看到了一丝希望,愉悦之情溢于言表。

第二天柳飘飘小姐姐主动搭讪,王大锤心里仿佛有千万只锤同时在敲,原来是一个问题:

// 柳:请问ol是如何调用这个OSM地图的呢?
// 王:……
const map = new Map({
  layers: [
    new TileLayer({
      source: new OSM(),
    }),
  ],
  target: "map",
  view: new View({
    center: [0, 0],
    zoom: 2,
  }),
});

王大锤心中一喜,心想这还不是我的看家本领。于是洋洋洒洒的答道:

OSM是OpenStreetMap公司开发的地图切片服务,采用Web Mecator投影,除了两极地区,可以实现全球范围内的覆盖。所谓的切片服务本质上就是将球面投影而成的图片经过切片,拆分,编号,放在服务器里,前端渲染的时候根据显示的范围和缩放层级而去请求对应的图片。通常Web端绘制图片的方式有Image标签,canvas,和WebGL,现在的高性能前端地图框架会采用WebGL绘制,更高效,还支持三维。

说这段话的时候,王大锤特意把本质上这三个字着重强调了一下,看着柳飘飘在耐心的听着,心里眉飞色舞,好不自在。他现在急需对方的一个肯定,结果他并没有等到,他等来的是“一记重拳”,柳飘飘又提了三个问题。

一张草稿纸上写了几行字,写得很秀气,内容如下:

1. 初始化Map时,传入的属性做了哪些处理
2. TileLayer和OSM是如何设计的,两者的关系是什么
3. canvas的绘制是如何一步步触发的

王大锤心中一惊,仿佛又千万只锤同时在敲。本来打算想在妹子前表现一下自己的,没想到弄巧成拙,刘三炮的挤眉弄眼更是让自己更加尴尬。刘三炮和王大锤同是GIS开发组的,平时都是自己的手下败将,想到自己被他嘲笑更是气不过。

第二天一大早,枯木逢春的王大锤特意吹了一个时髦的发型,在镜子前看了很久。在得出自己依然风华无限,光彩照人的结论后出了门。诚惶诚恐地把昨天晚上苦思冥想的答案放在柳飘飘的桌上后,心里忐忑不安,上面写道:

1. 初始化Map时,传入的属性做了哪些处理?
初始化视口viewport的div;监视地图属性值变化,如监视layer和view的变化;初始化控件(旋转,缩放和属性)和默认交互(拖拽,双击等);
Map类继承自Object类,Object类型继承自EventTarget类,这也是ol中大部分类的继承框架。Object类用于设置属性值,EventTarget用于注册事件和触发事件。

2. TileLayer和OSM是如何设计的,两者的关系是什么?
实例化TileLayer的主要目的是监视source的变化,等待source的加载; OSM是一种XYZ切片格式的数据源,继承自TileImage类,TileImage类用于创建切片,创建缓存等。

3. canvas的绘制是如何一步步触发的
以OSM为例,OSM其实是封装的切片图层。初始化Map时,layers属性的注入,会触发渲染机制,将解析出来的切片地图按照一定的规则排列在canvas中。

如果关注了一个人,即时不看到他,也知道对方出现了。柳飘飘出现了,一身针织衬衫,走过后王大锤能感受到一阵温柔的风吹过后脖领。

柳飘飘似乎并没有注意到王大锤的新发型,但是发现了桌上的字。

posted @ 2021-04-29 20:00  mangata  阅读(177)  评论(0编辑  收藏  举报