demo源码运行环境以及配置
- 运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。
- 运行工具:vscode或者其他工具。
- 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: npm run build:release
示例效果
demo实现的效果比较简单,直接就是用leaflet官方的地图卷帘插件github:leaflet-side-by-side
- 核心源码
<template>
<div id="map"></div>
<div class="titleContainer center">
<span>vue+leaflet示例:地图卷帘对比</span>
</div>
</template>
<script setup>
import { onMounted, reactive, ref } from "vue";
import L from "leaflet";
import "./leaflet-side-by-side";
import config from "../config";
let map = null;
onMounted(() => {
initMap();
});
const initMap = () => {
// 创建地图对象
map = L.map("map", {
attributionControl: false,
}).setView(config.mapInitParams.center, config.mapInitParams.zoom);
//创建底图切换数据源
const baseLayer1 = L.tileLayer(config.baseMaps[0].Url); //OSM街道图
const baseLayer2 = L.tileLayer(config.baseMaps[1].Url); //ArcGIS影像图
const baseLayer3 = L.tileLayer(config.baseMaps[2].Url); //ArcGIS街道图
map.addLayer(baseLayer1); //左侧默认卷帘图层
map.addLayer(baseLayer2); //右侧默认卷帘图层
const leftLayers = [baseLayer1];
const rightLayers = [baseLayer2];
//卷帘地图效果
L.control.sideBySide(leftLayers, rightLayers).addTo(map);
};
</script>
<style scoped>
#map {
width: 100vw;
height: 100vh;
}
.titleContainer {
position: absolute;
top: 0;
background: rgba(0, 0, 0, 0.45);
height: 50px;
width: 100vw;
z-index: 999;
font-size: 14px;
color: #fff;
font-size: 28px;
}
.center {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
</style>