openlayers:实现更改投影时保持比例 (附完整源码)

这篇原创博客深入探讨了如何在OpenLayers中进行投影变换的同时保持地图比例不变。通过分析`main.js`、`index.html`和`package.json`文件,作者提供了完整的源码示例,帮助读者理解这一关键操作。

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

openlayers:实现更改投影时保持比例


更改投影时保持比例的示例。getPointResolution()用于计算与旧投影的分辨率相对应的新投影的分辨率。

main.js

import Map from 'ol/Map.js';
import OSM from 'ol/source/OSM.js';
import TileLayer from 'ol/layer/Tile.js';
import View from 'ol/View.js';
import {ScaleLine, defaults as defaultControls} from 'ol/control.js';
import {
  getPointResolution,
  get as getProjection,
  transform,
} from 'ol/proj.js';

const viewProjSelect = document.getElementById('view-projection');
const projection = getProjection(viewProjSelect.value);

const scaleControl = new ScaleLine({
  units: 'metric',
  bar: true,
  steps: 4,
  text: true,
  minWidth: 140,
});

const map = new Map({
  controls: defaultCont
### 实现地图遮罩效果 在 OpenLayers实现地图遮罩效果通常涉及创建一个新的图层并将其叠加到现有地图上。此过程可以通过定义一个 `ol/layer/Layer` 类的新实例来完成,并设置其样式以覆盖底层的地图内容[^1]。 下面是一个简单的例子,展示如何使用 OpenLayers 创建带有半透明灰色遮罩的效果: ```javascript import 'ol/ol.css'; import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import OSM from 'ol/source.OSM'; // 初始化底图 const baseMap = new TileLayer({ source: new OSM(), }); // 定义遮罩图层 const maskLayer = new ol.layer.Image({ extent: [-Infinity, -Infinity, Infinity, Infinity], opacity: 0.7, source: new ol.source.CanvasImageSource({ canvasFunction(extent, resolution, pixelRatio) { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); // 设置画布大小匹配视口尺寸 canvas.width = Math.ceil((extent[2] - extent[0]) * pixelRatio); canvas.height = Math.ceil((extent[3] - extent[1]) * pixelRatio); // 填充整个区域为浅灰颜色 ctx.fillStyle = '#cccccc'; ctx.fillRect(0, 0, canvas.width, canvas.height); return canvas; }, }), }); // 构建地图对象并将两个图层添加进去 new Map({ target: 'map', layers: [baseMap, maskLayer], view: new View({ center: [0, 0], zoom: 2, }), }); ``` 上述代码片段展示了如何通过自定义图像源 (`CanvasImageSource`) 来绘制一个完全填充屏幕的矩形作为遮罩。该遮罩具有一定的不透明度以便可以看到下方的基础地图[^2]。 为了使遮罩更加灵活可控,可以根据实际需求调整 `maskLayer` 的属性,比如改变颜色、透明度或是仅应用于特定地理范围内的显示等特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码大师

赏点狗粮吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值