最近在使用百度地圖畫配送範圍,遇到一些問題,簡單整理一下我記下來的內容吧~
### 百度地圖在隱藏的時候會報錯(這個坑找了很久)
* 前提:因爲項目有一個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,有什麼更好的辦法能夠分享一下~嘿嘿~~很是感謝遇到問題幫助個人人~~