最近在使用百度地图画配送范围,遇到一些问题,简单整理一下我记下来的内容吧~
### 百度地图在隐藏的时候会报错(这个坑找了很久)
* 前提:因为项目有一个tab页展现,地图处于其中一个tab中,因此避免不了会来回隐藏
* 缘由:百度地图的bug
解决办法:避免隐藏,经过top值改变,造成一种被隐藏的感受
### `marker`不显示
- 前提:marker应该是直接按照提供的API就能够的,但是不知道我操做了什么,后期marker不显示了,后来通过一些实验发现了问题
- 缘由:overlay的代码放在了marker的前面,被覆盖了
- 解决办法:将添加marker的代码放在overlay以后便可
### 画完配送范围以后没法获取地图属性发生变化的事件
- 前提:地图初始化完以后是有个lineupdate 事件,可是画覆盖物和初始化地图引用的是不一样的库,而在`BMapLib_DrawingManager.js`库中没有提供这个事件的接口,
致使画完地图没办法获取拖拽后地图变化的各个点的坐标
- 缘由:`BMapLib_DrawingManager.js`库中就没有提供`lineupdate `事件
- 解决办法:将`BMapLib_DrawingManager.js`库下载到本地,添加`lineupdate`事件
### 画配送范围时鼠标跟随
- 前提:因为项目的需求,在画覆盖物的时候有鼠标有跟随的tip
- 缘由:`BMapLib_DrawingManager.js`库中依然没有提供
### 双击删除覆盖物的可编辑的点
- 缘由:百度地图没有提供这样的功能(可是高德地图是有的)
- 解决办法:本身写喽~在地图上触发双击事件并获取点击的经纬度坐标,利用这个坐标,遍历全部`overlay`的点经纬度坐标作比较,
在某点的经度以及纬度都在必定的差值内,就至关因而删除的这个点。
(这个差值是0.001,是本身找的,是通过一些实验发现这个差值还比较算合理)
### 画配送范围的时候,右键双击
- 缘由:由于在右键双击的时候会传入两个相同的经纬度点,计算面积的时候没有角度,就致使最后的结果是0(高德地图在画`overlay`的时候一旦右键就删除
覆盖物,如今想一想也能够这样解决,可是在这个库中右键事件应该不能够,能够尝试一下)
- 解决办法:因为画配送范围的时候全部代码都在`BMapLib_DrawingManager.js`库中,因此依然要该这里的代码。
可是这里面又没有封装右键双击事件,本身添加上去的又很差使,就将鼠标点击的时候的坐标点和前一个坐标点比较,若是相等的就`pop()`一个
### 计算面积出错,
- 前提:百度地图计算面积的时候不能交叉,提供的库就明显注释会计算错误,这个问题出现的方式除了画的时候图形复杂,或者点离得特别近的时候
还有一点是在画完从新拖拽的时候,将一个点离另外一个点超级近的时候,也会出现
总而言之:都是由于坐标点几乎重叠,其次是图形太复杂
- 缘由:若是想要实现这个功能,必须调整传过去点的顺序,以及当点的靠的太近也要去掉其中一个,这个太麻烦了,并且在我返回overlay的时候,
我还须要将原来点的顺序调回来,这个最后没有实现,给予了相应的错误提示,可是这个提示也是依据计算面积的库返回过来的数据判断,提示的信息也不是很理想。
### 鼠标进入tip提示
- 前提:在画配送范围时有相应的鼠标跟随提示,可是百度地图没有提供相应的`API`
- 解决方案:依然是改`BMapLib_DrawingManager.js`库中的代码,发现mousemoveAction这个函数里能够在画overlay时触发的回调函数,就在这里添加了相应的鼠标tip。
### 将米和像素换算
- 前提:由于项目需求初始化的正六边形覆盖物的半径是不超过3千米,然而我须要在一个平面上计算
- 解决办法:经过使用百度地图提供的方法`getDistance()` 获取展现地图区域的两个角之间的距离,返回单位为米,而后算出页面对角线的像素值,
将米和像素换算一下,从而将千米和像素的单位互相转化
### 百度API不全,须要找网上资料
- 前提:记得有挺多的,可是能想到的就这一个了。在画完配送范围以后,让图形可编辑
### 最后:百度地图存在一些坑,且码且珍惜,虽然没有使用太高德地图,可是听有经验的人士的讲述,感受上述的不少问题高德地图是不存在的,反正各有利弊吧。
有可能有的问题会在之后修复,有的问题解决办法比较恶心,可是为了当时的场景也是没有太多办法,技术有的low,有什么更好的办法能够分享一下~嘿嘿~~很是感谢遇到问题帮助个人人~~