arcgiss如何在空白点图层加入坐标_Cesium多源数据加载之影像图层(二)

本文介绍了如何在Cesium中加载来自ArcGISServer和GeoServer的WMS服务,详细解析了加载过程中的关键参数设置,并展示了加载ArcGISServer独有的图层服务的方法。通过示例代码,读者可以学习到如何在Cesium应用中整合不同来源的地理信息服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dff03942fabdb06c0d4cc92d18c1fa47.png

本文衔接上篇文章:

不睡觉的怪叔叔:Cesium多源数据加载之影像图层(一)​zhuanlan.zhihu.com
4cdb5cd13bdcb8c4386ff1155fee2080.png

一、加载WMS服务

OGC的WMS服务就不赘述了,可以去OGC官网了解:

The Home of Location Technology Innovation and Collaboration​www.ogc.org
eddd82be99873b95fa7952caed546446.png

或者查看这篇文章:

不睡觉的怪叔叔:OpenLayers教程十六:多源数据加载之WMS​zhuanlan.zhihu.com
726a349b3ac153397a9d915e3f097d9b.png

1.1、加载ArcGIS Server发布的WMS服务

可以查看这篇文章了解如何在ArcGIS Server中发布WMS服务:

不睡觉的怪叔叔:ArcGIS Server教程:发布WMS服务​zhuanlan.zhihu.com
726a349b3ac153397a9d915e3f097d9b.png

在Cesium中通过Cesium.WebMapServiceImageryProvider类去加载WMS服务,直接来看一个示例:

首先需要在ArcGIS Server中发布一个WMS服务,我这里发布了一个广东路网数据的WMS服务gd_roads_wms,然后在ArcGIS Server Manager中找到对应的URL:

7808751ef811e4e193208eee74ec2f47.png

然后在从ArcGIS Server的REST目录中找到图层的编号:

4125ba938afee8b56e2a52bc3c76800c.png

为什么要去找到图层编号呢?因为ArcGIS Server中有图层组的概念(GeoServer也有),所以要找到图层编号,用以指定访问该图层。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>加载ArcGIS Server发布的WMS服务</title>
    <script src="http://localhost:8080/cesium/Cesium/Cesium.js"></script>
    <link href="http://localhost:8080/cesium/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesium"></div>

    <script>
        // 初始化Cesium应用程序
        Cesium.Ion.defaultAccessToken = '你的Cesium访问Token';
        const viewer = new Cesium.Viewer('cesium');
        const imageryLayers = viewer.imageryLayers;

        // 加载ArcGIS Server发布的WMS服务
        const arcgis_wms_imageryProvider = new Cesium.WebMapServiceImageryProvider({
            url: 'https://localhost:6443/arcgis/services/gd_roads_wms/MapServer/WMSServer',
            layers: '0',
            parameters: {
                service: 'WMS',
                format: 'image/png',
                transparent: true
            }
        });
        // 将WMS数据源组织成影像图层并加入到影像图层容器中
        const arcgis_wms_imageryLayer = new Cesium.ImageryLayer(arcgis_wms_imageryProvider);
        imageryLayers.add(arcgis_wms_imageryLayer);
    </script>
</body>
</html>

以上参数中,layers即指定需要访问的图层的图层编号,transparent:true表示将WMS服务图层的背景透明化。

646b451189f714e4b6b9748ae9fba27f.png

1.2、加载GeoServer发布的WMS服务

首先也在GeoServer上发布一个WMS服务:

85d703ffd9534bc411d7dfeb1c294c5b.png

然后使用Cesium加载:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>加载GeoServer发布的WMS服务</title>
    <script src="http://localhost:8080/cesium/Cesium/Cesium.js"></script>
    <link href="http://localhost:8080/cesium/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesium"></div>

    <script>
        // 初始化Cesium应用程序
        Cesium.Ion.defaultAccessToken = '你的Cesium访问Token';
        const viewer = new Cesium.Viewer('cesium');
        const imageryLayers = viewer.imageryLayers;

        // 加载GeoServer发布的WMS服务
        const geoserver_wms_imageryProvider = new Cesium.WebMapServiceImageryProvider({
            url: 'http://localhost:8080/geoserver/guangdong/wms',
            layers: 'guangdong:gd_roads',
            parameters: {
                service: 'WMS',
                version: '1.3.0',
                format: 'image/png',
                transparent: true
            },
            crs: 'CRS:84'
        });
        // 将WMS数据源组织成影像图层并加入到影像图层容器中
        const geoserver_wms_imageryLayer = new Cesium.ImageryLayer(geoserver_wms_imageryProvider);
        imageryLayers.add(geoserver_wms_imageryLayer);
    </script>
</body>
</html>

可以发现参数和前面加载ArcGIS Server发布的WMS服务的参数有几处不同:

  • layers:'guangdong:gd_roads' —— 因为GeoServer将图层组织为"工作区:图层名"的形式,所以需要根据这个形式指定特定图层。
  • version:'1.3.0' —— 使用WMS的1.3.0版本加载服务,默认情况下Cesium会使用1.1.1版本。
  • crs:'CRS:84' —— 手动指定坐标系为WGS84。这里需要注意的是:如果version参数是默认的1.1.1版本的话,就需要通过srs参数(EPSG格式)指定特定坐标系。

416eaf90a8aff1c92354d067aa34ee0c.png

二、加载ArcGIS独有的图层服务

刚才说到ArcGIS Server发布的WMS服务,另外ArcGIS Server默认发布的是ArcGIS Server独有的图层服务,如果没有切片就是动态图层服务,如果进行了切片就是瓦片地图服务。

ArcGIS Server通常自带一个图层服务,如下所示:

4cc9284ea120854b5a6f5aada617d869.png

f5d6cefc48c46466beffd32112650394.png

在Cesium中使用Cesium.ArcGisMapServerImageryProvider类加载ArcGIS Server独有的图层服务,所以我们可以在Cesium中使用REST接口加载上面的这个服务:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ArcGIS Server独有的图层服务</title>
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.65/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.65/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesium"></div>

    <script>
        const viewer = new Cesium.Viewer('cesium');
        const imageryLayers = viewer.imageryLayers;
        
        // 加载ArcGIS Server独有的图层服务
        const arcgisImageryProvider = new Cesium.ArcGisMapServerImageryProvider({
            url: 'https://localhost:6443/arcgis/rest/services//SampleWorldCities/MapServer'
        });
        // 组织为图层并加载到图层容器中
        const arcgisImageryLayer = new Cesium.ImageryLayer(arcgisImageryProvider);
        imageryLayers.add(arcgisImageryLayer);
    </script>
</body>
</html>

ad9470c93af01d49506752a940dda8d2.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值