vue3基于leaflet.js实现地图编辑功能

leaflet.js地图编辑器项目功能说明文档

项目概述

本项目是基于 Vue3 + Vant + Leaflet 构建的移动端地图编辑器应用,提供地图展示、图形绘制、编辑和导出等功能。

技术栈

技术 版本 说明
Node.js 22.x 运行时环境
Vue 3.x 前端框架
Vant 4.x 移动端UI组件库
Leaflet 1.x 地图渲染库
Leaflet.draw 1.x 地图绘图插件
Vue Router 4.x 路由管理
Vite 4.x 构建工具
Sass 1.x CSS预处理器

项目结构

复制代码
src/
├── components/          # 组件目录
│   ├── ChatRoom.vue     # 智能问答组件
│   ├── MapEditor.vue    # 地图编辑器主组件
│   ├── MapToolbar.vue   # 地图工具栏组件
│   ├── LayerSwitcher.vue # 图层切换组件
│   ├── GeoJSONModal.vue # GeoJSON模态框组件
│   ├── RectangleTest.vue # 矩形测试组件
│   └── SimpleMap.vue    # 简单地图组件
├── views/               # 视图目录
│   └── Home.vue         # 首页视图
├── router/              # 路由配置
│   └── index.js         # 路由定义
├── App.vue              # 根组件
├── main.js              # 入口文件
└── style.scss           # 全局样式

功能模块

1. 首页导航

  • 路径 : /
  • 功能: 提供各功能模块的入口导航

2. 智能问答

  • 路径 : /chat
  • 功能 :
    • 支持图片上传并通过AI识别内容
    • 支持文本输入获取AI回答
    • 仿豆包智能问答界面风格
    • 表情选择功能

3. 地图编辑器

  • 路径 : /map
  • 功能 :
    • 地图展示(支持标准地图和卫星地图切换)
    • 多种图形绘制:折线、多边形、矩形、圆形、标记点
    • 图形编辑:拖动调整大小和位置
    • 图形删除
    • 数据导出:支持GeoJSON格式导出
    • 数据导入:支持GeoJSON格式导入

4. 矩形测试

  • 路径 : /rectangle
  • 功能: 矩形绘制功能测试

5. 测试地图

  • 路径 : /simple-map
  • 功能: 简单地图展示测试

地图编辑器功能详解

绘制工具

工具 图标 功能说明
折线 ✏️ 绘制多条线段连接的路径
多边形 ⬡ 绘制封闭的多边形区域
矩形 ▢ 绘制矩形区域
圆形 ○ 绘制圆形区域
标记点 📍 在地图上标记点位

编辑工具

工具 功能说明
编辑 激活编辑模式,可拖动调整图形大小和位置
删除 删除选中的图形
保存 将绘制的图形导出为GeoJSON格式
清空 清空所有绘制的图形
回显 导入之前保存的GeoJSON数据

图层切换

  • 标准地图: 显示普通地图视图
  • 卫星地图: 显示卫星影像视图

API说明

智能问答API

使用豆包AI API进行智能问答,支持文本和图片输入。

地图服务API

使用高德地图瓦片服务:

  • 标准地图: https://webrd0{s}.is.autonavi.com/appmaptile
  • 卫星地图: https://webst0{s}.is.autonavi.com/appmaptile

配置说明

路由配置

路由定义在 src/router/index.js:

javascript 复制代码
const routes = [
  { path: '/', name: 'Home', component: Home },
  { path: '/chat', name: 'ChatRoom', component: ChatRoom },
  { path: '/map', name: 'MapEditor', component: MapEditor },
  { path: '/rectangle', name: 'RectangleTest', component: RectangleTest },
  { path: '/simple-map', name: 'SimpleMap', component: SimpleMap }
]

样式配置

全局样式定义在 src/style.scss,包含:

  • 移动端适配配置
  • Leaflet地图样式引入
  • 自定义组件样式

运行说明

环境要求

环境 版本要求 说明
Node.js >= 22.0.0 推荐使用 v22.13.1
npm >= 10.0.0 包管理工具
浏览器 现代浏览器 支持 ES6+ 特性

开发模式

bash 复制代码
npm install
npm run dev

生产构建

bash 复制代码
npm run build

预览构建结果

bash 复制代码
npm run preview

已知问题与解决方案

圆形编辑问题

问题: 编辑圆形时拖动半径,圆大小不更新

解决方案 : 重写 L.Edit.Circle.prototype._resize 方法,使用 requestAnimationFrame 实时更新圆形半径

矩形绘制问题

问题: 绘制矩形时tooltip报错

解决方案: 使用try-catch包装原始方法,失败时返回默认提示

兼容性问题

说明: 建议使用现代浏览器访问,支持移动端触摸操作

更新日志

v1.0.0

  • 项目初始化,基于Vue3 + Vant搭建
  • 集成Leaflet地图编辑器
  • 实现智能问答功能
  • 添加路由功能,拆分功能模块

许可证

MIT License

相关推荐
默_笙3 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
呃呃呃呃ex3 小时前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript
浪遏3 小时前
D2C 系统架构复盘:从设计稿到代码,我们踩过的坑和最终方案
前端·javascript·后端
Blanche15003 小时前
Webpack 构建流程解析
javascript·面试
Flynt4 小时前
官方说一个破折号拖慢整段高亮,我在 Node 里验证了一遍:机制是真的,2.8 倍没跑出来
javascript·性能优化·v8
默_笙4 小时前
🚗 把小说装进数据库了:我的第一个 RAG,和它的五个硬伤
前端·javascript
像我这样帅的人丶你还4 小时前
📱iPhone Duo 开屏动画咋实现的?
javascript·webgl·three.js
Leslie1654 小时前
把 SQL 性能诊断接入模型 API:从谓词分析到可验证优化
javascript
gnip4 小时前
UniApp 内嵌 H5 通信全攻略
前端·javascript
用户6802659051194 小时前
企业电脑统一管理怎么做?2026企业终端统一管理方法与工具推荐
javascript·后端·面试