• cesium结合geoserver利用WFS服务实现图层删除(附源码下载)


    前言

    cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材。

    内容概览

    1.cesium结合geoserver利用WFS服务实现图层删除功能
    2.源代码demo下载

    效果图如下:

    本篇主要是在上一篇cesium结合geoserver利用WFS服务实现图层新增(附源码下载)基础上实现的,cesium通过调用geoserver发布的地图服务WFS来达到图层删除记录的目的。与GeoServer的WFS进行基于Rest交互关键就在于请求参数,值得注意的是这些请求最好采用POST方法发送。查询可以采用json,但增加,删除,修改都只能采用XML形式Transaction

    • 部分核心代码,完整的见源码demo下载
    var geoserverUrl = 'http://localhost:8080/geoserver/WebGIS';
    var image_Source = new Cesium.UrlTemplateImageryProvider({
    //url: 'http://mt0.google.cn/vt/lyrs=t,r&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}',
    //url: 'https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
    url: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
    //tilingScheme : new Cesium.GeographicTilingScheme(),
    credit: ''
    });
    var viewer = new Cesium.Viewer('map', {
    geocoder: false,
    homeButton: false,
    sceneModePicker: false,
    fullscreenButton: false,
    vrButton: false,
    baseLayerPicker: false,
    infoBox: false,
    selectionIndicator: false,
    animation: false,
    timeline: false,
    shouldAnimate: true,
    navigationHelpButton: false,
    navigationInstructionsInitiallyVisible: false,
    imageryProvider: image_Source
    });
     
    //加载geoserver wms服务
    var wms = new Cesium.WebMapServiceImageryProvider({
    url: geoserverUrl+'/wms',
    layers: 'WebGIS:testLayer',
    parameters: {
    service : 'WMS',
    format: 'image/png',
    transparent: true,
    }
    });
    viewer.imageryLayers.addImageryProvider(wms);
     
     
    viewer._cesiumWidget._creditContainer.style.display = "none";
    viewer.scene.globe.enableLighting = false;
    //viewer.scene.globe.depthTestAgainstTerrain = true;
    viewer.scene.globe.showGroundAtmosphere = false;
     
    viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(113.90271877, 22.95186415,30000.0)
    });
     
     
    var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    var ellipsoid = viewer.scene.globe.ellipsoid;
    handler.setInputAction(function (movement) {
    //通过指定的椭球或者地图对应的坐标系,将鼠标的二维坐标转换为对应椭球体三维坐标
    cartesian = viewer.camera.pickEllipsoid(movement.position, ellipsoid);
    if (cartesian) {
    //将笛卡尔坐标转换为地理坐标
    var cartographic = ellipsoid.cartesianToCartographic(cartesian);
    //将弧度转为度的十进制度表示
    var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
    var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
    var point = longitudeString + ',' + latitudeString;
    queryByPoint(point,'testLayer',callbackLastQueryWFSService);
    }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
     
     
    /*点查图层
    *@method queryByPoint
    *@param point 点查
    *@param typeName 图层名称
    *@return null
    */
    function queryByPoint(point, typeName, callback){
    var filter =
    '<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">';
    filter += '<Intersects>';
    filter += '<PropertyName>the_geom</PropertyName>';
    filter += '<gml:Point>';
    filter += '<gml:coordinates>' + point + '</gml:coordinates>';
    filter += '</gml:Point>';
    filter += '</Intersects>';
    filter += '</Filter>';
    var urlString = geoserverUrl + '/ows';
    var param = {
    service: 'WFS',
    version: '1.0.0',
    request: 'GetFeature',
    typeName: typeName,
    outputFormat: 'application/json',
    filter: filter
    };
    var geojsonUrl = urlString + getParamString(param, urlString);
    $.ajax({
    url: geojsonUrl,
    async: true,
    type:'GET',
    dataType: 'json',
    success(result) {
    callback(result);
    },
    error(err) {
    console.log(err);
    }
    })
    }
     
    function getParamString(obj, existingUrl, uppercase){
    var params = [];
    for (var i in obj) {
    params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
    }
    return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
    }
     
    /*
    * 点查图层回调函数
    */
    function callbackLastQueryWFSService(data){
    console.log('data',data);
    if(data && data.features.length>0){
    clearGeojsonLayer();
    loadGeojsonLayer(data);
    //气泡窗口显示
    var properties = data.features[0].properties;
    var id = data.features[0].id;
    var content = '名称:'+properties.estate_num+'</br>备注:'+properties.holder_nam+'<button type="button" id="deleteBtn">删除</button>';
    $("#infowindow").show();
    $("#infowindow").empty();
    $("#infowindow").append(content);
    $("#deleteBtn").click(function(){
    //console.log('删除按钮点击事件');
    if(id)
    {
    deleteLayerRecord(id,callbackDeleteLayersWFSService);
    }
    });
    }
    else{
    clearMap();
    $("#infowindow").hide();
    }
    }
     
    /*图层删除记录
    *@method deleteLayerRecord
    *@param fid 记录fid值
    *@return callback
    */
    function deleteLayerRecord(fid, callback){
    var xml = '<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.0.0" 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 += '<Delete typeName="WebGIS:testLayer">';
    ……

    更多详情见下面链接文章

    小专栏此文章

    文章提供源码,对本专栏感兴趣的话,可以关注一波

  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/giserhome/p/12493892.html
Copyright © 2020-2023  润新知