百度地图自定义覆盖物

1、覆盖物函数

百度地图本身就有自己的图标,在开发过程中我们有时候需要自定义地图上显示的坐标图标,我们可以用图片来代替百度地图本身的这些图标,这样我们就可以跟进需求定制我们想要的效果。

iconPath:图片路径
marker: 存放标注点经纬信息的数组
sizeW:图片尺寸(宽)
sizeH:图片尺寸(高)
marker.Yc.parentNode.parentNode.style.zIndex = 500; // 设置覆盖物层级

function replaceIcon(iconPath, marker, sizeW, sizeH) {
    map.removeOverlay(marker);
    var icons = iconPath; //这个是你要显示坐标的图片的相对路径
    var icon = new BMap.Icon(icons, new BMap.Size(sizeW, sizeH)); //显示图标大小

    marker.setIcon(icon);//设置标签的图标为自定义图标
    map.addOverlay(marker);//将标签添加到地图中去
}

2、初始化地图

(1)初始化
var map = new BMap.Map("allmap",{enableMapClick:false}); //去掉地图上地点点击后出现提示信息
map.enableScrollWheelZoom();   //启用滚轮放大缩小,默认禁用
map.enableContinuousZoom();    //启用地图惯性拖拽,默认禁用

var mPoint = new BMap.Point(116.46, 39.92);
    map.centerAndZoom(mPoint,10); //设置默认显示城市
(2)将输入的文字转换为坐标点
var myGeo = new BMap.Geocoder();// 创建地址解析器实例
    function writePositonToInput(text) {
    // 将地址解析结果显示在地图上,并调整地图视野
        myGeo.getPoint(text, function(point){

        if (point) {
            $("#lat").val(point.lat);
            $("#lng").val(point.lng);
                }else{

        }
            }, "北京");
        /*var local = new BMap.LocalSearch(map, {
            renderOptions:{map: map}
        });
        local.search(text);*/

        //服务类 LocalSearch
}
(3)画圆圈
var circle = new BMap.Circle(point, 2500,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.1, strokeOpacity: 0.3});
    map.addOverlay(circle);

3、搜索函数

function search(text) {
    var lat = $('#lat').val(), //经度
        lng = $('#lng').val(); //纬度
        if(!text) {
            lat = ''; //经度
            lng = ''; //纬度
        }
                
        if(lat && lng) {
          
                $.ajax({
                    url: URL,
                    type: "GET",
                    async: false,
                    dataType: "json",
                    timeout: 8000,
                    success: function (res) {
                        var data = res;
                    
                        // 将地址解析结果显示在地图上,并调整地图视野
                        myGeo.getPoint(text, function(point){
                            if (point) {
                                map.clearOverlays();

                                map.centerAndZoom(point, 13);
                                /*map.addOverlay(new BMap.Marker(point));*/
                                //画个圆圈
                                var circle = new BMap.Circle(point, 2500,
                                {fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.1, strokeOpacity: 0.3});
                                map.addOverlay(circle);

                                //自己的位置做区分
                                var iconPath = '${ctxStatic}/images/position.png',
                                        point = new BMap.Point(lng, lat),
                                    marker = new BMap.Marker(point);
                                    replaceIcon(iconPath, marker, 40, 40);

                                    var point = new Array(); //存放标注点经纬信息的数组
                                    var marker = new Array(); //存放标注点对象的数组
                                    
                                    for(var i = 0; i < data.length; i ++) {
                                        var lats = data[i].lat,
                                            lngs = data[i].lng;
                                            point[i] = new BMap.Point(lngs, lats); //循环生成新的地图点
                                            marker[i] = new BMap.Marker(point[i]); //按照地图点坐标生成标记
                                            map.addOverlay(marker[i]);

                                        var iconPath = '${ctxStatic}/images/position-blue.png'; //这个是你要显示坐标的图片的相对路径
                                        replaceIcon(iconPath, marker[i], 40, 40);

                                        if(lats === lat && lngs === lng) {
                                            var iconPath = '${ctxStatic}/images/position.png';
                                            replaceIcon(iconPath, marker[i], 40, 40);
                                        }

                                    }
                                    
                                    //鼠标悬浮图片替换放大
                                    $('#resultCon').on('mouseover', 'li', function () {
                                        $(this).css('opacity', '1');

                                        var overLng = $($(this).find('input')[0]).val(),
                                            overLat = $($(this).find('input')[1]).val();

                                        for(var j = 0; j < marker.length; j ++) {
                                            var lng = marker[j].point.lng,
                                                lat = marker[j].point.lat;
                                            console.log(marker);
                                            if(lng && lat) {
                                                if(lng === parseFloat(overLng) && lat === parseFloat(overLat)) {
                                                    var iconPath = '${ctxStatic}/images/position-red.png';
                                                    replaceIcon(iconPath, marker[j], 50, 50);
                                                }
                                            }

                                        }
                                    });

                                    $('#resultCon').on('mouseout', 'li', function () {
                                        $(this).css('opacity', '0.8');
                                        var overLng = $($(this).find('input')[0]).val(),
                                            overLat = $($(this).find('input')[1]).val();

                                        for(var j = 0; j < marker.length; j ++) {
                                            var lng = marker[j].point.lng,
                                                lat = marker[j].point.lat;

                                                if(parseFloat(overLng) === parseFloat(lng) && parseFloat(overLat) === parseFloat(lat)) {
                                                    var iconPath = '${ctxStatic}/images/position-blue.png';
                                                    replaceIcon(iconPath, marker[j], 40, 40);
                                                }

                                        }
                                    });

                                }else{

                                }
                            }, "北京市");

                    
                        },
                        error: function () {

                        }

                    });
                }else {
                  
                    map.clearOverlays(); //清空地图
                
                }

            }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值