• openlayers实现在线编辑


    概述:

    在前面有篇博文讲述了基于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%;
                100%;
                overflow: hidden;
                font-size: 12px;
            }
            #map1{
                 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>

    实现效果:


    编辑状态

    编辑完成





  • 相关阅读:
    CSS3 transform 属性(2D,3D旋转)
    django中视图函数中装饰器
    第55课 经典问题解析四
    第52课 C++中的抽象类和接口
    机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
    对称矩阵、Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵、合同矩阵、正定矩阵
    机器学习算法之决策树
    python读写csv时中文乱码问题解决办法
    shiro工作过程
    Nginx在windows上安装 及 Nginx的配置及优化
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539826.html
Copyright © 2020-2023  润新知