vue2和vue3中使用openlayers离线地图(一)

概述

OpenLayers 使在任何网页中放置动态地图变得容易。它可以显示从任何来源加载的地图图块、矢量数据和标记。OpenLayers 的开发旨在进一步使用各种地理信息。它是完全免费的开源 JavaScript
官网

https://openlayers.org/

1、下载依赖
npm i ol -S
2、下载瓦片

这里使用 全能地图下载工具 也可使用别的下载工具,可以将瓦片下下来就行

https://pan.baidu.com/s/1XKcdCXrKZRdfu1xOB2wnEg?pwd=d7tg
提取码:d7tg

在这里插入图片描述

下载完之后呢就是这样的

由于瓦片太大,放在项目里不合适,这里将瓦片放在 nginx 里了,也可放在项目里测,不建议,加载会很慢

在这里插入图片描述

3、nginx 配置
server {
     listen  9098;
     server_name  127.0.0.1;
     location ^~/tiles{
         alias D:/inginx-1.20.1/tiles/;
         autoindex on;
         charset utf-8,utf-8;
     }
 }

在这里插入图片描述

4、vue2 使用
<template>
  <div id="map" />
</template>
<script>
import 'ol/ol.css'
import TileLayer from 'ol/layer/Tile'
import XYZ from 'ol/source/XYZ'
import { Map, View } from 'ol'
import { fromLonLat } from 'ol/proj'

export default {
  data() {
    return {
      map: null,
      mapView: {
        center: fromLonLat([108.939062, 34.374741]), // 地图中心点
        zoom: 11, // 初始缩放级别
        minZoom: 10, // 最小缩放级别
        maxZoom: 17 // 最大缩放级别
      },
      // 瓦片引入地址 nginx
      // mapUrl: `http://127.0.0.1:9098/tiles/{z}/{x}/{y}.png`
      // 瓦片本地引入 瓦片等级越高加载编译越慢
      // 在 public 下新建 tiles 文件夹,将下好的瓦片放进去
      mapUrl: `tiles/{z}/{x}/{y}.png`
    }
  },
  mounted() {
    this.initMap()
  },
  methods: {
    // 初始化地图
    initMap() {
      const tileLayer = new TileLayer({
        source: new XYZ({
          url: this.mapUrl
        })
      })
      this.map = null
      this.map = new Map({
        layers: [tileLayer],
        view: new View(this.mapView),
        target: 'map' // 将地图注入到 dom 元素中,此处写 dom id
      })
    }
  }
}
</script>

<style scoped>
#map {
  width: 100%;
  height: 100%;
  position: absolute;
}
</style>


5、vue3 使用
<template>
  <div id="map" />
</template>

<script setup>
import 'ol/ol.css'
import TileLayer from 'ol/layer/Tile'
import XYZ from 'ol/source/XYZ'
import { Map, View } from 'ol'
import { fromLonLat } from 'ol/proj'
import { reactive, ref } from '@vue/reactivity'
import { onMounted } from 'vue'

const mapView = reactive({
  center: fromLonLat([108.939062, 34.374741]), // 地图中心点
  zoom: 11, // 初始缩放级别
  minZoom: 10, // 最小缩放级别
  maxZoom: 17 // 最大缩放级别
})
let map = ref(null)

// 此处瓦片地址和 vue2 中的一样,可在本地测
const mapUrl = ref('http://127.0.0.1:9098/tiles/{z}/{x}/{y}.png')
// const mapUrl = ref(`tiles/{z}/{x}/{y}.png`)

// 初始化地图
const init = () => {
  const tileLayer = new TileLayer({
    source: new XYZ({
      url: mapUrl.value
    })
  })
  map.value = new Map({
    layers: [tileLayer],
    view: new View(mapView),
    target: 'map'
  })
}

onMounted(() => {
  init()
})
</script>

<style scoped>
#map {
  width: 100%;
  height: 100%;
  position: absolute;
}
</style>

6、此时页面就会出现地图啦

在这里插入图片描述

  • 12
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
为了在Vue3使用OpenLayers显示离线地图,您需要执行以下步骤: 1. 首先,您需要安装OpenLayers和proj4js依赖项。您可以使用以下命令进行安装: ```shell npm install ol proj4 --save ``` 2. 接下来,您需要下载离线地图瓦片。您可以使用QGIS等工具创建自己的离线地图瓦片,或者从第三方提供商下载现成的瓦片。将下载的瓦片放在您的项目的public文件夹。 3. 在Vue组件,您需要导入OpenLayers和proj4js库,并创建一个地图实例。您需要使用proj4js库来设置地图的投影方式。以下是一个示例组件: ```vue <template> <div id="map" class="map"></div> </template> <script> import 'ol/ol.css'; import { Map, View } from 'ol'; import TileLayer from 'ol/layer/Tile'; import OSM from 'ol/source/OSM'; import XYZ from 'ol/source/XYZ'; import proj4 from 'proj4'; export default { name: 'MapComponent', mounted() { // 设置投影方式 proj4.defs('EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs'); // 创建地图实例 const map = new Map({ target: 'map', layers: [ new TileLayer({ source: new XYZ({ url: '/tiles/{z}/{x}/{y}.png', // 离线瓦片路径 }), }), ], view: new View({ center: [0, 0], zoom: 2, projection: 'EPSG:3857', }), }); }, }; </script> <style> .map { height: 500px; } </style> ``` 在上面的示例,我们使用XYZ源加载离线瓦片,并将其添加到地图图层。我们还设置了地图的投影方式为EPSG:3857。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值