(转)openlayers实现在线编辑
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图层
- var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
- renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
- vectors = new OpenLayers.Layer.Vector("Vector Layer", {
- renderers: renderer
- });
- map1.addLayer(vectors);
2、添加wkt对象
- var wkts = [
- "POINT(107.5758285931443 29.7822116459692)",
- "LINESTRING(120.18304604073 30.3305841465568,108.805692477062 32.0850224203499)",
- "POLYGON((102.797302689433 36.5936423859273,105.519115206186 29.4789248520356,100.346180647351 19.9699202912212))"
- ];
- var wktFormat = new OpenLayers.Format.WKT();
- for(var i= 0,dl=wkts.length;i<dl;i++){
- var geometry = wktFormat.read(wkts[i]);
- vectors.addFeatures(geometry);
- }
- }
3、添加编辑控件
- var editor = new OpenLayers.Control.ModifyFeature(vectors);
- map1.addControl(editor);
- editor.activate();
4、给vector添加编辑完成事件
- vectors.events.on({
- "afterfeaturemodified":editEnd
- });
- function editEnd(evt){
- if(evt.modified){
- console.log("发生变化");
- var geom = evt.feature.geometry;
- var wkt = new OpenLayers.Format.WKT(geom);
- console.log(wkt.toString());
- }
- else{
- console.log("未发生变化");
- }
- }
实现完整代码如下:
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title>openlayers map</title>
- <link rel="stylesheet" href="http://localhost/olapi/theme/default/style.css" type="text/css">
- <style>
- html, body{
- padding:0;
- margin:0;
- height:100%;
- width:100%;
- overflow: hidden;
- font-size: 12px;
- }
- #map1{
- width: 100%;
- height: 100%;
- float: left;
- border-right: 1px solid #000000;
- }
- </style>
- <script src="http://localhost/olapi/OpenLayers.js"></script>
- <script src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>
- <script src="http://localhost/jquery/jquery-1.8.3.js"></script>
- <script>
- var map1, vectors;
- OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
- $(function(){
- var bounds = new OpenLayers.Bounds(
- 73.45100463562233, 18.16324718764174,
- 134.97679764650596, 53.531943152223576
- );
- var options = {
- controls: [],
- maxExtent: bounds,
- maxResolution: 0.2403351289487642,
- projection: "EPSG:4326",
- units: 'degrees'
- };
- map1 = new OpenLayers.Map('map1', options);
- map1.addLayer(getWms("china"));
- map1.addControl(new OpenLayers.Control.Zoom());
- map1.addControl(new OpenLayers.Control.Navigation());
- map1.zoomToExtent(bounds);
- addVectors();
- addEditor();
- });
- function getWms(layer){
- return new OpenLayers.Layer.WMS(
- "Geoserver layers - Tiled",
- "http://localhost:8081/geoserver/lzugis/wms",
- {
- "LAYERS": layer,
- "STYLES": '',
- format: 'image/png'
- },
- {
- buffer: 0,
- displayOutsideMaxExtent: true,
- isBaseLayer: true,
- yx : {'EPSG:4326' : true}
- }
- );
- }
- function addVectors(){
- var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
- renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
- vectors = new OpenLayers.Layer.Vector("Vector Layer", {
- renderers: renderer
- });
- map1.addLayer(vectors);
- vectors.events.on({
- "afterfeaturemodified":editEnd
- });
- var wkts = [
- "POINT(107.5758285931443 29.7822116459692)",
- "LINESTRING(120.18304604073 30.3305841465568,108.805692477062 32.0850224203499)",
- "POLYGON((102.797302689433 36.5936423859273,105.519115206186 29.4789248520356,100.346180647351 19.9699202912212))"
- ];
- var wktFormat = new OpenLayers.Format.WKT();
- for(var i= 0,dl=wkts.length;i<dl;i++){
- var geometry = wktFormat.read(wkts[i]);
- vectors.addFeatures(geometry);
- }
- }
- function addEditor(){
- var editor = new OpenLayers.Control.ModifyFeature(vectors);
- map1.addControl(editor);
- editor.activate();
- }
- function editEnd(evt){
- if(evt.modified){
- console.log("发生变化");
- var geom = evt.feature.geometry;
- var wkt = new OpenLayers.Format.WKT(geom);
- console.log(wkt.toString());
- }
- else{
- console.log("未发生变化");
- }
- }
- </script>
- </head>
- <body>
- <div id="map1"></div>
- </body>
- </html>
实现效果:
(转)openlayers实现在线编辑的更多相关文章
- Microsoft Azure Web Sites应用与实践【3】—— 通过Visual Studio Online在线编辑Microsoft Azure 网站
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
- 小讲堂:在线编辑在Mobox文档管理软件中的意义
今天我们来讨论一下,mobox文档管理软件中的在线编辑的这个功能,相信这个功能是用户在日常的文档维护中非常需要的. 文档管理软件的诸多功能中,在线编辑是一块很重要的功能点,因为在线编辑可以说是提高工作 ...
- Office word excel电子表格在线编辑的实现方法
Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav ...
- RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码
发现一个很好玩,很强大的网站 RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码 http://runjs.cn/ 比如: http://runjs.cn/detail/l ...
- [前端插件]Bootstrap Table服务器分页与在线编辑应用总结
先看Bootstrap Table应用效果: 表格用来显示数据库中的数据,数据通过AJAX从服务器加载,同时分页功能有服务器实现,避免客户端分页,在加载大量数据时造成的用户体验不好.还可以设置查询数据 ...
- icon在线编辑和查找工具
1.www.iconpng.com 2.在线编辑http://www.ico.la/ 3.小图标查找 http://icomoon.io/app/ 4.20个免费的psd http://www.osc ...
- word在线编辑\生成图片(包含截图与合并)
1.业务原因 word编辑后的文章复制到html编辑器(fck等)会发生排版错乱的情况,于是混沌了.需要有一个新的方法来终结,于是产生了word能不能在线编辑,后台保存,前台显示灯一系列问题. 2.首 ...
- Office文档在线编辑的实现之二
讲述了如何通过iis的webdav支持实现客户端的office直接编辑服务器上的文件,本篇将讲解如何实现客户端的office直接编辑数据库中的二进制形式保存的office文件. 实现的关键:模拟IIS ...
- Office文档在线编辑的实现之一
因为项目的关系,研究了一下Office的在线编辑功能,写出来共享一下. Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav ...
随机推荐
- 【Mail.Ru Cup 2018 Round 2 B】 Alice and Hairdresser
[链接] 我是链接,点我呀:) [题意] [题解] 因为只会增加. 所以. 一开始暴力算出来初始答案 每次改变一个点的话. 就只需要看看和他相邻的数字的值就好. 看看他们是不是大于l 分情况增加.减少 ...
- 清北学堂模拟赛d3t4 a
分析:很水的一道题,就是用栈来看看是不是匹配就好了,只是最后没有判断栈是否为空而WA了一个点,以后做题要注意了. #include <bits/stdc++.h> using namesp ...
- libcloud代码研究(一)——基本架构
libcloud是apache下整合多种云服务接口的项目.最近,在研究libcloud代码的同时,将阿里云存储(Ali OSS)和百度云存储用libcloud storage driver规范进行封装 ...
- HBase行键的设计
rowkey是行的主键,而且hbase只能用rowkey范围即scan来查找数据.rowkey是以字典排序的.可以巧妙设计行键,比如想通过电影的评价进行排序,可以把评分rate和电影id组合起来,ra ...
- N - 贪心
Have you ever heard the story of Blue.Mary, the great civil engineer? Unlike Mr. Wolowitz, Dr. Blue. ...
- python network programming--connect()
首先我们看一段python client/server代码. server端: >>> import sys,socket >>> s = socket.socke ...
- [vagrant]第一次安装添加box出现问题汇总
1.本地文件要加全文件名和协议file:/// 2.The box failed to unpackage properly. Please verify that the box file you' ...
- Intellij Idea 13:重置设置
最近在将Windows下的Idea的设置导入到Mac下的时候,一时手贱,点了全部结果发现悲剧了,所有的快捷键都变成和Windows的一样了.于是我就在CMD+C,V和Ctrl+C,V中不断的进行头脑锻 ...
- javaEE之--------统计站点在线人数,安全登录等(观察者设计模式)
整体介绍下: 监听器:监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听别一个类的方法调用.都是使用观察者设计模式. 小弟刚接触这个,做了些简单的介绍.大神请绕道,技术仅仅是一点点, ...
- Google android source code build 问题总结【转】
本文转载自:http://light3moon.com/2015/01/31/Google%20android%20source%20code%20build%20%E9%97%AE%E9%A2%98 ...