Leaflet的make(图标)点击事件的绑定,并且附加其他信息

本文介绍了一个使用jQuery实现的地图插件,该插件能够渲染地图并实现在地图上标记位置的功能。通过设置地图的视图和层级,加载自定义的地图瓦片图层,并在指定的经纬度范围内创建多个标记点。
(function ($) {
    Demo = function(element,options){
        gis = this;
        //renderMap中传入gis对象。前几次不传发现失败,不能调用
        //protorype其他的函数。
        gis.renderMap(gis);

        //打点函数,可以写在插件内部或者外部都行
        gis.printPoint();
    }
    //渲染地图
    Demo.prototype =  {
        renderMap : function () {
            var map = gis.map = L.map('mapid',{
                renderer: L.canvas()
            });

            map.setView([30, 120], 13);
            L.tileLayer('http://172.16.1.55:7780/Map/{z}/{xd}/{yd}/{x}_{y}_{z}.png', {//http://{s}.tile.osm.org/{z}/{x}/{y}.png  172.16.1.55:7780/Map/{z}/{xd}/{yd}/{x}_{y}_{z}.png
                attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
            }).addTo(map);
        },
        //进行打点
        printPoint : function(){
            var map = gis.map;
            for (var x = 120;x<120.105;) {
                x = x + 0.005
                for (var y = 30; y < 30.1;) {
                    y = y + 0.005
                    var circle = L.circle([y, x], {radius: 20}).addTo(map);
                    var obj = {'x': x, 'y': y}
                    console.log(obj)
                    //绑定Event
                    gis.point_fire(circle, obj)
                }
            }
        },

        //点击每个点显示相应的obj的信息,而不是显示for循环的最后一次生成obj的信息
        point_fire : function (circle,obj) {
            circle.addEventListener('click',function () {
                gis.point_fire2(circle,obj)
                console.log(obj)
            })
        },

        point_fire2 : function (circle,obj) {
            console.log(obj)
        }
    }

    $.fn.Demo = function () {
        var gis = this;
        return new Demo(gis)
    }

})(jQuery)

//以上是插件代码。在页面的js标签中加入下面的代码进行调用

var gis = $('#mapid').Demo();

### 如何在 Leaflet 中为地图元素绑定点击事件 为了实现这一功能,可以利用 `L.map` 对象以及各个图层对象所提供的方法来监听并处理用户的交互行为。下面展示了一个具体的例子,说明怎样向整个地图添加点击事件处理器。 ```javascript // 初始化地图实例 var mymap = L.map('mapid').setView([51.505, -0.09], 13); // 添加底图瓦片服务 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(mymap); // 定义当用户单击地图任意位置时触发的动作 mymap.on('click', function(e) { alert("You clicked on the map at latitude: " + e.latlng.lat.toFixed(4) + ", longitude: " + e.latlng.lng.toFixed(4)); }); ``` 上述代码片段展示了如何创建一个简单的弹窗提示框,在其中显示被点击地点的具体坐标信息[^2]。 对于更复杂的情况,比如想要给特定的地图标记(Marker)、多边形或者其他矢量图形附加点击响应逻辑,则可以通过相应类型的构造器提供的 `.on()` 方法完成设置: ```javascript // 创建一个新的 Marker 并放置到指定的位置上 var marker = L.marker([51.5, -0.09]).addTo(mymap); // 同样地定义该 Marker 被点击后的反应动作 marker.on('click', function(e){ console.log('The marker was clicked!'); }); // 如果是针对 Circle 或 Polygon 这样的几何形状也可以采用相同的方式 var circle = L.circle([51.508, -0.11], {radius: 500}).addTo(mymap); circle.on('click', function(e){ /* ... */ }); ``` 通过这种方式能够轻松地扩展应用的功能性,使得最终产品更加友好易用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值