天地圖專題五:在天地圖上繪制電子區域並保存數據


上一文章講了如何在天地圖上顯示坐標軌跡。

本文介紹如何在天地圖上繪制電子區域(電子范圍或電子柵欄),並且,我們要將我們繪制的電子區域的坐標數據保存到數組里,以用於提交到后台,或根據數據來繪制電子區域。    天地圖中有繪制多邊形的接口跟繪制矩形的接口。 我們就從這里入手。

 

調用接口其實不難。這里稍微要繞一下的地方是如何在調用 繪制多邊形接口的同時把我們繪制的多邊形的頂點坐標保存下來。


本文我們要實現。

1.繪制多邊形並保存多邊形各頂點的數據到數組中。

2.清除我們繪制的多邊形。

3.根據我們保存的多邊形頂點數據來重現我們剛才清除掉的多邊形。

 

步驟:

 

1.加載地圖。在地圖上設置按鈕。 選擇范圍 清除所畫 查看剛才所畫的。

 

[javascript]  view plain  copy
 
  1. //加載基本地圖和導航  
  2. function loadMap(){  
  3.     try {  
  4.            map = new TMap("mapDiv"); //初始化地圖對象  
  5.             map.centerAndZoom(new TLngLat(103.388611,35.563611), 4);//中國  
  6.         map.enableHandleMouseScroll(); //允許鼠標雙擊放大地圖     
  7.        } catch(err) {  
  8.         alert('圖加載不成功,請稍候再試!你可以先使用其他功能!');  
  9.        }  
  10.    }  

[html]  view plain  copy
 
  1. <div class = 'btn-wrap'>  
  2.     <input type="button" id="btn1" value="選擇范圍"/>  
  3.     <input type="button" id="btn2" value="清除所畫"/>  
  4.     <input type="button" id="btn3" value="查看剛才畫的"/>  
  5. </div>  

2.加載多邊形測距工具。

 

[javascript]  view plain  copy
 
  1. //加載多邊形測距工具。  
  2. function loadPolygonTool(){  
  3.     var config = {  
  4.         strokeColor:"blue", //折線顏色  
  5.         fillColor:"#FFFFFF",    //填充顏色。當參數為空時,折線覆蓋物將沒有填充效果  
  6.         strokeWeight:"3px", //折線的寬度,以像素為單位  
  7.         strokeOpacity:0.5,  //折線的透明度,取值范圍0 - 1  
  8.         fillOpacity:0.5,        //填充的透明度,取值范圍0 - 1  
  9.         showLabel:false             //是否顯示頁面,默認為true.  
  10.     };  
  11.     //創建測面工具對象  
  12.     polygonTool = new TPolygonTool(map,config);  
  13.     //注冊測面工具繪制完成后的事件  
  14.     TEvent.addListener(polygonTool,"draw",onDrawPolygon);  
  15. }  


 


3.繪制多邊形,保存頂點數據。   保存的方法是,當我們點擊按鈕的時候,就給鼠標注冊一個 點擊事件。 繪制多邊形的時候每點擊地圖一次,就調用點擊事件獲取點擊的位置的經緯度坐標保存進數組。  也就一邊繪制多邊形,一邊得到多邊形的頂點坐標。   最后雙擊結束繪制,這個時候,在同一個位置點擊兩次,會獲取到兩個同樣的經緯度,所以要給最后得到的頂點坐標去掉最后兩位。  結束繪制的時候清除地圖的點擊事件。  

 

[javascript]  view plain  copy
 
  1. //繪制多邊形  
  2. function drawPolygon() {   
  3.     polygonTool.clear();//清除所畫的多邊形  
  4.     map.clearOverLays();  
  5.     polygonTool.open();  
  6.     PolygonPoints.length=0;  //清零保存的坐標  
  7.     if(mapclick!=""){  
  8.         TEvent.removeListener(mapclick); //避免加載多次點擊事件  
  9.     }  
  10.   
  11.     mapclick = TEvent.addListener(map,"click",function(p){  
  12.         polygonTool.open();  
  13.         var lnglat = map.fromContainerPixelToLngLat(p);//獲取點擊處的坐標  
  14.         PolygonPoints.push(lnglat.getLng());  
  15.         PolygonPoints.push(lnglat.getLat());  
  16.         if(PolygonPoints.length>20){  
  17.             alert("不能超過10個點!請重新選擇范圍。");  
  18.             polygonTool.close();  
  19.             PolygonPoints.length=0;  
  20.             TEvent.removeListener(mapclick);  
  21.         }  
  22.     });  
  23. }  



 

點擊按鈕選擇范圍  

 

雙擊結束時調用 保存坐標到PolygonPoints中。

 

 

[javascript]  view plain  copy
 
  1. //關閉測面工具時觸發  
  2. function onDrawPolygon(bounds,line)  
  3. {  
  4.     polygonTool.close();  
  5.     PolygonPoints.length=PolygonPoints.length-2;//最后雙擊會把最后一個坐標保存兩次。  
  6.     TEvent.removeListener(mapclick);//關閉單擊事件(保存坐標)  
  7. }  

 

經過上面的步驟就可以 實現繪制 區域,並得到頂點坐標。   很多應用中就可以把得到的坐標提交保存到數據庫去,以備后用了。

本demo中就不保存到后台 ,直接用我們得到的坐標數據把我們剛剛繪制的地圖 重現出來。

 

4.清除地圖。polygonTool.clear();map.clearOverLays();

 

5.根據上面得到的數組重新  調用天地圖api畫出我們剛得到的多邊形狀。

 

[javascript]  view plain  copy
 
  1. function  drawPolygonByPoint(){ //根據點坐標來畫多邊形  
  2.     map.removeOverLay(polygon);  
  3.     var points = [];  
  4.     if(PolygonPoints.length!=0){  
  5.         for(var i=0;i<PolygonPoints.length;i=i+2){  
  6.             points.push(new TLngLat(PolygonPoints[i],PolygonPoints[i+1]));  
  7.         }  
  8.         //創建面對象  
  9.         polygon = new TPolygon(points,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5, fillOpacity:0.5});  
  10.             //向地圖上添加面  
  11.             map.addOverLay(polygon);  
  12.         }else{  
  13.             alert("沒有選擇區域!");  
  14.         }  
  15.   
  16.     }  

6.按鈕事件委托。

 

[javascript]  view plain  copy
 
  1. //給幾個按鈕添加點擊事件。事件委托。  
  2. $(".btn-wrap").click(function(event) {  
  3.     var target = event.target;  
  4.     var id = target.id;  
  5.     switch(id){  
  6.         case 'btn1':  
  7.         polygonTool.close();  
  8.         TEvent.removeListener(mapclick);  
  9.         drawPolygon();  
  10.         break;  
  11.         case 'btn2':  
  12.         polygonTool.close();  
  13.         TEvent.removeListener(mapclick);  
  14.         polygonTool.clear();  
  15.         map.clearOverLays()  
  16.         break;  
  17.         case 'btn3':  
  18.         polygonTool.close();  
  19.         TEvent.removeListener(mapclick);  
  20.         drawPolygonByPoint();  
  21.         break;  
  22.     }  
  23. });  


 

 

天地圖繪制多邊形效果圖:

 

 

到這里,我們就實現了在天地圖上繪制多邊形狀。  繪制矩形也很類似。  其實是很簡單的。

唯一值得一提的大概就是 在繪制的時候前添加 了點擊事件來保存頂點坐標。

 

項目下載地址:https://github.com/liusaint/tiandituMap

演示地址:http://runningls.com/demos/tianditu/index.html?to=loadarea

更多天地圖api運用的內容請關注本系列后續文章。轉載請注明出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM