谷歌地图开发 Maps JavaScript API # 自定义标志物

电商开发,客户要求结合线下实体店,给顾客提供实体店的信息。点击地图实体店标志,找到面板弹出实体店的具体信息,或者点击左侧面板,相对应的实体店标志移动到地图中间,改变图片

获取 获取api key

1.在进行地图操作前,必须初始化

 var map = new google.maps.Map(document.getElementById('map-layout'), {
                zoom: 10,
                mapTypeControl: false,
                streetViewControl:false,
                gestureHandling: 'cooperative',
                center: {lat: 22.545459, lng: 114.11728}

            });

2.自定义标志物

自定义标志物通过 闭包抛出,为后面的面板操作提供可行性

虽然自定义标志物可以直接点击触发一些函数,但是有时候需要点击面板去触发,这就需要去找到相关的自定义标志物的闭包去执行相关业函数。

 allTags = renderMakers(map,icon,selected_icon); 
// marker
        function renderMakers(map,klasseicon,selectedicon) {


            var tagContainer = {},
                klasse_icon = klasseicon,
                selected_klasse_icon = selectedicon;
            for(store in allStores){
                for(var i=0;i<allStores[store].length;i++){



                    var Tag = new google.maps.Marker({
                        position: {
                            lat: Number(allStores[store][i].latitude),
                            lng:Number(allStores[store][i].longitude)
                        },
                        map: map,
                        icon: icon,
                        info:{
                          
                        }

                    });
                   

                    tagContainer[allStores[store][i].identifier] = Tag;

                    Tag.setTitle(allStores[store][i].name);

                //点击标志物,可以执行一些函数,如移到中间,手机的话,改变视图大小(css)
                   Tag.addListener('click', function() {
                        map.setZoom(12);
                        map.panTo(this.getPosition());

                        if(!window.activeIdentify=="" ){
                            allTags[window.activeIdentify].setIcon(icon);
                        }
                        window.activeIdentify  = this.info.identifier;
                        this.setIcon(selected_icon);
                        this.setAnimation(google.maps.Animation.BOUNCE);

                        var markerSelf = this;
                        $(".map-wrapper").addClass("active");
                        setTimeout(function () {
                            markerSelf.setAnimation(null);
                        },2000);
                    });
                }
            }

            return tagContainer;
        }

 

 

 

下面通过 自定义标志物 的identify ,区闭包里寻找到 标志物, 让他们显示和隐藏,在视图范围的标志物内显示,不在的隐藏

 allTags[tag].setVisible(true);
 allTags[tag].setVisible(false);
 map.addListener("bounds_changed",function () {
                mapMove(allTags,map);
            });


 // map move
        function mapMove(allTags,map){
            
            if(!window.nearby){
                return;
            }
            var bs = map.getBounds();   //获取可视区域
            var lats = bs.na;
            // var lngs = bs.ia;
            var lngs = bs.ga;
            var swLng = lngs.j ,//西南
                swLat = lats.j ,
                neLng = lngs.l ,//东北
                neLat = lats.l;

            var storeList='';
            for(tag in allTags){
                var lng = allTags[tag].info.lng,
                    lat =  allTags[tag].info.lat;
                if(lng>swLng && lng<neLng && lat>swLat && lat<neLat){
                   
                    allTags[tag].setVisible(true);
                }else{
                    allTags[tag].setVisible(false);

                }
            }

          
            if(window.activeIdentify!=""){
                $("li[data-idenify='"+window.activeIdentify+"']").addClass("active");
            }
        }

 

地图视图发送改变,判断哪些标志物还在视图范围

map.addListener("bounds_changed",function () {
                mapMove(allTags,map);
            });

 

 

 

移动端拖拽事件,改变地图大小

 google.maps.event.addListener(map,"dragstart",function(event){
                $(".map-wrapper").removeClass(" active");
            });

我不确定通过闭包操作标志物的方式是否完美,毕竟是我第一次做谷歌地图,如果大家发现更好的方式,可以留言告诉我,感激不尽!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值