zoukankan      html  css  js  c++  java
  • 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">';
    ……

    更多详情见下面链接文章

    小专栏此文章

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

  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/giserhome/p/12493892.html
Copyright © 2011-2022 走看看