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. redis学习三,Redis主从复制和哨兵模式

    Redis主从复制 java架构师项目实战,高并发集群分布式,大数据高可用,视频教程 1.Master可以拥有多个slave 2.多个slave可以连接同一个Master外,还可以连接到其他的slav ...

  2. 如何在Tomcat (6/7/8.0) 安装SSL证书

    第一步:进入Tomcat安装目录,把证书的jks格式文件放在tomcat安装目录的conf目录下即可. conf/ssl/371cloud.cn.jks 第二步: 打开tomcat配置文件 conf/ ...

  3. 洛谷 P1469 找筷子

    题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX ...

  4. 清北学堂模拟赛d2t1 一道图论神题(god)

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的.假 ...

  5. hdu 1273最大流

    #include<stdio.h> #include<string.h> #define inf 1000000000 #include<queue> #defin ...

  6. spring boot 中访问 REST 接口

    RestTemplate restTemplate = new RestTemplate(); Object result = restTemplate.getForObject("http ...

  7. FOJ 10月赛题 FOJ2198~2204

    A题. 发现是递推可以解决这道题,a[n]=6*a[n-1]-a[n-2].因为是求和,可以通过一个三维矩阵加速整个计算过程,主要是预处理出2^k时的矩阵,可以通过这道题 #include <i ...

  8. Ubuntu下调整时区时间

    Ubuntu下调整时区时间 学习了:http://blog.csdn.net/jintiaozhuang/article/details/38583031 进行了tzselect错误的修复 学习了:h ...

  9. oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 本文出自[我是干勾鱼的博客] oracle中使用impdp数据泵导 ...

  10. 如何更改iTunes备份地址(修改iphone ipad 备份地址) itunes文件目录修改方法 【亲测有效,附带原理说明】

    前言 C盘空间有限,但是iTunes就是那么龌龊,只能把手机备份存到C盘.那么怎么才能把备份文件存到其他分区的文件夹里面呢? 当时我想先看看度娘,看看有没有现成的! 结果 nnd!! 我看了一大堆相关 ...