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

相关推荐
林恒smileZAZ1 小时前
`Array(100).map(() => 1)` 为什么全为空?
前端·javascript
laowang3573 小时前
依赖故障时,日志体系需要埋哪些关键节点才能快速定位是安装失败、解析失败还是运行时缺失?
前端·javascript·vue.js·webpack·node.js
༄沐࿆风࿆࿆5 小时前
JavaScript函数完全指南:从基础语法到闭包原理与应用实战
开发语言·javascript
finyouIT5 小时前
锚点实现了点击导航平滑滚动到页面指定位置的三种方法
javascript·css
神奇的代码在哪里8 小时前
AI编程时代,PPT已成为过去,单个HTML文件创造无限可能
javascript·html·powerpoint·ai编程·ppt
Highcharts8 小时前
从 ECharts 平滑迁移 Highcharts的配置映射与踩坑手册
前端·javascript
用户852495071848 小时前
从零打造 Agent 智能体:LLM + Tool + Memory,让大模型真正帮你干活
javascript·后端
大爱编程♡8 小时前
Vue3基础
前端·javascript·vue.js
weedsfly8 小时前
防抖与节流:从原理到 React Hook 封装
前端·javascript·面试
甜味弥漫8 小时前
React 从类组件到 Hooks:为什么 Hooks 改变了 React?
前端·javascript·react.js