zoukankan      html  css  js  c++  java
  • openlayer geoserver 实现wfs 的更新

    跨域问题:https://blog.csdn.net/neimeng0/article/details/80094333

    关于线的wfs 更新:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
        <title></title>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
        <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
       <script src="ol-debug.js"></script>
        <style type="text/css">
            body {
                 100%;
                height: 100%;
                position: absolute;
                overflow: hidden;
                margin: 0 0 0 0;
            }
    
            .map {
                 100%;
                height: 92%;
            }
        </style>
    </head>
    <body>
    <div id="map" class="map"></div>
    <form class="form-inline">
        <label>Geometry type  </label>
        <select id="type">
            <option value="Point">Point</option>
            <option value="LineString">LineString</option>
            <option value="Polygon">Polygon</option>
            <option value="Circle">Circle</option>
        </select>
    </form>
     <input type="button" value="查询" onclick="queryWfs();" />
      <input id="add" type="checkbox" value="add" />新增
      <input id="saveNew" type="button" value="保存" onclick="onSaveNew();" />
    
      <div id="map" style="100%;height:100%;"></div>
    
    </body>
    </html>
    <script>
              var newId = 1;
        var wfsVectorLayer = null;
        var drawedFeature = null;
    
        // 创建用于新绘制feature的layer
        var drawLayer = new ol.layer.Vector({
          source: new ol.source.Vector(),
          style: new ol.style.Style({
            stroke: new ol.style.Stroke({
              color: 'blue',
               5
            })
          })
        });
    
        // 添加绘制新图形的interaction,用于添加新的线条
        var drawInteraction = new ol.interaction.Draw({
          type: 'LineString', // 设定为线条
          style: new ol.style.Style({
            stroke: new ol.style.Stroke({
              color: 'red',
               10
            })
          }),
          source: drawLayer.getSource()
        });
        drawInteraction.on('drawend', function(e) {
          // 绘制结束时暂存绘制的feature
          drawedFeature = e.feature;
        });
    
        var map = new ol.Map({
          layers: [new ol.layer.Tile({
            source: new ol.source.OSM()
          }), drawLayer],
          target: 'map',
          view: new ol.View({
            center: [126.23967989932228,48.036040730554284],
            maxZoom: 19,
            zoom: 13,
            projection: 'EPSG:4326'
          })
        });
    
        function queryWfs() {
          if (wfsVectorLayer) {
            map.removeLayer(wfsVectorLayer);
          }
    
          wfsVectorLayer = new ol.layer.Vector({
            source: new ol.source.Vector({
              format: new ol.format.GeoJSON({
                geometryName: 'the_geom'
              }),
              url: 'http://192.168.20.80:8085/geoserver/wfs?service=wfs&version=1.1.0&request=GetFeature&typeNames=KD:WH_0217&outputFormat=application/json&srsname=EPSG:4326'
            }),
            style: function(feature, resolution) {
              return new ol.style.Style({
                stroke: new ol.style.Stroke({
                  color: 'blue',
                   5
                })
              });
            }
          });
          map.addLayer(wfsVectorLayer);
        }
    
        $('#add').change(function() {
          if (this.checked) {
            // 勾选新增复选框时,添加绘制的Interaction
            map.removeInteraction(drawInteraction);
            map.addInteraction(drawInteraction);
          } else {
            // 取消勾选新增复选框时,移出绘制的Interaction,删除已经绘制的feature
            map.removeInteraction(drawInteraction);
            if (drawedFeature) {
              drawLayer.getSource().removeFeature(drawedFeature);
            }
            drawedFeature = null;
          }
        });
    
        // 保存新绘制的feature
        function onSaveNew() {
          // 转换坐标
          var geometry = drawedFeature.getGeometry().clone();
          geometry.applyTransform(function(flatCoordinates, flatCoordinates2, stride) {
            for (var j = 0; j < flatCoordinates.length; j += stride) {
              var y = flatCoordinates[j];
              var x = flatCoordinates[j + 1];
              flatCoordinates[j] = x;
              flatCoordinates[j + 1] = y;
            }
          });
    
          // 设置feature对应的属性,这些属性是根据数据源的字段来设置的
          var newFeature = new ol.Feature({
    	  THE_GEOM: new ol.geom.MultiLineString([geometry.getCoordinates()]),
    	  });
          newFeature.setId('WH_0217.' + newId);
         //newFeature.setGeometryName('the_geom');
        // newFeature.set('the_geom', null);
         newFeature.set('name', newFeature.getId());
         newFeature.set('modified', newFeature.getId());
         newFeature.set('OBJID', '2333');
         newFeature.set('OBJNAME', '');
         newFeature.set('DEPTCODE1', '');
         newFeature.set('DEPTNAME1', newId);
         newFeature.set('DEPTCODE2', '1');
         newFeature.set('DEPTNAME2', '2');
         newFeature.set('DEPTCODE3', null);
         newFeature.set('DEPTNAME3', '');
         newFeature.set('BGID', null);
         newFeature.set('ORDATE', null);
         newFeature.set('CHDATE', null);
    	 newFeature.set('NOTE_', null);
    	 newFeature.set('PICTURE', null);
    	 newFeature.set('SHAPE_LENG', null);
    	 newFeature.set('SHAPE_LE_1', null);
    	 newFeature.set('SHAPE_LE_2', null);
    	 newFeature.set('DLMC', null);
        // newFeature.setGeometry(new ol.geom.MultiLineString([geometry.getCoordinates()]));
    
          addWfs([newFeature]);
          // 更新id
          newId = newId + 1;
          // 3秒后,自动刷新页面上的feature
          setTimeout(function() {
            drawLayer.getSource().clear();
            queryWfs();
          }, 3000);
        }
    
        // 添加到服务器端
        function addWfs(features) {
          var WFSTSerializer = new ol.format.WFS();
          var featObject = WFSTSerializer.writeTransaction(features,
            null, null, {
              featureType: 'WH_0217',                    //layerName
              featureNS: 'http://geoserver.KD.netKD',   //设置kd工作空间的时候填写的连接
              srsName: 'EPSG:4326'
            });
          var serializer = new XMLSerializer();
          var featString = serializer.serializeToString(featObject);
          var request = new XMLHttpRequest();
          request.open('POST', 'http://192.168.20.80:8085/geoserver/wfs?service=wfs');
          request.setRequestHeader('Content-Type', 'text/xml');
          request.send(featString);
        }
    
    
    </script>
    

      点更新:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
        <title></title>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
        <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
       <script src="ol-debug.js"></script>
        <style type="text/css">
            body {
                 100%;
                height: 100%;
                position: absolute;
                overflow: hidden;
                margin: 0 0 0 0;
            }
    
            .map {
                 100%;
                height: 92%;
            }
        </style>
    </head>
    <body>
    <div id="map" class="map"></div>
    <form class="form-inline">
        <label>Geometry type  </label>
        <select id="type">
            <option value="Point">Point</option>
            <option value="LineString">LineString</option>
            <option value="Polygon">Polygon</option>
            <option value="Circle">Circle</option>
        </select>
    </form>
     <input type="button" value="查询" onclick="queryWfs();" />
      <input id="add" type="checkbox" value="add" />新增
      <input id="saveNew" type="button" value="保存" onclick="onSaveNew();" />
    
      <div id="map" style="100%;height:100%;"></div>
    
    </body>
    </html>
    <script>
              var newId = 1;
        var wfsVectorLayer = null;
        var drawedFeature = null;
    
        // 创建用于新绘制feature的layer
        var drawLayer = new ol.layer.Vector({
          source: new ol.source.Vector(),
          style: new ol.style.Style({
                //填充色
            fill: new ol.style.Fill({
            color: 'red'
            }),
            //边线颜色
            stroke: new ol.style.Stroke({
            color: 'black',
             3
            }),
            //形状
           image: new ol.style.Circle({
            radius: 4,
            fill: new ol.style.Fill({
            color: 'red'
                })
                })
            })
        });
    
        // 添加绘制新图形的interaction,用于添加新的线条
        var drawInteraction = new ol.interaction.Draw({
          type: 'Point', // 设定为线条
          style:		new ol.style.Style({
                //填充色
            fill: new ol.style.Fill({
            color: 'red'
            }),
            //边线颜色
            stroke: new ol.style.Stroke({
            color: 'black',
             3
            }),
            //形状
           image: new ol.style.Circle({
            radius: 4,
            fill: new ol.style.Fill({
            color: 'red'
                })
                })
            }),
          source: drawLayer.getSource()
        });
        drawInteraction.on('drawend', function(e) {
          // 绘制结束时暂存绘制的feature
          drawedFeature = e.feature;
        });
    
        var map = new ol.Map({
          layers: [new ol.layer.Tile({
            source: new ol.source.OSM()
          }), drawLayer],
          target: 'map',
          view: new ol.View({
            center: [126.23967989932228,48.036040730554284],
            maxZoom: 19,
            zoom: 13,
            projection: 'EPSG:4326'
          })
        });
    
        function queryWfs() {
          if (wfsVectorLayer) {
            map.removeLayer(wfsVectorLayer);
          }
    
          wfsVectorLayer = new ol.layer.Vector({
            source: new ol.source.Vector({
              format: new ol.format.GeoJSON({
                geometryName: 'THE_GEOM'
              }),
              url: 'http://192.168.20.80:8085/geoserver/wfs?service=wfs&version=1.1.0&request=GetFeature&typeNames=KD:WH_0101&outputFormat=application/json&srsname=EPSG:4326'
            }),
            style: function(feature, resolution) {
              return new ol.style.Style({
                //填充色
            fill: new ol.style.Fill({
            color: 'red'
            }),
            //边线颜色
            stroke: new ol.style.Stroke({
            color: 'black',
             3
            }),
            //形状
           image: new ol.style.Circle({
            radius: 4,
            fill: new ol.style.Fill({
            color: 'red'
                })
                })
            });
            }
          });
          map.addLayer(wfsVectorLayer);
        }
    
        $('#add').change(function() {
          if (this.checked) {
            // 勾选新增复选框时,添加绘制的Interaction
            map.removeInteraction(drawInteraction);
            map.addInteraction(drawInteraction);
          } else {
            // 取消勾选新增复选框时,移出绘制的Interaction,删除已经绘制的feature
            map.removeInteraction(drawInteraction);
            if (drawedFeature) {
              drawLayer.getSource().removeFeature(drawedFeature);
            }
            drawedFeature = null;
          }
        });
    
        // 保存新绘制的feature
        function onSaveNew() {
          // 转换坐标
          var geometry = drawedFeature.getGeometry().clone();
          geometry.applyTransform(function(flatCoordinates, flatCoordinates2, stride) {
            for (var j = 0; j < flatCoordinates.length; j += stride) {
              var y = flatCoordinates[j];
              var x = flatCoordinates[j + 1];
              flatCoordinates[j] = x;
              flatCoordinates[j + 1] = y;
            }
          });
    
          // 设置feature对应的属性,这些属性是根据数据源的字段来设置的
          var newFeature = new ol.Feature({
    	  THE_GEOM: new ol.geom.Point(geometry.getCoordinates()),
    	  });
          newFeature.setId('WH_0101.' + newId);
         //newFeature.setGeometryName('the_geom');
        // newFeature.set('the_geom', null);
         //newFeature.set('name', newFeature.getId());
         //newFeature.set('modified', newFeature.getId());
         //newFeature.set('OBJID', '2333');
         //newFeature.set('OBJNAME', '');
         //newFeature.set('DEPTCODE1', '');
         //newFeature.set('DEPTNAME1', newId);
         //newFeature.set('DEPTCODE2', '1');
         //newFeature.set('DEPTNAME2', '2');
         //newFeature.set('DEPTCODE3', null);
         //newFeature.set('DEPTNAME3', '');
         //newFeature.set('BGID', null);
         //newFeature.set('ORDATE', null);
         //newFeature.set('CHDATE', null);
    	 //newFeature.set('NOTE_', null);
    	 //newFeature.set('PICTURE', null);
    	 //newFeature.set('SHAPE_LENG', null);
    	 //newFeature.set('SHAPE_LE_1', null);
    	 //newFeature.set('SHAPE_LE_2', null);
    	 //newFeature.set('DLMC', null);
        // newFeature.setGeometry(new ol.geom.MultiLineString([geometry.getCoordinates()]));
    
          addWfs([newFeature]);
          // 更新id
          newId = newId + 1;
          // 3秒后,自动刷新页面上的feature
          setTimeout(function() {
            drawLayer.getSource().clear();
            queryWfs();
          }, 3000);
        }
    
        // 添加到服务器端
        function addWfs(features) {
          var WFSTSerializer = new ol.format.WFS();
          var featObject = WFSTSerializer.writeTransaction(features,
            null, null, {
              featureType: 'WH_0101',
              featureNS: 'http://geoserver.KD.netKD',
              srsName: 'EPSG:4326'
            });
          var serializer = new XMLSerializer();
          var featString = serializer.serializeToString(featObject);
          var request = new XMLHttpRequest();
          request.open('POST', 'http://192.168.20.80:8085/geoserver/wfs?service=wfs');
          request.setRequestHeader('Content-Type', 'text/xml');
          request.send(featString);
        }
    
    
    </script>
    

      重点:需要注意的是我初始化feature几何字段使用了the_geom,这里一定要和geoserver中的集合字段对应,不然可以添加成功,但是没有geometry;

  • 相关阅读:
    指针、数组和结构体的一些思考
    Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历
    Leetcode563.Binary Tree Tilt二叉树的坡度
    Leetcode559.Maximum Depth of N-ary TreeN叉树的最大深度
    Leetcode561.Array Partition I数组拆分1
    Leetcode551.Student Attendance Record I学生出勤记录1
    Leetcode543.Diameter of Binary Tree二叉树的直径
    Leetcode520Detect Capital检测大写字母
    Leetcode532.K-diff Pairs in an Array数组中的K-diff数对
    Leetcode496.Next Greater Element I下一个更大的元素1
  • 原文地址:https://www.cnblogs.com/HuangDaDa/p/10384003.html
Copyright © 2011-2022 走看看