supermap节点MapboxGl绘制多个地标,添加地标鼠标提示监听

1.页面中引入需要的js文件(js文件中又引入其他js文件,需要的所有js文件见之前的博客:https://mp.csdn.net/postedit/87778048

   <script type="text/javascript" include="bootstrap,jquery,widgets.alert" src="../../dist/js/include-web.js"></script>
   <script type="text/javascript" include="draw,compare" src="../../dist/mapboxgl/include-mapboxgl.js"></script>  

2.引入底图,创建map对象,其中container: 'arcgisDiv'为页面中定义的div 

var host = window.isLocal ? window.server : "http://support.supermap.com.cn:8090";              
    var mapUrl = host+"/iserver/services/map-china400/rest/maps/China_4326/zxyTileImage.png?z={z}&x={x}&y={y}";//加载底图的url

  var map = new mapboxgl.Map({
        container: 'arcgisDiv',
        style: {
            "version": 8,
            "sources": {
                "raster-tiles": {
                    "type": "raster",
                    "tiles": [mapUrl],
                    "tileSize": 256,
                },
            },
            "layers": [{
                "id": "before",
                "type": "raster",
                "source": "raster-tiles",
                "minzoom": 0,
                "maxzoom": 22
            }],
        },
        center: [105.85, 36.79],
        zoom: 3.8     
    });

3.添加比例尺、导航、绘画工具

var navigationControl = new mapboxgl.NavigationControl();
    var scaleControl = new mapboxgl.ScaleControl();
    var draw = new MapboxDraw({
        displayControlsDefault: false,
        controls: {
            line_string: true,
            polygon: true,
            trash: true
        }
    });

    map.addControl(navigationControl, 'top-left');     //导航条
    map.addControl(scaleControl);     
    map.addControl(draw, "top-right");  

4.画多个用户自己指定地标,添加鼠标提示监听

(1)定义鼠标放上去出现的提示对象、自定义地标对象 

 var popupNoClose = new mapboxgl.Popup({
        anchor: 'bottom',
        closeButton: false   
    }); 

   map.loadImage('../../dist/img/marker-icon.png', function (error, image) {
        if (error) throw error;
        map.addImage('positionPoint', image);       
    });

(2)组织地标的经纬度集合、提示信息集合(data为数据集合,每条记录包含jd、wd和基础信息)       

 var pointList = new Array();
        var tipArray = new Array();
        for(var i = 0 ;i < data.length;i++){   
            pointList[i] = new Array(i);    //在声明二维
            pointList[i][0] = data[i].jd;
            pointList[i][1] = data[i].wd;
            tipArray[i] = getPointTip(data[i]);   //得到每行记录提示信息的方法
        }

  function getPointTip(data){
            return "<ul><li>桥梁名称:"+data.bridgeName+"</li><li>桥梁全长:"+data.bridgeTotalLength+"</li><li>桥梁全宽:"+data.bridgeTotalWidth+"</li></ul>";
    }

(3)把组织好的集合添加到map需要的数据集后在地图上画出(pointList和tipArray数组是有序的,长度相等)

       

var pointGeometryFetures = [];
        for (var j = 0; j < pointList.length; j++) {
            pointGeometryFetures.push({
                "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": pointList[j],
                },
                "properties": {POP: 1, CAPITAL: tipArray[j]}     //这里可以自定义参数类型,调用的时候使用properties.CAPITAL
            });               
        }
        
        map.addSource("sourceId", {   //添加source
            "type": "geojson",
            "data": {
                "type": "FeatureCollection",                         //指明数据类型为集合类型
                "features": pointGeometryFetures
            }      
        });      
        
        //type的形状值:[fill, line, symbol, circle, heatmap, fill-extrusion, raster, hillshade, background]
        map.addLayer({
            "id": "layerId",
            "type": "symbol",
            "source": "sourceId",
            "layout": {
                "icon-image": 'positionPoint',
                "icon-size": 0.1,        
                "icon-offset": [0, -15] //设置偏移量
            },    
        });      

(4)添加鼠标监听提示       

 map.on('mouseenter', 'layerId', function (e) {   //根据id绑定鼠标进入事件
            popupNoClose.remove();
            popupNoClose.setLngLat(e.lngLat).setHTML(e.features[0].properties.CAPITAL).addTo(map);
            map.getCanvas().style.cursor = 'pointer';          
        });           
        
        map.on('mousemove', 'layerId', function (e) {   
            popupNoClose.remove();
            popupNoClose.setLngLat(e.lngLat).setHTML(e.features[0].properties.CAPITAL).addTo(map);
            map.getCanvas().style.cursor = 'pointer';
        });  
        
        map.on('mouseout', 'layerId', function () {
            map.getCanvas().style.cursor = '';
            popupNoClose.remove();      
        })   
             
        map.on('click', 'layerId', function (e) {       //根据id绑定鼠标点击事件       
            popupNoClose.remove();
            popupNoClose.setLngLat(e.lngLat).setHTML(e.features[0].properties.CAPITAL).addTo(map);
            map.getCanvas().style.cursor = 'pointer';                  
        });  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值