使用Openlayers绘制Geoserver离线瓦片

需求

将遥感影像tif数据通过Geoserver进行发布,为了加快服务器响应速度,我们使用Geoserver对遥感数据做了缓存处理,如下图,使用离线瓦片,我这里出现了中文不识别的问题,因此没法直接Submit去执行切片任务,F12查看元素,修改一下Form表单里的参数,将不正常显示的文字修改为实际的中文,再点Submit就提交成功了,要注意该页面有两个表单提交的地方,要修改对应的地方才可以。
在这里插入图片描述
在这里插入图片描述

代码

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="imagetoolbar" content="no">
    <title>武汉市疫情反演</title>
    <link rel="stylesheet" href="assets/css/main.css" type="text/css">
    <script src="assets/js/jquery.min.js"></script>
    <script src="assets/js/ol.js"></script>
    <link rel='stylesheet' href='assets/css/ol.css' type='text/css'>
    <script src="assets/js/ol3-layerswitcher.js"></script>
    <link rel="stylesheet" href="assets/css/ol3-layerswitcher.css" type="text/css">
    <!-- 参数 -->
    <script type="text/javascript">
        //示例标注点武汉市的信息对象
        var featuerInfo = {
            marker: [116.17356, 34.7716],
            name: 'XX医院'
        }

        var keyLabel = {
            'b': 'XX医院',
            'n': 'XX医院',
            'w': 'XX医院',
            'c': 'XX医院',
            'x': 'XX医院'
        }
        // 数据三
        var name = '疫情';
        var workspace = 'b';
        var legend = 'b';
        var city = '武汉市';
        var time = '2020';
        var layer = city + '_' + time;
        var isGradient = false;

        var mapSource = {
            legend: {
                url: 'http://127.0.0.1:8080/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=application/json&STRICT=false&style=',
                layer: workspace + ':' + legend,
                isGradient: isGradient,
            },
            base: {
                url: 'http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=4f62e1d82bd46e2ff470b291c2260156',
                name: '地图'
            },
            label: {
                url: 'http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=4f62e1d82bd46e2ff470b291c2260156',
                name: '注记'
            },
            yaogan: {
                url: 'http://127.0.0.1:8080/geoserver/gwc/service/wms',
                name: name + '_' + layer,
                layer: workspace + ':' + layer
            },
            river: 'http://127.0.0.1:6075/basic_query/river_query/river_jjj',
            bound: 'http://127.0.0.1:6075/public/geo_bound/bound?workspace=' + workspace + '&layer=' + layer
        }
    </script>

    <!-- 初始化地图 -->
    <script type="text/javascript">
        var projection = new ol.proj.Projection({
            code: 'EPSG:4326',
            units: 'degrees',
            axisOrientation: 'neu'
        });

        $(function () {
            function ScaleControl(opt_options) {
                var options = opt_options || {};

                var element = document.createElement('div');
                element.setAttribute('id', 'scale');
                element.className = 'ol-scale-value';

                ol.control.Control.call(this, {
                    element: element,
                    target: options.target
                });
            };
            ol.inherits(ScaleControl, ol.control.Control);
            ScaleControl.prototype.setMap = function (map) {
                map.on('postrender', function () {
                    var view = map.getView();
                    var resolution = view.getResolution();
                    var dpi = 90.71428571428572;
                    var mpu = map.getView().getProjection().getMetersPerUnit();
                    var scale = resolution * mpu * 39.37 * dpi;

                    if (scale >= 9500 && scale <= 950000) {
                        scale = Math.round(scale / 1000) + 'K';
                    } else if (scale >= 950000) {
                        scale = Math.round(scale / 1000000) + 'M';
                    } else {
                        scale = Math.round(scale);
                    }
                    document.getElementById('scale').innerHTML = 'Scale = 1 : ' + scale;
                }, this);
                ol.control.Control.prototype.setMap.call(this, map);
            }

            function ZoomControl(opt_options) {
                var options = opt_options || {};

                var element = document.createElement('div');
                element.setAttribute('id', 'zoom');
                element.className = 'ol-zoom-value';

                ol.control.Control.call(this, {
                    element: element,
                    target: options.target
                });

            };
            ol.inherits(ZoomControl, ol.control.Control);
            ZoomControl.prototype.setMap = function (map) {
                map.on('moveend', function () {
                    var view = map.getView();
                    document.getElementById('zoom').innerHTML = 'Zoom level = ' + view.getZoom();
                }, this);
                ol.control.Control.prototype.setMap.call(this, map);
            }

            var view = new ol.View({
                center: [0, 0],
                zoom: 2,
                projection: projection,
                extent: [-180.0, -90.0, 180.0, 90.0]
            });

            var map = new ol.Map({
                controls: ol.control.defaults({ attribution: false }).extend([
                    new ol.control.MousePosition(),
                    new ScaleControl(),
                    new ZoomControl()
                ]),
                layers: [],
                target: 'map',
                view: view
            });

            map.getView().fit(getBound(mapSource.bound), map.getSize());

            // 获取图例
            // 渐变图例,用于特征污染物空间分布
            getLegend(mapSource.legend.url, mapSource.legend.layer, mapSource.legend.isGradient)

            // 创建图层
            layerBase = getlayerBase(mapSource.base.url, mapSource.base.name);
            layerLabel = getlayerLabel(mapSource.label.url, mapSource.label.name);
            layerYaogan = getlayerYaogan(mapSource.yaogan.url, mapSource.yaogan.name, mapSource.yaogan.layer);

            // 创建marker
            layerMarker = getlayerMarker(featuerInfo);

            // 添加图层
            map.addLayer(layerBase);
            map.addLayer(layerLabel);
            map.addLayer(layerMarker);

            // 添加多条河流图层
            map.addLayer(getlayerRiver(mapSource.river));

            // 遥感影像图层
            map.addLayer(layerYaogan);

            // 图层选择
            map.addControl(new ol.control.LayerSwitcher());
            // 图层事件
            setEventPopup(map);
        });
    </script>

    <!-- 创建图层 -->
    <script type="text/javascript">
        // 创建地图图层
        function getlayerBase(url, title) {
            return new ol.layer.Tile({
                title: title,
                type: 'base',
                visible: true,
                source: new ol.source.XYZ({
                    url: url,
                    wrapX: false
                })
            });
        }

        // 创建注记图层
        function getlayerLabel(url, title) {
            return new ol.layer.Tile({
                title: title,
                visible: true,
                source: new ol.source.XYZ({
                    url: url,
                    wrapX: false
                })
            });
        }

        // 获取河流绘制风格
        function getRiverStyle(title) {
            return new ol.style.Style({
                stroke: new ol.style.Stroke({ //边界样式
                    color: '#0000FF',
                    width: 2
                }),
                text: new ol.style.Text({
                    text: title,
                    fill: new ol.style.Fill({ color: '#aa3300' }),
                    stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2 })
                })
            });
        }

        // 创建河流图层
        function getlayerRiver(url) {
            $.ajax({
                url: url,
                type: "GET",
                dataType: "json",
                async: false,
                success: function (data) {
                    layerRiverArray = []
                    $.each(data.resData, function (i, item) {
                        layerRiverArray.push(
                            new ol.layer.Vector({
                                title: item.properties.name,
                                source: new ol.source.Vector({
                                    features: (new ol.format.GeoJSON()).readFeatures(item)
                                }),
                                style: getRiverStyle(item.properties.name)
                            })
                        )
                    });
                }
            });

            return new ol.layer.Group({
                title: '京津冀河流',
                layers: layerRiverArray
            });
        }

        // 创建遥感图层
        function getlayerYaogan(url, title, layerName) {
            return new ol.layer.Tile({
                title: title,
                visible: true,
                source: new ol.source.TileWMS({
                    url: url,
                    params: { 'LAYERS': layerName, 'VERSION': '1.1.1' },
                })
            });
        }

        // 创建marker图层
        function getlayerMarker(featuerInfo) {
            var createLabelStyle = getcreateLabelStyle();
            var iconFeature = new ol.Feature({
                //坐标点
                geometry: new ol.geom.Point(featuerInfo.marker),
                //名称属性
                name: featuerInfo.name,
            });
            iconFeature.setStyle(createLabelStyle(iconFeature));

            //矢量标注图层
            return new ol.layer.Vector({
                title: '标记点',
                visible: true,
                source: new ol.source.Vector({
                    features: [iconFeature]
                })
            });
        }
    </script>

    <!-- 创建marker -->
    <script type="text/javascript">
        // 图标样式
        function getcreateLabelStyle() {
            return function (feature) {
                return new ol.style.Style({
                    image: new ol.style.Icon(
                        /** @type {olx.style.IconOptions} */
                        {
                            //设置图标点
                            anchor: [0.5, 60],
                            //图标起点
                            anchorOrigin: 'top-right',
                            //指定x值为图标点的x值
                            anchorXUnits: 'fraction',
                            //指定Y值为像素的值
                            anchorYUnits: 'pixels',
                            //偏移
                            offsetOrigin: 'top-right',
                            // offset:[0,10],
                            //图标缩放比例
                            scale: 0.5,
                            //透明度
                            opacity: 1.0,
                            //图标的url
                            src: 'assets/image/marker.png'
                        }),
                    text: new ol.style.Text({
                        //位置
                        textAlign: 'center',
                        //基准线
                        textBaseline: 'middle',
                        //文字样式
                        font: 'normal 14px 微软雅黑',
                        //文本内容
                        text: feature.get('name'),
                        //文本填充样式(即文字颜色)
                        fill: new ol.style.Fill({ color: '#aa3300' }),
                        stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2 })
                    })
                });
            }
        }

        // 点击事件
        function setEventPopup(map) {
            var container = document.getElementById("popup");
            var content = document.getElementById("popup-content");
            var popupCloser = document.getElementById("popup-closer");

            var overlay = new ol.Overlay({
                element: container,
                autoPan: true
            });

            map.on('click', function (e) {
                var pixel = map.getEventPixel(e.originalEvent);
                map.forEachFeatureAtPixel(pixel, function (feature) {
                    var coodinate = e.coordinate;
                    content.innerHTML = '<p class="markerText">' + feature.values_.name + '</p><br><p>' + coodinate + '</p>';
                    overlay.setPosition(coodinate);
                    map.addOverlay(overlay);
                });
            });

            popupCloser.addEventListener('click', function () {
                overlay.setPosition(undefined);
            });
        }
    </script>

    <!-- 获取边界 -->
    <script type="text/javascript">
        function getBound(url) {
            $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                async: false,
                success: function (data) {
                    array_bound = [data.resData.minx, data.resData.miny, data.resData.maxx, data.resData.maxy]
                }
            });
            return array_bound;
        }
    </script>

    <!-- 图例 -->
    <script type="text/javascript">
        // 创建图例
        // isGradient 是否是渐变色
        function getLegend(url, layer, isGradient) {
            $.ajax({
                type: "GET",
                url: url + layer,
                dataType: "json",
                success: function (data) {
                    var label_array = data.Legend[0].rules[0].symbolizers[0].Raster.colormap.entries;
                    // 图例分为渐变与正常图例
                    if (isGradient) {
                        var background_image = "linear-gradient(";
                        var startValue = "";
                        var endValue = "";
                        $.each(label_array, function (i, item) {
                            if (item.opacity == "1.0") {
                                if (item.label != "") {
                                    if (startValue == "") {
                                        startValue = item.label;
                                    } else if (startValue != "" && endValue == "") {
                                        endValue = item.label;
                                    }
                                }
                                background_image += item.color;
                                background_image += ",";
                            }
                        });
                        $("#label").css("background-image", background_image.substr(0, background_image.length - 1) + ")");
                        $("#label_min").text(startValue);
                        $("#label_max").text(endValue);
                    } else {
                        $("#table").html('');
                        $.each(label_array, function (i, item) {
                            if (item.opacity == "1.0") {
                                $("#table").append($('<tr><td style="background-color: ' + item.color + ';">' + keyLabel[item.label] + '</td></tr>'));
                            }
                        });
                    }
                }
            });
        }
    </script>
</head>

<body>
    <!-- Content here -->
    <div id="map">
        <div id="popup" class="ol-popup">
            <a href="#" id="popup-closer" class="ol-popup-closer"></a>
            <div id="popup-content">
            </div>
        </div>
    </div>
    <div id="labels">
        <div id="label" class="my-label-value">
            <table id="table" style="background-color:azure;"></table>
        </div>
        <label id="label_min" class="my-label-min-value"></label>
        <label id="label_max" class="my-label-max-value"></label>
    </div>
</body>

</html>

最终效果

在这里插入图片描述

后期完善代码

修改后可以根据按钮选择不同的模块进行整体数据切换,更加灵活

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="imagetoolbar" content="no">
    <title>遥感监测Demo</title>
    <link rel="stylesheet" href="assets/css/main.css" type="text/css">
    <script src="assets/js/jquery.min.js"></script>
    <script src="assets/js/ol.js"></script>
    <link rel='stylesheet' href='assets/css/ol.css' type='text/css'>
    <script src="assets/js/ol3-layerswitcher.js"></script>
    <link rel="stylesheet" href="assets/css/ol3-layerswitcher.css" type="text/css">
    <!-- 参数 -->
    <script type="text/javascript">
        var keyLabel = {
            '敏感数据': '敏感数据',
            '敏感数据': '敏感数据',
            '敏感数据': '敏感数据',
        }

        var baseSource = {
            base: {
                url: 'http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=4f62e1d82bd46e2ff470b291c2260156',
                name: '地图'
            },
            label: {
                url: 'http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=4f62e1d82bd46e2ff470b291c2260156',
                name: '注记'
            },
            river: "http://127.0.0.1:6075/basic_query/river_query/river_jjj"
        }
    </script>

    <!-- 初始化地图 -->
    <script type="text/javascript">
        var projection = new ol.proj.Projection({
            code: 'EPSG:4326',
            units: 'degrees',
            axisOrientation: 'neu'
        });

        $(function () {
            function ScaleControl(opt_options) {
                var options = opt_options || {};

                var element = document.createElement('div');
                element.setAttribute('id', 'scale');
                element.className = 'ol-scale-value';

                ol.control.Control.call(this, {
                    element: element,
                    target: options.target
                });
            };
            ol.inherits(ScaleControl, ol.control.Control);
            ScaleControl.prototype.setMap = function (map) {
                map.on('postrender', function () {
                    var view = map.getView();
                    var resolution = view.getResolution();
                    var dpi = 90.71428571428572;
                    var mpu = map.getView().getProjection().getMetersPerUnit();
                    var scale = resolution * mpu * 39.37 * dpi;

                    if (scale >= 9500 && scale <= 950000) {
                        scale = Math.round(scale / 1000) + 'K';
                    } else if (scale >= 950000) {
                        scale = Math.round(scale / 1000000) + 'M';
                    } else {
                        scale = Math.round(scale);
                    }
                    document.getElementById('scale').innerHTML = 'Scale = 1 : ' + scale;
                }, this);
                ol.control.Control.prototype.setMap.call(this, map);
            }

            function ZoomControl(opt_options) {
                var options = opt_options || {};

                var element = document.createElement('div');
                element.setAttribute('id', 'zoom');
                element.className = 'ol-zoom-value';

                ol.control.Control.call(this, {
                    element: element,
                    target: options.target
                });

            };
            ol.inherits(ZoomControl, ol.control.Control);
            ZoomControl.prototype.setMap = function (map) {
                map.on('moveend', function () {
                    var view = map.getView();
                    document.getElementById('zoom').innerHTML = 'Zoom level = ' + view.getZoom();
                }, this);
                ol.control.Control.prototype.setMap.call(this, map);
            }

            var view = new ol.View({
                center: [0, 0],
                zoom: 2,
                projection: projection,
                extent: [-180.0, -90.0, 180.0, 90.0]
            });

            map = new ol.Map({
                controls: ol.control.defaults({ attribution: false }).extend([
                    new ol.control.MousePosition(),
                    new ScaleControl(),
                    new ZoomControl()
                ]),
                layers: [],
                target: 'map',
                view: view
            });

            // 这个默认边界不用改
            map.getView().fit([116.72650652077483, 39.6152906023194, 117.18901780224532, 39.9895594296541], map.getSize());

            // 创建图层
            layerBase = getlayerBase(baseSource.base.url, baseSource.base.name);
            map.addLayer(layerBase);

            layerLabel = getlayerLabel(baseSource.label.url, baseSource.label.name);
            map.addLayer(layerLabel);

            // 添加多条河流图层
            map.addLayer(getlayerRiver(baseSource.river));

            // 图层选择
            map.addControl(new ol.control.LayerSwitcher());
            // 图层事件
            setEventPopup(map);
        });
    </script>

    <!-- 创建图层 -->
    <script type="text/javascript">
        // 创建地图图层
        function getlayerBase(url, title) {
            return new ol.layer.Tile({
                title: title,
                type: 'base',
                visible: true,
                source: new ol.source.XYZ({
                    url: url,
                    wrapX: false
                })
            });
        }

        // 创建注记图层
        function getlayerLabel(url, title) {
            return new ol.layer.Tile({
                title: title,
                visible: true,
                source: new ol.source.XYZ({
                    url: url,
                    wrapX: false
                })
            });
        }

        // 获取河流绘制风格
        function getRiverStyle(title) {
            return new ol.style.Style({
                stroke: new ol.style.Stroke({ //边界样式
                    color: '#0000FF',
                    width: 2
                }),
                // text: new ol.style.Text({
                //     text: title,
                //     fill: new ol.style.Fill({ color: '#aa3300' }),
                //     stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2 })
                // })
            });
        }

        // 创建河流图层
        function getlayerRiver(url) {
            $.ajax({
                url: url,
                type: "GET",
                dataType: "json",
                async: false,
                success: function (data) {
                    layerRiverArray = []
                    $.each(data.resData, function (i, item) {
                        layerRiverArray.push(
                            new ol.layer.Vector({
                                title: item.properties.name,
                                source: new ol.source.Vector({
                                    features: (new ol.format.GeoJSON()).readFeatures(item)
                                }),
                                style: getRiverStyle(item.properties.name)
                            })
                        )
                    });
                }
            });

            return new ol.layer.Group({
                title: '敏感数据',
                layers: layerRiverArray
            });
        }

        // 创建遥感图层
        function getlayerYaogan(url, title, layerName) {
            return new ol.layer.Tile({
                title: title,
                visible: true,
                source: new ol.source.TileWMS({
                    url: url,
                    params: { 'LAYERS': layerName, 'VERSION': '1.1.1' },
                })
            });
        }

        // 创建marker图层
        function getlayerMarker(featuerInfo) {
            var createLabelStyle = getcreateLabelStyle();
            var iconFeature = new ol.Feature({
                //坐标点
                geometry: new ol.geom.Point(featuerInfo.marker),
                //名称属性
                name: featuerInfo.name,
            });
            iconFeature.setStyle(createLabelStyle(iconFeature));

            //矢量标注图层
            return new ol.layer.Vector({
                title: featuerInfo.name,
                visible: true,
                source: new ol.source.Vector({
                    features: [iconFeature]
                })
            });
        }
    </script>

    <!-- 创建marker -->
    <script type="text/javascript">
        // 图标样式
        function getcreateLabelStyle() {
            return function (feature) {
                return new ol.style.Style({
                    image: new ol.style.Icon(
                        /** @type {olx.style.IconOptions} */
                        {
                            //设置图标点
                            anchor: [0.5, 60],
                            //图标起点
                            anchorOrigin: 'top-right',
                            //指定x值为图标点的x值
                            anchorXUnits: 'fraction',
                            //指定Y值为像素的值
                            anchorYUnits: 'pixels',
                            //偏移
                            offsetOrigin: 'top-right',
                            // offset:[0,10],
                            //图标缩放比例
                            scale: 0.5,
                            //透明度
                            opacity: 1.0,
                            //图标的url
                            src: 'assets/image/marker.png'
                        }),
                    // text: new ol.style.Text({
                    //     //位置
                    //     textAlign: 'center',
                    //     //基准线
                    //     textBaseline: 'middle',
                    //     //文字样式
                    //     font: 'normal 14px 微软雅黑',
                    //     //文本内容
                    //     text: feature.get('name'),
                    //     //文本填充样式(即文字颜色)
                    //     fill: new ol.style.Fill({ color: '#aa3300' }),
                    //     stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2 })
                    // })
                });
            }
        }

        function setEventPopup(map) {
            var container = document.getElementById("popup");
            var content = document.getElementById("popup-content");
            var popupCloser = document.getElementById("popup-closer");

            var overlay = new ol.Overlay({
                element: container,
                autoPan: true
            });

            map.on('click', function (e) {
                var pixel = map.getEventPixel(e.originalEvent);
                map.forEachFeatureAtPixel(pixel, function (feature) {
                    var coodinate = e.coordinate;
                    content.innerHTML = '<p class="markerText">' + feature.values_.name + '</p><br><p>' + coodinate + '</p>';
                    overlay.setPosition(coodinate);
                    map.addOverlay(overlay);
                });
            });

            popupCloser.addEventListener('click', function () {
                overlay.setPosition(undefined);
            });
        }
    </script>

    <!-- 获取边界 -->
    <script type="text/javascript">
        function getBound(url) {
            $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                async: false,
                success: function (data) {
                    array_bound = [data.resData.minx, data.resData.miny, data.resData.maxx, data.resData.maxy]
                }
            });
            return array_bound;
        }
    </script>

    <!-- 获取marker数据 -->
    <script type="text/javascript">
        function getMarker(url) {
            $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                async: false,
                success: function (data) {
                    markerArray = []
                    $.each(data.resData.resList, function (i, item) {
                        markerArray.push({
                            "id": item.waterCode,
                            "name": item.waterName,
                            "marker": [item.longitude, item.latitude]
                        })
                    });
                }
            });
            return markerArray;
        }
    </script>

    <!-- 图例 -->
    <script type="text/javascript">
        // 创建图例
        // isGradient 是否是渐变色
        function getLegend(url, layer, isGradient) {
            $.ajax({
                type: "GET",
                url: url + layer,
                dataType: "json",
                success: function (data) {
                    var label_array = data.Legend[0].rules[0].symbolizers[0].Raster.colormap.entries;
                    // 图例分为渐变与正常图例
                    if (isGradient) {
                        var background_image = "linear-gradient(";
                        var startValue = "";
                        var endValue = "";
                        $.each(label_array, function (i, item) {
                            if (item.opacity == "1.0") {
                                if (item.label != "") {
                                    if (startValue == "") {
                                        startValue = item.label;
                                    } else if (startValue != "" && endValue == "") {
                                        endValue = item.label;
                                    }
                                }
                                background_image += item.color;
                                background_image += ",";
                            }
                        });
                        $("#table").html('');
                        $("#label").css("background-image", background_image.substr(0, background_image.length - 1) + ")");
                        $("#label_min").text(startValue);
                        $("#label_max").text(endValue);
                    } else {
                        $("#table").html('');
                        $.each(label_array, function (i, item) {
                            if (item.opacity == "1.0") {
                                $("#table").append($('<tr><td style="background-color: ' + item.color + ';">' + keyLabel[item.label] + '</td></tr>'));
                            }
                        });
                        $("#label").removeAttr("style");
                        $("#label_min").text("");
                        $("#label_max").text("");
                    }
                }
            });
        }
    </script>
    <script type="text/javascript">
        // 创建图层
        function createLayer(workspace, legend, layer, name, isGradient, markerData) {
            var mapSource = {
                legend: {
                    url: 'http://127.0.0.1:8080/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=application/json&STRICT=false&style=',
                    layer: workspace + ':' + legend,
                    isGradient: isGradient,
                },
                yaogan: {
                    url: 'http://127.0.0.1:8080/geoserver/gwc/service/wms',
                    name: name + layer,
                    layer: workspace + ':' + layer
                },
                bound: 'http://127.0.0.1:6075/public/geo_bound/bound?workspace=' + workspace + '&layer=' + layer
            }

            // 清除图层
            try {
                map.removeLayer(layerYaogan);
                map.removeLayer(layerMarker);
            } catch (e) {

            }
            // 遥感影像图层
            layerYaogan = getlayerYaogan(mapSource.yaogan.url, mapSource.yaogan.name, mapSource.yaogan.layer);
            map.addLayer(layerYaogan);
            // 获取图例, 渐变图例,用于特征污染物空间分布
            getLegend(mapSource.legend.url, mapSource.legend.layer, mapSource.legend.isGradient)
            // 移动镜头
            map.getView().fit(getBound(mapSource.bound), map.getSize());

            // 创建marker
            layerMarkerGroup = []
            markerData.forEach(val => {
                layerMarkerGroup.push(getlayerMarker(val))
            });
            layerMarker = new ol.layer.Group({
                title: '标记点',
                layers: layerMarkerGroup
            })
            map.addLayer(layerMarker);
        }

        // 切换数据
        function change1() {
            var name = '敏感数据';
            var workspace = '敏感数据';
            var legend = '敏感数据';
            var city = '敏感数据';
            var time = '2019-11';
            var layer = city + '_' + legend + '_' + time;
            var isGradient = true;
            var markerData = getMarker('http://127.0.0.1:6075/remote_sensing/water_pollution/search?belong=' + city + '&time=' + time)
            createLayer(workspace, legend, layer, name, isGradient, markerData)
        }
        function change2() {
            var name = '敏感数据';
            var workspace = '敏感数据';
            var legend = '敏感数据';
            var city = '敏感数据';
            var time = '2018';
            var layer = city + '_' + time;
            var isGradient = false;
            var markerData = []
            createLayer(workspace, legend, layer, name, isGradient, markerData)
        }
        function change3() {
            var name = '敏感数据';
            var workspace = '敏感数据';
            var legend = '敏感数据';
            var city = '敏感数据';
            var time = '2018';
            var layer = city + '_' + time;
            var isGradient = false;
            var markerData = []
            createLayer(workspace, legend, layer, name, isGradient, markerData)
        }
    </script>
</head>

<body>
    <button onclick="change1()">敏感数据</button>
    <button onclick="change2()">敏感数据</button>
    <button onclick="change3()">敏感数据</button>
    <!-- Content here -->
    <div id="map">
        <div id="popup" class="ol-popup">
            <a href="#" id="popup-closer" class="ol-popup-closer"></a>
            <div id="popup-content">
            </div>
        </div>
    </div>
    <div id="labels">
        <div id="label" class="my-label-value">
            <table id="table" style="background-color:azure;"></table>
        </div>
        <label id="label_min" class="my-label-min-value"></label>
        <label id="label_max" class="my-label-max-value"></label>
    </div>
</body>

</html>

在这里插入图片描述

后续问题

后续运行出现了很多问题,重新部署后的Geoserver没有进行Tile Cache,导致地图加载不出来,记得一开始是可以【如果提前做好切片缓存,加载本地切片,如果没有提前做切片,则在浏览过程中生成切片缓存】这样的,后来不知道咋改成这样了,因为当时已经生成好了缓存了,所以测试没有出现问题,现在新的环境,用这套代码没有办法加载出图层来。

做了如下修改

		var projection = new ol.proj.Projection({
            code: 'EPSG:4326',
            units: 'degrees',
            axisOrientation: 'neu'
        });
        var gridsetName = 'EPSG:4326';
        //切片名
        var gridNames = ['EPSG:4326:0', 'EPSG:4326:1', 'EPSG:4326:2', 'EPSG:4326:3', 'EPSG:4326:4', 'EPSG:4326:5', 'EPSG:4326:6', 'EPSG:4326:7', 'EPSG:4326:8', 'EPSG:4326:9', 'EPSG:4326:10', 'EPSG:4326:11', 'EPSG:4326:12', 'EPSG:4326:13', 'EPSG:4326:14', 'EPSG:4326:15', 'EPSG:4326:16', 'EPSG:4326:17', 'EPSG:4326:18', 'EPSG:4326:19', 'EPSG:4326:20', 'EPSG:4326:21'];
        //切片大小
        var resolutions = [0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.001373291015625, 6.866455078125E-4, 3.4332275390625E-4, 1.71661376953125E-4, 8.58306884765625E-5, 4.291534423828125E-5, 2.1457672119140625E-5, 1.0728836059570312E-5, 5.364418029785156E-6, 2.682209014892578E-6, 1.341104507446289E-6, 6.705522537231445E-7, 3.3527612686157227E-7];
		var url = "http://wsl:6079/geoserver/gwc/service/wmts";
		// 创建遥感图层
        function getlayerYaogan(url, title, layerName) {
            //设置地图投影
            return new ol.layer.Tile({
                title: title,
                visible: true,
                source: new ol.source.WMTS({
                    url: url,
                    layer: layerName,
                    matrixSet: gridsetName,
                    format: 'image/png',
                    projection: projection,
                    //切片信息
                    tileGrid: new ol.tilegrid.WMTS({
                        tileSize: [256, 256],
                        extent: [-180.0, -90.0, 180.0, 90.0],//范围
                        origin: [-180.0, 90.0],
                        resolutions: resolutions,
                        matrixIds: gridNames
                    }),
                    wrapX: true
                })
            });
        }

就可以实现【如果提前做好切片缓存,加载本地切片,如果没有提前做切片,则在浏览过程中生成切片缓存】了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值