openlayer根据服务器返回状态码,替换使用本地图片

一、问题产生

使用openlayer加载自己公司的wmts服务,要求根据用户权限、瓦片存在与否等进行直观的瓦片替换。例如某张瓦片不存在,则替换该瓦片为404的一张图片,某个区域用户无权限查看,则替换为无权限(401)图片(如下图);

在这里插入图片描述

二、问题分析&解决

首先贴上加载服务的代码。关于tileGridprojection等属性与本人影像服务器计算有关,也与本博客无关,故不细说。

在这里,我们使用的是ol.layer.tile类来加载瓦片,瓦片行列号计算方式满足wmts标准。故采用ol.source.WMTS来进行加载。

let wmtsLayer = new ol.layer.Tile({
    source: new ol.source.WMTS({
        url: url,
        projection: projection, //数据的投影坐标系
        tileGrid: tileGrid,
        format: "image/png",
        crossOrigin: 'anonymous'
    })
});

map.addLayer(wmtsLayer)

在加载服务之后,根据控制台的ajax请求,定位到瓦片请求的具体代码,找到源文件TileImage.js中的tileLoadFunction。查阅api也可以得到。

该类如下定义:

super({
//--其余代码
   tileLoadFunction ?
        options.tileLoadFunction : defaultTileLoadFunction,
//--其余代码
 });

找到defaultTileLoadFunction定义:
在这里插入图片描述
这里我们发现,最终生成的wmts格式的url,被赋值给了一个Image对象。我们的思路就有了。于是我们跟踪这个tileLoadFunction 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers是一个开源的JavaScript库,用于在Web上创建交互式地图。它提供了多种功能和组件,包括加载图片图层、瓦片图层和导出地图为图片文件等功能。 要加载图片图层,可以使用OpenLayers的ImageStaticSource类。首先,需要定义一个地理坐标范围(extent),然后创建一个Projection对象,将图片的URL、投影和范围传递给ImageStaticSource的构造函数。接下来,创建一个Image图层,并将ImageStaticSource作为其数据源。最后,将图层添加到地图中。以下是一个示例代码: ```javascript const extent = [111, 30.0, 116, 34.0]; const projection = new Projection({ code: "xkcd-image", units: "pixels", extent: extent, }); var imageSource = new ImageStaticSource({ url: "http://127.0.0.1:8181/rainfall/2017-07-31-0.png", projection: projection, imageExtent: extent, }); var imageLayer = new Image({ source: imageSource, opacity: 0.6, }); this.map.addLayer(imageLayer); ``` 另外,如果需要加载瓦片图层,可以使用OpenLayersTile图层和OSM数据源。Tile图层是一种基于瓦片的地图显示方式,而OSM数据源是OpenStreetMap的地图数据源。以下是一个示例代码: ```javascript var tileLayer = new Tile({ source: new OSM(), }); this.map.addLayer(tileLayer); ``` 最后,如果需要将地图导出为图片文件,可以使用OpenLayers提供的导出样例。该样例演示了如何将地图导出为base64编码的图片文件。你可以在OpenLayers官网的示例中找到这个导出样例。 希望这些信息对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值