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图层

  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对象

  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、添加编辑控件

  1. var editor = new OpenLayers.Control.ModifyFeature(vectors);
  2. map1.addControl(editor);
  3. editor.activate();

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

  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. }

实现完整代码如下:

  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>

实现效果:

编辑状态
编辑完成

(转)openlayers实现在线编辑的更多相关文章

  1. Microsoft Azure Web Sites应用与实践【3】—— 通过Visual Studio Online在线编辑Microsoft Azure 网站

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...

  2. 小讲堂:在线编辑在Mobox文档管理软件中的意义

    今天我们来讨论一下,mobox文档管理软件中的在线编辑的这个功能,相信这个功能是用户在日常的文档维护中非常需要的. 文档管理软件的诸多功能中,在线编辑是一块很重要的功能点,因为在线编辑可以说是提高工作 ...

  3. Office word excel电子表格在线编辑的实现方法

    Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav ...

  4. RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码

    发现一个很好玩,很强大的网站 RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码   http://runjs.cn/ 比如: http://runjs.cn/detail/l ...

  5. [前端插件]Bootstrap Table服务器分页与在线编辑应用总结

    先看Bootstrap Table应用效果: 表格用来显示数据库中的数据,数据通过AJAX从服务器加载,同时分页功能有服务器实现,避免客户端分页,在加载大量数据时造成的用户体验不好.还可以设置查询数据 ...

  6. icon在线编辑和查找工具

    1.www.iconpng.com 2.在线编辑http://www.ico.la/ 3.小图标查找 http://icomoon.io/app/ 4.20个免费的psd http://www.osc ...

  7. word在线编辑\生成图片(包含截图与合并)

    1.业务原因 word编辑后的文章复制到html编辑器(fck等)会发生排版错乱的情况,于是混沌了.需要有一个新的方法来终结,于是产生了word能不能在线编辑,后台保存,前台显示灯一系列问题. 2.首 ...

  8. Office文档在线编辑的实现之二

    讲述了如何通过iis的webdav支持实现客户端的office直接编辑服务器上的文件,本篇将讲解如何实现客户端的office直接编辑数据库中的二进制形式保存的office文件. 实现的关键:模拟IIS ...

  9. Office文档在线编辑的实现之一

    因为项目的关系,研究了一下Office的在线编辑功能,写出来共享一下. Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav ...

随机推荐

  1. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  2. Hibernate二级缓存的使用

    1.什么是缓存? 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能.Hibernate在 ...

  3. Axis2中使用wsdl2java.bat生成客户端代码

    1 准备环境 (1)下载Axis2的zip包axis2-1.5.5-bin.zip,并解压. 官方网址:http://ws.apache.org/axis2/ (2)设置环境变量(我的电脑->属 ...

  4. 【Java集合源代码剖析】Hashtable源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36191279 Hashtable简单介绍 Hashtable相同是基于哈希表实现的,相同每 ...

  5. Mysql查看sql是否走事务

    登陆进入server [root@gzmtest_25 ~]# su - mysql [mysql@gzmtest_25 ~]$ mysql.local Welcome to the MySQL mo ...

  6. 2014年百度之星程序设计大赛 - 资格赛 第一题 Energy Conversion

    小记:long long %I64d 代码: #include <iostream> #include <stdio.h> #include <string.h> ...

  7. commons-fileupload上传文件(1)

    近期,写一个上传图片的功能.于是用到commons-fileupload这个组件.提过form提交表单到后台(这里没实用到structs框架).在后台List pl = dfu.parseReques ...

  8. 修复nexus4由于使用完美刷机或者刷机精灵导致的底层文件受损

    前一段nexus4升级android 4.4.4的时候突然发现无法使用线刷刷入官方镜像了.当时就感觉很奇怪,但是不知道怎么搞得刷进去了,但是第一次开机的时候总是卡在联网之后的验证(我当时以为是网络不好 ...

  9. Detach a Database

    https://msdn.microsoft.com/en-us/library/ms191491.aspx 方法一:Using SQL Server Management Studio To det ...

  10. OSGI依赖问题处理

    用osgi实现java的模块化和热插拔时要考虑好两个问题,不同bundle间如何通信?依赖怎么处理? OSGi的一个标准就是各个bundle之间是相互隔离的,每个bundle都有自己的classloa ...