Leaflet有现成的Vue插件可以直接调用,但是一般情况下我们的地图库都是基于Leaflet进行了二次开发的,例如整合了自定义的图层、投影、控件等,这样之后,我们一般像百度地图一样进行部署,这时候直接用import语法导入就不行了。本文描述了如何在VUE中调用基于Leaflet进行二次开发的地图API,其实这里的调用方式就跟VUE调用百度地图API是一样的。
1.在public/index.html中加载地图API
打开public/index.html,加入我们的地图API路径。
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<!--加载我们自己的API,如果是百度地图,这里换成百度地图API的路径-->
<script type="text/javascript" src="https://mapapi.xxx.com/api/?v=1.0"></script>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
2.修改vue.config.js文件
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
configureWebpack: {
externals: {
"L": "L"
}
}
})
注意添加的configureWebpack部分。
3.新建一个地图组件
新建一个地图组件src/components/SzMap.vue
<template>
<div id="map">
</div>
</template>
<script>
import L from 'L';
export default {
name:'SzMap',
mounted:()=>{
let map=L.szmap('map');
map.setView([31.30,120.58],6);
L.control.mousePosition().addTo(map);
}
}
</script>
<style scoped>
#map{
width: 100vw;
height: 100vh;
}
</style>
4.在App.vue中引用该组件
修改src/App.vue,引用该组件
<template>
<SzMap></SzMap>
</template>
<script>
import SzMap from "./components/SzMap.vue";
export default {
name: "App",
props:{
szmap:null
},
components: {
SzMap,
},
};
</script>
<style>
body,
html {
margin: 0;
padding: 0;
}
#app {
margin: 0;
padding: 0;
}
</style>
评论区