tclientdataset xml 新增字段_leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)...

本文介绍如何使用Leaflet结合GeoServer的WFS服务实现地图图层的新增功能。重点讲解了通过POST方法发送请求参数,并采用XML形式进行图层的增加、删除及修改操作的方法。此外还展示了如何利用Leaflet插件绘制图形并获取空间信息。

56fb4aec691001630655a3ef4e5a7c05.png

前言

leaflet 入门开发系列环境知识点了解:
leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等
leaflet 在线例子
leaflet 插件,leaflet 的插件库,非常有用

内容概览

leaflet结合geoserver利用WFS服务实现图层新增
源代码demo下载

效果图如下:

f9063e96dfc24d8168d0f36b95a707d5.png

34fe79213a0bba58ff4a44454264c3a3.png

cef4d0022620ea0a9924ad4565ff384d.png
本篇主要是leaflet通过调用geoserver发布的地图服务WFS来达到图层新增记录的目的。与GeoServer的WFS进行基于Rest交互关键就在于请求参数,值得注意的是这些请求最好采用POST方法发送。查询可以采用json,但增加,删除,修改都只能采用XML形式Transaction。最后利用leaflet来叠加显示在地图上展示。
  • 用leaflet插件绘制图形工具draw的新增图形以及回调函数获取绘制图形空间信息,绘制工具的github地址:
https://github.com/geoman-io/leaflet-geoman​github.com
  • geoserver默认WFS服务是没有编辑操作权限的,所以需要在geoserver设置权限,允许编辑操作才行,截图如下:

45d8117f00ec94e865c89d3c67a3f12a.png

35752b3ede93c8c0dd487d77299d84fd.png

b53df8e333421f0ebc9b75bee348ff59.png

896d16c61b480e222564aae1efa1968e.png
  • 部分核心代码:
 //绘制工具draw 
  map.pm.addControls({ 
 position: 'topleft', 
 drawCircle: false, 
 drawMarker:false, 
 drawCircleMarker:false, 
 drawPolyline:false, 
 drawRectangle:false, 
 cutPolygon:false, 
 removalMode:false 
  }); 
 
//绘制图形之前 
  map.on('pm:drawstart', e => { 
 if(geojsonLayer){ 
         map.removeLayer(geojsonLayer); 
         geojsonLayer = null; 
     } 
  }); 
 
  map.on('pm:create', e => { 
 //console.log(e); 
    geojsonLayer = e.layer; 
    geojsonLayer.addTo(map); 
    e.layer.unbindPopup(); 
 var elements = '<span>名称:</span><input type="text" id="estate_num" /></br><span>备注:</span><input type="text" id="holder_nam" /></br><button type="button" id="addBtn">新增</button>'; 
    e.layer.on('popupopen', function(e){ 
        $("#addBtn").click(function(){ 
 if(geojsonLayer){ 
 //构造polygon  
 var polygon = ''; 
 var data = geojsonLayer.toGeoJSON().geometry.coordinates[0]; 
 for(var i=0;i<data.length;i++){ 
 var item = data[i]; 
                  polygon += item[0] + ',' + item[1] + ' ' ; 
              } 
              polygon += data[0][0] + ',' + data[0][1]; 
              addLayers(polygon,$("#estate_num").val(),$("#holder_nam").val(),callbackAddLayersWFSService); 
          } 
        });      
    }); 
    e.layer.bindPopup(elements).openPopup(e.latlng); 
  }); 
  • 图层新增函数
 /*图层新增 
   *@method addLayers 
   *@param polygon 图形 
   *@param fieldValue1 字段1值 
   *@param fieldValue2 字段2值 
   *@return callback 
   */ 
 function addLayers(polygon,fieldValue1,fieldValue2, callback){ 
 var xml = '<wfs:Transaction service="WFS" version="1.0.0"    xmlns:opengis="http://webgis.com"    xmlns:wfs="http://www.opengis.net/wfs"    xmlns:ogc="http://www.opengis.net/ogc"   xmlns:gml="http://www.opengis.net/gml"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.opengis.net/wfs   http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">'; 
    xml += '<wfs:Insert handle="WebGIS">'; 
    xml += '<opengis:testLayer>'; 
    xml += '<opengis:the_geom>'; 
    xml += '<gml:MultiPolygon srsName="EPSG:4326">'; 
    xml += '<gml:polygonMember>';  
    xml += '<gml:Polygon>'; 
    xml += '<gml:outerBoundaryIs>'; 
    xml += '<gml:LinearRing>'; 
    xml += '<gml:coordinates decimal="." cs="," ts=" ">' + polygon + '</gml:coordinates>'; 
    xml += '</gml:LinearRing>'; 
    xml += '</gml:outerBoundaryIs>'; 
    xml += '</gml:Polygon>'; 
    xml += '</gml:polygonMember>'; 
    xml += '</gml:MultiPolygon>'; 
    xml += '</opengis:the_geom>'; 
    xml += '<opengis:estate_num>' + fieldValue1 + '</opengis:estate_num>'; 
    xml += '<opengis:holder_nam>' + fieldValue2 + '</opengis:holder_nam>'; 
    xml += '</opengis:testLayer>'; 
    xml += '</wfs:Insert>'; 
    xml += '</wfs:Transaction>'; 
 
    $.ajax({ 
        url: geoserverUrl+'/wfs', 
        async: true, 
        data:xml, 
        type:'Post', 
        contentType: 'text/xml', 
        success(result) { 
            callback(result); 
        }, 
        error(err) { 
            console.log(err); 
        } 
    }) 
  } 

几点说明:
1.xmlns:opengis="http://webgis.com",geoserver工作区的url;

更多详情以及源码见下面链接

leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载) - 小专栏​xiaozhuanlan.com
0903be11abe71b666f058c3ca965420f.png

对本专栏感兴趣的话,可以订阅一波

GIS之家店铺:GIS之家
GIS之家源码咨询:GIS之家webgis入门开发系列demo源代码咨询

这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【大数据毕业设计】基于Spark实时医疗健康数据监测与疾病预测系统(Python版本+pyspark+可视化大屏+Kafka+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 随着可穿戴设备与智慧医疗的快速发展,医疗健康数据呈现高并发、连续产生和强时效性等特征。传统以离线批处理为主的健康管理系统难以满足实时监测、即时预警和风险趋势预测的应用需求。针对上述问题,本文设计并实现了一套基于 Spark 的实时医疗健康数据监测与疾病预测系统。系统采用前后端分离架构:前端基于 Vue3、Element Plus 与 ECharts 构建管理端与数据大屏;后端基于 Python 与 FastAPI 提供 RESTful 接口与 JWT 身份认证;实时链路采用 Kafka 承载体征事件流,使用 Spark Streaming 完成窗口聚合统计,并基于 Spark ML 线性回归对健康风险指数进行预测,同时计算 RMSE、MAE、MAPE 等误差指标。业务数据统一持久化到 MySQL 数据库 db_health 中,涵盖管理员、患者、疾病类型、体征监测、实时统计、预测结果与误差指标等核心表。系统实现了管理员登录与个人中心、首页统计看板、患者档案管理、监测数据查询、实时统计展示、风险预测分析以及可视化大屏等功能。测试结果表明,系统能够稳定完成实时数据采集、流式计算、风险预警与预测展示,具有较好的完整性、可扩展性和工程实践价值,可为智慧医疗场景下的实时健康监测提供参考方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值