cesium 结合 geoserver 实现地图属性查询

656 阅读1分钟

内容概览

1.cesium 结合 geoserver 实现地图属性查询
2.源代码 demo 下载

效果图如下:

实现思路:首先利用 geoserver 发布的图斑 WFS 服务,通过 url 的 rest 请求,构造属性查询形式,获取 geojson 数据源;然后调用cesium api 的 Cesium.GeoJsonDataSource.load 加载 geojson 数据源渲染展示;最后监听地图点击事件,获取矢量数据的属性,显示在右上角的信息窗口。

  • 地图初始化创建:

    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
    });
    
  • 界面的查询按钮点击:

    ("#research_btn").click(function(){ var keyword = ("#textName").val(); //queryByProperty('201911_440114_0093','map_num','bs_spot_t',callbackLastQueryWFSService); queryByProperty(keyword,'map_num','bs_spot_t',callbackLastQueryWFSService); });

  • 属性查询函数:

    var geoserverUrl = 'http://localhost:8080/geoserver/ZKYGIS';
    

    /*属性查询图层 *@method queryByProperty *@param propertyValue 属性值 *@param propertyName 属性名称 *@param typeName 图层名称 @return null / function queryByProperty(propertyValue, propertyName, typeName, callback){ var filter = ''; filter += ''; filter += '' + propertyName + ''; filter += ''+propertyValue+''; 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); } }) }

  • 属性查询结果回调函数,获取 geojson 数据源,地图绘制渲染:

    /*

    • 图层属性查询回调函数 / function callbackLastQueryWFSService(data){ console.log('data',data); if(data && data.features.length>0){ loadGeojsonLayer(data); } } /
    • 绘制图形函数 / function loadGeojsonLayer(geojson){ var promise = Cesium.GeoJsonDataSource.load(geojson,geoJsonStyle); promise.then(function(dataSource) { viewer.dataSources.add(dataSource); viewer.zoomTo(dataSource); }).otherwise(function(error){ //Display any errrors encountered while loading. window.alert(error); }); } /
    • 清空绘制图形函数 */ function clearGeojsonLayer(){ viewer.dataSources.removeAll(); }
  • 地图点击事件监听,获取矢量数据展示在气泡窗口:

    var highlightFace = null;
    viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {
         var pickedFeature = viewer.scene.pick(movement.position);
         console.log('pickedFeature',pickedFeature);
         if(pickedFeature){
             //判断之前是否有高亮面存在
             if (highlightFace) {
                 highlightFace.material = highlightFace.material0;
             }
             pickedFeature.id.polygon.material0 = pickedFeature.id.polygon.material;
             pickedFeature.id.polygon.material = Cesium.Color.DEEPSKYBLUE.withAlpha(0.8);
             highlightFace = pickedFeature.id.polygon;
             console.log('properties',pickedFeature.id.properties);
            //气泡窗口显示
            var content =
                "<div>"+
                "<span>图斑编号:</span><span>"+pickedFeature.id.properties.map_num+"</span></br>"+
                "<span>图斑描述::</span><span>"+pickedFeature.id.properties.description+"</span></br>"+
                "</div>";
            $("#infowindow").show();
            $("#infowindow").empty();
            $("#infowindow").append(content);
         }
         else{
            if (highlightFace) {
                 highlightFace.material = highlightFace.material0;
            }
            $("#infowindow").hide();
         }
     }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    

link==>