vue2中使用Leaflet实现单个或多个marker图标


因为公司gis工程师离职了,只能让前端来做gis功能了,看着leaflet的官网和各家大神的文章把标记点这些搞出来了,现在总结一下实现步骤。

初始化一个vue项目

vue init webpack leafeltDemo
cnpm install

在 vue 中安装 Leaflet

cnpm install leaflet --save

在main.js中引入leaflet

leaflet 包安装成功之后,需要在 Vue 工程中将它引入至工程。

import 'leaflet/dist/leaflet.css'
import * as L from 'leaflet'
Vue.L = Vue.prototype.$L = L

在这里插入图片描述

加载一个简单的地图框架

在HelloWorld.vue中

  1. 创建 地图对象;
<template>
  <div id="map"></div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      map : null
    }
  },
  mounted() {
    this.map = L.map("map",{
      center: L.latLng(23.140833538081456, 113.30564975738527),
      zoom: 16,
      maxZoom:18
    })
   }
}
</script>
<style scoped>
#map{
  width:100%;
  height:calc(100vh)
}

</style>

地图对象创建成功之后,则可以看到如下图所示的 地图视图窗口:
在这里插入图片描述
3. 加载一个高德地图服务

	L.tileLayer(
      "http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
      {
        subdomains: ["1", "2", "3", "4"],
        attribution: "高德"
      }
    ).addTo(map);

在这里插入图片描述

添加一个或多个Marker

  1. 添加一个marker
    引入标记点图片
    import markerIcon from “…/assets/leaflet/marker-icon.png”;
    import redMarker from “…/assets/leaflet/red-marker.png”;
	var blueIcon = L.icon({
	      iconUrl:markerIcon,
	      iconSize: [25, 41],
	      iconAnchor: [13, 21]
	    })
    var marker = L.marker([23.140833, 113.305649],{
        icon:blueIcon,
        // draggable:true,
        riseOnHover:true
      }).addTo(map).bindPopup("我是单个marker").openPopup()

在这里插入图片描述
3. 添加多个标记点
方法一:

	var latlng = [
      {lat:23.140833,lng:113.305649},
      {lat:23.138604,lng:113.306835},
      {lat:23.138535,lng:113.305821}
    ]
    
    var group = L.layerGroup().addTo(map)
    for (let i = 0; i < latlng.length; i++) {
      var lat = latlng[i].lat
      var lng = latlng[i].lng
      var blueIcon = L.icon({
        iconUrl:markerIcon,
        iconSize: [25, 41],
        iconAnchor: [13, 21]
      })

      var marker = L.marker([lat, lng],{
        icon:blueIcon,
        // draggable:true,
        // riseOnHover:true
      }).addTo(group).bindPopup('我是第'+i+"个marker").openPopup()
      
    }

在这里插入图片描述
方法二

	var latlng2 = [
      {lat:23.140834,lng:113.305319},
      {lat:23.138004,lng:113.306865},
      {lat:23.138535,lng:113.304931}
    ]
    var layers = [];
    for (let i = 0; i < latlng2.length; i++) {
      var redIcon = L.icon({
        iconUrl:redMarker,
        iconSize: [25, 41],
        iconAnchor: [13, 21]
      })
      var layer = new L.marker([latlng2[i].lat,latlng2[i].lng],{
        icon:redIcon
      });
      layers.push(layer)
      
    }
    var myGroup = L.layerGroup(layers)
    map.addLayer(myGroup);

在这里插入图片描述

显示所有标记点
在这里插入图片描述

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值