实现OpenLayers交互绘制

这快内容是临时添加进来的,算是提前写完这篇博文,可能存在问题,请大家批评指正,谢谢!

这一部分主要是讲解利用按钮在OpenLayers上进行交互绘制的一个实现过程,代码略微粗糙,后面WebGIS专题中会有更详细的讲解,后续也会慢慢更新WebGIS专题的教程。

一、窗体实现

控件代码(CSS样式自行设计)

<div class="draw-polygon"><label style="font-weight: bold;">几何图形类型:</label><select id="type"><option value="None" selected="selected">无</option><option value="Point">点</option><option value="LineString">线</option><option value="Polygon">多边形</option></select><button class="tool-button" id="draw-element" onclick="drawFeature()">绘制</button>
</div>

添加完成css代码之后样式如下:

二、代码实现

2.1 建立全局字段
  1. 这里建立全局字段typeSelect通过js提供的getElementById的方法获得select标签下option的选择值
  2. 建立draw变量,将绘制的内容存放在draw中通过map的对象添加近地图
  3. 实例化矢量数据源作为source
var typeSelect = document.getElementById('type');
var draw;
var source = new ol.source.Vector();
2.2 设置形状样式
// 设置样式
var vectorLayer = new ol.layer.Vector({source: source,style: new ol.style.Style({fill: new ol.style.Fill({color: '#0055ff'}),stroke: new ol.style.Stroke({color: '#00c033',width: 2}),image: new ol.style.Circle({radius: 7,fill: new ol.style.Fill({color: '#00c033'})})})})
map.addLayer(vectorLayer);
2.3 建立交互方法

建立addInteraction方法,传入的参数为typeValue,在其中调用OpenLayers的interaction的Draw接口传入source和typeValue并赋值给draw变量,最后调用map的addInteraction方法将draw变量传入。

function addInteraction(typeValue) {draw = new ol.interaction.Draw({source: source,type: typeValue});map.addInteraction(draw);
}
2.4 按钮点击事件

建立按钮点击事件drawVector()并在其中建立变量typeValue 通过typeSelect的value属性获得,添加if语句判断是否为None,不为None则调用map的removeInteraction()方法清除已经存在的数据,并调用addInteraction(draw)方法绘制。为None则清除数据。

// 点击事件方法
function drawVector() {var typeValue = typeSelect.value;if (typeValue !== 'None') {map.removeInteraction(draw);addInteraction(typeValue);} else {// The callback method clearssource.clear()}
}
2.5 最终实现效果图如下

三、附js完整源码

3.1 实现方式一
<!-- 加载地图js -->
<script type="text/javascript">var typeSelect = document.getElementById('type');var draw;var source = new ol.source.Vector();// 设置样式var vectorLayer = new ol.layer.Vector({source: source,style: new ol.style.Style({fill: new ol.style.Fill({color: '#0055ff'}),stroke: new ol.style.Stroke({color: '#00c033',width: 2}),image: new ol.style.Circle({radius: 7,fill: new ol.style.Fill({color: '#00c033'})})})})map.addLayer(vectorLayer);function addInteraction(typeValue) {draw = new ol.interaction.Draw({source: source,type: typeValue});map.addInteraction(draw);}// 点击事件方法function drawVector() {var typeValue = typeSelect.value;if (typeValue !== 'None') {map.removeInteraction(draw);addInteraction(typeValue);} else {// The callback method clearssource.clear()}}
</script>
3.2 实现方式二

这个实现方式有一个问题就是绘图的时候转点处会带有点样式,目前无法排除

<!-- 加载地图js -->
<script type="text/javascript">var map = init("map"); // 初始化地图加载// var extent = map.getView().calculateExtent(map.getSize());loadLayerControl(map, 'layer-tree');var typeSelect = document.getElementById('type');var draw;var source = new ol.source.Vector();// 设置样式var vectorLayer = new ol.layer.Vector({source: source,style: new ol.style.Style({fill: new ol.style.Fill({color: '#0055ff'}),stroke: new ol.style.Stroke({color: '#00c033',width: 2}),image: new ol.style.Circle({radius: 7,fill: new ol.style.Fill({color: '#00c033'})})})})map.addLayer(vectorLayer);function addInteraction() {map.removeInteraction();var typeValue = typeSelect.value;if (typeValue !== 'None'){draw = new ol.interaction.Draw({source: source,type: typeValue});map.addInteraction(draw);} else {source.clear();}}// 点击事件方法function drawVector() {addInteraction();}</script>

OpenLayers实现交互绘制点线面相关推荐

  1. openlayers入门添加百度地图绘制点线面

    1.构建一个地图容器 <div id="map" class="map"></div> 2.创建一个地图 2.1初始化一个openlay ...

  2. OpenLayers 6 代码绘制/draw交互组件绘制两种方式绘制椭圆过程详解

    引言 OpenLayers可以通过代码绘制多种几何形状,也可以通过draw类型的交互组件绘制几何形状,官方实例提供了类如圆.折线.矩形.星形等方法.除此之外,椭圆这种图形其实也是非常常见的几何图形,但 ...

  3. openlayers6 第一篇绘制点线面

    小白一枚,只是单纯纪录,不喜勿喷,希望能帮到刚入门的大家 //新建点线面图层addDrawLayer() {this.draw_vector = new VectorLayer({source: th ...

  4. Vue+Openlayer中测距测面和绘制点线面组件-LjMeasureDraw4326和LjMeasureDraw3857

    地理坐标系4326 效果图: 首先下载turf.js: cnpm i -S @turf/turf 全局引入turf.js //引入turf.js import * as turf from '@tur ...

  5. vue 项目使用 openlayers根据半径绘制圆形、绘制多边形

    vue 项目使用 openlayers根据半径绘制圆形.绘制多边形 这个地方我就简单点写吧,因为一些东西比较乱,有的包啥的就按照官网API开发文档根据报错提示自己添加就可以了,我这个地方就不重复写了. ...

  6. html语言填充没有只有描边,HTML5 Canvas笔记——交互绘制文本(描边、填充、阴影、渐变填充、图案填充、文本的属性设置)...

    (1)文本的描边.填充.阴影 (2)文本的渐变填充 (3)文本的图案填充 (4)文本的属性设置及效果呈现 交互绘制文本.html 交互绘制文本 body { background: #eeeeee; ...

  7. OpenCV中鼠标交互-绘制矩形框

    OpenCV中鼠标交互-绘制矩形框 ·具体流程: 1.绑定回调函数 2.在回调函数中检测触发的事件 3.根据不同事件做出不同动作 一.绑定回调函数 cv2.setMouseCallback('orig ...

  8. Python交互绘制Julia集

    matplotlib提供了交互操作的功能,比如,只要绑定button_press_event,就可以在点击图像时,触发相应的事件. import matplotlib.pyplot as plt im ...

  9. 计算机图形学实验四 OpenGL的鼠标交互绘制

    一.实验目的 1.掌握OpenGL的鼠标按钮响应函数. 2.掌握OpenGL的鼠标移动响应函数. 3.进一步巩固OpenGL的基本图元绘制基础. 二.实验内容 1.鼠标画草图--实现鼠标点到哪,线就画 ...

最新文章

  1. 考夫曼:破解大脑代码并创建真正的人工智能
  2. Escape字符总结
  3. 应用负载均衡之LVS(三):ipvsadm命令
  4. php多态实现,PHP面向对象之旅:PHP的多态
  5. set / ... 去重的方法
  6. python学习笔记四——数据类型
  7. 一步步编写操作系统 60 cpu的IO特权级2 什么是驱动程序
  8. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
  9. Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
  10. 安全基础知识 最强0到33600端口详解(5)
  11. SpringCloud工作笔记089---SpringBoot中Mybatis使用Condition_Criteria如何筛选日期类型数据
  12. 开源的代理服务器HAProxy 易遭严重的 HTTP 请求走私攻击
  13. 智慧城市数据采集的四大难点分析及解决措施
  14. 如何看公司的财务数据
  15. 能韬光养晦,是因为面前有苏联顶着,苏联没了就不可能了
  16. Webpack SourceMap快速定位错误位置
  17. 新视野大学英语第三版 读写(2020.12.05)
  18. 人要像鹰一样重生、蜕变、成长
  19. 女孩与头发2005.9.8
  20. python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号

热门文章

  1. Macaw:让你像处理图片那样写Web代码
  2. win8系统笔记本装成win7
  3. 石油钻井信息智能处理平台
  4. python语言特点以下错误的是_关于Python语言的特点,以下选项中描述错误的是( )。_学小易找答案...
  5. (数据中心)-传统数据中心机房与微模块机房建设的比较
  6. 回文数(牛客练习赛71)题解
  7. js判断是否为对象的几种方法
  8. 分布式搜索引擎search.minty dowser类聚引擎和larbin蜘蛛
  9. java备份mysql数据库
  10. 经典电影收藏下载(长期有效)