先看下我之前利用arcgis js api实现的蒙版效果:
arcgis js 4.18新体验:阴影滤镜图层
然后老规矩,看下利用 ol 去实现的效果吧


用的资源都是在线网址,不是切好的tif哦~~~
第一张图是可以只露出想要区域的底图,外部的可以设置透明色;
第二张图在第一份的基础上加了个影像,只显示mask 内部的影像。
很简单,也很有意思,可以延伸出其他在前端可以展示的效果。
实现过程:
主要用的是 ol-ext 的插件实现的(哈哈我也是站在别人的肩膀上蹦跶下的)
插件网址:ol-ext
然后直接上代码吧
- <template>
- <div id="olMap"></div>
- </template>
-
- <script>
- import 'ol-ext/dist/ol-ext.min.css';
- import { Map, View } from "ol";
- import OSM from "ol/source/OSM"
- import Stamen from 'ol/source/Stamen'
- import TileLayer from "ol/layer/Tile"
- import GeoJSON from "ol/format/GeoJSON";
- import Fill from "ol/style/Fill";
- import Mask from 'ol-ext/filter/Mask'
- import Crop from 'ol-ext/filter/Crop'
- import {createTDTImg} from '@/components/map/olMap/modules/basemap'
- export default {
- name: "ol-蒙版图层",
- data() {
- return {
- mapObj:{
- map:null,
- view:null,
- },
- namespace:'testKH',
- layername:'shushan',
- baseUrl:'http://localhost:7777/geoserver/testKH/'
- }
- },
- mounted() {
- this.initMap();
- },
- methods: {
- initMap(){
- const osmBaseLayer = new TileLayer({
- source:new OSM()
- })
- this.mapObj.view = new View({
- center: [117.28, 31.86],
- zoom: 8,
- projection: 'EPSG:4326',
- })
- this.mapObj.map = new Map({
- layers :[osmBaseLayer],
- view:this.mapObj.view,
- target:'olMap'
- })
- //添加蒙版图层
- let f = new GeoJSON().readFeature(require('@/assets/indexMap.json').features[0])
- var mask = new Mask({
- feature: f,
- wrapX: true,
- inner: false,
- fill: new Fill({ color:[255,255,255,0.6] })
- });
- var crop = new Crop({
- feature: f,
- wrapX: true,
- inner: false
- });
- // 若不加天地图就直接将osmlayer 使用addFilter 就行
- // osmBaseLayer.addFilter(crop);
- // osmBaseLayer.addFilter(mask);
-
- let tdtImgLayer = createTDTImg();
- tdtImgLayer.addFilter(crop);
- tdtImgLayer.addFilter(mask);
- this.mapObj.map.addLayer(tdtImgLayer)
- }
- },
- components: {}
- }
- </script>
-
- <style scoped>
- #olMap{
- height:100%;
- width: 100%;
- }
- </style>