鱼C论坛

 找回密码
 立即注册
查看: 4170|回复: 0

[学习笔记] 百度地图api添加不同标注

[复制链接]
发表于 2021-4-2 09:47:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
承接之前的添加标注点以及监听事件那篇帖子
本次代码修改允许:1.自定义标记。2.对不同的点,可以有不同的标记。
详见第89-124行
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  5.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.         <title>Hello, World</title>
  7.         <style type="text/css">
  8.             html{height:100%}
  9.             body{height:100%;margin:0px;padding:0px}
  10.             #container{height:100%}
  11.         </style>
  12.         <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=yourkey">
  13.         </script>
  14.     </head>
  15.   
  16.     <body>
  17.         <div id="container"></div>
  18.         <!--初始化地图经纬度-->
  19.         <?php $longitude = ???;?>
  20.         <?php $latitude = ???;?>
  21.         <script type="text/javascript">
  22.             // 创建地图实例
  23.             var map = new BMapGL.Map("container");
  24.             //接收PHP传递的变量
  25.             var lng = <?php echo $longitude;?>;
  26.             var lat = <?php echo $latitude; ?>;
  27.             // 创建点坐标
  28.             var point = new BMapGL.Point(lng, lat);
  29.             // 初始化地图,设置中心点坐标和地图级别
  30.             map.centerAndZoom(point, 15);
  31.             //设置鼠标滚轮缩放
  32.             map.enableScrollWheelZoom(true);
  33.             //设置缩放角度
  34.             map.setHeading(64.5);   //设置地图旋转角度
  35.             map.setTilt(73);       //设置地图的倾斜角度
  36.             //添加控件
  37.             var scaleCtrl = new BMapGL.ScaleControl();  // 添加比例尺控件
  38.             map.addControl(scaleCtrl);
  39.             var opts = {
  40.                 anchor:BMAP_ANCHOR_TOP_RIGHT
  41.             }
  42.             var zoomCtrl = new BMapGL.ZoomControl(opts);  // 添加缩放控件
  43.             map.addControl(zoomCtrl);

  44.             //执行SQL语句,获取结果集。
  45.             //解析结果集,获取记录集。
  46.             <?php
  47.             //添加公共文件
  48.             include_once 'mysql_public.php';
  49.             //获取前100条管道信息
  50.             $sql = "SELECT * FROM `lines` LIMIT 100";
  51.             //获取结果集
  52.             $res = myerror($sql);
  53.             //获取结果集数据条数:多少行记录
  54.             $rows =  mysqli_num_rows($res);
  55.             //保存取出的记录:
  56.             $points = array();
  57.             //利用while获取,每次取到数据之后判断保存数据的结果,只要结果不为false,那么一直取
  58.             while($row = mysqli_fetch_assoc($res))
  59.             {
  60.                 $points[] = $row;    //于是point成为二维数组
  61.             }
  62.             //将坐标集转换为json格式,为js的接收做准备
  63.             $jsonstr = json_encode($points);
  64.             ?>

  65.             //在JavaScript中接收PHP中的变量值
  66.             var json = <?=$jsonstr?>;
  67.             var rows = <?=$rows?>;
  68.             //JavaScript获取PHP数组:
  69.             //将php数组转成json编码,然后通过eval函数,转成js数组
  70.             var points = eval(json);
  71.             //获取坐标点集
  72.             //准备一个数组存放坐标点集
  73.             var polylinePointsArray = [];
  74.             for(var index = 0; index < rows; index++)
  75.             {
  76.                 var x = points[index]['lng'] + 0.000;
  77.                 var y = points[index]['lat'] + 0.000;
  78.                 polylinePointsArray[index] = new BMapGL.Point(x,y);
  79.             }

  80.             //添加折线
  81.             //源代码中各个坐标点是存在一个中括号内,表示所有坐标点存在于一个数组当中。
  82.             //现已将坐标点存入数组,所以没有必要再加中括号了。
  83.             var polyline = new BMapGL.Polyline(polylinePointsArray, {strokeColor:"blue", strokeWeight:8, strokeOpacity:0.5});   //创建折线
  84.             map.addOverlay(polyline);          //增加折线

  85.             //添加标注点
  86.             for(index = 0; index < rows; index++)
  87.             {
  88.                 if(points[index]['type']=="???")
  89.                 {
  90.                     //自定义图标
  91.                     var myIcon = new BMapGL.Icon("../img/risk_red.png", new BMapGL.Size(23, 25),{
  92.                         //图标定位
  93.                         offset: new BMapGL.Size(10, 25)
  94.                     });
  95.                     //添加标记与监听事件
  96.                     overlayMarker(polylinePointsArray[index],myIcon);
  97.                 }
  98.                 else if(points[index]['type']=="???")
  99.                 {
  100.                     //自定义图标
  101.                     var myIcon = new BMapGL.Icon("../img/risk_yellow.png", new BMapGL.Size(23, 25),{
  102.                         //图标定位
  103.                         offset: new BMapGL.Size(10, 25)
  104.                     });
  105.                     //添加标记与监听事件
  106.                     overlayMarker(polylinePointsArray[index],myIcon);
  107.                 }
  108.             }

  109.             //添加标记与监听事件
  110.             function overlayMarker(point,MyIcon)
  111.             {
  112.                 var marker = new BMapGL.Marker(point,{icon: MyIcon});
  113.                 map.addOverlay(marker);
  114.                 //为marker添加title,方便以后索引
  115.                 marker.setTitle(points[index]['name']);
  116.                 //添加监听事件
  117.                 marker.addEventListener('click', overlayStyle);
  118.             }

  119.             //获取覆盖物属性
  120.             function overlayStyle(e)
  121.             {
  122.                 var p = e.target;
  123.                 alert(p.getTitle());
  124.             }


  125.         </script>
  126.     </body>
  127. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表