OpenLayers 5的体系架构可见,可把整个地图看成一个容器(Map),核心为地图图层(Layer)、对应图层的数据源(Source)与矢量图层样式(Style)、与地图表现相关的地图视图(View).
工作原理
1 | 1、数据组织 |
1 | 地图数据根据数据源(Source)可分为Image、Tile、Vector三大类 |
1 | 4.地图表现 |
选择数据源
1 |
|
初始化地图
1 | var map = new ol.Map({ |
1 | // 自定义测量组件 |
OpenLayers之多源数据展示
随着Web技术的推进,使得GIS拥有了更大的空间,通过网络渠道快速传递空间信息,普及GIS了应用。随着互联网地图应用的不断发展,目前涌现了大量网络地图服务资源,包括Google地图、OpenStreetMap、Bing地图、Yahoo地图、百度地图、高德地图、天地图等。此外,还有ESRI、中地数码、超图等大型GIS厂商提供的自定格式的GIS数据,以及其他企事业单位或研究机构提供的各种格式的GIS数据等。数据来源丰富,数据格式各异,如何将这些多源异构数据加载到Web端展示,实现数据的无缝融合,这在WebGIS应用中是一个首先要解决的关键问题
GIS数据加载一般原理
1 | 1、GIS地图加载的一般原理 |
开放数据
1 | 这些新的空间数据格式包括KML、GML、GeoJSON、GPX等,这些都是开放的数据格式,可以在多种软件、平台、工具或程序中使用,能够很好地满足Web端使用GIS数据的要求,让GIS数据的使用更灵活、应用范围更广泛 |
公共地图数据
1 | 目前OpenLayers 5封装了部分公共地图数据,如OpenStreetMap、Bing地图的数据源等,可以将它们直接实例化数据源对象,结合瓦片图层来加载对应的地图数据。而对于未封装的公共地图数据,如百度地图、天地图数据等,则可以使用ol.source.XYZ来加载,但要根据其地图数据请求地址设置其相应参数。 |
矢量瓦片
1 | 矢量瓦片是指不仅能够提供完整的样式设计灵活性,还能能够快速渲染海量数据的矢量地图,其本质是矢量地图,等效于在网页上绘制的栅格图片(矢量块) |
多源数据叠加
1 | OpenLayers 5支持多源异构数据在同一个地图容器中叠加显示,数据叠加也是OpenLayers 5的地图表现的实现机制 |
网格信息显示
1 | 瓦片地图都是基于金字塔策略裁剪后的图片集,因此瓦片地图由级数、行列号对应的单张图片按照网格划分组织而成 |
地图打印(导出图片)
1 | Web端的地图打印功能,最简单的就是输出当前视窗范围内的地图,即将当前地图导出为一张图片并存储到客户端.也可以通过截屏功能实现。 |
OpenLayers之图形绘制篇
图形绘制功能,是指在地图容器中绘制图形,包括点、线、圆、矩形与多边形等,可通过鼠标交互绘制,也可直接添加绘制好的图形
图形交互绘制原理
1 | 图形表现的内容十分丰富,有基本几何图形,即点、线、圆、矩形、多边形等;也有方向图形,即各种式样的方向箭头;还有标识某一内容或含义的图形,如指北针、小旗子等。 |
几何图形的绘制
1 | 基本几何图形包括点、折线、圆、矩形、多边形等。本示例主要实现这些基本几何图形的绘制,包括点、圆、线、多边形,以及规则的正方形、长方形的绘制 |
图形样式编辑
1 | 几何图形,如点、线、区等,都有对应的样式,如线型、线颜色、线宽、线透明度、填充颜色等。如果没有设置几何图形的样式,交互式图形绘制控件则会使用默认的样式进行绘图 |
图形交互编辑
1 | 我们不仅需要编辑图形的样式,同样也要修改已绘制图形的几何信息。为了方便操作,修改图形的几何信息一般采用鼠标交互方式实现。针对图形的修改,OpenLayers 5提供了交互式编辑控件ol.interaction.Modify,可以结合选择要素控件ol.interaction.Select一起使用。 |
OpenLayers之OGC服务篇
1 | 开放地理信息系统协会(Open GIS Consortium, OGC)是一个非营利性的行业协会,成立于1994年,致力于促进采用新的技术和商业方式来提高地理信息处理的互操作性 |
OGC规范的加载原理
1 | (1)WMTS:即Web瓦片地图服务,WMTS的GetTile接口返回的就是单张瓦片地图,其调用方式与其他类型的瓦片地图相同。可以使用ol.layer.Tile + ol.source.WMTS加载WMTS,由数据源(ol.source.WMTS)内部处理与请求WMTS,加载所请求范围内的瓦片地图。 |
OGC规范数据显示
1 | OGC服务的功能越来越强大,但OGC规范数据的加载显示是最基础的部分,必须由相应的GIS服务器发布OGC服务,提供服务资源的支持 |
OpenLayers之高级功能篇
地图标注是将空间位置信息点与地图关联,通过图标、窗口等形式把相关的信息展现到地图上。地图标注也是WebGIS中的比较重要的功能之一,在大众应用中较为常见。基于地图标注,可以为用户提供更多个性化的地图服务,如标注兴趣点等
地图标注功能
1 | 地图标注的基本原理是: |
投影转换
1 | 在Web端加载显示地图数据时,都要设置地图数据的投影坐标系。OpenLayers 5在地图视图对象中有一个投影坐标系参数(projection),在加载地图时可通过此参数设置地图的投影坐标系。在实际应用中,叠加图层数据需要确保在统一的投影坐标系下 |
视图联动
1 | 针对OpenLayers 5的两种渲染方式分别创建两个地图容器,在这两个地图容器中实现地图的视图联动 |
地图导航
1 | 实现实时定位功能的关键是加载定位导航控件(ol.Geolocation),调用定位导航控件对象的setTracking方法来启动位置跟踪功能,同时为此控件对象绑定以下三个事件。 |
热点图
1 | 热点图也称为热力图,是一种以特殊高亮的形式显示事物密度分布、变化趋势等地理区域的图示,通常用不同颜色的区块叠加在地图上实时描述,以颜色变化展现事物的状态与变化趋势等。例如,景区人群分布热点图,可以在地图上很直观地表示景区拥挤指数等。 |
热区功能
1 | ![toolOPen](../../resource/toolOPen.png) 热区功能的实现过程如下: |
军事标绘功能
1 |
|
拓展
ol-hashed
由于我们会经常重新加载页面,如果地图在重新加载时保持在我们离开它的位置就好了.ol-hashed 解决这个问题
1 | import sync from 'ol-hashed'; |
拖放
将一个 geijson 文件拖入地图,然后渲染
1 | import DragAndDrop from 'ol/interaction/DragAndDrop'; |
demo示例
自定义控件
ol组件拓展
loading 组件
自定义一个地图loading面板,请求加载时,地图不可操作,相当于加一个透明蒙版
1 | ol.control.LoadingControl = function(opt_options){ |
蒙版样式
1 | .ol-layer-data-loading{ |
引用控件
注册控件时添加id, 通过map对象获取注册的控件。
然后就可以调用控件方法了
1 | // 自定义 loading 控件 |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/jsplugin/openlayers/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!