APP下载

基于开源Leaflet的WebGIS客户端设计与实现

2017-06-10赵虎川曲超

科技创新与应用 2017年16期
关键词:开源

赵虎川+曲超

摘 要:Leaflet是一个开源的地图Javascript库,具备界面友好、互操作性强、支持移动设备等特点,支持OGC的WMS/WFS/WCS标准,提供了数百个第三方插件扩展地图功能,是进行开源WebGIS客户端开发的最佳选择。文章介绍了WebGIS体系结构和关键技术与规范,并结合实例重点介绍了Leaflet的特点具体应用。

关键词:开源;WebGIS;Leaflet;GeoJSON

1 概述

近年来,随着计算机技术、互联网技术、数据库技术等技术的不断发展,GIS技术开始面向传统行业和广大民众,WebGIS出现并迅速发展[1]。因为采用B/S(浏览器/服務器)方式搭建,并具有响应快速、交互式、分布式、动态性等特点,实现了在互联网上实现地理信息服务共享,是GIS发展的必然趋势。人们可以在网络上的任意一个节点,通过浏览器无缝访问来自多个WebGIS服务器发布的空间数据,并使用来自多个服务器节点提供的服务。这使得WebGIS真正成为大众的工具,贴合人们的生活,利用空间信息更好的为人们服务,如谷歌地图、百度地图等,已经成为人们日常出行不可缺少的一部分。

基于WebGIS的商业平台和OGC开放式地理数据互操作规范的开源框架越来越多,但是对于个人用户和中小企业,如果使用商业WebGIS平台,就必须使用其相关的数据处理工具、制图工具、空间数据库管理工具以及数据服务发布工具等一系列商业软件,需要支付高昂的费用,让人难以接受。因此,基于开源框架的WebGIS平台成为中小企业以及科研工作者的首选,并涌现出Openlayers和Leaflet等客户端平台。本文选择Leaflet作为WebGIS客户端的开发框架,Leaflet是一套界面友好、互操作性强、支持移动设备的JavaScript开源地图库,具有简便、高效、可用性强等特点,具备开发者用到的所有地图功能[2]。

2 WebGIS的体系结构

一般来说,WebGIS的体系结构至少包括三个部分:数据源,Web服务器,客户端,如图1所示[3]。

2.1 数据源

数据源用户管理和处理各种数据,包括文件类型数据和空间数据,以及地图切片数据,可采用商业数据库如Oracle、SQL Server等,也可采用开源数据库MySQL和PostGIS等。系统会使用多台物理计算机来存储和更新数据、处理数据,并加工地图,并定期对数据进行备份,为Web服务器提供强大数据支撑。

2.2 Web服务器

基于OGC规范的Web服务器是系统的核心部分,用于创建基于OGC的WMS、WFS和WCS规范的Web服务服务。Web服务器要求性能要好、处理速度要快,从而快速处理地图服务等各种服务。当前主流的WebGIS都是用JavaScript直接访问Web服务,JavaScript是直接在浏览器上运行,可以直接访问Web服务并返回结果。

2.3 客户端

客户端是支持WebGIS的各种浏览器,浏览器通过网络连接到Web服务器发布的空间服务,并依赖这些服务来获取地图数据、查询、分析、统计、定位等功能,从而以可视化的形式为用户展示地图、文字、表格、统计图和视频等综合信息。

3 WebGIS规范和技术

3.1 OGC规范

OGC的主旨是在分布式环境下实现地理空间数据和地理信息处理资源的共享,允许用户通过网络实时的获取不同系统的地理信息[4]。OGC根据W3C的Web服务发布了WMS(Web Map Service,Web地图服务),WFS(Web Feature Service,Web要素服务)和WCS(Web Coverage Service,地图覆盖服务)等规范,从而实现了矢量数据和影像数据的共享。

WMS定义了GetCapabilities(用于返回服务级元数据),GetMap(用于返回地图影像),GetFeatureInfo(用于返回显示在地图上的某些特殊地理要素信息)等3种操作。能够根据用户的请求返回相应的地图,地图的形式包括PNG、GIF、JPEG等。

WFS定义了插入、更新、删除、检索和发现地理要素的服务,其中GetCapabilities用于返回服务级元数据。DescribeFeatureType用于返回要素结构,进而可以进行查询等操作。

GetFeature是很重要的接口,它可根据查询要求返回一个符合GML规范的数据文档。WFS支持根据属性条件进行查询,支持根据空间关系进行查询,并支持属性条件和空间关系的复合查询。

WCS根据客户端请求返回影像等多种数据。包含GetCapabilities,GetCoverage等重要操作。其中GetCapabilities返回一个描述服务和XML文档,在确定要查询的数据后,GetCoverage返回数据。

3.2 Leaflet

Leaflet是一个开源的地图Javascript库,它由Universal Mind的Vladimir Agafonkin创建。目前版本更新到1.0.3,只有38k大小,具有开发在线地图的大部分功能,适用于开发中大型在线GIS应用。Leaflet提供可读性强的API文档和源码,本身不仅支持旧的浏览器访问,而且更好的支持HTML5和CSS3,界面简单、友好。Leaflet采用面向对象设计,封装性好,并且提供了很多专业的第三方Javascript插件来扩展自身的功能,从而满足WebGIS对地图的各种查询、分析、渲染等操作。

Leaflet的核心是Map类,Map是一个地图容器,可以在其中放置地图控件、添加图层、添加标注、添加符号、绑定事件等[5]。Leaflet默认采用“L”作为命名空间,使用类似于jQuery的链式编码风格,代码更加精简,并且可读性强。

3.3 GeoJSON

JSON是一种轻量级的数据交换格式,基于Javascript实现,JSON独立于操作系统和编程语言,以键/值的形式组织数据。GeoJSON是基于JSON的地理空间信息数据交换格式,可以对地理要素进行编码,支持点、线、面、多点、多线、多面等几何类型,并附带几何对象属性,地理要素存储于Feature 或者FeatureCollection中。Leaflet支持GeoJSON格式地理信息数据,GeoJSON数据格式如下:

{ "type": "FeatureCollection","features": [{ "type": "Feature","geometry": {"type": "Point", "coordinates": [102.0, 0.5]},"properties": {"prop0": "value0"}},{ "type": "Feature","geometry": {

"type": "LineString","coordinates": [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, "prop0": "value0", "prop1": 0.0}},{ “type": “Feature",“geometry": {"type": "Polygon","coordinates":

[ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]]},"properties": {"prop0": "value0","prop1": {"this": "that"}}}]}

4 Leaflet客户端的功能实现

4.1 地图初始化

利用Leaflet创建地图,首先需要在Html页面中创建一个id为“map”的div,然后利用Leaflet的Map类初始化地图容器,代码如下所示:

var map = L.map(“map”).setView([39.917, 116.396], 13);

L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png',

{attribution: '©; OpenStreetMap

contributors'}).addTo(map);

上述代码中,L.map('map').setView([39.917, 116.396], 13)是指根据div为map创建了Leaflet的一个Map实例,并定位到北纬39.917、东经116.396的位置,缩放级别为13级,使用的地图是OpenStreetMap提供的切片数据。

代码执行后效果如图2所示:

4.2 地图基本操作

Leaflet提供了地图放大、地图缩小、地图漫游、地图全屏、地图定位、滚轮放大缩小、鼠标双击定位、键盘移动地图等基本操作。

4.3 查询功能

地图查询包括属性查询和空间查询,Leaflet本身没有专门的类或者接口来实现查询功能,需要调用WebGIS后台服务来实现,或者利用第三方的插件来调用特定GIS服务来实现查询功能。例如,ESRI公司提供了esri-leaflet.js插件,用来实现Leaflet对ArcGIS REST服务的调用。L.esri.Query是esri-leaflet.js插件提供的用于查询的API,它不仅可以进行条件查询,还可以完成多种空间关系查询,如包含、被包含、相交、重叠、临近等多种空间关系。

var southWest = L.latLng(45.51, -122.70);

var northEast = L.latLng(45.52, -122.64);

var bounds = L.latLngBounds(southWest, northEast);

var query = L.esri.query({

url:'https://services.arcgis.com/rOo16HdIMeOBI4Mb/arcgis/rest/services/stops/FeatureServer/0'});

query.within(bounds);

query.run(function(error, featureCollection, response){

console.log('Found ' + featureCollection.features.length + ' features');

});

上述代码实现了在bounds范围内的要素的查询。

4.4 编辑功能

Leaflet提供了编辑接口,使得用户可以在地图上绘制点要素、线要素、多边形要素、圆形要素,并附加属性保存到后台服务器。并可以对已有的要素修改形状和位置。

4.5 分析功能

Leaflet利用第三方插件可以实现包括缓冲区分析在内的多种分析功能,并实现了聚类分析。如图3所示,为北京市查询的中学的结果,位置集中的中学符号在当前比例尺下显示为一个并用数字标明个数。

Leaflet还实现了图层控制器、地图比例尺和坐标的功能,图层控制器是Leaflet的Control类的layers接口来实现,图层分为底图和覆盖图层,底图可以设置为多个并切换只显示一个,覆盖图层可以同时打开多个。通过调用Leaflet的Control类的scale来实现比例尺的显示。通过使用Leaflet的Control类的mousePosition方法显示鼠标的位置。此外,Leaflet數百个第三方免费插件可以供用户使用,从而搭建强大的WebGIS前端。

5 结束语

在互联网上实现地理信息服务共享,是GIS发展的必然趋势。而近年来WebGIS的飞速发展,尤其是谷歌地图、百度地图等商业在线地图的发展,也使得WebGIS更好的为人们出行提供服务。基于OGC的开放式地理数据互操作规范的开源框架的出现,使得中小企业能够以较低的投入实现在线地图的所有功能,应用前景广泛。本文探讨了WebGIS的体系,阐述了基于OGC的WebGIS的规范和关键技术。重点分析了Leaflet,作为WebGIS开源客户端,Leaflet界面友好、互操作性强、支持移动设备,具有简便、高效、可用性强等特点。Leaflet提供了数百个第三方免费插件,满足WebGIS对地图的各种查询、分析、渲染等操作。本文通过实例介绍了Leaflet的地图初始化、地图基本操作、地图查询、编辑、分析和图层管理等一系列功能。

参考文献

[1]刘光,曾敬文,曾庆丰.Web GIS原理应用与开发[M].北京:清华大学出版社,2016:2.

[2]Leaflet. An Open-source Javascript Library for Mobile-friendlyInteractive Maps[EB/OL].(2011-05-13)[2014-04-01].http://leafletjs.c

om.

[3]杨鹏,邹时林.基于OpenLayers的WebGIS客户端的研发[J].测绘与空间地理信息,2012,35(3):131-133.

[4]张黎明,闫浩文.基于OGC规范的WebGIS设计与应用[J].测绘与空间地理信息,2011,34(6):41-43.

[5]胡达天,胡庆武.基于开源系统的跨平台地图客户端开发[J].测绘科学,2015,40(7):142-145.

猜你喜欢

开源
校园武术“学、练、赛”一体化实践探索
国内开源发展迎政策利好
五毛钱能买多少头牛
释放开源力量 驱动产业创新 第十四届开源中国开源世界高峰论坛在京盛大举办
2019(第十四届)开源中国开源世界
2019开源杰出贡献奖
融入开源:拥抱变革中的机遇
开源技术支撑软件产业创新
开源驱动创新