http://blog.csdn.net/gisshixisheng/article/details/46054949

概述:

在前面有篇博文讲述了基于Arcgis for js和wkt实现在线数据的采集和编辑功能,在本文讲述如何在openlayers实现类似的功能。上一篇博文的地址为:

http://blog.csdn.net/gisshixisheng/article/details/44310765

思路:

前后台的数据交互以wkt的形式,加载已完成对象用wkt,对象更新完成之后将geometry转换为wkt传给后台,将信息保存到数据库中。实现在线编辑主要为OpenLayers.Control.ModifyFeature。

实现:

1、新建vector图层

[javascript] view plaincopy print?
  1. var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
  2. renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
  3. vectors = new OpenLayers.Layer.Vector("Vector Layer", {
  4. renderers: renderer
  5. });
  6. map1.addLayer(vectors);

2、添加wkt对象

[javascript] view plaincopy print?
  1. var wkts = [
  2. "POINT(107.5758285931443 29.7822116459692)",
  3. "LINESTRING(120.18304604073 30.3305841465568,108.805692477062 32.0850224203499)",
  4. "POLYGON((102.797302689433 36.5936423859273,105.519115206186 29.4789248520356,100.346180647351 19.9699202912212))"
  5. ];
  6. var wktFormat = new OpenLayers.Format.WKT();
  7. for(var i= 0,dl=wkts.length;i<dl;i++){
  8. var geometry = wktFormat.read(wkts[i]);
  9. vectors.addFeatures(geometry);
  10. }
  11. }

3、添加编辑控件

[javascript] view plaincopy print?
  1. var editor = new OpenLayers.Control.ModifyFeature(vectors);
  2. map1.addControl(editor);
  3. editor.activate();

4、给vector添加编辑完成事件

[javascript] view plaincopy print?
  1. vectors.events.on({
  2. "afterfeaturemodified":editEnd
  3. });
  4. function editEnd(evt){
  5. if(evt.modified){
  6. console.log("发生变化");
  7. var geom = evt.feature.geometry;
  8. var wkt = new OpenLayers.Format.WKT(geom);
  9. console.log(wkt.toString());
  10. }
  11. else{
  12. console.log("未发生变化");
  13. }
  14. }

实现完整代码如下:

[html] view plaincopy print?
  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title>openlayers map</title>
  6. <link rel="stylesheet" href="http://localhost/olapi/theme/default/style.css" type="text/css">
  7. <style>
  8. html, body{
  9. padding:0;
  10. margin:0;
  11. height:100%;
  12. width:100%;
  13. overflow: hidden;
  14. font-size: 12px;
  15. }
  16. #map1{
  17. width: 100%;
  18. height: 100%;
  19. float: left;
  20. border-right: 1px solid #000000;
  21. }
  22. </style>
  23. <script src="http://localhost/olapi/OpenLayers.js"></script>
  24. <script src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>
  25. <script src="http://localhost/jquery/jquery-1.8.3.js"></script>
  26. <script>
  27. var map1, vectors;
  28. OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
  29. $(function(){
  30. var bounds = new OpenLayers.Bounds(
  31. 73.45100463562233, 18.16324718764174,
  32. 134.97679764650596, 53.531943152223576
  33. );
  34. var options = {
  35. controls: [],
  36. maxExtent: bounds,
  37. maxResolution: 0.2403351289487642,
  38. projection: "EPSG:4326",
  39. units: 'degrees'
  40. };
  41. map1 = new OpenLayers.Map('map1', options);
  42. map1.addLayer(getWms("china"));
  43. map1.addControl(new OpenLayers.Control.Zoom());
  44. map1.addControl(new OpenLayers.Control.Navigation());
  45. map1.zoomToExtent(bounds);
  46. addVectors();
  47. addEditor();
  48. });
  49. function getWms(layer){
  50. return new OpenLayers.Layer.WMS(
  51. "Geoserver layers - Tiled",
  52. "http://localhost:8081/geoserver/lzugis/wms",
  53. {
  54. "LAYERS": layer,
  55. "STYLES": '',
  56. format: 'image/png'
  57. },
  58. {
  59. buffer: 0,
  60. displayOutsideMaxExtent: true,
  61. isBaseLayer: true,
  62. yx : {'EPSG:4326' : true}
  63. }
  64. );
  65. }
  66. function addVectors(){
  67. var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
  68. renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
  69. vectors = new OpenLayers.Layer.Vector("Vector Layer", {
  70. renderers: renderer
  71. });
  72. map1.addLayer(vectors);
  73. vectors.events.on({
  74. "afterfeaturemodified":editEnd
  75. });
  76. var wkts = [
  77. "POINT(107.5758285931443 29.7822116459692)",
  78. "LINESTRING(120.18304604073 30.3305841465568,108.805692477062 32.0850224203499)",
  79. "POLYGON((102.797302689433 36.5936423859273,105.519115206186 29.4789248520356,100.346180647351 19.9699202912212))"
  80. ];
  81. var wktFormat = new OpenLayers.Format.WKT();
  82. for(var i= 0,dl=wkts.length;i<dl;i++){
  83. var geometry = wktFormat.read(wkts[i]);
  84. vectors.addFeatures(geometry);
  85. }
  86. }
  87. function addEditor(){
  88. var editor = new OpenLayers.Control.ModifyFeature(vectors);
  89. map1.addControl(editor);
  90. editor.activate();
  91. }
  92. function editEnd(evt){
  93. if(evt.modified){
  94. console.log("发生变化");
  95. var geom = evt.feature.geometry;
  96. var wkt = new OpenLayers.Format.WKT(geom);
  97. console.log(wkt.toString());
  98. }
  99. else{
  100. console.log("未发生变化");
  101. }
  102. }
  103. </script>
  104. </head>
  105. <body>
  106. <div id="map1"></div>
  107. </body>
  108. </html>

实现效果:

编辑状态
编辑完成

转载于:https://www.cnblogs.com/telwanggs/p/6972787.html

(转)openlayers实现在线编辑相关推荐

  1. java 流转文件_java 实现 word 文档的在线编辑以及流转

    用 pageoffice 实现文档的在线编辑以及文档流转 1: 流程 用修改无痕迹模式起草文件,各个领导批注自己意见的时候使用强制留痕模式打开,文员清稿的时候用核稿模式打开,还有最后只读模式打开发布的 ...

  2. project 模板_施工进度计划表不会做?18个横道图自动生成模板,直接在线编辑...

    施工进度计划表不会做?18个横道图自动生成模板,直接在线编辑 对于工程建设来说,施工进度横道图在工程进度计划制定.项目管理等方面被广泛的应用,也是管理人员必须要掌握的技能,在编制的时候还是很繁琐的,需 ...

  3. java 网站源码 四套模版 兼容手机平板PC 在线编辑模版 freemaker 静态引擎

    前台: 支持四套模版, 可以在后台切换 点击:获取地址 QQ 313596790 官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JST ...

  4. 工具 左侧服务列表_协作办公时代,在线编辑文档工具,安排!

    小组合作的工作,如果能够在线编辑就方便多了,小伙伴们有没有这样想过呢?今天叔白就给大家介绍一款能够在线编辑文档的工具,帮助大家提高工作效率,还想说一句,阿里出品的工具,真香! 语雀 「语雀」是一个文档 ...

  5. 在线html差错,易查分在线编辑功能:发现错误随时修改,不用再重新上传表格!

    原标题:易查分在线编辑功能:发现错误随时修改,不用再重新上传表格!

  6. wordweb在线编辑_使用WordWeb享受按需词典和词库功能

    wordweb在线编辑 Run across an unusual word or need a synonym for a word quickly?  Usually that means ope ...

  7. java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

    CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本.CMS的功能并不只限于 ...

  8. 借助office web apps实现在线预览和在线编辑

    我所有的代码都是用go语言编写,你可以直接编译后使用,不用再有其他的操作. 最近项目实在太忙,这几天才有时间,这次是重头戏,要好好琢磨一下怎么写,才能更简洁的说清楚一切. 上一节,我们已经安装完毕,安 ...

  9. Office文档在线预览/在线编辑解决方案 - 毕升OfficeAPI说明

    毕升OfficeAPI说明 毕升OfficeAPI集成.onlyoffice api集成 使用毕升Office编辑,预览文件的过程 Api 具体说明 HMAC-MD5签名 callURL返回值 如何检 ...

最新文章

  1. CIKM 2020 | 如何更为合适地评测推荐算法? Top-N物品推荐算法评测设置回顾
  2. 解决方法:ORA-24324 未初始化服务句柄
  3. flask的上下文的机理与应用(转载+整理)
  4. 【算法习作】荷兰国旗问题
  5. 前端面试---Vue部分考点梳理
  6. 指定查询条件,查询对应的集合List(单表)
  7. 解读OC中的load和initialize
  8. IIS URLReWrite URL 重写模块 下载地址
  9. 《Effective Debugging:软件和系统调试的66个有效方法》——导读
  10. 计算机组成原理第三章ppt,计算机组成原理第三章幻灯片(白中英版).ppt
  11. 数据结构课程设计——通讯录制作
  12. 微信小程序模板消息(带流程图)
  13. 王国纪元服务器不稳定,王国纪元闪退怎么解决 游戏闪退解决方法
  14. JavaWeb 学习路线
  15. 如何科学地评价妹子身材?三围符合黄金比例是审美标准?你错了!
  16. Briefings in bioinformatics2021 | MolGNet+:基于分子全局表征的高效自监督框架,用于药物发现
  17. 什么是火起来的“宅经济”,重庆阿尔克互联网技能帮扶学习,进入互联网
  18. 遥感图像场景分类方法总结
  19. 英语口语428之每日二十个英语单词
  20. Bezier、B样条曲线曲面

热门文章

  1. c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
  2. (86)FPGA同步复位与异步复位-面试必问(十)(第18天)
  3. STM32F103:一.(1)MDK的配置
  4. CButton相关函数介绍
  5. ajax onload怎么用,Ajax中onload和onreadystatechange两种请求方式的区别
  6. linux下赛车游戏,SuperTuxKart 1.0 发布,开源Linux赛车游戏
  7. 雷霆战机源代码c语言,C++实现雷霆战机可视化小游戏
  8. zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth
  9. C51单片机————定时器计数器
  10. mysql如何给数据增加tab_怎么往mysql表里添加数据