Openlayers实现图形绘制


Posted in Javascript onSeptember 28, 2020

本文实例为大家分享了Openlayers实现图形绘制的具体代码,供大家参考,具体内容如下

1、新建一个html页面,引入ol.js文件,然后在body中创建一个div标签、label标签和一个select下拉选项卡;

2、代码实现

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title></title>
 <script src="../lib/ol/ol.js"></script>
 <script type="text/javascript">
 window.onload = function () {
  //获取下拉列表框
  var typeSelect = document.getElementById('type');
  //定义一个用来接收绘制对象的对象,方便以后对绘制对象进行添加、移除等操作
  var draw;
 
  //初始化地图对象
  var map = new ol.Map({
  target: 'map',
  layers: [
   new ol.layer.Tile({
   source: new ol.source.OSM()
   })
  ],
  view: new ol.View({
   center: [0, 0],
   zoom: 3
  })
  });
 
  //初始化矢量数据源对象
  //wrapX:Wrap the world horizontally. Default is true. 
  //For vector editing across the -180° and 180° meridians to work properly, this should be set to false
  var source = new ol.source.Vector({ wrapX: false });
  //实例化矢量数据图层
  var vector = new ol.layer.Vector({
  //数据源
  source: source,
  //样式
  style: new ol.style.Style({
   //样式填充
   fill: new ol.style.Fill({
   //填充颜色
   color: 'rgba(37,241,239,0.2)'
   }),
   //笔触
   stroke: new ol.style.Stroke({
   //笔触颜色
   color: '#264df6',
   //笔触宽度
   width:2
   }),
   //图形样式,主要适用于点样式
   image: new ol.style.Circle({
   //半径大小
   radius: 7,
   //填充
   fill: new ol.style.Fill({
    //填充颜色
    color: '#e81818'
   })
   })
  })
  });
 
  //将矢量图层加载到map中
  map.addLayer(vector);
 
  //添加绘图交互的函数
  function addInteraction() {
  //获取当前选择的绘图类型
  var value = typeSelect.value;
  //如果当前选择的绘图类型不为"None"的话,则进行相应绘图操作
  //如果当前选择的绘图类型为"None"的话,则清空矢量数据源
  if (value !== 'None') {
   //如果当前的矢量数据源为空的话,则重新创建和设置数据源
   //因为当你选择的绘图类型为"None"时,会清空数据源
   if (source == null) {
   source = new ol.source.Vector({ wrapX: false });
   vector.setSource(source);
   }
   //geometryFunction变量,用来存储绘制图形时的回调函数
   //maxPoints变量,用来存储最大的点数量
   var geometryFunction, maxPoints;
   //如果当前选择的绘图类型是"Square"的话,则将value设置为Circle
   //然后调用createRegularPolygon()方法
   if (value === 'Square') {
   value = 'Circle';
   //Create a geometryFunction for type: 'Circle' 
   //that will create a regular polygon with a user specified number of sides and start angle instead of an ol.geom.
   //根据圆来创建一个四边形
   geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
   } else if (value === 'Rectangle') {
   //如果当前选择的绘图类型是"Square"的话,则将value设置为LineString
   value = 'LineString';
   //设置最大点数为2
   maxPoints = 2;
   geometryFunction = function (coordinates, geometry) {
    //如果geometry对象不存在或者为空,则创建
    if (!geometry) {
    geometry = new ol.geom.Polygon(null);
    }
    //开始点的坐标
    var start = coordinates[0];
    //结束点的坐标
    var end = coordinates[1];
    //根据开始坐标和结束坐标设置绘图点坐标
    geometry.setCoordinates([
    [start, [start[0], end[1]], end, [end[0], start[1]], start]
    ]);
    return geometry;
   };
   }
 
   //将交互绘图对象赋给draw对象
   //初始化交互绘图对象
   draw = new ol.interaction.Draw({
   //数据源
   source: source,
   //绘制类型
   type: value,
   //回调函数
   //Function that is called when a geometry's coordinates are updated
   geometryFunction: geometryFunction,
   //最大点数
   maxPoints: maxPoints
   });
   //将draw对象添加到map中,然后就可以进行图形绘制了
   map.addInteraction(draw);
  } else {
   //清空矢量数据源
   source = null;
   //设置矢量图层的数据源为空
   vector.setSource(source);
  }
  }
 
  //当绘制类型下拉列表框的选项发生改变时执行
  typeSelect.onchange = function (e) {
  //从map中移除交互绘图对象
  //如果不移除,则会在下拉列表框选项发生改变时再次进行绘制时,保留上一次的draw对象
  map.removeInteraction(draw);
  //执行添加绘图交互的函数
  addInteraction();
  };
  //添加绘图交互的函数
  //此处是为保证刷新页面后,仍然能够根据下拉列表框框的选项进行图形绘制
  addInteraction();
 };
 </script>
</head>
<body>
 <div id="menu">
 <label>几何图形绘制:</label>
 <select id="type">
  <option value="None">无</option>
  <option value="Point">点</option>
  <option value="LineString">线</option>
  <option value="Polygon">多边形</option>
  <option value="Circle">圆</option>
  <option value="Square">正方形</option>
  <option value="Rectangle">长方形</option>
 </select>
 </div>
 <div id="map"></div>
</body>
</html>

3、结果展示

绘制点图形

Openlayers实现图形绘制

绘制线图形

Openlayers实现图形绘制

绘制多边形

Openlayers实现图形绘制

绘制圆形

Openlayers实现图形绘制

绘制正方形

Openlayers实现图形绘制

绘制矩形

Openlayers实现图形绘制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
js select常用操作控制代码
Mar 16 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
JavaScript的RequireJS库入门指南
Jul 01 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
Bootstrap table的使用方法
Nov 02 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
jQuery使用动画队列自定义动画操作示例
Jun 16 jQuery
详解Webpack多环境代码打包的方法
Aug 03 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 #Javascript
Openlayers实现地图全屏显示
Sep 28 #Javascript
Openlayers学习之加载鹰眼控件
Sep 28 #Javascript
Openlayers显示地理位置坐标的方法
Sep 28 #Javascript
Openlayers学习之地图比例尺控件
Sep 28 #Javascript
Openlayers实现地图的基本操作
Sep 28 #Javascript
TypeScript 运行时类型检查补充工具
Sep 28 #Javascript
You might like
五个PHP程序员工具
2008/05/26 PHP
Php注入点构造代码
2008/06/14 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
vue实现简单全选和反选功能
2020/09/15 Javascript
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
python实时监控logstash日志代码
2020/04/27 Python
为什么是 Python -m
2020/06/19 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
信息管理员岗位职责
2013/12/01 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
运动会稿件300字
2014/02/14 职场文书
12岁生日演讲稿
2014/05/14 职场文书
干部选拔任用方案
2014/05/26 职场文书
单位授权委托书范文
2014/08/02 职场文书
班主任先进事迹材料
2014/12/17 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs