C语言鼠标放大地图,BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取

1、博文产生原因

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

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

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

2、实现机制

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

a378484a17b3cd974414ee7797e3fad4.png

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

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

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

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

//回调获得覆盖物信息

var overlaycomplete = function(e){

overlays.push(e.overlay);

var result = "";

result = "

";

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 += "

";

$("showOverlayInfo").style.display = "none";

$("panel").innerHTML += result; //将绘制的覆盖物信息结果输出到结果面板

};

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

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

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

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

2817975fd9fa78fa43350661323ed5c5.png

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

d05624d99ff970bdffd7db88107d7deb.png

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

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

var olRectPoint = e.overlay.Nk;

/* *.Nk是从 e 的dom节点中寻找到的,百度本身没有提供此方法的介绍。

* olRectPoint坐标排序方式

*┌─────────────────────┐

*│01 │

*│ │

*│32 │

*└─────────────────────┘

* */

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值