vue3+openlayers项目初始化

说明:vue3+vite+cesium项目环境搭建参考上一篇文章:juejin.cn/post/754836...

1、引入ol,创建地图容器

xml 复制代码
<template>     
    <div id="mapBox"></div> 
</template>

2、地图渲染方法

typescript 复制代码
//baseMap.ts 
import { Map, View } from 'ol'; 
import TileLayer from 'ol/layer/Tile'; 
import * as olProj from 'ol/proj'; 
import OSM from 'ol/source/OSM'; 
const initCenter = [114.5, 38]; 
let map: any; 
const initMap = (mapId: string) => {   
    let center = olProj.fromLonLat(initCenter);   
    let layer = new TileLayer({     
        source: new OSM(),   
    })   
    map = new Map({     
        layers: [layer],     
        target: mapId,     
        view: new View({       
            center: center,       
            zoom: 4,       
            maxZoom:20     
        })   
    }) 
}; 
export {   
    initMap 
}

3、实现效果

4、可能出现错误处理

1)引入.ts文件报错:An import path cannot end with a '.ts' extension. Consider importing '../components/BaseMap.js' instead.

这个是由于使用了 别名 alias 导致的。以 tsconfig.json 的拓展形式兼容配置

json 复制代码
//在tsconfig.json 文件中加入这一句 
"extends": "./tsconfig.extends.json"

在根目录下创建tsconfig.extends.json文件

json 复制代码
//tsconfig.extends.json 输入以下内容 
{ 
    "compilerOptions": { 
        "baseUrl": ".", 
        "paths": { 
            "@/*": ["src/*"] 
        } 
    } 
}

同时在import对应.ts文件时只具体到文件名,不加.ts后缀。

2)打包后地图无法显示:通过import引入ol,项目打包后切换map路由后会重复创建ol-viewport,导致地图无法显示(此时地图显示在第二个ol-viewport所在的div中,主界面部分显示的是第一个ol-viewport所在div);

解决:在路由切换时清除map.vue中创建的ol-viewport,如下:

ini 复制代码
onUnmounted(() => { 
    map.dispose(); 
    map = null 
})

注:直接引入ol.js,打包后不会出现该问题。

项目地址:github.com/DLFouge/vue...

欢迎指正与star

相关推荐
麦麦大数据1 天前
F043 vue+flask天气预测可视化系统大数据+机器学习+管理端+爬虫+超酷界面+顶级可视化水平 【黑色版】
大数据·vue.js·flask·天气预测·气温预测·天气大数据·天气可视化
专注前端30年1 天前
Vue CLI与Webpack:区别解析与实战使用指南
前端·vue.js·webpack
微风怎知我意1 天前
前端框架入门怎么选?一篇搞懂 Vue、React、Angular 的取舍之道
vue.js·react.js·前端框架
麦麦大数据1 天前
F043 vue+flask天气预测可视化系统大数据(浅色版)+机器学习+管理端+爬虫+超酷界面+顶级可视化水平
大数据·vue.js·机器学习·flask·空气质量·天气预测·气温预测
杨筱毅1 天前
【技术选型】前端框架:Vue vs React - 组合式API与Hooks的哲学之争
vue.js·react.js·前端框架·技术选型
Sheldon一蓑烟雨任平生1 天前
Vue3 依赖注入(provide 和 inject)
vue.js·inject·provide·vue3 依赖注入·跨级别组件通信
paopaokaka_luck1 天前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring
Sheldon一蓑烟雨任平生2 天前
Vue3 重构待办事项(主要练习组件化)
vue.js·重构·vue3·组件化练习
zuo-yiran2 天前
vue div标签可输入状态下实现数据双向绑定
前端·javascript·vue.js
qq_316837752 天前
使用leader-line-vue 时垂直元素间距过小连线打转的解决
前端·javascript·vue.js