vue移动端使用 leaflet 地图 和vue2 leaflet组件实现Dome

leaflet简介:曾用名 MarsGIS for Leaflet 是火星科技研发的web地图开发平台系统
中文文档:http://leaflet.marsgis.cn/
下面代码需求:在地图上添加四种类型的商店,不同类型的商店在地图上的图标不同,通过点击图标显示弹窗(内容商店的名称)通过点击弹窗名称跳转到此商店详情。

技术点:1.改变leaflet默认的图标,通过后台判断显示四种不同的图标
2.this.getPopup().getElement()先获取popup这个弹窗,再获取弹窗里面的dom结构
<template>
<div id="map" ref="map">

</div>
</template>
<script>
import L from 'leaflet';
import markIcon from '../assets/lan.png'
export default {
data(){
return{
map:'',
latlng:[]
}
},
mounted () {
this.initMap();
},
methods: {
initMap() {
let map = L.map("map", {
center : [ 22.759777, 114.050179 ],
zoom : 11,
zoomControl : false,
maxZoom : 18,
attributionControl : false,
// layers : [ arcgis_streets ]
});
this.map = map;    //data上需要挂载
window.map = map;

        let tileLayer = L.tileLayer(
            "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
        ).addTo(map);
        var greenIcon = L.icon({
            iconUrl: markIcon,
            // shadowUrl: 'leaf-shadow.png',

            iconSize:     [25, 25],    //  图标的大小    
            // shadowSize:   [41, 41], //  影子的大小
            // iconAnchor:   [16, 52],  
            //shadowAnchor: [4, 62],  // 相同的影子
            // popupAnchor:  [1, -38] // 
        });
        // 循环多个marker
        this.latlng = [
            {lat:23.140833,lng:113.305649,id:'a',status:1},
            {lat:39.550339,lng:116.114129,id:'b',status:2},
            // {lat:23.138535,lng:113.305821,id:'c'}
        ] 
        var latlng= [
            {lat:23.140833,lng:113.305649,id:'a',status:1},
            {lat:39.550339,lng:116.114129,id:'b',status:2},
            // {lat:23.138535,lng:113.305821,id:'c'}
        ] 
        var _this = this;
        for (let i = 0; i < latlng.length; i++) {
            var lat = latlng[i].lat
            var lng = latlng[i].lng
            var id = latlng[i].id
            console.log(latlng[i].status);
            if(latlng[i].status == 1){
                var myIcon = L.icon({
                    iconUrl: require('../assets/huang.png'),  // jpg png gif都可以
                    iconSize: [25, 38]
                });
            }else{
                var myIcon = L.icon({
                    iconUrl: require('../assets/lan.png'),  // jpg png gif都可以
                    iconSize: [25, 38]
                });
            }
            var popup = L.popup()
            popup.setContent("<div class='pop'>我是第"+id+"个marker</div>")
            var marker = L.marker([lat, lng],{
                icon:myIcon,
            }).addTo(map)
            .bindPopup(popup)

            
            
            marker.on('popupopen',function(){
                console.log('popupopen',this.getPopup().getContent())
                console.log('popupopen',this.getPopup().getElement())
                this.getPopup().getElement().onclick= function(){
                    _this.fun();
                }
            })
            
        }
    },
    fun(){
        this.$router.push('enterpriseDetail');
    }
}

}
</script>
<style lang="scss" scoped>
@import "~leaflet/dist/leaflet.css";

map{

width:100%;
height: 100vh;

}
</style>

使用vue2 leaflet组件实现的Dome
<template>
<l-map style="height: 100vh" :zoom="zoom" :minZoom="minZoom" :maxZoom="maxZoom" :center="center">
<l-tile-layer :url="url">

    </l-tile-layer>
     <!-- <l-marker :Icon= "icon" :lat-lng="latLng" >
        <l-popup><div @click="fun">{{zoom}}</div></l-popup>
    </l-marker> -->
    <div v-for="star in stars" :key="star.name">
    <l-marker :Icon="redIcon" :lat-lng="star.latLng" >
        <l-popup><div @click="fun">{{star.name}}</div></l-popup>
    </l-marker>
    </div>
</l-map>

</template>
<script>
import {LMap, LImageOverlay, LMarker, LPopup,LTileLayer} from 'vue2-leaflet';
import { mapState } from "vuex";
import { Icon } from 'leaflet';

export default {

data(){
    return{
        zoom: 8,
        minZoom:3,
        maxZoom:14,
        center: [39.550339, 116.114129],
        url: "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}",
        bounds: [[-26.5, -25], [1021.5, 1023]],
        latLng:[39.550339,116.114129],
        crs: L.CRS.Simple,
        redIcon:"",
        redIcon1:"",
        redIcon2:"",
        redIcon3:"",
        orangeIcon:''
        // stars: [
            // { name: 'Sol', lng: 39.550339, lat: 116.114129,latLng:[39.550339,116.114129],pic:"require('../assets/huang.png')"},
            // { name: 'Mizar', lng: 41.6, lat: 130.1,latLng:[41.6,130.1],pic:"require('../assets/hui.png')" },
            // { name: 'Krueger-Z', lng: 13.4, lat: 56.5,latLng:[13.4,56.5],pic:"require('../assets/hong.png')" },
            // { name: 'Deneb', lng: 218.7, lat: 8.3 ,latLng:[218.7, 8.3],pic:"require('../assets/lan.png')"}
        // ],
        // icon: L.icon({
        //     iconUrl: '../assets/hong.png',
        //     iconSize: [32, 37],
        //     iconAnchor: [16, 37]
        // }),
    }
},
computed:{
    ...mapState({
        stars:state => state.stars,
        // redIcon:state => state.redIcon
    })
    
},
components:{
    LMap,
    LImageOverlay,
    LMarker,
    LTileLayer,
    LPopup
},
mounted () {
    this.map();
},
methods: {
    fun(){
        this.$router.push("enterpriseDetail")
    },
    map(){
          Icon.Default.mergeOptions({
              iconRetinaUrl: require('../assets/huang.png')
               iconUrl: require('./assets/huang.png'),
               shadowUrl: require('./assets/hong.png'),
       });
      }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容