公司需求要根據(jù)一串經(jīng)緯度繪制大體的路徑或是多邊形輪廓,不讓集成地圖sdk,只好自己通過canvas進行繪制齐佳。
實現(xiàn)思路:
(1)首先根據(jù)一串經(jīng)緯度中的最小的經(jīng)度最小緯度創(chuàng)建坐標原點。
(2)根據(jù)設(shè)備屏幕大小與最大的經(jīng)緯度差求得寬高比。
(3)格式化經(jīng)緯度點崎淳,將其轉(zhuǎn)為X Y坐標點,具體轉(zhuǎn)換方法代碼有貼愕把。需要注意的是:安卓手機的坐標原點是手機的左上角拣凹,Y軸越往下數(shù)值越大,但是(北)緯度越往下越小恨豁,需要做絕對值轉(zhuǎn)換嚣镜;
1.個人習(xí)慣首先布局文件
沒啥好說的 就一個linearLayout,記得設(shè)置id
2.Activity
該activity主要處理經(jīng)緯度數(shù)據(jù)、獲取屏幕的寬高橘蜜,具體的繪制過程在DrawView中菊匿。
代碼簡單貼一下:
(1)獲取傳來的經(jīng)緯度數(shù)組【經(jīng)度 緯度分開傳輸】;
(2)剔除數(shù)組里面為0.0的數(shù)據(jù)计福;如保證無此類數(shù)據(jù)跌捆,可刪除此段代碼;
(3)獲取屏幕的寬高象颖;
(4)實例化canvas,DrawView,將context,屏幕寬佩厚,屏幕高,緯度坐標數(shù)組说订,經(jīng)度坐標數(shù)組)傳進去抄瓦;
(5)繪制組件。
3.DrawView 主要的繪制工作在此View中進行
? ? 3.1實例化 接收數(shù)據(jù)陶冷;
? ? 3.2 繪制圖像
? ? 3.3獲取最小經(jīng)緯度钙姊,當做坐標原點
? ? 3.4 經(jīng)緯度坐標轉(zhuǎn)X Y坐標
用經(jīng)緯度減去最小經(jīng)緯度,取絕對值 *10000(本項目中經(jīng)緯度間隔較小埂伦,已實測間隔2M~1公里沒啥問題煞额,如果經(jīng)緯度間隔較大,可調(diào)整10000這個數(shù)值的大姓疵铡)
? ? 3.5獲取坐標點最大經(jīng)度差/緯度差與屏幕最大寬度/高度之間的比率
? ? 3.6 畫線
? ? 3.7 畫點
注意:x,y坐標取得后需要根據(jù)屏幕大小進行縮放膊毁,并且根據(jù)顯示結(jié)果,再進行調(diào)整(該出計算可能有出入类早,由于項目中使用定制設(shè)備媚媒,屏幕代銷固定嗜逻,故寫死了自定義縮放比例? overSizeRata=1.8)
-------------------------------代碼完--------------------------------------------------
實際效果:
—————————————————全文完—————————————————————