vue3中使用leaflet加载瓦片地图

在内网部署项目时,不能使用在线地图API,因此采用Leaflet.js库进行离线地图的展示。通过npm安装Leaflet及其contextmenu插件,全局引入并配置地图选项,包括右键菜单功能。地图瓦片使用自定义的服务器路径,需提前下载并在内网服务器上可用。

在项目中有时会在内网进行部署,这样就不能使用在线地图api,所以就要使用离线地图来满足需求。在这里我们使用leftlet.js库。

首先使用npm进行安装 指令 npm install leaflet --save

找到项目的main.js文件引入并全局注册,也可以在需要使用的vue页面单独引入,由于我的项目在多个页面都有使用到,全局引入更方便些,小伙伴们可以根据需求自行选择。

import 'leaflet/dist/leaflet.css'
import L from 'leaflet'
app.config.globalProperties.L = L

我的项目中有右键菜单的需求,有需要的可以引入以下两个文件,在引入之前需要npm先安装,指令 npm install leaflet-contextmenu --save

import 'leaflet-contextmenu/dist/leaflet.contextmenu.css'
import 'leaflet-contextmenu/dist/leaflet.contextmenu'

 在需要使用的页面粘贴以下代码

<template>
    <div id="offLine"></div>
</template>

<script setup>
    import { onMounted, nextTick } from 'vue'
    let map = null
    const initMap = ()=>{
    map = L.map('offLine', {
        minZoom: 1,
        maxZoom: 18,
        contextmenu: true,//是否开启右键菜单
        contextmenuItems: [
          {
        text: '右键菜单',
        icon: icon1,
        callback: (event) => {
          menuClick(1)
            },
          },
        ],
      }).setView(centerPoint, level)
    
    L.tileLayer('http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}').addTo(map)
    }
    onMounted(() => {
      nextTick(() => {
        initMap()
      })
    })
<script>

这样就可以在页面上看到加载完成的瓦片地图了,注意这里的'http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}'是在线的瓦片地图源,在内网上使用需要下载瓦片地图放到服务器上 。

Vue 框架中集成 Leaflet加载地图(TianMap)服务,可以通过 `Proj4Leaflet` 插件实现对非 EPSG:3857 坐标系的支持,因为天地图通常使用的是 CGCS2000 或其他国内常用坐标系。以下是一个完整的实现示例。 ### 1. 安装依赖 首先确保安装了必要的库: ```bash npm install leaflet proj4js proj4leaflet ``` ### 2. 创建 Vue 组件 创建一个名为 `TianMapLeaflet.vue` 的组件,并引入相关资源: ```vue <template> <div id="map" ref="map"></div> </template> <script> import L from &#39;leaflet&#39;; import &#39;leaflet/dist/leaflet.css&#39;; import proj4 from &#39;proj4&#39;; import { CRS } from &#39;proj4leaflet&#39;; export default { mounted() { // 定义 TianMap 使用的坐标系(例如 CGCS2000) const crs = CRS(&#39;EPSG:4526&#39;, { resolutions: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125], origin: [73.628, 53.567], bounds: L.bounds([73.628, 18.164], [134.773, 53.567]), }); // 初始化地图 const map = L.map(this.$refs.map, { crs: crs, center: [39.9042, 116.4074], // 北京坐标 zoom: 5, }); // 添加天地图瓦片图层 L.tileLayer(&#39;http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}&#39;, { subdomains: [&#39;1&#39;,&#39;2&#39;,&#39;3&#39;,&#39;4&#39;], maxZoom: 18, attribution: &#39;高德地图&#39; }).addTo(map); }, }; </script> <style scoped> #map { width: 100%; height: 100vh; } </style> ``` ### 3. 解释关键部分 - **坐标系统定义**:通过 `proj4leaflet` 和 `proj4js` 定义了一个自定义的坐标参考系统(CRS),用于适配天地图使用的坐标体系[^1]。 - **地图初始化**:使用自定义的 CRS 来初始化 Leaflet 地图实例。 - **天地图图层**:通过 `L.tileLayer` 加载地图服务,这里以高德地图风格为例,实际 URL 应根据具体服务提供商进行调整。 --- ### 注意事项 - 天地图服务可能需要申请授权或提供 Token,具体请查阅其官方文档。 - 如果使用的是标准 Web Mercator 投影(EPSG:3857),则不需要额外配置 Proj4Leaflet。 - 在生产环境中建议对瓦片地址进行封装,以便支持跨域和缓存策略。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值