返回顶部
首页 > 资讯 > 前端开发 > JavaScript >基于Vue+Openlayer实现动态加载geojson的方法
  • 420
分享到

基于Vue+Openlayer实现动态加载geojson的方法

2024-04-02 19:04:59 420人浏览 八月长安
摘要

加载1个或多个要素 <template> <div id="map" style="width: 100vw; height: 100vh"><

加载1个或多个要素


<template>
  <div id="map" style="width: 100vw; height: 100vh"></div>
</template>
<script>
import "ol/ol.CSS";
import TileLayer from "ol/layer/Tile";
import VectorLayer from "ol/layer/Vector";
import VectorSource from "ol/source/Vector";
import XYZ from "ol/source/XYZ";
import { Map, View, Feature, ol } from "ol";
import { Style, Stroke, Fill } from "ol/style";
import { PolyGon, MultiPolygon } from "ol/geom";
 
import areaGeo from "@/assets/chengdu.JSON";
 
export default {
  data() {
    return {
      map: {},
      areaLayer: {},
    };
  },
  mounted() {
    this.initMap(); //初始化地图方法
    this.addArea(areaGeo); //添加区域图层方法
    this.pointMove();
    this.getFeatureByClick();
  },
  methods: {
    pointMove() {
      // 设置鼠标划过矢量要素的样式
      this.map.on("pointermove", (e) => {
        const isHover = this.map.hasFeatureAtPixel(e.pixel);
        this.map.getTargetElement().style.cursor = isHover ? "pointer" : "";
      });
    },
    getFeatureByClick() {
      this.map.on("click", (e) => {
        let features = this.map.getFeaturesAtPixel(e.pixel);
        this.map.getView().fit(features[0].getGeometry(), {
          duration: 1500,
          padding: [100, 100, 100, 100],
        });
      });
    },
    
    addArea(geo = {}) {
      if (Object.keys(geo).length == 0 && geo.features.length == 0) return;
 
      // 设置图层
      this.areaLayer = new VectorLayer({
        source: new VectorSource({
          features: [],
        }),
      });
      // 添加图层
      this.map.addLayer(this.areaLayer);
 
      let features = geo.features;
 
      for (let i in features) {
        let areaFeature = {};
 
        if (features[i].geometry.type == "MultiPolygon") {
          areaFeature = new Feature({
            geometry: new MultiPolygon(features[i].geometry.coordinates),
          });
        } else if (features[i].geometry.type == "Polygon") {
          areaFeature = new Feature({
            geometry: new Polygon(features[i].geometry.coordinates),
          });
        }
        areaFeature.setStyle(
          new Style({
            fill: new Fill({ color: "#4e98f444" }),
            stroke: new Stroke({
              width: 3,
              color: [71, 137, 227, 1],
            }),
          })
        );
        areaFeature.setProperties(features[i].properties);
        this.areaLayer.getSource().addFeature(areaFeature);
      }
    },
    
    initMap() {
      this.map = new Map({
        target: "map",
        layers: [
          new TileLayer({
            source: new XYZ({
              url: "Http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
            }),
          }),
        ],
        view: new View({
          projection: "EPSG:4326",
          center: [103, 31],
          zoom: 7,
        }),
      });
    },
  },
};
</script>

到此这篇关于Vue+Openlayer动态加载geojson的文章就介绍到这了,更多相关Vue Openlayer加载geojson内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Vue+Openlayer实现动态加载geojson的方法

本文链接: https://lsjlt.com/news/134315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于Vue+Openlayer实现动态加载geojson的方法
    加载1个或多个要素 <template> <div id="map" style="width: 100vw; height: 100vh"><...
    99+
    2024-04-02
  • Vue中使用Openlayer实现加载动画效果
    注意:实现动画时不能有scoped!!!!  通过gif <template> <div class="test"> <di...
    99+
    2024-04-02
  • java实现动态编译并动态加载的方法
    小编给大家分享一下java实现动态编译并动态加载的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在D盘test目录下有个java文件:AlTest.javap...
    99+
    2023-06-14
  • Android实现ListView数据动态加载的方法
    本文实例讲述了Android实现ListView数据动态加载的方法。分享给大家供大家参考,具体如下: list.setOnScrollListener(new OnScrol...
    99+
    2022-06-06
    方法 listview 动态 Android
  • VUE路由动态加载如何实现
    这篇文章主要讲解了“VUE路由动态加载如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE路由动态加载如何实现”吧!首先新建vue工程,一般我们不会特殊处理路由,但当项目页面越来越多...
    99+
    2023-07-04
  • SpringSecurity实现动态加载权限信息的方法
    ①数据库中资源与角色对应关系,以及角色和用户对应关系如下图所示:  ②实现FilterInvocationSecurityMetadataSource类 (1)List&...
    99+
    2024-04-02
  • VUE中怎么实现路由动态加载
    VUE中怎么实现路由动态加载,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先新建vue工程,一般我们不会特殊处理路由,但当项目页面越来越多,...
    99+
    2024-04-02
  • Vue如何实现异步动态加载块
    本篇内容介绍了“Vue如何实现异步动态加载块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先定义组件为异步加载define(['j...
    99+
    2023-07-04
  • 基于Python实现配置热加载的方法详解
    目录背景如何实现使用多进程实现配置热加载使用signal信号量来实现热加载采用multiprocessing.Event 来实现配置热加载结语背景 由于最近工作需求,需要在...
    99+
    2024-04-02
  • vue动态加载本地图片的处理方法
    发现问题 今天遇到一个在vue文件中引入本地图片的问题,于是有了这篇文章。 通常,我们的一个img标签在html中是这么写的: <img src="../imag...
    99+
    2024-04-02
  • 基于SpringBoot和Vue的动态语音播放实现
    目录一、后台接口返回byte[]二、Vue前端调用接口播放语音SpringBoot+Vue实现动态语音播放。实现效果: 页面点击播报语音按钮,调用后台接口获取二进制byte[]前端得...
    99+
    2023-05-17
    SpringBoot动态语音播放 Vue动态语音播放
  • PHP中基于注解的路由解析和动态控制器加载实现方式
    随着Web应用程序的复杂性不断增加,路由管理和控制器的加载成为了开发过程中一个重要的环节。传统的路由解析和控制器加载方式需要手动配置路由规则和控制器类,而且需要频繁的更新和维护,这在大型应用中会变得非常繁琐和低效。为了解决这个问题,可以借助...
    99+
    2023-10-21
    路由解析 注解 动态控制器加载
  • python中动态加载模块和类方法实现
    python中动态加载模块和类方法实现测试代码   文件名: mytest.py 具体代码如下:   注意:模块名,类名,方法名都是变量。   #coding=UTF-8 class TestClass: def sub(se...
    99+
    2023-01-31
    模块 加载 方法
  • Vue+Openlayer批量设置闪烁点的实现代码(基于postrender机制)
    效果图: 实现代码: <template> <div id="map" style="width: 100vw; height: 100vh" />...
    99+
    2024-04-02
  • vue3.0+vite2实现动态异步组件懒加载的方法
    这篇文章主要介绍“vue3.0+vite2实现动态异步组件懒加载的方法”,在日常操作中,相信很多人在vue3.0+vite2实现动态异步组件懒加载的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3....
    99+
    2023-06-20
  • 纯css实现动态条形加载条效果的方法
    这篇文章将为大家详细讲解有关纯css实现动态条形加载条效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。运用了css变量的知识,直接上代码及其我加的注释<!DOCTYPE html&...
    99+
    2023-06-15
  • vue3动态加载对话框的方法实例
    目录简介常规方式使用对话框异步动态加载使用方式TestModal.vue使用结果动态操作对话框的实现DzModalService.tsmain.ts总结简介 介绍使用vue3的异步组...
    99+
    2024-04-02
  • 基于SpringBoot和Vue的动态语音播放如何实现
    这篇文章主要介绍“基于SpringBoot和Vue的动态语音播放如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于SpringBoot和Vue的动态语音播放如何实现”文章能帮助大家解决问题。...
    99+
    2023-07-06
  • 基于element-ui动态换肤的方法
    这篇文章主要讲解了“基于element-ui动态换肤的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于element-ui动态换肤的方法”吧!在安装好element-ui@2.x 以后...
    99+
    2023-06-29
  • Android实现listview动态加载数据分页的两种方法
    在android开发中,经常需要使用数据分页,比如要实现一个新闻列表的显示,或者博文列表的显示,不可能第一次加载就展示出全部,这就需要使用分页的方法来加载数据,在android...
    99+
    2022-06-06
    方法 数据 listview 分页 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作