用程序读历史,以数据讲故事。
Omernik(2004年)对生态区域的定义是这样阐述的:“与地理现象的特征相契合,在生态系统的质量、健康程度和完整性上有差异的地区”。这里的“地理现象的特征”可能包括地质、地貌、植被、气候、水文、陆生和水生动物以及土壤,此外也可能有人类活动的影响(如土地利用方式、植被变化等)。
根据世界自然基金会的定义,将生态区分为陆地、淡水、海洋3大类型。其中,陆地及淡水部分可依地理分布、演化历史因素及生物类群之相似性再分为8个生态界,共包含867个陆地生态区域及426个淡水生态区域;海洋部分则可依纬度及洋盆分为12个生态界,包含232个海洋生态区域。具体的分区列表可以参考下面这个表格:
https://zh.wikipedia.org/zh-cn/%E7%94%9F%E6%85%8B%E5%8D%80%E5%9F%9F%E5%88%97%E8%A1%A8
如果把这些区域分块染色并绘制于世界地图上,就得到了下面这样一张地图:
世界陆地生态区域(Olson et al. 2001, BioScience) ▼
需要注意的是,虽然从上图看生态区域之前颜色泾渭分明,但实际上它们之间的界限并非绝对,同时某个生态区域边界的环境状况变化可能会极为缓慢,这就让现代的生态区域地图在人类数千年文明史研究上具备了一定的参考价值。
以公元元年西汉在西域这一块的区域地图来看,国家边界与生态区域边界的重合度就比较高:
公元元年西域 ▼
在OpenLayers上就提供有这样一份GeoJSON格式数据,可以通过浏览器打开查看一下数据格式:
https://openlayers.org/data/vector/ecoregions.json
生态区域数据 ▼
展开features数组,重点关注其中properties、定义了每个矢量地图块的属性,其实主要就是区域颜色以及名称,如果观察仔细会发现,在属性中存在多个名称、多个颜色值:
{
"ECO_NAME": "High Monte",
"BIOME_NAME": "Montane Grasslands & Shrublands",
"REALM": "Neotropic",
"NNH": 3,
"NNH_NAME": "Nature Could Recover",
"COLOR": "#DBA05E",
"COLOR_BIO": "#D6C39D",
"COLOR_NNH": "#F9A91B"
}
那到底应该使用哪个呢?这就不得不先来介绍一下这套数据集中的区域划分方式:
生态区域(ECO_NAME、COLOR):对应的就是前文介绍的世界自然基金会对地球生态区的划分。
生物群系(BIOME_NAME、COLOR_BIO):这是一组以气候及地理划分的共生生物群落(包括植物群落、动物群落、土壤生物群落等)通常以以占优势的植被类型和气候类型为特征,如热带雨林、沙漠等生态域。具体可参考维基百科定义:
https://zh.wikipedia.org/zh-cn/%E7%94%9F%E7%89%A9%E7%BE%A4%E7%B3%BB
NNH(NNH_NAME、COLOR_NNH):全称为“NATURE NEEDS HALF”,是一个公益组织,其呼吁各国政府承诺在2030年达到保护全球30%的土地和水,以及在2050年达到保护全球50%的土地和水的目标。
https://natureneedshalf.org/
在这套数据集中其实是存在着3种生态区域的划分数据,因此「生态底图」的选择操作跟别的底图选择会有一点点的不一样,还需要多选择一个分区类型:
生态底图分区方式选择 ▼
针对不同生态区域地图上有不同颜色的标识,在不熟悉的情况下看见颜色显然对照不上区域,因此就需要把名字给显示出来,不过如果简单粗暴进行显示就会像下面这样:
一种乱糟糟的状态 ▼
其实可以计算得到当前地图的缩放级别,只在缩放到一定比率后再进行显示,缩放比率的计算可以参考下面代码:
function zoomForResolution(resolution: number): number {
let zoom = 0
let r = 156543.03390625
while (resolution < r) {
r /= 2
zoom++
if (resolution > r) {
return zoom
}
}
return zoom
}
最后呈现出来的效果就像是下面这样,当然如果觉得国家图层碍事,可以先点击选中后在菜单中进行关闭,这样就可以方便做边界的对比了:
生态区域与国家边界的对比 ▼