天地图专题五:在天地图上绘制电子区域并保存数据

上一文章讲了如何在天地图上显示坐标轨迹。

本文介绍如何在天地图上绘制电子区域(电子范围或电子栅栏),并且,我们要将我们绘制的电子区域的坐标数据保存到数组里,以用于提交到后台,或根据数据来绘制电子区域。    天地图中有绘制多边形的接口跟绘制矩形的接口。 我们就从这里入手。

 

调用接口其实不难。这里稍微要绕一下的地方是如何在调用 绘制多边形接口的同时把我们绘制的多边形的顶点坐标保存下来。


本文我们要实现。

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.mzph.cn/news/396618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信和支付宝的服务器在哪里,手机恢复出厂设置,里面支付宝与微信怎么办?原来数据在这里...

当手机使用一段时间之后&#xff0c;因为硬件落后会出现卡顿、内存不足等情况&#xff0c;这个时候提高手机速度最直接的一个办法就是恢复出厂设置&#xff0c;虽然不能从根源上解决问题&#xff0c;但是还是可以凑合个半年时间的。那么这个时候就出现一个问题&#xff0c;手机…

mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

1、MySQL概述从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案。关系型数据库的选型将以创业公司、互联网行业使用最广泛的MySQL数据为目标&#xff0c;但是MySQL的安装过程和基本使用方法等知识并不在我们讨论的范围内。后续几篇文章我们首先…

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…

ICMP(Internet Control Message Protocol)网际控制报文协议初识

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制报文协议。它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用…

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直接执行汇编指令。所以这个问题就变成&#…

更新和插入的并发问题_mysql经典面试题:如何读写分离?主从原理是啥?同步的延时问题...

面试题你有没有做 MySQL 读写分离&#xff1f;如何实现 MySQL 的读写分离&#xff1f;MySQL 主从复制原理的是啥&#xff1f;如何解决 MySQL 主从同步的延时问题&#xff1f;考点分析高并发这个阶段&#xff0c;肯定是需要做读写分离的&#xff0c;啥意思&#xff1f;因为实际上…

maven建立webapp项目时显示Cannot change version of project facet Dynamic web module to 2.5

为什么80%的码农都做不了架构师&#xff1f;>>> 网上查了很多东西都没啥用&#xff0c;其实直接把这段代码加到web.xml头部&#xff0c;自然就不报错了 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.…

HTTPS 原理解析

http://www.cnblogs.com/zery/p/5164795.html 一 前言 在说HTTPS之前先说说什么是HTTP&#xff0c;HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的&#xff0c;也就是明文的&#xff0c;因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐…

kbmmw 5.0 中的REST 服务

目前关于REST 服务的话题越来越热&#xff0c;kbmmw 在5.0 里面开始支持rest。今天我就试一下kbmmw 的 rest 服务。闲话少说&#xff0c;开始。 老规矩&#xff0c;放上两个kbmMWServer1和 kbmMWHTTPSysServerTransport1两个控件。 设置kbmMWHTTPSysServerTransport1的server 属…

多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计

原文地址 http://cloud.pubs.dbs.uni-leipzig.de/sites/cloud.pubs.dbs.uni-leipzig.de/files/p889-weissman-1.pdf译注&#xff1a;原文发表于 ACM&#xff0c;2009年6月作者Craig D Weissman, CTO, Salesforce.comSteve Bobrowski, Technical Marketing Consultant, Salesfor…

富文本

View Code转载于:https://www.cnblogs.com/baidaye/p/5295448.html

Jenkins持续集成——用户管理

一、基于安全矩阵系统管理 —>Configure Global Security相关权限的作用&#xff1a;其中有一些比较特别的权限&#xff1a;最大的权限是Overall的Administer&#xff0c;拥有该权限可以做任何事情。最基本的权限是Overall的Read&#xff0c;用户必须赋予阅读的权限&#xf…

JAVA Set接口和其常用子类HashSet集合

Set接口&#xff0c;它里面的集合&#xff0c;所存储的元素就是不重复的。 HashSet集合&#xff0c;采用哈希表结构存储数据&#xff0c;保证元素唯一性的方式依赖于&#xff1a;hashCode()与equals()方法。 保证HashSet集合元素的唯一&#xff0c;其实就是根据对象的hashCode和…

python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。加入作者的python学习圈子&#xff1a;1156465813 即可免费获取&#xff0c;资料全在群文件里。资料可以领取包括不限于Python实战演练、PDF电子文档…

第三周作业(一)单元测试

下载vs2015安装包&#xff0c;打开进行安装. 选择颜色 安装完成&#xff0c;需要登录 启动vs 单元测试 1.打开vs界面。 2.新建项目。选择Visual C# 创建类库。 3.点击确定后&#xff0c;进入代码编辑界面。 4.根据书中代码&#xff0c;写入程序&#xff0c;并进行测试。 转载于…

React-Native-lesson

React-Native-lesson 一、React-Native入门指南 lesson2: 认识代码结构lesson4: 学会React-Native布局&#xff08;一&#xff09;lesson6: UI组件lesson8: 自己动手写组件 https://github.com/vczero/toilet React Native完全开发的独立App&#xff0c;支持ES6语法&#xff0c…