转载:百度API测距到测面的完美逆袭

最近在做的项目中需要根据百度地图的API封装百度地图,就在快要发布版本的时候遇到一个相当棘手的问题,即百度地图API提供的绘制多边形的接口不兼容IE9,使得封装后的测面功能无法在IE9中正常使用,而项目的主推浏览器就是IE9,与项目经理沟通后,项目经理说暂时不予处理,因为属于API的问题,当时我表示可以试一试更改百度API的源代码,经过苦思冥想我如愿找到了解决办法,使得在IE9下完美的完成了测面功能!思路很简单,代码也不麻烦。拿来和大家分享下!

主要思想:

完成这个功能的前提是你对百度地图的API很熟悉,尤其是测距功能。此功能我主要是在测距将结束时双击地图触发的操作(distDblclick)中完成的。

1、 利用鼠标测距的时候会把所有在地图上点击的点都记录下来,将这些点存下来到一个数组points中;

首先你要创建一个数组:var points = [];//存储折线经过的所有点数据

然后将绘制折线所经过的点存储下来(这个过程在测距过程中,点击地图时,触发的操作distClick中完成):points = me._points;//放所有折线点

2、 利用这些点的数组points创建一个百度的polygon对象。

Var newPolygon =

new BMap.Polygon(points,{strokeColor:"blue",strokeWeight:1.5,strokeOpacity:0.8});

在new 百度polygon的时候的参数可以是多边形对象也可以是构成该多边形的点数组。

recPolygon = newPolygon ;这一步主要是在清除测面时用到,这之前得设置一个对象 recPolygon 保存新建的多边形:var recPolygon = null;

3、 然后把创建的多边形添加到地图上,并调用GeoUtils计算多边形的面积。

me._map.addOverlay(newPolygon);

var resultArea = BMapLib.GeoUtils.getPolygonArea(newPolygon);//计算多边形的面积(单位米)

4、 给newPolygon绑定一些事件。

//当鼠标进入多边形区域时会触发

newPolygon.addEventListener("mouseover",function(){

           newPolygon.setStrokeColor("red");

         me._map.addOverlay(polygonLabel);//显示面积

});

//给多边形添加鼠标"移动"事件

newPolygon.addEventListener("mousemove",function(event){

         polygonLabel.setPosition(event.point);

});

//鼠标离开多边形时触发此事件

newPolygon.addEventListener("mouseout",function(){

            newPolygon.setStrokeColor("blue");

         me._map.removeOverlay(polygonLabel);

});

//点击多边形后会触发此事件

newPolygon.addEventListener("click",function(){

           me._map.zoomIn();

           newPolygon.setStrokeColor("red");

});

5、 创建跟随鼠标的多边形标签,显示多边形的面积。

//创建多边形标签

var polygonLabel = new BMap.Label("<b>此多边形面积(㎡):</b>"+resultArea,{offset: new BMap.Size(10,-10)});

polygonLabel.setStyle({"z-index":"1000000","padding":"10px","width":"","border":"1px solid #ccff00"});

6、 初始化points数组,以备下一次画多边形用。

points = [];

 

开启方法仍然和测距的是一样的,

var ltControls = new BMapLib. DistanceTool (this.map,{//实例化鼠标绘制工具
isOpen: false, //是否开启绘制模式
enableCalculate:true,//开启测面模式
polygonOptions: defaultOptions.PolygonStyle //多边形的样式

});

currentControl.open();

 

var defaultOptions={


PolygonStyle:{
strokeColor:"red", //边线颜色
fillColor:"#FAFFF0", //填充颜色,当参数为空时,圆形将没有填充效果
strokeWeight:1, //边线的宽度,以像素为单位
strokeOpacity:1, //边线透明度,取值范围0 - 1
fillOpacity:0.6, //填充的透明度,取值范围0 - 1
strokeStyle:'solid' //边线的样式,solid或dashed
}

}

7、想要清除改多边形,调用map的removeOverlay(recPolygon)方法,里面的参数是多边形对象即可。这一步主要是在点击测距完成后左上方的关闭按钮(点击关闭按钮,绑定关闭按钮事件)中完成。到这里,功能已经实现了。当然,还有其他的实现方法,有兴趣的可以摸索!效果如下图所示:

 

    

 

这里要注意下:就是在清除绘制的多边形时,原来测距只是清除了点和线数据,而我们现在是根据点又创建了一个Polygon对象,所以在清除的时候,必须要再对Polygon对象进行清除一次,同时,要明确这个recPolygon只是作为了保存每次新创建的Polygon对象,为了不出现绘制多个多边形时,删除出现不一致的bug,这里需要

在“处理最后一次操作,当用户双击或测距被强行退出时调用”的方法_processLastOp中将每次创建的Polygon对象保存在定义的disObj对象中(该对象保存本次测面对象),具体为:disObj.recPolygon = recPolygon;即可。所以在调用map的removeOverlay(recPolygon)方法,里面的参数是多边形对象时,对应写为removeOverlay(disObj.recPolygon)!

转载于:https://www.cnblogs.com/Jhon-xu/p/8708755.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值