雪影工作室版权全部。转载请注明【http://blog.csdn.net/lina791211】


1、博文产生原因

在使用百度Map开放API进行开发的时候,遇到了一个需求,非常easy的一个需求。

    →用户须要在地图上画一个矩形,依据矩形的边界值查询数据(主要在卫星数据的时空检索上使用)

  没有想到的是,我翻遍了百度Map的百度地图JavaScript API,愣是没有找到相关的操作。在度娘上问了一圈小伙伴,没发现有这个需求的。

真的伤心

2、实现机制

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

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

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

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

  Step3:查看demo中提供的代码,第134行。

(什么?demo的代码在哪里?-----我才不会告诉你demo界面左下角有一行“源码编辑器”呢)

  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. };

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

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

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

  有一个奇妙的e.overlay的,那么我们也能够截取他了。果断断点截取。

  

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

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

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

  1. var olRectPoint = e.overlay.Nk;
  2. /* *.Nk是从 e 的dom节点中寻找到的。百度本身没有提供此方法的介绍。
  3.  
  4. * olRectPoint坐标排序方式
  5. * ┌─────────────────────┐
  6. * │0 1 │
  7. * │ │
  8. * │3 2 │
  9. * └─────────────────────┘
  10. * */
  11. var sw = olRectPoint[3]; //左下
  12. var ne = olRectPoint[1]; //右上
  13. 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

      所涉及的代码开源。但请在主要位置标注原博文来源地址。

谢谢!

BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取的更多相关文章

  1. opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像

    前言 好长时间没写博文了,今天偷偷懒写篇关于opencv2中鼠标响应操作的文章. 鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝 ...

  2. JS用斜率判断鼠标进入DIV四个方向的方法 判断鼠标移入方向

    本文要介绍的是一种鼠标从一个元素移入移出时,获取鼠标移动方向的思路.这个方法可以帮助你判断鼠标在移入移出时,是从上下左右的哪个方向发生的.这个思路,是我自己琢磨出来,利用了一点曾经高中学过的数学知识, ...

  3. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...

  4. 在WPF中自定义你的绘制(四)

    原文:在WPF中自定义你的绘制(四)                                   在WPF中自定义你的绘制(四)                                 ...

  5. 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域

    这是两个相关的程序,前者是后者的基础.实际上前一个程序也是在前面博文的基础上做的修改,请参考<在OpenCV中利用鼠标绘制直线> .下面贴出代码. 程序之一,在OpenCV中利用鼠标绘制矩 ...

  6. 百度地图API示例:鼠标绘制点线面 控件修改

    需求 :在使用地图API时,绘制工具栏控件想自己选择哪些要,哪些不要. 可以查看相应的类:官网地址: http://api.map.baidu.com/library/DrawingManager/1 ...

  7. BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

  8. android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

    在做一个view背景特效的时候被坐标的各个获取方法搞晕了,几篇抄来抄去的博客也没弄很清楚. 现在把整个总结一下. 其实只要把下面这张图看明白就没问题了. 涉及到的方法一共有下面几个: view获取自身 ...

  9. “全栈2019”Java多线程第四章:设置和获取线程名称

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. ny27 水池数目

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...

  2. 李洪强iOS开发之FMDB线程安全的用法

    // //  ViewController.m //  04 - FMDB线程安全的用法 // //  Created by 李洪强 on 2017/6/6. //  Copyright © 2017 ...

  3. Spring4.0系列9-websocket简单应用

    http://wiselyman.iteye.com/blog/2003336 ******************************************* Spring4.0系列1-新特性 ...

  4. fileupload 上传execl文件的一些操作

    OABaseReadExeclDataAction .class 包含创建临时文件目录,基本校验,取属性值,处理乱码,基类 这里在上传文件是execl并且需要读取的话,需要把fileitem对象转换成 ...

  5. C#中一道关于线程同步的练习题——模拟多窗口售票

    题目:模拟窗口卖票,四个窗口同时对外开放售票,需要按顺序售出. 要求:输出每一张票的售出时间和售出窗口,不能出现票未售出或者被售出多次的情况. using System; using System.C ...

  6. hdu 5215 Cycle

    题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...

  7. HttpGet params not being sent httpget.setParams(params)不好使

    错误的代码 HttpClient httpclient = new DefaultHttpClient(); HttpUriRequest request = new HttpGet(uri); Ht ...

  8. datanode与namenode的通信

    在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程1. 客户端和DataNode的通信: 客户端向D ...

  9. IE6、IE7、IE8、Firefox兼容性

    整理关于IE6.IE7.IE8.Firefox兼容性CSS HACK问题 1.区别IE和非IE浏览器CSS HACK代码 #divcss5{background:blue; /*非IE 背景藍色*/b ...

  10. 第一关练习题统计网站最大访问量sed法,隐藏知识数组下标不能重复

    1.1.1 获取日志的最大top10,排序 获取两列到新的文件中第一次处理 sed截取字符串中间的内容,sed不支持贪婪匹配.找出图片在的列和图片大小到test1文件 本题需要输出三个指标:[访问次数 ...