内容概览

1.openlayers6结合geoserver利用WFS服务实现图层编辑功能
2.源代码demo下载

效果图如下:

本篇主要是参照openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的,openlayers6通过调用geoserver发布的地图服务WFS来达到图层编辑记录的目的。与GeoServer的WFS进行基于Rest交互关键就在于请求参数,值得注意的是这些请求最好采用POST方法发送。查询可以采用json,但增加,删除,修改都只能采用XML形式Transaction

  • 部分核心代码,完整的见源码demo下载
//叠加geoserver发布的wms图层
var geoserverUrl = 'http://localhost:8080/geoserver/WebGIS';
var wmsSource = new TileWMS({ url: geoserverUrl+'/wms', params: {'LAYERS': 'WebGIS:testLayer', 'TILED': true}, serverType: 'geoserver', crossOrigin: 'anonymous'
}); var wmsLayer = new TileLayer({ source: wmsSource
}); var view = new View({ projection: 'EPSG:4326', //center: [0, 0], //zoom: 2 center: [113.90271877, 22.95186415], zoom: 13
}) var map = new Map({ target: 'map', layers: [ new TileLayer({ source: new XYZ({ //url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png' url: 'http://cache1.arcgisonline.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}' }) }), wmsLayer ], overlays: [overlay], view: view
}); //监听地图鼠标事件
map.on('singleclick',function(e) { if (e.dragging) { return; } var feature =map.forEachFeatureAtPixel(e.pixel, function(feature) { return feature; }); //console.log('feature',feature); //console.log('e',e); if(feature==undefined){ //隐藏气泡窗口 overlay.setPosition(undefined); closer.blur(); } var viewResolution = /** @type {number} */ (view.getResolution()); var url = wmsSource.getFeatureInfoUrl( e.coordinate, viewResolution, 'EPSG:4326', {'INFO_FORMAT': 'application/json'}); if (url) { fetch(url) .then(function (response) { return response.json(); }) .then(function (json) { //document.getElementById('info').innerHTML = html; console.log('json',json); var coordinate = e.coordinate; if(json.features.length>0){ var properties = json.features[0].properties; var id = json.features[0].id; var geometry = json.features[0].geometry; //var elements = '名称:'+properties.estate_num+'</br>备注:'+properties.holder_nam+'</br><button type="button" id="editBtn">编辑</button>'; var elements = '<span>名称:</span><input type="text" id="estate_num"  value = "'+properties.estate_num+'" /></br><span>备注:</span><input type="text" id="holder_nam" value = "'+properties.holder_nam+'"  /></br><button type="button" id="editBtn">编辑</button>'; content.innerHTML = elements; overlay.setPosition(coordinate); $("#editBtn").unbind("click"); $("#editBtn").click(function(){ //console.log('编辑按钮点击事件');  if(id) { //构造polygon  var polygon = ''; var data = geometry.coordinates[0][0]; for(var i=0;i<data.length;i++){ var item = data[i]; polygon += item[0] + ',' + item[1] + ' ' ; } polygon += data[0][0] + ',' + data[0][1]; //只编辑属性信息,默认图形信息不变,感兴趣的,读者你们可自行编辑图形变化信息,这里预留图形参数传值了的 editLayers(id,polygon,$("#estate_num").val(),$("#holder_nam").val(),callbackEditLayersWFSService); } });  } }); } }) /*图层编辑 *@method editLayers *@param polygon 图形 *@param fid 记录fid值 *@param fieldValue1 字段1值 *@param fieldValue2 字段2值 *@return callback */ function editLayers(fid,polygon,fieldValue1,fieldValue2, callback){ var xml = '<wfs:Transaction service="WFS" version="1.0.0"    xmlns:opengis="http://webgis.com"     xmlns:wfs="http://www.opengis.net/wfs"    xmlns:ogc="http://www.opengis.net/ogc"    xmlns:gml="http://www.opengis.net/gml"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.opengis.net/wfs   http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">'; xml += '<wfs:Update typeName="WebGIS:testLayer">'; xml += '<wfs:Property>'; xml += '<wfs:Name>the_geom</wfs:Name>'; xml += '<wfs:Value>'; xml += '<gml:LineString>'; xml += '<gml:coordinates decimal="." cs="," ts=" ">' + polygon + '</gml:coordinates>'; xml += '</gml:LineString>'; xml += '</wfs:Value>'; xml += '</wfs:Property>'; xml += '<wfs:Property>'; xml += '<wfs:Name>estate_num</wfs:Name>'; xml += '<wfs:Value>' + fieldValue1 + '</wfs:Value>'; xml += '</wfs:Property>'; xml += '<wfs:Property>'; xml += '<wfs:Name>holder_nam</wfs:Name>'; xml += '<wfs:Value>' + fieldValue2 + '</wfs:Value>'; xml += '</wfs:Property>'; xml += '<ogc:Filter>'; xml += '<ogc:FeatureId fid="' + fid + '"/>'; xml += '</ogc:Filter>'; xml += '</wfs:Update>'; xml += ' </wfs:Transaction>'; $.ajax({ url: geoserverUrl+'/wfs', async: true, data:xml, type:'Post', contentType: 'text/xml', success(result) { callback(result); }, error(err) { console.log(err); } }) } /* * 图层编辑回调函数 */ function callbackEditLayersWFSService(data){ console.log('data',data); //刷新图层 clearMap(); wmsSource.refresh(); } function clearMap(){ //隐藏气泡窗口 overlay.setPosition(undefined); closer.blur();
} 

几点说明:
1.WebGIS,geoserver工作区;
2.testLayer,操作图层名称;
3.fid,操作图层的默认固有属性字段。
4.estate_num,holder_nam,操作图层属性字段。
图层编辑回调函数,操作成功或者失败,可以在网页的控制台网络看请求结果

完整的源码demo下载在链接文章尾部

openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载) - 小专栏​xiaozhuanlan.com

对本专栏感兴趣的话,可以关注一波

GIS之家店铺:GIS之家
GIS之家源码咨询:GIS之家webgis入门开发系列demo源代码咨询

Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...相关推荐

  1. arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  2. cesium 经纬度绘制点_cesium结合geoserver利用WFS服务实现图层新增(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  3. 酷毙了!三种风格的全屏幻灯片效果【附源码下载】

    今天,我们想向您展示如何创建平铺背景图像的幻灯片效果.其灵感来自于国外的一个工作室网站(围观),这个网站充满了各种有趣和创意效果,一定记得去看看. 这个幻灯片效果是由四个区域的独立移动构成,通过画面分 ...

  4. Android 利用广播实现黑名单【指定号码】的短信的拦截 附源码下载链接

    Android 利用广播实现指定号码的短信的拦截 根据最近的学习内容,今天实现了利用广播进行指定号码的拦截 步骤: ①.写一个数据库的帮助类,实现对数据库的创建,总共创建两个数据库psms(受保护的短 ...

  5. Android可滑动画板,Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 xmlns:tools=" ...

  6. php写字板代码,Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 xmlns:tools=" ...

  7. Qt利用avilib实现录屏功能_利用 dogtail 快速进行 GUI 自动化测试

    最近在协助测试小组做一些 GUI 方面的自动化测试,主要使用了 Python 中的 dogtail 框架,以及 Qt 中的 Accessibility 技术. 这个东西很有意思,可以让 GUI 的测试 ...

  8. Qt利用avilib实现录屏功能,生成avi文件

    环境: Qt + vs2013 + avilib demo下载:https://download.csdn.net/download/birenxiaofeigg/12087607 界面 开始录制: ...

  9. Qt+ffmpeg+avilib实现录屏录音的功能(包含合成)

    骤: 1.录屏 思路:子线程进行截屏的方式进行录制,再使用avilib将截取到的图片保存为视频文件. 参考文章:avilib库的使用 - Ron's个人页面 - OSCHINA - 中文开源技术交流社 ...

最新文章

  1. 剑指offer:字符流中第一个不重复的字符
  2. OpenGL画矩形函数:glRectf,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标
  3. 题解报告:hdu 4907 Task schedule
  4. WPF企业内训全程实录(下)
  5. java 字符串转dom对象_xml类型的字符串转换为Dom对象
  6. 几十种编程语言说Hello World
  7. Hibernate获取'上一条'和'下一条'记录
  8. java调用一个外部url_java 从程序内部调用外部url/接口
  9. 仅用钩子实现QQ桌球瞄准器
  10. 在Flex/Flash项目中使用TLF(Text Layout Framework)的经验分享
  11. 白平衡算法---色温曲线
  12. MT【305】丹德林双球
  13. python数据分析002—python基础语法
  14. 查找和排序方法归类----C和C++
  15. 网络安全“攻防战”:“魔”“道”大盘点
  16. 时间加减计算器_初级会计职称考试不让带计算器?!手把手教你使用机考系统计算器,再不看就晚了!...
  17. 流媒体协议之WebRTC实现p2p视频通话(二)
  18. NVIDIA GTC 明日如约举行,持续 15 天,三万人已报名
  19. Spring程序员的春天
  20. String知识点-这一篇全部了解

热门文章

  1. c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序
  2. Code First :使用Entity. Framework编程(6) ----转发 收藏
  3. 898 C. Phone Numbers
  4. redis -- 学习
  5. 201671010144 2016-2017 《java程序设计》--对象与类!
  6. Dynamic programming solving ULS
  7. 详解AST抽象语法树
  8. 深度:关于Linux内核最硬核的文章
  9. LCD 设备驱动框架分析及核心结构
  10. python队列只能一个个读取吗_python队列Queue的详解