vue3+ts+openlayers实现overlayer叠加层

在这里插入图片描述

overlay介绍:

OpenLayers 中的 Overlay 是一个可视化容器,用于在地图中的某个位置显示与地图控件、图层和要素不直接关联的信息。 Overlay 可以包含 HTML 内容和其他内容,如图像和表单输入。

在 OpenLayers 中,Overlay 是一个独立的类,它不是在地图上的单独图层,而是与地图一同呈现的。若您想要在地图上添加一个 Overlay,则需要通过调用 ol.Overlay 类来创建它,并将其添加到地图上。

Overlay 的位置是可以响应事件的,例如当用户缩放或移动地图时,Overlay 可能会相对于地图重新设置其位置。这里 OpenLayers 就提供了一个事件 change:position,帮助您在位置发生变化时实时获取并处理对应的事件。

Overlay 是一个强大且灵活的功能,可以为地图上的任何位置添加丰富的交互式内容或 UI 组件。希望这篇博客对于您理解 OpenLayers 中的 Overlay 有所帮助。

核心代码:

import Overlay from 'ol/Overlay'
 OverlayProp = new Overlay({
        element: document.getElementById('overlay')!,
        position: fromLonLat([114.30, 30.50]),
        positioning: 'bottom-center',
        offset: [5, -9],
        autoPan: true, // 如果弹窗在底图边缘时,底图会移动
    })
    map.addOverlay(OverlayProp);

全部代码:

<template>
    <div id="map"></div>
    <div class="overlayContainer" id="overlay">
        <span>坐标:{{ selectCoordinations }}</span>
        <span class="content">
            overlay:叠加层,即叠加到地图上显示的元素,
            关联了一个自定义的HTML元素,由一个单一的地图坐标点确定叠加位置。
        </span>
    </div>
</template>

<script setup lang='ts'>
import Map from 'ol/Map.js';
import View from 'ol/View';
import { fromLonLat } from 'ol/proj';
import TileLayer from 'ol/layer/Tile.js';
import XYZ from 'ol/source/XYZ.js';
import { onMounted, reactive } from 'vue';
import Overlay from 'ol/Overlay'
interface Coordination {
    x: number,
    y: number
}
let OverlayProp: Overlay;
let selectCoordinations: Coordination = reactive({ x: 0, y: 0 })
onMounted(() => {
    const map = new Map({
        target: 'map',
        layers: [new TileLayer({
            source: new XYZ({
                url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}'
            }),

        })],
        view: new View({
            center: fromLonLat([114.30, 30.50]), // 设置地图中心坐标
            zoom: 7 // 设置初始缩放级别
        }),
        controls: []
    })
    OverlayProp = new Overlay({
        element: document.getElementById('overlay')!,
        position: fromLonLat([114.30, 30.50]),
        positioning: 'bottom-center',
        offset: [5, -9],
        autoPan: true, // 如果弹窗在底图边缘时,底图会移动
    })
    map.addOverlay(OverlayProp);
    map.on("singleclick", (evt: any) => {
        const coordinate = evt.coordinate // 获取坐标
        selectCoordinations.x = coordinate[0]
        selectCoordinations.y = coordinate[1]
        OverlayProp.setPosition(coordinate)
    })
})

</script>
<style scoped>
#map {
    width: 100%;
    height: 95vh;
}

.overlayContainer {
    width: 250px;
    height: 150px;
    padding: 10px;
    color: #fff;
    background-color: #000;
    background-image: linear-gradient(45deg, #00ffff, #ff00ff);
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
}

.overlayContainer:after,
.overlayContainer:before {
    top: 100%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
}

.overlayContainer:after {
    border-top-color: #00ffff;
    border-width: 10px;
    left: 120px;
    margin-left: -10px;
}

.overlayContainer:before {
    border-top-color: #cccccc;
    border-width: 11px;
    left: 48px;
    margin-left: -11px;
}
</style>

如果想清除overlay只需要将其位置设置为undefined即可

OverlayProp.setPosition(undefined)

感谢您的阅读——
全部示例代码请加我微信:
在这里插入图片描述

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 + TypeScript项目中使用OpenLayers,您可以按照以下步骤进行操作: 1. 安装OpenLayers:使用npm或yarn安装OpenLayers库。在命令行中运行以下命令: ```bash npm install ol ``` 或 ```bash yarn add ol ``` 2. 创建一个Vue组件:在您的Vue 3项目中,创建一个新的Vue组件,用于显示地图。打开一个新的`.vue`文件,例如`Map.vue`。 ```vue <template> <div ref="mapContainer" class="map-container"></div> </template> <script lang="ts"> import { defineComponent, onMounted, ref } from 'vue'; import 'ol/ol.css'; import { Map, View } from 'ol'; export default defineComponent({ name: 'Map', setup() { const mapContainer = ref(null); onMounted(() => { const map = new Map({ target: mapContainer.value, view: new View({ center: [0, 0], zoom: 2, }), }); }); return { mapContainer, }; }, }); </script> <style scoped> .map-container { width: 100%; height: 400px; } </style> ``` 3. 在需要显示地图的组件中使用Map组件:在需要显示地图的父组件中,导入并使用Map组件。 ```vue <template> <div> <h1>My Map</h1> <Map /> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import Map from './components/Map.vue'; export default defineComponent({ name: 'App', components: { Map, }, }); </script> ``` 现在,您可以在Vue 3 + TypeScript项目中使用OpenLayers来显示地图。请注意,这只是一个基本示例,您可以进一步探索OpenLayers文档来了解更多功能和用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值