版权声明:本文为博主原创文章,转载请注明出处。

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

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

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

本文我们要实现。

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. mapclick = TEvent.addListener(map,"click",function(p){
  11. polygonTool.open();
  12. var lnglat = map.fromContainerPixelToLngLat(p);//获取点击处的坐标
  13. PolygonPoints.push(lnglat.getLng());
  14. PolygonPoints.push(lnglat.getLat());
  15. if(PolygonPoints.length>20){
  16. alert("不能超过10个点!请重新选择范围。");
  17. polygonTool.close();
  18. PolygonPoints.length=0;
  19. TEvent.removeListener(mapclick);
  20. }
  21. });
  22. }

点击按钮选择范围

双击结束时调用 保存坐标到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. }

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运用的内容请关注本系列后续文章。转载请注明出处

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

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

    上一文章讲了如何在天地图上显示坐标轨迹. 本文介绍如何在天地图上绘制电子区域(电子范围或电子栅栏),并且,我们要将我们绘制的电子区域的坐标数据保存到数组里,以用于提交到后台,或根据数据来绘制电子区域. ...

  2. java使用Graphics在图片上绘制形状

    开发中遇到一个需求,就是在抓拍的图片上按照点位画出有效区域,并且区域有正选和反选,所以需要填充多边形内和多边形外. 花了些时间看源码找资料,搞出了个demo 1.图片上绘制多边形区域并填充颜色 /** ...

  3. 高德地图 SDK 的应用 01:绘制多边形区域图

    遇到一需求:在高德地图上绘制多边形区域 还能咋样,翻一翻 高德地图sdk参考手册,发现了这样一个方法:[addPolygon(PolygonOptions options)] public final ...

  4. 【图像算法】彩色图像分割专题五:提取彩色图像上特定色彩

    [图像算法]彩色图像分割专题五:提取彩色图像特定色彩 SkySeraph Jun 8th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Late ...

  5. python如何做散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  6. python画三维温度散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  7. python绘制散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  8. python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  9. 开发指南专题五:JEECG微云快速开发平台代码生成器

    开发指南专题五:JEECG微云快速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,需要先配置好本机的maven环境,并在eclipse中安装好m2ecl ...

最新文章

  1. Q:文件或目录的权限是什么意思?
  2. java读取文件效率问题
  3. linux 挂载 nfs 权限,linux – 如何允许写入已挂载的NFS分区
  4. [EMC++] Item 8. Prefer nullptr to 0 and NULL
  5. collection集合 地址_java.util包下的集合
  6. Leetcode每日一题:52.N-Queens II(N皇后Ⅱ)
  7. 茅侃侃,80后技术人与你同在 | 一周业界事
  8. 组件中使用_尚德高效组件全线投入壳牌首个光伏项目中使用
  9. 网络爬虫--抓取图片_vortex_新浪博客
  10. 办公室电脑如何共享计算机,办公室电脑如何互相共享文件?
  11. 算法提高 7-2求arccos值
  12. 【开明关系系列之1】人脉关系大检阅
  13. 使用cmd命令行查看Windows系统激活信息
  14. Python必会的12道面试题,看看你会几题?
  15. win10进入安全模式和退出安全模式
  16. 单点登录(SSO)解决方案介绍
  17. wish新店快速出单的方法
  18. SQL查询优化——表分区
  19. 计算机组装走线,DIY电脑装机教程 走背线方法图文教程
  20. 【系统性学习】Linux Shell常用命令

热门文章

  1. Java——网络编程练习
  2. oracle 查询不能重复,oracle – 如何防止在选择查询中选择重复行?
  3. java查看jdk源码_Java-如何查看JDK源码
  4. c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)
  5. gcc -l参数和-L参数
  6. C语言实现单链表操作
  7. KMP 串的模式匹配 (25 分)
  8. 详细解释signal和sigaction以及SIG_BLOCK
  9. 【大牛疯狂教学】深入拆解java虚拟机百度云
  10. 利用python脚本程序监控文件被修改