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

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

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

?

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


本文我們要實現。

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

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

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

?

步驟:

?

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

?

[javascript]?view plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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運用的內容請關注本系列后續文章。轉載請注明出處

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396618.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql中natural join和inner join的區別

假設有如下兩個表TableA&#xff0c;TableB TableA TableB Column1 Column2 Column1 Column3 1 2 1 3TableA的Column1列名和TableB的Column1列名相同。 SELECT * FROM TableA INNER JOIN TableB USING (Column1) SEL…

微信和支付寶的服務器在哪里,手機恢復出廠設置,里面支付寶與微信怎么辦?原來數據在這里...

當手機使用一段時間之后&#xff0c;因為硬件落后會出現卡頓、內存不足等情況&#xff0c;這個時候提高手機速度最直接的一個辦法就是恢復出廠設置&#xff0c;雖然不能從根源上解決問題&#xff0c;但是還是可以湊合個半年時間的。那么這個時候就出現一個問題&#xff0c;手機…

python線上編輯問題_python django - static文件處理與線上部署測試

static文件相關操作涉及&#xff1a;a. 文件位置與訪問路徑映射b. setting.py與static相關配置STATIC_URLSTATIC_ROOTSTATICFILES_DIRSc. html中對于static文件引用方式d. python manage.py collectstatic1. 開發環境-目錄結構2. setting.py 設置STATIC_URL /static/# STATIC_…

android arcgis 繪制圓_arcgis for android 定位 圓

不多說直接代碼 &#xff0c;群里人共享的方法一&#xff1a; /*** 繪制圓,配合 cleargraphicLayer()清除** param center 圓心* param radius 半徑* param alpha 填充的透明度 0-100* param fillColor 填充的顏色*/public void DrawCircle(Point center, double radius, int a…

CreateSolidBrush

[聲明] WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF color); [功能] 初始化一個指定顏色的畫刷。畫筆可以隨后被選為任何設備上下文的當前刷子。 [參數表] color 畫刷的顏色[返回值] Long&#xff0c;如函數執行成功&#xff0c;就返回指向新畫筆的一個句柄&#xff1b…

mysql insert 不需要日志_MySQL數據庫性能優化(1)「轉」

1、MySQL概述從本文開始我們將討論建立在塊存儲方案之上的關系型數據庫的性能優化方案和集群方案。關系型數據庫的選型將以創業公司、互聯網行業使用最廣泛的MySQL數據為目標&#xff0c;但是MySQL的安裝過程和基本使用方法等知識并不在我們討論的范圍內。后續幾篇文章我們首先…

javascript面試題以及對所涉及到的知識點的總結

前言 這幾天將js方面的知識系統的回顧了一遍&#xff0c;但是當嘗試去做一些面試題時覺得解決問題的能力以及效率還是有所欠缺&#xff0c;在這里特意記錄一下所做的面試題并總結所涉及到的相關知識點。 一、面試題、答案以及總結 1、截取字符串abcdefg的efg var str"abcd…

十代主板改win7_技嘉B460主板UEFI+GPT裝win7|10代CPU裝win7 Bios設置

隨著英特爾十代酷睿處理器的全面上市,針對主流用戶的B460平臺成為了大眾主要關注的目標。作為國際一線板卡品牌的技嘉科技針對十代酷睿的特點,推出了B460主板。這塊主板裝win7、win10都可以,但是在裝win7的過程中USB設備不能使用(本站支持最新的B460/Z490等新主板驅動),需要…

Java swing中的keyListener使用事例

最近在學習Java swing&#xff0c;寫了一個域內聊天室&#xff0c;實現用戶登錄ip,端口號之后&#xff0c;進入聊天窗口聊天&#xff1a; 通過菜單條增加了幾個功能&#xff0c;邊框&#xff0c;字體&#xff0c;顏色和文件傳輸。風格里的樣式都可以通過自己選擇來設置。 介紹以…

「前端」History API與瀏覽器歷史堆棧管理

本文由尚妝前端開發工程師欲休撰寫 本文發表于尚妝博客&#xff0c;歡迎訂閱&#xff01; 移動端開發在某些場景中有著特殊需求&#xff0c;如為了提高用戶體驗和加快響應速度&#xff0c;常常在部分工程采用SPA架構。傳統的單頁應用基于url的hash值進行路由&#xff0c;這種實…

Andrew Ng機器學習(一):線性回歸

1.什么是線性回歸&#xff1f; 用線性關系去擬合輸入和輸出。 設輸入為x&#xff0c;則輸出yaxb。 對于多元的情況yb1a1x1a2x2...anxn。 用θ表示系數&#xff0c;可以寫作&#xff1a; 其中&#xff0c;x01。 2.線性回歸有什么用&#xff1f; 對于連續輸入和輸出的問題&#x…

c++虛析構函數

1.為什么基類的析構函數是虛函數&#xff1f; 在實現多態時&#xff0c;當用基類操作派生類&#xff0c;在析構時防止只析構基類而不析構派生類的狀況發生。 下面轉自網絡&#xff1a;源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代碼 #include<i…

ICMP(Internet Control Message Protocol)網際控制報文協議初識

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制報文協議。它是TCP/IP協議族的一個子協議&#xff0c;用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用…

Linux設置RSA密鑰登錄

一、怎么實現雙向免密登錄 前提 所有服務器/etc/ssh/sshd_config文件的以下三行未被注釋 RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys舉例&#xff1a; 兩臺服務器&#xff1a;192.168.100.134 192.168.1.140免密碼登錄是分用戶的…

python面向對象__str__和__repr__方法

__str__方法 class Animal:def __init__(self,name,color):self.namenameself.colorcolordef __str__(self):resself.name的顏色是self.colorreturn res batAnimal(蝙蝠,黑色) print(蝙蝠的特征:%s % bat) # 蝙蝠的特征:蝙蝠的顏色是黑色 對象輸出或者打印就會執行__str__方法…

函數sprintf真好用

描述&#xff1a;C 庫函數 int sprintf(char *str, const char *format, ...) 發送格式化輸出到 str 所指向的字符串。 聲明&#xff1a; int sprintf(char *str, const char *format, ...) 參數&#xff1a; str -- 這是指向一個字符數組的指針&#xff0c;該數組存儲了 C 字符…

oracle 刪除主鍵_大數據量刪除的思考 4

譯者 湯健 沃趣科技數據庫技術專家出品 沃趣科技在本系列的前一期文章中&#xff0c;我制作了一些圖&#xff0c;突出顯示了按表掃描執行大量刪除操作和按索引范圍掃描執行大量刪除之間的主要區別。根據所涉及的數據模式&#xff0c;選擇正確的策略可能對隨機I/Os的數量、生…

redis 持久化 + 主從復制+ 集群

2019獨角獸企業重金招聘Python工程師標準>>> 一、 Linux 下的 Redis 安裝 && 啟動 && 關閉 && 卸載 http://blog.csdn.net/zgf19930504/article/details/51850594 注&#xff1a;設置 redis.conf bind***.***.*.(127.0.0.1) redis啟動&…

怎么運行c語言_C語言 原來是這樣調用硬件的

大家都知道我們可以使用C語言寫一段程序來控制硬件工作&#xff0c;但你知道其工作原理嗎&#xff1f;網友北極C語言在實際運行中&#xff0c;都是以匯編指令的方式運行的&#xff0c;由編譯器把C語言編譯成匯編指令&#xff0c;CPU直接執行匯編指令。所以這個問題就變成&#…

四、元祖、字典

一、元祖(tuple)&#xff1a;tu(11,"hello",(0,1),[11,"111"],33,) 元祖的特點&#xff1a;元祖中一級元素不可被修改&#xff0c;不能被增加或刪除&#xff0c;多級元素可以被修改&#xff0c;一般寫元祖的時候&#xff0c;推薦在后面添加逗號“&#xff…