BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取

BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取

分类: BaiduMap 529人阅读 评论(3) 收藏 举报

雪影工作室版权所有,转载请注明【http://blog.csdn.net/lina791211】


1、博文产生原因

        在使用百度Map开放API进行开发的时候,遇到了一个需求,很简单的一个需求。
    →用户需要在地图上画一个矩形,根据矩形的边界值查询数据(主要在卫星数据的时空检索上使用)
  没有想到的是,我翻遍了百度Map的百度地图JavaScript API,愣是没有找到相关的操作。在度娘上问了一圈小伙伴,没发现有这个需求的。真的伤心

2、实现机制

        Step1:综合考虑现有需求,针对需要选择空间范围进行检索的小问题,我最终选择使用“鼠标绘制”这一功能,萌萌的Demo点我啦



   上面就是百度提供的萌萌的demo。

 

   Step2:那么就需要进行相关的改造了。百度API中没有提供坐标的相关操作,就需要我们发挥强有力的节操,把这个参数找到。

      要相信,既然图能画上去,坐标肯定要标出来,要不然他放大、缩小什么的还能随着自由变化吗?

 

  Step3:查看demo中提供的代码,第134行。(什么?demo的代码在哪里?-----我才不会告诉你demo界面左下角有一行“源代码编辑器”呢)

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //回调获得覆盖物信息  
  2. var overlaycomplete = function(e){  
  3.     overlays.push(e.overlay);  
  4.     var result = "";  
  5.     result = "<p>";  
  6.     result += e.drawingMode + ":";  
  7.     if (e.drawingMode == BMAP_DRAWING_MARKER) {  
  8.         result += ' 坐标:' + e.overlay.getPosition().lng + ',' + e.overlay.getPosition().lat;  
  9.         if ($('isInfowindow').checked) {  
  10.             searchInfoWindow.open(e.overlay);  
  11.         }  
  12.     }  
  13.     if (e.drawingMode == BMAP_DRAWING_CIRCLE) {  
  14.         result += ' 半径:' + e.overlay.getRadius();  
  15.         result += ' 中心点:' + e.overlay.getCenter().lng + "," + e.overlay.getCenter().lat;  
  16.     }  
  17.     if (e.drawingMode == BMAP_DRAWING_POLYLINE || e.drawingMode == BMAP_DRAWING_POLYGON || e.drawingMode == BMAP_DRAWING_RECTANGLE) {  
  18.         result += ' 所画的点个数:' + e.overlay.getPath().length;  
  19.     }  
  20.     result += "</p>";  
  21.     $("showOverlayInfo").style.display = "none";  
  22.     $("panel").innerHTML += result; //将绘制的覆盖物信息结果输出到结果面板  
  23. };  
    //回调获得覆盖物信息
    var overlaycomplete = function(e){
        overlays.push(e.overlay);
        var result = "";
        result = "<p>";
        result += e.drawingMode + ":";
        if (e.drawingMode == BMAP_DRAWING_MARKER) {
            result += ' 坐标:' + e.overlay.getPosition().lng + ',' + e.overlay.getPosition().lat;
            if ($('isInfowindow').checked) {
                searchInfoWindow.open(e.overlay);
            }
        }
        if (e.drawingMode == BMAP_DRAWING_CIRCLE) {
            result += ' 半径:' + e.overlay.getRadius();
            result += ' 中心点:' + e.overlay.getCenter().lng + "," + e.overlay.getCenter().lat;
        }
        if (e.drawingMode == BMAP_DRAWING_POLYLINE || e.drawingMode == BMAP_DRAWING_POLYGON || e.drawingMode == BMAP_DRAWING_RECTANGLE) {
            result += ' 所画的点个数:' + e.overlay.getPath().length;
        }
        result += "</p>";
        $("showOverlayInfo").style.display = "none";
        $("panel").innerHTML += result; //将绘制的覆盖物信息结果输出到结果面板
    };

  看到135行的那行代码了没? var overlaycomplete = function(e)

 

    它传过来一个参数 e 啊。赶紧调出Firebug、F12等神奇,把那个e捉拿归案。

    咦,再看看150行 result += ' 所画的点个数:' + e.overlay.getPath().length;

    有一个神奇的e.overlay的,那么我们也可以截取他了。果断断点截取。     



    然后在地图上随便画个图,画完后自动断点到e的位置



       看到key值为Nk的Object,包含了四个坐标。okay,经过我进一步测试,发现确实是这四个参数。

 

      so!结果得到了。那么这四个参数的按照什么规律呢?细心的博友估计已经看到我露出的部分代码中的解释了吧!!

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. var olRectPoint = e.overlay.Nk;  
  2. /* *.Nk是从 e 的dom节点中寻找到的,百度本身没有提供此方法的介绍。 
  3.  * olRectPoint坐标排序方式 
  4.  *  ┌─────────────────────┐ 
  5.  *  │0                  1 │ 
  6.  *  │                     │ 
  7.  *  │3                  2 │ 
  8.  *  └─────────────────────┘ 
  9.  * */  
  10. var sw = olRectPoint[3];        //左下  
  11. var ne = olRectPoint[1];        //右上  
  12. console.log('左下:'+ sw.lng+',' + sw.lat + '    右上:'+ne.lng+','+ne.lat);  
    var olRectPoint = e.overlay.Nk;
    /* *.Nk是从 e 的dom节点中寻找到的,百度本身没有提供此方法的介绍。
     * olRectPoint坐标排序方式
     *	┌─────────────────────┐
     *	│0					1 │
     *	│					  │
     *	│3					2 │
     *	└─────────────────────┘
     * */
    var sw = olRectPoint[3];		//左下
    var ne = olRectPoint[1];		//右上
    console.log('左下:'+ sw.lng+',' + sw.lat + '    右上:'+ne.lng+','+ne.lat);

3、结语

      百度Map提供的API还是不过人性化。有些功能藏着掖着,必须让我们慢慢找寻。以后遇到一些JS API不提供的东西,不是人家不提供,而是你不会找。okay。
      如果有博友有更好的方法,欢迎指正!

4、版权

        本博文所属:
            iteye: http://snowfigure.iteye.com/  

             CSDN: http://blog.csdn.net/lina791211
      所涉及的代码开源,但请在主要位置标注原博文来源地址。谢谢!


要在Vue中使用vue-baidumap获取当前位置,可以按照以下步骤进行操作: 1. 首先,在Vue组件中引入vue-baidumap组件,并在模板中添加baidu-map标签。确保设置id属性为"map",并将@ready事件绑定到一个名为handler的方法上。同时,设置scroll-wheel-zoom和pinch-to-zoom属性为true,以启用鼠标滚轮和手势缩放地图的功能。还需要提供申请的百度秘钥。\[3\] 2. 在Vue组件的methods中定义handler方法,该方法将在百度地图加载完成后执行。在handler方法中,使用BMap.Geolocation类的getCurrentPosition方法获取当前位置信息,并将经纬度保存到当前位置变量中。\[1\] 3. 在mapReady方法中初始化地图,并设置地图的中心点和缩放级别。可以选择一个经纬度作为中心点,并使用BMap.Point类创建一个点对象。然后使用map.centerAndZoom方法将地图的中心点设置为该点,并设置缩放级别。\[2\] 通过以上步骤,你可以在Vue中使用vue-baidumap获取当前位置信息。 #### 引用[.reference_title] - *1* *3* [使用vue-baidu-map如何获取当前位置经纬度?](https://blog.csdn.net/m0_50441807/article/details/126100384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [在VUE中使用vue-baidu-map获取经纬度和搜索地址](https://blog.csdn.net/weixin_53312997/article/details/128341989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值