百度地图:为标记添加点击事件显示标注

之前写了百度地图的标注,原文链接:使用百度地图API实现地图生成、标记以及标注,但是因需求更改,标注的显示需要通过点击标记才能显示。

以下为更改内容:

//给标记添加点击事件以及显示窗口信息
     var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + text + "</p>");
     marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); });

效果如下:
这里写图片描述

附上完整jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ include file="/common/taglibs.jsp"%>


<html>
<head>
<meta name="viewport"
    content="width=device-width, 
                                     initial-scale=1.0, 
                                     maximum-scale=1.0, 
                                     user-scalable=no">
<script type="text/javascript"
    src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>
<script type="text/javascript"
    src="<c:url value='/scripts/boostrap/jquery.min.js'/>"></script>
<script type="text/javascript"
    src="<c:url value='/scripts/layer/layer.js'/>"></script>
<link rel="stylesheet" type="text/css" media="all"
    href="/styles/layer/layer.css" />
<title>标注事项地点</title>

<style type="text/css">
body, html, #allmap {
    width: 100%;
    height: 100%;
    overflow: hidden;
    margin: 0;
    font-family: "微软雅黑";
}
</style>

</head>

<body>
    <div class="container">
        <div id="allmap"></div>
    </div>
</body>


</html>
<script type="text/javascript">
$(function(){
    // 百度地图API功能
    var map = new BMap.Map("allmap"); // 创建Map实例
    map.centerAndZoom(new BMap.Point(119.847604, 31.274829), 17); // 初始化地图,设置中心点坐标和地图级别
    //添加地图类型控件
    map.addControl(new BMap.MapTypeControl({
        mapTypes : [ BMAP_NORMAL_MAP, BMAP_HYBRID_MAP ]
    }));
    map.setCurrentCity("宜兴"); // 设置地图显示的城市 此项是必须设置的
    map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 
    createMakers(map);


});

function createMakers(map){
    $.ajax({
        type:"post",
        url:"/bpm/bmfw/makers",
        success:function(makers){
            for(var i in makers){
                var point = new BMap.Point(makers[i].pointX, makers[i].pointY);
                map.centerAndZoom(point, 17);
                var marker = new BMap.Marker(point);  // 创建标记
                map.addOverlay(marker);
                createTag(marker,makers[i]);
            }
        },
        error:function(){
            alert("获取事项标注失败");
        }
    });
}

function createTag(marker,m){

    //标注
    var text = "<p>许可证号:" + m.bjh + "</p><p>申请人/单位:" + m.sqr
            + "</p><p>许可事项:" + m.sx + "</p><p>现场照片:<a href='http://www.baidu.com'>点击查看</p>";

    /* var label = new BMap.Label(text, {
        offset : new BMap.Size(-85, -120)
    });
    //设置label(标注的样式)
    label.setStyle({
        color : "black",
        fontSize : "12px",
        height : "110px",
        //lineHeight : "20px",
        fontFamily : "微软雅黑",
        maxWidth : "none",
        border : "none",display:"none"
    });
    marker.setLabel(label); */

    //给标记添加点击事件以及显示窗口信息
     var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + text + "</p>");
     marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); });
}
</script>

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现步骤如下: 1. 下载百度地图API的JS文件,并在页面中引入。 2. 在Vue组件中创建一个input元素,用于接收用户输入的地址信息。 3. 在input元素中添加一个点击事件,当用户点击输入框时,弹出百度地图。 4. 在点击事件中创建一个百度地图对象,并设置地图的中心点和缩放级别。 5. 在地图上添加一个标注,用于标记用户选择的位置。 6. 当用户在地图上选择了位置后,获取该位置的经纬度信息,并将其填充到input元素中。 下面是一个简单的示例代码: ```html <template> <div> <input type="text" @click="showMap" v-model="address" placeholder="请输入地址" /> </div> </template> <script> import BMap from 'BMap' export default { data() { return { address: '', map: null, marker: null } }, methods: { showMap() { if (!this.map) { // 创建地图对象 this.map = new BMap.Map("map-container"); // 设置地图中心点和缩放级别 this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); // 添加标注 this.marker = new BMap.Marker(new BMap.Point(116.404, 39.915)); this.map.addOverlay(this.marker); // 监听地图点击事件 this.map.addEventListener("click", this.handleMapClick); } // 显示地图 this.$nextTick(() => { this.$dialog.alert({ title: "选择地址", message: '<div id="map-container" style="height: 300px;"></div>', showCancelButton: false, confirmButtonText: "确定" }); }); }, handleMapClick(e) { // 获取点击位置的经纬度 const point = e.point; // 更新标注位置 this.marker.setPosition(point); // 获取地址信息 const geoc = new BMap.Geocoder(); geoc.getLocation(point, (rs) => { const addComp = rs.addressComponents; this.address = `${addComp.province}${addComp.city}${addComp.district}${addComp.street}${addComp.streetNumber}`; }); } } } </script> ``` 在上面的代码中,我们创建了一个input元素,并在点击事件中弹出一个包含百度地图的弹窗。在弹窗中,我们创建了一个地图对象,并在其上添加了一个标注。当用户在地图上选择了位置后,我们通过逆地理编码获取该位置的地址信息,并将其填充到input元素中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值