OpenLayers调用最新WMTS服务遥感影像

WMTS(Web Map Tile Service)是最常用的网络地图服务之一,基于OGC的开放标准,可以兼容常用的桌面GIS和WebGIS框架。

OpenLayers是一个专为WebGIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问,目前最新版本为8.2.0。

目前,网上最新的遥感影像是四维地球影像(四维地球遥感云服务平台),时效性为2023年中期,超过了天地图和谷歌地球,也是奥维互动地图的默认影像地图。

四维地球影像接口API文档如下:

四维地球遥感云服务平台icon-default.png?t=N7T8https://siweiearth.com/sw-nav/helpDoc?file=API%2FWMTS%E6%9C%8D%E5%8A%A1%E6%B5%8F%E8%A7%88.md&title=WMTS%E6%9C%8D%E5%8A%A1%E6%B5%8F%E8%A7%88OpenLayers提供WMTS服务接口,一般使用墨卡托投影(EPSG:3857),所以使用如下WMTS链接:

https://swapi.siweiearth.com/sj_raster/v6/wmts/image_tile_mg/{terminal}/{data_id}/{data_version}?service=wmts&request=gettile

此外,还需要申请ak,用于获取影像调用权限,ak获取方法如下:

四维地球遥感云服务平台icon-default.png?t=N7T8https://siweiearth.com/sw-nav/helpDoc?file=dev%2F%E8%AE%A4%E8%AF%81%E9%89%B4%E6%9D%83.md&title=%E8%AE%A4%E8%AF%81%E9%89%B4%E6%9D%83具体代码如下:

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

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>OpenLayers调用四维地球示例</title>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>

    <style>
        html, body, #map {
            border: 0;
            margin: 0;
            padding: 0;
            width: 100vw;
            height: 100vh;
        }
    </style>
</head>

<body>
    <div id="map"></div>
</body>
<script type="text/javascript">
    window.onload = function() {

        let projection = ol.proj.get('EPSG:3857');          // 获取web墨卡托投影坐标系
        let projectionExtent = projection.getExtent();      // web墨卡托投影坐标系的四至
        let width = ol.extent.getWidth(projectionExtent);   // web墨卡托投影坐标系的水平宽度,单位米
        let resolutions = [];                               // 瓦片分辨率
        let matrixIds = [];                                 // 可以在元数据中找到
        for(let z = 0; z < 19; z++){
            resolutions[z] = width / (256 * Math.pow(2, z)); 
            matrixIds[z] = z;
        }
        let wmtsTileGrid = new ol.tilegrid.WMTS({
            origin: ol.extent.getTopLeft(projectionExtent), // 原点(左上角)
            resolutions: resolutions,                       // 分辨率数组
            matrixIds: matrixIds                            // 矩阵ID,就是瓦片坐标系z维度各个层级的标识
        }); 
        
        // WMTS数据源与地图
        let wmtsSource = new ol.source.WMTS({
            url: "https://swapi.siweiearth.com/sj_raster/v6/wmts/image_tile_mg/system/12621098501/1?service=wmts&request=gettile&ak=",
            matrixSet: 'EPSG:3857',             // 投影坐标系参数矩阵集
            format: 'image/png',                // 图片格式
            projection: projection,             // 投影坐标系
            tileGrid: wmtsTileGrid
        });
        let wmtsLayer = new ol.layer.Tile({
            source: wmtsSource
        });
        var osmSource = new ol.source.OSM();

        //实例化地图对象
        var map = new ol.Map({
            //目标容器
            target: 'map',
            //图层
            layers: [
                //加载瓦片网格图层
                wmtsLayer,
                //瓦片行列号图层,可隐藏
                new ol.layer.Tile({
                    source: new ol.source.TileDebug({
                        projection: 'EPSG:3857',             //地图投影坐标系
                        tileGrid: osmSource.getTileGrid()    //获取瓦片网格信息
                    })
                })
            ],
            //实例化视图对象
            view: new ol.View({
                //视图中心
                center: ol.proj.transform([114.76116, 30.397947], 'EPSG:4326', 'EPSG:3857'),
                //视图缩放等级
                zoom: 11
            })
        });
    };
</script>

</html>

效果如下图所示:

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的例子,展示如何使用OpenLayers加载WMTS服务: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>OpenLayers WMTS Example</title> <link rel="stylesheet" href="https://openlayers.org/en/latest/css/ol.css" type="text/css"> <script src="https://openlayers.org/en/latest/build/ol.js"></script> </head> <body> <div id="map" class="map"></div> <script type="text/javascript"> var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }), new ol.layer.Tile({ source: new ol.source.WMTS({ url: 'https://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/WMTS', layer: 'WorldTimeZones', matrixSet: 'GoogleMapsCompatible', format: 'image/png', projection: 'EPSG:3857', tileGrid: new ol.tilegrid.WMTS({ origin: ol.extent.getTopLeft(ol.proj.transform([-180, 90], 'EPSG:4326', 'EPSG:3857')), resolutions: [ 156543.0339280410, 78271.51696402048, 39135.75848201023, 19567.87924100512, 9783.93962050256, 4891.96981025128, 2445.98490512564, 1222.99245256282, 611.49622628141, 305.7481131407048, 152.8740565703525, 76.43702828517624, 38.21851414258813, 19.10925707129406, 9.554628535647032, 4.777314267823516, 2.388657133911758, 1.194328566955879, 0.5971642834779395, 0.2985821417389697, 0.1492910708694849, 0.0746455354347424 ], matrixIds: [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21' ] }) }) }) ], view: new ol.View({ center: ol.proj.fromLonLat([0, 0]), zoom: 2 }) }); </script> </body> </html> ``` 在这个例子中,我们首先创建了一个OpenLayers地图对象。我们添加了两个图层。第一个图层是使用OpenStreetMap数据源的瓦片图层。第二个图层是使用WMTS数据源的瓦片图层。 我们使用`ol.source.WMTS`类创建WMTS数据源。我们指定了WMTS服务的URL,图层名称,矩阵集,格式和投影。我们还指定了一个自定义瓦片网格,其中包含瓦片的分辨率和矩阵ID。 最后,我们在地图视图中设置了中心点和缩放级别。我们使用`ol.proj.fromLonLat`函数将经纬度坐标转换为Web Mercator投影坐标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值