Vue.js使用Leaflet地图
来源:互联网 发布:柯林斯 知乎 编辑:程序博客网 时间:2024/05/20 06:06
继续探索地图插件,想试试Leaflet:
Leaflet 是一个为建设移动设备友好的互动地图,而开发的现代的、开源的 JavaScript 库。它是由 Vladimir Agafonkin 带领一个专业贡献者团队开发,虽然代码仅有 33 KB,但它具有开发人员开发在线地图的大部分功能。
Leaflet设计坚持简便、高性能和可用性好的思想,在所有主要桌面和移动平台能高效运作,在现代浏览器上会利用HTML5和CSS3的优势,同时也支持旧的浏览器访问。支持插件扩展,有一个友好、易于使用的API文档和一个简单的、可读的源代码。
Leaflet用的坐标系是wgs84,所以不需要转换百度或者高德地图。
我找到一个看似还不错的插件,叫做vue2-leafle,在正式开始之前,我下载了Demo,按照它给的教程,使用npm install命令安装了一些多需要安装的包。然后打开Demo,效果非常惊艳!
测试Example
# Run demo at localhost:8080$ npm link$ cd examples$ npm link vue2-leaflet$ npm install# serve with hot reload at localhost:8080$ npm run dev
上述就是Demo示例,看起来挺不错的。在example文件夹下的Component中,有一堆vue文件,很有用,以后可以直接粘贴抄袭……
开始开发
首先安装包在自己的文件目录下:
npm install -save vue2-leaflet
不需要做任何的main中的配置,直接可以在Component文件夹中写一个vue文件。代码如下
<template> <el-row> <h2>Simple map</h2> <p>Marker is placed at {{ marker }}</p> <el-card > <div id="top_div"> <v-map :zoom="zoom" :center="center"> <v-tilelayer :url="url" :attribution="attribution"></v-tilelayer> <v-marker :lat-lng="marker"></v-marker> </v-map> </div> </el-card></el-row></template><script>import Vue2Leaflet from 'vue2-leaflet';export default { name: 'example', components: { 'v-map': Vue2Leaflet.Map, 'v-tilelayer' :Vue2Leaflet.TileLayer, 'v-marker': Vue2Leaflet.Marker }, data () { return { zoom:15, center: [31.2304, 121.4737], url:'http://{s}.tile.osm.org/{z}/{x}/{y}.png', attribution:'© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors', marker: [31.2304, 121.4737], } }}</script><style>.leaflet-fake-icon-image-2x { background-image: url(../../node_modules/leaflet/dist/images/marker-icon-2x.png)}.leaflet-fake-icon-shadow { background-image: url(../../node_modules/leaflet/dist/images/marker-shadow.png)}#top_div { overflow-x: auto; top: 0; right: 0; left: 0; bottom: 0; height: 500px; width: 100%}</style>
得到的效果是这样的:
初步的效果已经实现了。
在这个过程中,我不清楚为什么,但是如果你开着Eslint验证,会报各种错误,我现在都不明白为undefined variable怎么解决……但是似乎模板是不能改的。(我学Vue的时间还不到一周,很多东西都依然不会啊……)
所以……我选择了关闭Eslint,在配置文件build\webpack.base.conf.js中,注释掉部分文件:
module: { rules: [ //{ // test: /\.(js|vue)$/, // loader: 'eslint-loader', // enforce: "pre", // include: [resolve('src'), resolve('test')], // options: { // formatter: require('eslint-friendly-formatter') // } //}, { test: /\.vue$/, loader: 'vue-loader', options: vueLoaderConfig },
这样设置以后:不会报错了,程序运行正常,但是那些错误还是存在的,有机会回头修改一下……
增加popup和地图交互
想要做出能够拖拽标号以及从图中取得经纬度这两个功能:
在上边的html代码部分,修改v-marker部分为:
<v-marker :lat-lng="marker" v-on:l-click="markerclicked(item)" v-on:l-move="markerMoved($event, item)" draggable="true"> <v-popup content="Hello World"></v-popup></v-marker>
在后边的Script里,Component部分加上’v-popup’: Vue2Leaflet.Popup,加入一个叫做tmp的变量:
components: { 'v-map': Vue2Leaflet.Map, 'v-tilelayer' :Vue2Leaflet.TileLayer, 'v-marker': Vue2Leaflet.Marker, 'v-popup': Vue2Leaflet.Popup },
写两个Method:
methods: { markerclicked(item) { window.alert('this is ' + JSON.stringify('Test')); }, markerMoved: function(event, item) { this.tmp = event.latlng } }
这样就行了,修改一下页面,显示经纬度,如下:
我尝试直接点击地图获得坐标,但目前失败了,研究的还不够深啊。
- Vue.js使用Leaflet地图
- leaflet.js 开发地图
- Python 使用folium绘制leaflet地图
- OfflineMap 基于MySQL + Node.js + Leaflet的离线地图展示
- leaflet加载百度地图
- leaflet加载百度地图
- 【一】地图 Leaflet 起步
- vue中使用百度地图
- vue使用百度地图记录
- Leaflet.js+d3
- Leaflet 地图中绘制多边形
- leaflet限制地图拖动范围
- Leaflet入门之地图显示
- 地图组件Leaflet地图偏移问题
- vue.js导入高德地图
- vue.js的使用
- vue.js使用例子
- Vue.js 的使用
- 程序员述职报告
- 每天一个 Linux 命令(44):top命令
- 项目里程碑达成的标准
- 第一封博客
- 【数据结构】二叉搜索树
- Vue.js使用Leaflet地图
- RHEL7静态IP配置
- i2c驱动程序(2) i2c_driver probe被调用的流程分析
- Qoo10选品数据宝典,小卖家与新手的必备武器
- HTML之一些效果的实现
- awk使用shell变量及shell使用awk中的变量
- TensorFlow番外篇——module 'tensorflow' has no attribute 'xxx'
- LeetCode 6. ZigZag Conversion
- Android5.0隐式启动服务