首页 > 其他分享 >前端学习openLayers配合vue3(加载矢量图标)

前端学习openLayers配合vue3(加载矢量图标)

时间:2025-01-07 11:49:29浏览次数:9  
标签:ol let center vue3 source openLayers import new 图标

今天我们来进行矢量图标的加载

关键代码

有一个比较注意的点就是,图片路径必须引入不能直接写路径,我找半天也没发现问题所在

 let anchorLayer=new VectorLayer({
      source: new VectorSource(),
    });
    let anchorFeatures=new Feature({
      geometry: new Point(center),
    })
  //重点,需要引入才行,不能在src上写路径 const iconSrc = require('./image.png'); anchorFeatures.setStyle(new Style({ image: new Icon({ src: iconSrc, }), })) anchorLayer.getSource().addFeature(anchorFeatures); map.addLayer(anchorLayer)

效果图(图片是有点大了,不过原理是这个原理,真正开发中的话让ui把图做小点)

 完整代码

<script setup>
import { onMounted, reactive, ref } from "vue";
import { Feature, Map, View } from "ol";
import TileLayer from "ol/layer/Tile";
import { OSM, XYZ } from "ol/source";
import { fromLonLat } from "ol/proj";
import VectorLayer from "ol/layer/Vector";
import VectorSource from "ol/source/Vector";
import GeoJSON from "ol/format/GeoJSON";
import Style from "ol/style/Style";
import Fill from "ol/style/Fill";
import Stroke from "ol/style/Stroke";
import Icon from "ol/style/Icon";
import { Point } from "ol/geom";

defineProps({
  msg: String,
});
let map = reactive({});
let view = reactive({});
// let count=ref(0)
// let center=[114.305469, 30.592876];
let center=reactive([114.305469, 30.592876]);
onMounted(() => {
  initMap();
});
let initMap = () => {
  (view = new View({
    center ,
    zoom: 5,
    projection: "EPSG:4326",
  })),
    (map = new Map({
      target: "map", //挂载视图的容器
      layers: [
        //瓦片图层source第三方,或者自带的,地图的底层
        new TileLayer({
          // source: new OSM(),//内置的国外地址,需要代理
          source: new XYZ({
            url: "http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7",
          }), //国内第三方数据源
        }),
        // 矢量图层
        new VectorLayer({
          source: new VectorSource({
            url: "https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json",
            format: new GeoJSON(),
          }),
          //填充颜色
          style: new Style({
            fill: new Fill({
              color: "rgba(255, 0, 0, 0.5)",
            }),
            stroke: new Stroke({
              color: "black",
              width: 1,
            })
          }),
        }),
      ],

      //视图
      view: view,
    }));

    let anchorLayer=new VectorLayer({
      source: new VectorSource(),
    });
    let anchorFeatures=new Feature({
      geometry: new Point(center),
    })
    const iconSrc = require('./image.png');
    anchorFeatures.setStyle(new Style({
      image: new Icon({
        src: iconSrc,
      }),
    }))
    anchorLayer.getSource().addFeature(anchorFeatures);
    map.addLayer(anchorLayer)

    

};
let move = () => {
  // 设置北京的经纬度
  const beijing = [116.46, 39.92];
  const view = map.getView();
  view.animate({
    center: beijing,
    zoom: 10,
    projection: "EPSG:4356",
  });
};
</script>

<template>
  <div id="map">
    <div class="btns">
    </div>
  </div>
</template>

<style scoped>
.btns {
  display: flex;
  position: fixed;
  left: 20px;
  bottom: 20px;

  z-index: 999;
}
.btns div {
  width: 100px;
  height: 40px;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}
.read-the-docs {
  color: #888;
}
#map {
  margin: 0;
  width: 100vw;
  height: 100vh;
}
</style>

 

标签:ol,let,center,vue3,source,openLayers,import,new,图标
From: https://www.cnblogs.com/wcq520/p/18657309

相关文章

  • vue2项目升级为vue3,有哪些需要修改的?
    将Vue2项目升级为Vue3时,前端开发者需要关注多个方面的修改。以下是需要修改的关键点,按照一定结构进行归纳:1.全局和内部API的迁移全局API的更改:在Vue3中,许多全局API已经发生了改变。例如,Vue.use()被替换为app.use(),Vue.prototype被替换为app.config.globalProperties,而......
  • vue3+elementPlus实现利用 JSON 数据(`formItems`)描述表单结构,配置化生成表单
    一、功能点(一)组件功能点动态表单生成根据formItems配置动态生成表单项,支持多种类型(如input、radio、select)。表单校验通过rules定义表单校验规则,调用validate方法触发校验。双向绑定表单项通过v-model绑定到form对象,实现数据同步。支持扩展性支持通过form......
  • vue2与vue3生命周期钩子的不同
    Vue2的生命周期钩子在Vue2中,常用的生命周期钩子包括:created:在实例创建完成后被调用。这时,实例已完成数据观测(dataobserver),属性和方法的运算,watch/event事件回调。但是,挂载阶段还没开始,$el属性目前不可见。mounted:在挂载完成后被调用。这时,组件已经插入到DOM......
  • 前端学习openLayers配合vue3(修改地图样式)
    这一块的东西非常简单,基于上一步的继续操作关键代码,当然对应的对象需要进行相关的引入//填充颜色style:newStyle({fill:newFill({color:"rgba(255,0,0,0.5)",})})效果 完整代码<scriptsetup>i......
  • vue3 useTemplateRef()返回null
    新版写法(Vue3.5以后)在Vue3.5开始,引入了useTemplateRef(),文档中是这么说的:当ref在v-for内部使用时,相应的ref应包含一个Array值,该值将在mount之后填充元素:<scriptsetup>import{ref,useTemplateRef,onMounted}from'vue'constlist=ref([/*...*/])......
  • vue3版本下element-plus和antd-vue选哪个更好一些?.240109
    Vue3发布后,各家第三方库开始陆续重构并支持Vue3,国内两大知名框架ElementPlus和AntDesignVue也相续发布新版支持Vue3。到底应该怎么选择呢?ElementPlus和AntDesignVue3都已不在支持IE了,并不是他们自己放弃了IE而是Vue3本身已经放弃了IE。如果想在低版......
  • vue3-openlayers基础知识简介
    vue3-openlayers基础知识简介OpenLayers3Primeropenlayers6:入门基础(一)openlayers入门教程一、基础概念介绍地图(Map)OpenLayers的核心部件是Map(ol.Map)。它被呈现到对象target容器(例如,网页上的div元素)。所有地图的属性可以在构造时进行配置。ol/Map类是OpenLayers......
  • 在 Web 端使用矢量图标
    记录在Web端使用矢量图标的步骤,工具:iconfont-阿里巴巴矢量图标库。添加图标在图标库中挑选需要的图标,点击“购物车”添加入库。选择完毕后,打开“购物车”,将所有图标“添加至项目”。生成JS文件在项目中查看,选择Symbol方式,打开在线链接,然后在下方生成“......
  • 在vue3中setup是如何获得组件实例的?
    在Vue3中,setup函数是在组件初始化阶段调用的,它提供了一个响应式的环境来设置组件的初始状态和逻辑。然而,setup函数本身并不直接提供组件实例。在setup函数内部,你无法直接访问到完整的组件实例,因为在这个阶段,组件实例还没有完全创建。不过,Vue3提供了一个getCurrentInsta......
  • 参考vue3,手写一个响应式系统
    手写一个响应式系统是一个复杂且有趣的任务,它涉及到很多Vue3内部的核心概念,如Proxy、ReactiveEffect、DependencyTracking等。下面是一个简化的响应式系统的实现,以帮助你理解其基本原理。//创建一个存储所有响应式对象的WeakMap,用于依赖收集和触发更新consttargetMap=new......