openlayer地图裁切

openlayer地图裁剪

在使用openlayer开发地图应用时,可能会要求根据只显示某个范围内的底图或数据,这个功能写起来还是比较简单的。只需要用到一点canvas的知识就可以。

创建图层

不管是Tile图层还是Vector图层,按照官方示例创建并添加数据就可以了。重点在下一步。

layer = new Tile(...);

创建裁切feature

需要根据范围创建一个裁切范围的polygon feature。

import Feature from 'ol/Feature';
import Polygon from "ol/geom/Polygon"
let clipFeature = new Feature({
    geometry: new Polygon(coords),
})

给图层增加监听

需要增加的监听有两个,prerender和postrender。
prerender是渲染前触发,在这一步需要保存原来的渲染状态,再对渲染范围进行裁剪。
postrender是渲染后触发,在这一步要调用方法还原渲染状态。

import { getVectorContext } from 'ol/render';
layer.on("prerender",event=>{
    let vectorContext = getVectorContext(event);
    event.context.globalCompositeOperation = 'source-over';
    let ctx = event.context;
    ctx.save();
    vectorContext.drawFeature(clipFeature, new style(...));// 可以对边界设置一个样式
    ctx.clip();
})
layer.on("postrender", (event) => {
    let ctx = event.context;
    ctx.restore();
})

但这样写了之后发现当视野范围看不到裁切范围时,地图又会重新显示出来。因此需要改进一下。

改进

给layer添加一个显示范围,这样范围之外的内容就不会显示,范围内的内容就会被裁切。

layer.setExtent(clipFeature.getGeometry().getExtent())

最终效果

在这里插入图片描述

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值