鱼C论坛

 找回密码
 立即注册
查看: 4614|回复: 1

[学习笔记] 信息窗口

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

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

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

x
这个信息窗口与我预期不符。
我本打算令polyline折线显示信息窗口,但是点击事件却没有反应,怎么也弄不明白。
主要是openInfoWindow需要一个point,而polylines对象中包含多个point,所以无法显示(我猜的)。
于是我改成了对每一个风险区域,去头一个线桩作为标记,用于显示风险信息。
  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.             <?php
  73.                 $risk_points = array(
  74.                     array('start'=>2, 'end'=>8, 'type'=>1),
  75.                     array('start'=>10, 'end'=>14, 'type'=>2)
  76.                 );
  77.                 //将坐标集转换为json格式,为js的接收做准备
  78.                 $jsonstr2 = json_encode($risk_points);
  79.                 $riskRows = 2;
  80.             ?>
  81.             var json2 = <?=$jsonstr2 ?>;
  82.             var riskRows = <?=$riskRows?>;
  83.             var riskPoints = eval(json2);
  84.             
  85.             //获取坐标点集
  86.             //准备一个数组存放坐标点集,再准备一个数组存放风险点集。
  87.             var polylinePointsArray = [];
  88.             var polylinePointsArrayRisk = [];
  89.             for(var index = 0; index < rows; index++)
  90.             {
  91.                 var x = points[index]['lng'] + 0.000;
  92.                 var y = points[index]['lat'] + 0.000;
  93.                 polylinePointsArray[index] = new BMapGL.Point(x,y);
  94.             }

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

  100.             //再次添加折线
  101.             for(var j = 0; j < riskRows; j++)
  102.             {
  103.                 //获取第i条风险记录的起始与结束桩序号
  104.                 var start = riskPoints[j]['start'];
  105.                 var end = riskPoints[j]['end'];
  106.                 var type = riskPoints[j]['type'];
  107.                 //进入内层循环(循环次数为结束桩序号-起始桩序号),将各个线桩的坐标点集存入风险数组
  108.                 for(var i = 0; i <=end - start; i++)
  109.                 {
  110.                     //例:数据库的第二条数据,在数组中应该下标为1.
  111.                     var x = points[i+start]['lng']+0.000;
  112.                     var y = points[i+start]['lat']+0.000;
  113.                     polylinePointsArrayRisk[i] = new BMapGL.Point(x,y);
  114.                 }

  115.                 //进入外循环,添加折线(根据风险类型选择折线颜色)
  116.                 if(type == 1)
  117.                 {
  118.                     //"#FFFF00":黄色
  119.                     //自定义图标
  120.                     var myIcon_risk = new BMapGL.Icon("../img/risk_yellow.png", new BMapGL.Size(23, 25),{
  121.                         //图标定位
  122.                         offset: new BMapGL.Size(10, 25)
  123.                     });
  124.                     var polylines = new BMapGL.Polyline(polylinePointsArrayRisk, {strokeColor:"#FFFF00", strokeWeight:8, strokeOpacity:0.5});
  125.                 }
  126.                 else if(type == 2)
  127.                 {
  128.                     //自定义图标
  129.                     var myIcon_risk = new BMapGL.Icon("../img/risk_red.png", new BMapGL.Size(23, 25),{
  130.                         //图标定位
  131.                         offset: new BMapGL.Size(10, 25)
  132.                     });
  133.                     var polylines = new BMapGL.Polyline(polylinePointsArrayRisk, {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});
  134.                 }
  135.                
  136.                 //添加风险折线
  137.                 map.addOverlay(polylines);
  138.                 //添加风险起始桩标记
  139.                 overlayMarkerRisk(polylinePointsArrayRisk[0],myIcon_risk);
  140.                 //每次执行完成一次循环必须置空,以防下一次循环时被上一次循环的数据影响
  141.                 polylinePointsArrayRisk.splice(0,polylinePointsArrayRisk.length);
  142.             }

  143.             //添加标注点
  144.             //本代码将用于添加场站与阀室的标记
  145.             for(var index = 0; index < rows; index++)
  146.             {
  147.                 if(points[index]['type']=="转角桩")
  148.                 {
  149.                     //自定义图标
  150.                     var myIcon = new BMapGL.Icon("../img/risk_red.png", new BMapGL.Size(23, 25),{
  151.                         //图标定位
  152.                         offset: new BMapGL.Size(10, 25)
  153.                     });
  154.                     //添加标记与监听事件
  155.                     //overlayMarker(polylinePointsArray[index],myIcon);
  156.                 }
  157.                 else if(points[index]['type']=="交叉桩")
  158.                 {
  159.                     //自定义图标
  160.                     var myIcon = new BMapGL.Icon("../img/risk_yellow.png", new BMapGL.Size(23, 25),{
  161.                         //图标定位
  162.                         offset: new BMapGL.Size(10, 25)
  163.                     });
  164.                     //添加标记与监听事件
  165.                     //overlayMarker(polylinePointsArray[index],myIcon);
  166.                 }
  167.             }

  168.             //添加标记与监听事件
  169.             function overlayMarker(point,MyIcon)
  170.             {
  171.                 var marker = new BMapGL.Marker(point,{icon: MyIcon});
  172.                 map.addOverlay(marker);
  173.                 //为marker添加title,方便以后索引
  174.                 marker.setTitle(points[index]['name']);
  175.                 //添加监听事件
  176.                 var opts = {
  177.                     width : 200,     // 信息窗口宽度
  178.                     height: 100,     // 信息窗口高度
  179.                     title : "故宫博物院" , // 信息窗口标题
  180.                     message:"这里是故宫"
  181.                 }
  182.                 var infoWindow = new BMapGL.InfoWindow(marker.getTitle(), opts);  // 创建信息窗口对象
  183.                 marker.addEventListener('click', function(){
  184.                     map.openInfoWindow(infoWindow, point); //开启信息窗口
  185.                 });
  186.             }

  187.             //添加风险标记与监听事件
  188.             //本代码将用于添加风险起始桩的标记
  189.             function overlayMarkerRisk(point,MyIcon)
  190.             {
  191.                 var marker = new BMapGL.Marker(point,{icon: MyIcon});
  192.                 map.addOverlay(marker);
  193.                 //为marker添加title,方便以后索引
  194.                 marker.setTitle(points[start]['name']);
  195.                 //添加监听事件
  196.                 var opts = {
  197.                     width : 200,     // 信息窗口宽度
  198.                     height: 100,     // 信息窗口高度
  199.                     title : "风险起始桩" , // 信息窗口标题
  200.                     message:"这里是故宫"
  201.                 }
  202.                 var infoWindow = new BMapGL.InfoWindow(marker.getTitle(), opts);  // 创建信息窗口对象
  203.                 marker.addEventListener('click', function(){
  204.                     map.openInfoWindow(infoWindow, point); //开启信息窗口
  205.                 });
  206.             }

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

使用道具 举报

 楼主| 发表于 2021-4-18 08:20:17 | 显示全部楼层
更新阀室与场站
  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.         <!-- 以风险管线的第一个线桩为定位点 -->
  20.         <?php $longitude = ;?>
  21.         <?php $latitude = ;?>
  22.         <script type="text/javascript">
  23.             // 创建地图实例
  24.             var map = new BMapGL.Map("container");
  25.             //接收PHP传递的变量
  26.             var lng = <?php echo $longitude;?>;
  27.             var lat = <?php echo $latitude; ?>;
  28.             // 创建点坐标
  29.             var point = new BMapGL.Point(lng, lat);
  30.             // 初始化地图,设置中心点坐标和地图级别
  31.             map.centerAndZoom(point, 15);
  32.             //设置鼠标滚轮缩放
  33.             map.enableScrollWheelZoom(true);
  34.             //设置缩放角度
  35.             map.setHeading(64.5);   //设置地图旋转角度
  36.             map.setTilt(73);       //设置地图的倾斜角度
  37.             //添加控件
  38.             var scaleCtrl = new BMapGL.ScaleControl();  // 添加比例尺控件
  39.             map.addControl(scaleCtrl);
  40.             var opts = {
  41.                 anchor:BMAP_ANCHOR_TOP_RIGHT
  42.             }
  43.             var zoomCtrl = new BMapGL.ZoomControl(opts);  // 添加缩放控件
  44.             map.addControl(zoomCtrl);

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

  66.             //在JavaScript中接收PHP中的变量值
  67.             var json = <?=$jsonstr?>;
  68.             var rows = <?=$rows?>;
  69.             //JavaScript获取PHP数组:
  70.             //将php数组转成json编码,然后通过eval函数,转成js数组
  71.             var points = eval(json);

  72.             //测试
  73.             <?php
  74.                 $risk_points = array(
  75.                     array('start'=>2, 'end'=>8, 'type'=>1),
  76.                     array('start'=>10, 'end'=>14, 'type'=>2)
  77.                 );
  78.                 //将坐标集转换为json格式,为js的接收做准备
  79.                 $jsonstr2 = json_encode($risk_points);
  80.                 $riskRows = 2;
  81.             ?>
  82.             var json2 = <?=$jsonstr2 ?>;
  83.             var riskRows = <?=$riskRows?>;
  84.             var riskPoints = eval(json2);
  85.             
  86.             //获取坐标点集
  87.             //准备一个数组存放坐标点集,再准备一个数组存放风险点集。
  88.             var polylinePointsArray = [];
  89.             var polylinePointsArrayRisk = [];
  90.             for(var index = 0; index < rows; index++)
  91.             {
  92.                 var x = points[index]['lng'] + 0.000;
  93.                 var y = points[index]['lat'] + 0.000;
  94.                 polylinePointsArray[index] = new BMapGL.Point(x,y);
  95.             }

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

  101.             //再次添加折线
  102.             for(var j = 0; j < riskRows; j++)
  103.             {
  104.                 //获取第i条风险记录的起始与结束桩序号
  105.                 var start = riskPoints[j]['start'];
  106.                 var end = riskPoints[j]['end'];
  107.                 var type = riskPoints[j]['type'];
  108.                 //进入内层循环(循环次数为结束桩序号-起始桩序号),将各个线桩的坐标点集存入风险数组
  109.                 for(var i = 0; i <=end - start; i++)
  110.                 {
  111.                     //例:数据库的第二条数据,在数组中应该下标为1.
  112.                     var x = points[i+start]['lng']+0.000;
  113.                     var y = points[i+start]['lat']+0.000;
  114.                     polylinePointsArrayRisk[i] = new BMapGL.Point(x,y);
  115.                 }

  116.                 //进入外循环,添加折线(根据风险类型选择折线颜色)
  117.                 if(type == 1)
  118.                 {
  119.                     //"#FFFF00":黄色
  120.                     //自定义图标
  121.                     var myIcon_risk = new BMapGL.Icon("../img/risk_yellow.png", new BMapGL.Size(23, 25),{
  122.                         //图标定位
  123.                         offset: new BMapGL.Size(10, 25)
  124.                     });
  125.                     var polylines = new BMapGL.Polyline(polylinePointsArrayRisk, {strokeColor:"#FFFF00", strokeWeight:8, strokeOpacity:0.5});
  126.                 }
  127.                 else if(type == 2)
  128.                 {
  129.                     //自定义图标
  130.                     var myIcon_risk = new BMapGL.Icon("../img/risk_red.png", new BMapGL.Size(23, 25),{
  131.                         //图标定位
  132.                         offset: new BMapGL.Size(10, 25)
  133.                     });
  134.                     var polylines = new BMapGL.Polyline(polylinePointsArrayRisk, {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});
  135.                 }
  136.                 //添加风险折线
  137.                 //addClickHandle(polylines);
  138.                 map.addOverlay(polylines);
  139.    
  140.                 //添加风险起始桩标记
  141.                 overlayMarkerRisk(polylinePointsArrayRisk[0],myIcon_risk);
  142.                 //每次执行完成一次循环必须置空,以防下一次循环时被上一次循环的数据影响
  143.                 polylinePointsArrayRisk.splice(0,polylinePointsArrayRisk.length);
  144.             }

  145.             //添加标注点
  146.             //本代码将用于添加场站与阀室的标记
  147.             for(var index = 0; index < rows; index++)
  148.             {
  149.                 if(points[index]['type']=="阀室")
  150.                 {
  151.                     //自定义图标
  152.                     var myIcon = new BMapGL.Icon("../img/阀门_1.png", new BMapGL.Size(23, 25),{
  153.                         //图标定位
  154.                         offset: new BMapGL.Size(10, 11)
  155.                     });
  156.                     //添加标记与监听事件
  157.                     overlayMarker(polylinePointsArray[index],myIcon);
  158.                 }
  159.                 else if(points[index]['type']=="场站")
  160.                 {
  161.                     //自定义图标
  162.                     var myIcon = new BMapGL.Icon("../img/场站.png", new BMapGL.Size(23, 25),{
  163.                         //图标定位
  164.                         offset: new BMapGL.Size(10, 25)
  165.                     });
  166.                     //添加标记与监听事件
  167.                     overlayMarker(polylinePointsArray[index],myIcon);
  168.                 }
  169.             }

  170.             //添加标记与监听事件
  171.             function overlayMarker(point,MyIcon)
  172.             {
  173.                 var marker = new BMapGL.Marker(point,{icon: MyIcon});
  174.                 map.addOverlay(marker);
  175.                 //为marker添加title,方便以后索引
  176.                 marker.setTitle(points[index]['name']);
  177.                 //添加监听事件
  178.                 var opts = {
  179.                     width : 200,     // 信息窗口宽度
  180.                     height: 100,     // 信息窗口高度
  181.                     title : points[index]['type'] , // 信息窗口标题
  182.                     message:"这里是故宫"
  183.                 }
  184.                 var infoWindow = new BMapGL.InfoWindow(marker.getTitle(), opts);  // 创建信息窗口对象
  185.                 marker.addEventListener('click', function(){
  186.                     map.openInfoWindow(infoWindow, point); //开启信息窗口
  187.                 });
  188.             }

  189.             //添加风险标记与监听事件
  190.             //本代码将用于添加风险起始桩的标记
  191.             function overlayMarkerRisk(point,MyIcon)
  192.             {
  193.                 var marker = new BMapGL.Marker(point,{icon: MyIcon});
  194.                 map.addOverlay(marker);
  195.                 //为marker添加title,方便以后索引
  196.                 marker.setTitle(points[start]['name']);
  197.                 //添加监听事件
  198.                 var opts = {
  199.                     width : 200,     // 信息窗口宽度
  200.                     height: 100,     // 信息窗口高度
  201.                     title : "风险起始桩" , // 信息窗口标题
  202.                     message:"这里是故宫"
  203.                 }
  204.                 var infoWindow = new BMapGL.InfoWindow(marker.getTitle(), opts);  // 创建信息窗口对象
  205.                 marker.addEventListener('click', function(){
  206.                     map.openInfoWindow(infoWindow, point); //开启信息窗口
  207.                 });
  208.             }
  209.         </script>
  210.     </body>
  211. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 15:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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