当前位置: 代码网 > it编程>前端脚本>Vue.js > Vue3 openlayers加载瓦片地图并手动标记坐标点功能

Vue3 openlayers加载瓦片地图并手动标记坐标点功能

2024年05月26日 Vue.js 我要评论
一、创建vue3项目注:不用创建项目的可以直接跳过这块。我们这里用vue/cli创建,我用的node版本是18.12.1。创建前可以先配置下镜像源:npm config set registry ht

一、创建vue3项目

注:不用创建项目的可以直接跳过这块。

我们这里用vue/cli创建,我用的node版本是18.12.1。

创建前可以先配置下镜像源:npm config set registry https://registry.npmmirror.com

按下面的步骤创建即可:

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version
## 安装或者升级你的@vue/cli 
npm install -g @vue/cli
## 执行创建命令
vue create vue_test
##  随后选择3.x
##  choose a version of vue.js that you want to start the project with (use arrow keys)
##  > 3.x
##    2.x
## 启动
cd vue_test
npm run serve

二、openlayers加载瓦片地图(引js文件版)

2.1 将以下的文件复制到public下

2.2 index.html引入ol脚本

2.3 删除项目自带的helloworld.vue,创建map.vue

2.4 编码map.vue

<template>
    <div class="map" id="map" ref="mapcontainer"></div>
</template>
<script>
    import { onmounted, ref } from 'vue';
    export default {
        name: 'mapcomponent',
        setup() {
            const mapcontainer = ref(null);
            onmounted(() => {
                var basemaplayer = function(options) {
                    var layer = new ol.layer.tile({
                        source: new ol.source.xyz({
                            url: options.url,
                            tilepixelratio: 1,
                            minzoom:2,
                            maxzoom:17
                        })
                    });
                    return layer;
                };
                var view = new ol.view({
                    // 这两个参数是你地图地点的中心点经纬度坐标
                    center: ol.proj.fromlonlat([120, 17]),
                    zoom: 13,
                    minzoom: 13,
                    maxzoom: 17
                });
                var sateliteopt = {
                    url: '/tiles/{z}/{x}/{y}.png'
                };
                var sate = new ol.layer.group({
                    layers: [
                        new basemaplayer(sateliteopt)
                    ]
                });
                // 添加标注层
                var markerlayer = new ol.layer.vector({
                    source: new ol.source.vector(),
                    style: new ol.style.style({
                        image: new ol.style.icon({
                            anchor: [0.5, 46],
                            anchorxunits: 'fraction',
                            anchoryunits: 'pixels',
                            src: '/marker.png' // 标注图标的路径
                        })
                    })
                });
                // 创建标注
                var marker = new ol.overlay({
                    element: document.getelementbyid('marker'),
                    positioning: 'center-center',
                    stopevent: false,
                    offset: [0, -23]
                });
                var map = new ol.map({
                    view: view,
                    layers: [
                        sate,
                        markerlayer // 添加标注层到地图
                    ],
                    overlays: [marker], // 添加标注到地图
                    target: 'map'
                });
                // 监听点击事件
                map.on('click', function(event) {
                    // 将点击的经纬度转换为地图的像素坐标
                    var feature = new ol.feature({
                        geometry: new ol.geom.point(event.coordinate)
                    });
                    // 将标注添加到标注层
                    markerlayer.getsource().addfeature(feature);
                    // 将标注移动到点击的位置
                    marker.setposition(event.coordinate);
                });
            });
            return {
                mapcontainer
            };
        }
    };
</script>
<style>
    .map {
        height: 100%;
        width: 100%;
    }
</style>

2.5 修改app.vue

<template>
  <mapcomponent/>
</template>
<script>
import mapcomponent from './components/map.vue'
export default {
  name: 'app',
  components: {
    mapcomponent
  }
}
</script>
<style>
</style>

2.6 启动项目测试

三、openlayers加载瓦片地图(npm安装依赖版)

一般来说,引js文件这种方式不太实用,既然都用了vue3了就老老实实按规则走吧...

3.1 安装openlayers依赖

先把package.json里加上"ol": "^7.5.2",然后安装ol:

npm install ol

注意:这里不知道为什么node18.12.0安装不上ol,我就先用nvm切换到17.1.0版本安装的ol,安装完再切回18.12.0版本。

3.2 编写map.vue代码

<template>
    <div class="map" id="map" ref="mapcontainer"></div>
</template>
<script>
    import "ol/ol.css";
    import { onmounted, ref } from 'vue';
    import { icon, style }from "ol/style";
    import map from "ol/map";
    import overlay from "ol/overlay";
    import view from "ol/view";
    import point from "ol/geom/point.js";
    import feature from "ol/feature.js";
    import tilelayer from "ol/layer/tile";
    import xyz from "ol/source/xyz";
    import vectorlayer from "ol/layer/vector";
    import {fromlonlat } from "ol/proj";
    import group from "ol/layer/group";
    import vectorsource from "ol/source/vector";
    export default {
        name: 'mapcomponent',
        setup() {
            const mapcontainer = ref(null);
            onmounted(() => {
                var basemaplayer = function(options) {
                    var layer = new tilelayer({
                        source: new xyz({
                            url: options.url,
                            tilepixelratio: 1,
                            minzoom:2,
                            maxzoom:17
                        })
                    });
                    return layer;
                };
                var view = new view({
                    center: fromlonlat([200, 18.1]),
                    zoom: 13,
                    minzoom: 13,
                    maxzoom: 17
                });
                var sateliteopt = {
                    url: 'tiles/{z}/{x}/{y}.png'
                };
                var sate = new group({
                    layers: [
                        new basemaplayer(sateliteopt)
                    ]
                });
                // 添加标注层
                var markerlayer = new vectorlayer({
                    source: new vectorsource(),
                    style: new style({
                        image: new icon({
                            anchor: [0.5, 46],
                            anchorxunits: 'fraction',
                            anchoryunits: 'pixels',
                            src: 'marker.png' // 标注图标的路径
                        })
                    })
                });
                // 创建标注
                var marker = new overlay({
                    element: document.getelementbyid('marker'),
                    positioning: 'center-center',
                    stopevent: false,
                    offset: [0, -23]
                });
                var map = new map({
                    view: view,
                    layers: [
                        sate,
                        markerlayer // 添加标注层到地图
                    ],
                    overlays: [marker], // 添加标注到地图
                    target: 'map'
                });
                // 监听点击事件
                map.on('click', function(event) {
                    // 将点击的经纬度转换为地图的像素坐标
                    var feature = new feature({
                        geometry: new point(event.coordinate)
                    });
                    // 将标注添加到标注层
                    markerlayer.getsource().addfeature(feature);
                    // 将标注移动到点击的位置
                    marker.setposition(event.coordinate);
                });
            });
            return {
                mapcontainer
            };
        }
    };
</script>
<style>
    .map {
        height: 800px;
        width: 2000px;
    }
</style>

3.3 启动项目测试即可

到此这篇关于 vue3 openlayers加载瓦片地图并手动标记坐标点功能的文章就介绍到这了,更多相关 vue3 openlayers加载瓦片地图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com