本文将讲述在 Vue.js 的工程中结合 leaflet.js 开发地图相关的功能。要求读者具有必定的 Vuejs 与 leafletjs背景知识。在 Vue.js 中使用 Leaflet 在这个主题下,我将会把本身在实际工做中所学习收获到开发经验分享给读者,总结概括出常见的地图功能的实现示例,以供读者参考。 首先对 Vue.js 和 Leaflet 作简要的介绍。javascript
Leaflet 官网的标题很直接简单的讲了:css
一个对移动端优化的交互地图且开源的Javascript库 对于个人实际感觉而言,leaflet 是一个十分轻量级的 WebGIS 库。结合其周边资源,对于分析功能需求不那么复杂的 Web GIS 来讲足以覆盖到绝大多数功能。html
而在 Vue.js 中使用 Leaflet 在这个系列你将看到全部内容以下:前端
(一) Vue-CLI and Leaflet:起步 - 在 Vue-CLI 中使用 Leafletvue
(二) Vue-CLI and Leaflet:地图基本操做(放大,缩小,平移,定位等)java
(三) Vue-CLI and Leaflet: 添加 marker, polyline, polygon node
(四) Vue-CLI and Leaflet: 添加 tooltips 和 popupgit
(五) Vue-CLI and Leaflet: 点 绘制github
(六) Vue-CLI and Leaflet: 线 绘制npm
(七) Vue-CLI and Leaflet: 面 绘 制
(八) Vue-CLI and Leaflet :加载 Esri ArcGIS Map Service
(九) Vue-CLI and Leaflet: 图层控制基本功能的实现
(十) Vue-CLI and Leaflet: AGS 属性查询与点图查询
(十一)Vue-CLI and Leaflet: 点聚合 Leaflet.markercluster
源码请参看 个人GitHub,因为文章是一边coding,一边写的因此 Github 里面的源码可能有点乱,能够根据功能来找对应的代码。后面会陆续整理完善。
我开发使用到的机器是 Win10 或者 iMac。开发使用 IDE 也至关主流 VS Code。开发环境比较简单:
Vue-CLI 安装完成以后,建立一个 Vue 工程,运行一下命令。
vue create leaflet-tutorail
复制代码
关于建立 Vue 工程的官网上讲解的很是详细。若有须要请参考。安装完成以后,应该获得一下这样一个工程目录。
而一般进行一些简单的工程模块化以后工程目录为以下, 同时修改main.js
中的引用,将工程中的工具集模块挂载在 Vue
对象上:
Vue.prototype.$utils = utils;
复制代码
npm install leaflet --save
复制代码
leaflet 包安装成功以后,须要在 Vue 工程中将它引入至工程。一般个人作法是,将 leaflet 做品为地图模块的工具单独封装一个模块里 map.js
。这样的若是功能的逻辑较复杂时或须要自定一些加载选项时,在 map.js
维护可使代码更加简洁,提升代码的易读性,可维护性。
须要注意的是,引用 Leaflet 的时候须要同时引入 leaflet.css
的样式。
// utils/map.js
import "leaflet/dist/leaflet.css"
import $L from "leaflet";
export default { };
复制代码
同时将地图模块挂载在 工具集中:
import map from "./map";
export default {
map
};
复制代码
以上三条准备工做作好以后,就能够开始进行地图展现的操做了。
一个简单加载地图加载的思路是这样的:
建立 地图对象。
地图对象 相对于容以地理资源的容器。而 地理资源 则包括了在地图视图窗口中看到的全部内容,如常见 地图服务资源,地理图形(点,线,面) ,以及地图控件等多种元素。建立的方法也很简单。在个人工程中须要添加建立地图对象的方法以下:
// utils/map.js
import "leaflet/dist/leaflet.css"
import $L from "leaflet";
const createMap = (divId, options) => {
let map = $L.map(divId, options);
return map;
};
export default { createMap };
复制代码
地图对象建立成功以后,则能够看到以下图所示的 地图视图窗口:
// src/views/Map.Vue
<template>
<div class="map-container" id="map-container"></div>
</template>
<script>
export default {
name: "map",
components: {},
data(){
return {
map: null
}
},
mounted() {
this.map = this.$utils.map.createMap("map-container");
}
};
</script>
<style lang="less">
.map-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
</style>
复制代码
2)加载地图服务
有了地图容器以后,并不表明就能够看到地图了。地图视图须要添加图层或图形才会有内容显示。这里我修改了一下官网上的例子,官网上添加的是一个 open street map 服务:
首先在 map.js
中添加图层加载的方法。 须要注意一下,leaflet 中建立图层的方法是异步方法,因此这里我用到了 async
和 await
来处理异步的问题。
// src/utils/map.js
const createTileLayer = async (map, url, options) => {
let tileLayer = await $L.tileLayer(url, options);
tileLayer.addTo(map);
return tileLayer;
};
复制代码
接着,再在地图页面中调用次此方法展现地图。
// src/views/Map.Vue
<template>
<div class="map-container" id="map-container"></div>
</template>
<script>
export default {
name: "mapView",
components: {},
data() {
return {
map: null,
OSMUrl: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
};
},
mounted() {
this.map = this.$utils.map.createMap("map-container");
// 加载 open street map 图层服务
this.$utils.map.createTileLayer(this.map, this.OSMUrl, {});
// 设施地图视图 中心位置
this.map.setView([51.505, -0.09], 13);
}
};
</script>
<style lang="less">
.map-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
</style>
复制代码
到此 在 Vue-CLI 中使用Leaflet 的第一步就算完成了。
这一个系列的文章算是对以前的工做积累的总结。内容可能比较简单,但愿对看到的人有帮助。同时也但愿有厉害的大神看到能指点指点。