百度地图api添加覆盖点实现,搜索添加,鼠标点击添加,鼠标测距
标题百度地图api添加覆盖点实现,搜索添加,鼠标点击添加,鼠标测距
AIXIAODOUCN博客

script引入百度Api的时候,需要自己申请key
用到了layer弹出层,可在layui官网下载 https://layer.layui.com/
具体代码实现:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body,html {width: 100%; height: 100%; margin: 0; font-family: "微软雅黑"; font-size: 14px;}.cont{height: 100%;width: 100%;display: flex;}.left-cont{ width: 240px;height: 100%;padding: 15px;box-sizing: border-box;}.right-cont{width: 100%;height: 100%;}.margin20{margin-top: 20px;}.popCont { display: none; text-align: center; }.popCont div {padding: 10px 0;}.liList{list-style: decimal;padding-left: 15px;}.liList li{line-height: 22px;cursor: pointer;}.allLi{cursor: pointer;}.selected{color: #1c71da;}style><script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=自己申请的key">script><script type="text/javascript" src="//api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js">script><title>maptitle>
head><body><div class="cont"><div class="left-cont"><button onClick="toDistenceTool()">鼠标测距button><button onClick="changeMouseEvent()" id="mousePointBtn">鼠标选点:关button><div id="r-result"><div class="margin20">请输入地点查询:div><input type="text" id="suggestId" size="20" style="width:165px;" />div><div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;">div><ul id="liListId" class="liList margin20">ul>div><div id="l-map" class="right-cont">div>div><div class="popCont" id="infoMsg"><div><input type="input" placeholder="名称" id="mName">div><div><input type="input" placeholder="地址" id="mAddress">div><div><input type="input" placeholder="人口" id="mPerson">div><div><input type="input" placeholder="楼层" id="mFloor">div><div><input type="input" placeholder="出口数" id="mExit">div><div><input type="button" value="取消" onclick="closePop()"><input type="button" value="确定" onclick="submitInfo()">div>div>
body>html>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">script>
<script src="./layer/layer.js">script>
<script type="text/javascript">var thisPointId; // 存储当前点击IDvar thisPoint; // 存储当前点击点var mousePoint = false // 鼠标是否点击取点// 接口 : 全部点的数据var pointData = [{ pointId: '116.43354739.909462', point: { lng: 116.433547, lat: 39.909462 }, openInfo: { mName: '北京站', mAddress: '北京市东城区毛家湾胡同甲13号', mPerson: 1256, mFloor: 9, mExit: 6 } },{ pointId: '116.42388639.895047', point: { lng: 116.423886, lat: 39.895047 }, openInfo: { mName: '元隆大厦', mAddress: '天坛路55号', mPerson: 1256, mFloor: 9, mExit: 6 } },{ pointId: '116.42374539.911124', point: { lng: 116.423745, lat: 39.911124 }, openInfo: { mName: '东单公园', mAddress: '北京市东城区崇文门内大街9号', mPerson: 256, mFloor: 10, mExit: 8 } }]// 百度地图API功能function G(id) {return document.getElementById(id);}var map = new BMap.Map("l-map");map.centerAndZoom("北京", 13); // 初始化地图,设置城市和地图级别。// var point = new BMap.Point(116.404, 39.915); // 初始化位置// map.centerAndZoom(point, 15);map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用// 添加工具map.addControl(new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT})) // 左上角,添加比例尺map.addControl(new BMap.NavigationControl()) //左上角,添加默认缩放平移控件map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP,BMAP_HYBRID_MAP],anchor: BMAP_ANCHOR_TOP_RIGHT}));var ac = new BMap.Autocomplete( //建立一个自动完成的对象{"input": "suggestId", "location": map});ac.addEventListener("onhighlight", function (e) { //鼠标放在下拉列表上的事件var str = "";var _value = e.fromitem.value;var value = "";if (e.fromitem.index > -1) {value = _value.province + _value.city + _value.district + _value.street + _value.business;}str = "FromItem
index = " + e.fromitem.index + "
value = " + value;value = "";if (e.toitem.index > -1) {_value = e.toitem.value;value = _value.province + _value.city + _value.district + _value.street + _value.business;}str += "
ToItem
index = " + e.toitem.index + "
value = " + value;G("searchResultPanel").innerHTML = str;});var myValue;ac.addEventListener("onconfirm", function (e) { //鼠标点击下拉列表后的事件var _value = e.item.value;myValue = _value.province + _value.city + _value.district + _value.street + _value.business;G("searchResultPanel").innerHTML = "onconfirm
index = " + e.item.index + "
myValue = " + myValue;setPlace();});// 信息框大小配置var opts = {width: 260,height: 140,title: "",enableMessage: true,message: ''};// 监听事件 - 打开信息窗口function addClickHandler(content, markerInit) {markerInit.addEventListener("click", function (e) {var p = e.target;var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat)var infoWindow = new BMap.InfoWindow(content, opts)map.openInfoWindow(infoWindow, point); //开启信息窗口});}// 右键删除var removeMarker = function (e, ee, markerInit) {map.removeOverlay(markerInit);console.log(markerInit.point.lng + "" + markerInit.point.lat);// 后台数据删除 = 提交接口}// 初始化地图点function initPoints() {console.log(pointData)for (let i = 0; i < pointData.length; i++) {var point = new BMap.Point(pointData[i].point.lng, pointData[i].point.lat)var markerInit = new BMap.Marker(new BMap.Point(pointData[i].point.lng, pointData[i].point.lat))//创建右键菜单var markerMenu = new BMap.ContextMenu();markerMenu.addItem(new BMap.MenuItem('删除', removeMarker.bind(markerInit)));markerInit.addContextMenu(markerMenu);var content = `${pointData[i].openInfo.mName} 地址:${pointData[i].openInfo.mAddress} 人口:${pointData[i].openInfo.mPerson} 楼层:${pointData[i].openInfo.mFloor} 出口数:${pointData[i].openInfo.mExit} `;map.addOverlay(markerInit)addClickHandler(content, markerInit)}}initPoints()function setPlace() {function myFun() {var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果var pInfo = local.getResults().getPoi(0);console.log(pInfo);map.centerAndZoom(pp, 16);var marker = new BMap.Marker(pp); // 创建标注map.addOverlay(marker); // 将标注添加到地图中thisPointId = (pInfo.point.lng + '' + pInfo.point.lat).toString();thisPoint = { lng: pInfo.point.lng, lat: pInfo.point.lat }docGetId('mName').value = pInfo.titledocGetId('mAddress').value = pInfo.addressopenLayer()// marker.addEventListener("click", function () {// thisPointId = (pInfo.point.lng + '' + pInfo.point.lat).toString();// thisPoint = { lng: pInfo.point.lng, lat: pInfo.point.lat }// document.getElementById('mName').value = pInfo.title// document.getElementById('mAddress').value = pInfo.address// openLayer()// });}var local = new BMap.LocalSearch(map, { //智能搜索onSearchComplete: myFun});local.search(myValue);}// 显示弹出层function openLayer() {layer.open({type: 1,closeBtn: 0,area: ['300px', '300px'], //宽高content: $('#infoMsg')});}// 关闭弹出层function closePop() {// 清除所有 覆盖物map.clearOverlays();// 重新加载 覆盖物initPoints()// 重置表单resetForm()layer.close(layer.index)}// document.getElementByIdfunction docGetId(id){return document.getElementById(id)}// 重置表单function resetForm () {docGetId("mName").value = ''docGetId("mAddress").value = ''docGetId("mPerson").value = ''docGetId("mFloor").value = ''docGetId("mExit").value = ''}// 提交自定义信息function submitInfo() {let mName = docGetId("mName").value || "标题";let mAddress = docGetId('mAddress').value || "空";let mPerson = docGetId('mPerson').value || "空";let mFloor = docGetId('mFloor').value || "空";let mExit = docGetId('mExit').value || "空";// 存储数据 = 提交接口pointData.push({pointId: thisPointId,point: thisPoint,openInfo: {mName, mAddress, mPerson, mFloor, mExit }})pointId = ''thisPoint = ''closePop() // 关闭/重置}// 鼠标测距路function toDistenceTool() {var myDis = new BMapLib.DistanceTool(map);myDis.open(); //开启鼠标测距}// 鼠标选点 判断是否监听function changeMouseEvent() {mousePoint = !mousePointif (mousePoint) {docGetId('mousePointBtn').innerHTML = "鼠标选点:开"map.addEventListener('click', mouseChoosePoint)} else {docGetId('mousePointBtn').innerHTML = "鼠标选点:关"map.removeEventListener('click', mouseChoosePoint)}}// 鼠标选点function mouseChoosePoint (e) {let point = { lng: e.point.lng, lat: e.point.lat }map.centerAndZoom(point, 18);var markerMouse = new BMap.Marker(point); // 创建标注changeMouseEvent()//创建右键菜单var markerMenu = new BMap.ContextMenu();markerMenu.addItem(new BMap.MenuItem('删除', removeMarker.bind(markerMouse)));markerMouse.addContextMenu(markerMenu);map.addOverlay(markerMouse); // 将标注添加到地图中thisPointId = (e.point.lng + '' + e.point.lat).toString();thisPoint = pointopenLayer()}// 左侧 name点击function liClick(lng, lat){var point = new BMap.Point(lng, lat);map.centerAndZoom(point, 15);}
// 显示全部点function resetMap(){$("#liListId li").removeClass('selected');map.centerAndZoom('北京', 13);}// 页面加载完window.onload = function() {// 获取全部数据 赋值给 pointData = 提交接口// 渲染左侧列表let liHtml = `全部位置`for(let i =0; i< pointData.length; i++) {liHtml += `${pointData[i].point.lng}, ${pointData[i].point.lat})">${pointData[i].openInfo.mName} `}docGetId('liListId').innerHTML = liHtml// 点击添加样式$("#liListId li").click(function() {$(this).siblings('li').removeClass('selected');$(this).addClass('selected');});}script>
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
