• Cesium调用 WMS 、WMTS 服务


    参考文章地址:Cesium调用 ArcGIS Sever 以及 GeoSever 发布的地图服务

    cesium测试示例(包括官方的示例)中   arcgis服务都无法访问了

    根据原文找到一个在线的可访问服务地址:https://basemap.nationalmap.gov/arcgis/rest/services    使用arcgis server 发布的,点击某一个服务名,在服务页面可以访问其  WMS 、WMTS 格式

    把如下代码粘贴到  地址   https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=Imagery%20Layers%20Manipulation.html   中页面左侧 JS 代码区域(将其中代码全部替换)

    不用害怕代码这么多   这个只是在原案例上增加了   // 添加 WMTS   和     // 添加 WMS     两小段代码

    var viewer = new Cesium.Viewer('cesiumContainer', {
        baseLayerPicker : false
    });
    var imageryLayers = viewer.imageryLayers;
    
    var viewModel = {
        layers : [],
        baseLayers : [],
        upLayer : null,
        downLayer : null,
        selectedLayer : null,
        isSelectableLayer : function(layer) {
            return this.baseLayers.indexOf(layer) >= 0;
        },
        raise : function(layer, index) {
            imageryLayers.raise(layer);
            viewModel.upLayer = layer;
            viewModel.downLayer = viewModel.layers[Math.max(0, index - 1)];
            updateLayerList();
            window.setTimeout(function() { viewModel.upLayer = viewModel.downLayer = null; }, 10);
        },
        lower : function(layer, index) {
            imageryLayers.lower(layer);
            viewModel.upLayer = viewModel.layers[Math.min(viewModel.layers.length - 1, index + 1)];
            viewModel.downLayer = layer;
            updateLayerList();
            window.setTimeout(function() { viewModel.upLayer = viewModel.downLayer = null; }, 10);
        },
        canRaise : function(layerIndex) {
            return layerIndex > 0;
        },
        canLower : function(layerIndex) {
            return layerIndex >= 0 && layerIndex < imageryLayers.length - 1;
        }
    };
    var baseLayers = viewModel.baseLayers;
    
    Cesium.knockout.track(viewModel);
    
    function setupLayers() {
        // Create all the base layers that this example will support.
        // These base layers aren't really special.  It's possible to have multiple of them
        // enabled at once, just like the other layers, but it doesn't make much sense because
        // all of these layers cover the entire globe and are opaque.
        // 添加 WMTS
        addBaseLayerOption(
                'USGS Shaded Relief (via WMTS)',
                new Cesium.WebMapTileServiceImageryProvider({
                    url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS',
                    layer : 'USGSShadedReliefOnly',
                    style : 'default',
                    format : 'image/jpeg',
                    tileMatrixSetID : 'default028mm',
                    maximumLevel: 19,
                    credit : 'U. S. Geological Survey'
                }));
        // 添加 WMS
        addBaseLayerOption(
                'USGS Shaded Relief (via WMS)',
                new Cesium.WebMapServiceImageryProvider({
                    url : 'https://basemap.nationalmap.gov/arcgis/services/USGSHydroCached/MapServer/WMSServer',
                    layers : '0',
                }));
        
        addBaseLayerOption(
                'Bing Maps Aerial',
                undefined); // the current base layer
        addBaseLayerOption(
                'Bing Maps Road',
                new Cesium.BingMapsImageryProvider({
                    url : 'https://dev.virtualearth.net',
                    mapStyle: Cesium.BingMapsStyle.ROAD
                }));
        addBaseLayerOption(
                'ArcGIS World Street Maps',
                new Cesium.ArcGisMapServerImageryProvider({
                    url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
                }));
        addBaseLayerOption(
                'OpenStreetMaps',
                Cesium.createOpenStreetMapImageryProvider());
        addBaseLayerOption(
                'MapQuest OpenStreetMaps',
                Cesium.createOpenStreetMapImageryProvider({
                    url : 'https://otile1-s.mqcdn.com/tiles/1.0.0/osm/'
                }));
        addBaseLayerOption(
                'Stamen Maps',
                Cesium.createOpenStreetMapImageryProvider({
                    url : 'https://stamen-tiles.a.ssl.fastly.net/watercolor/',
                    fileExtension: 'jpg',
                    credit: 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.'
                }));
        addBaseLayerOption(
                'Natural Earth II (local)',
                Cesium.createTileMapServiceImageryProvider({
                    url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII')
                }));
    
        // Create the additional layers
        addAdditionalLayerOption(
                'United States GOES Infrared',
                new Cesium.WebMapServiceImageryProvider({
                    url : 'https://mesonet.agron.iastate.edu/cgi-bin/wms/goes/conus_ir.cgi?',
                    layers : 'goes_conus_ir',
                    credit : 'Infrared data courtesy Iowa Environmental Mesonet',
                    parameters : {
                        transparent : 'true',
                        format : 'image/png'
                    }
                }));
        addAdditionalLayerOption(
                'United States Weather Radar',
                new Cesium.WebMapServiceImageryProvider({
                    url : 'https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?',
                    layers : 'nexrad-n0r',
                    credit : 'Radar data courtesy Iowa Environmental Mesonet',
                    parameters : {
                        transparent : 'true',
                        format : 'image/png'
                    }
                }));
        addAdditionalLayerOption(
                'TileMapService Image',
                Cesium.createTileMapServiceImageryProvider({
                    url : '../images/cesium_maptiler/Cesium_Logo_Color'
                }),
                0.2);
        addAdditionalLayerOption(
                'Single Image',
                new Cesium.SingleTileImageryProvider({
                    url : '../images/Cesium_Logo_overlay.png',
                    rectangle : Cesium.Rectangle.fromDegrees(-115.0, 38.0, -107, 39.75)
                }),
                1.0);
        addAdditionalLayerOption(
                'Grid',
                new Cesium.GridImageryProvider(), 1.0, false);
        addAdditionalLayerOption(
                'Tile Coordinates',
                new Cesium.TileCoordinatesImageryProvider(), 1.0, false);
    }
    
    function addBaseLayerOption(name, imageryProvider) {
        var layer;
        if (typeof imageryProvider === 'undefined') {
            layer = imageryLayers.get(0);
            viewModel.selectedLayer = layer;
        } else {
            layer = new Cesium.ImageryLayer(imageryProvider);
        }
    
        layer.name = name;
        baseLayers.push(layer);
    }
    
    function addAdditionalLayerOption(name, imageryProvider, alpha, show) {
        var layer = imageryLayers.addImageryProvider(imageryProvider);
        layer.alpha = Cesium.defaultValue(alpha, 0.5);
        layer.show = Cesium.defaultValue(show, true);
        layer.name = name;
        Cesium.knockout.track(layer, ['alpha', 'show', 'name']);
    }
    
    function updateLayerList() {
        var numLayers = imageryLayers.length;
        viewModel.layers.splice(0, viewModel.layers.length);
        for (var i = numLayers - 1; i >= 0; --i) {
            viewModel.layers.push(imageryLayers.get(i));
        }
    }
    
    setupLayers();
    updateLayerList();
    
    //Bind the viewModel to the DOM elements of the UI that call for it.
    var toolbar = document.getElementById('toolbar');
    Cesium.knockout.applyBindings(viewModel, toolbar);
    
    Cesium.knockout.getObservable(viewModel, 'selectedLayer').subscribe(function(baseLayer) {
        // Handle changes to the drop-down base layer selector.
        var activeLayerIndex = 0;
        var numLayers = viewModel.layers.length;
        for (var i = 0; i < numLayers; ++i) {
            if (viewModel.isSelectableLayer(viewModel.layers[i])) {
                activeLayerIndex = i;
                break;
            }
        }
        var activeLayer = viewModel.layers[activeLayerIndex];
        var show = activeLayer.show;
        var alpha = activeLayer.alpha;
        imageryLayers.remove(activeLayer, false);
        imageryLayers.add(baseLayer, numLayers - activeLayerIndex - 1);
        baseLayer.show = show;
        baseLayer.alpha = alpha;
        updateLayerList();
    });
  • 相关阅读:
    Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能
    linux irq 自动探测
    gpio子系统和pinctrl子系统(下)
    gpio子系统和pinctrl子系统(中)
    gpio子系统和pinctrl子系统(上)
    linux驱动基础系列--linux spi驱动框架分析
    linux驱动基础系列--linux rtc子系统
    linux驱动基础系列--Linux I2c驱动分析
    camera驱动框架分析(上)
    camera驱动框架分析(中)
  • 原文地址:https://www.cnblogs.com/mumu122GIS/p/10537328.html
Copyright © 2020-2023  润新知