openlayers+vite+vue3实现规划某一特定行政区(二)

news2024/11/15 8:51:31

在前一期实现离线地图初始化的基础上,本文中主要阐述如何实现规划某一特定行政区,并展示其行政区的区县名称。

提示:因前文中阐述了如何实现离线地图的初始化,所以在此不再进行书写并详解初始化的过程和流程,如有不明白的小伙伴可进行查看该篇文章:https://blog.csdn.net/qq_53541336/article/details/141386340?spm=1001.2014.3001.5502。

目录

一、准备区域的json API文件数据

二、规划区域方法

三、加载数据

四、规划区域样式

五、初始化地图中引入该方法

六、全部代码


 一、准备区域的json API文件数据

在开始规划区域前应提前准备好所规划区域的json数据,可将此文件放入到项目中,后续需要是引入即可。也可直接复制此链接进行引用。如果不知道如何寻找所规划区域的json文件,可以去阿里云DataV数据中进行查找。

二、规划区域方法

 在以上工作做完之后,需要写一个方法用来规划此区域,用于在地图上进行展示,我这里用的是直接复制jsonAPI链接方式。

//规划区域方法
const addGeoJson = async () => {}

三、加载数据

// 加载数据
const json = await fetch('你所规划的区域链接').then(response =>
    response.json()
  )
 const features = new GeoJSON({ featureProjection: 'EPSG:3857' }).readFeatures(json)
 const vectorSource = new VectorSource({ features: features })

四、规划区域样式

 // 规划区域样式
  const areaStyle = feature => {
    return new Style({
      fill: new Fill({
        //矢量图层填充颜色,以及透明度
        // color: 'rgba(5,50,86,0.6)'
        color: 'rgba(0, 153, 148, 0.5)'
      }),
      stroke: new Stroke({
        //边界样式
        color: 'rgba(73,242,242,0.8)',
        width: 3
      }),
      text: new Text({
        //文本样式
        text: feature.get('name'),
        // 设置文本样式
        textAlign: 'center',
        textBaseline: 'bottom',
        padding: [5, 10, 5, 10],
        font: '14px Calibri,sans-serif',
        fill: new Fill({
          color: '#000'
        }),
        stroke: new Stroke({
          color: '#fff',
          width: 3
        })
      })
    })
  }
  const lineLayer = new VectorLayer({
    zIndex: 99,
    source: vectorSource,
    style: areaStyle
  })
  map.value.addLayer(lineLayer) // 把图层添加到地图

五、初始化地图中引入该方法

// 初始化地图
const init = () => {
  // 使用瓦片渲染方法
  const tileLayer = new TileLayer({
    source: new XYZ({
      url: mapUrl.value
    })
  })

  map.value = new Map({
    layers: [tileLayer],
    view: new View(mapView),
    target: 'container'
  })
  addGeoJson()
}

六、全部代码

看上面的过程可能很多小伙伴有些懵,下面直接附上全部代码

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

<script setup>
import { onMounted, reactive, ref } from 'vue'
import 'ol/ol.css' // 地图样式
import TileLayer from 'ol/layer/Tile' // 瓦片渲染方法
import XYZ from 'ol/source/XYZ'
import { Map, View, Feature } from 'ol' // 地图实例方法、视图方法
import { fromLonLat } from 'ol/proj'
import VectorLayer from 'ol/layer/Vector'
import VectorSource from 'ol/source/Vector'
import { Style, Icon, Stroke, Fill, Text, Circle } from 'ol/style'
import { Point, LineString, Polygon } from 'ol/geom'
import GeoJSON from 'ol/format/GeoJSON'
let map = ref(null)

//地图图层参数
const mapView = reactive({
  center: fromLonLat([120.299, 31.568]), // 地图中心点
  zoom: 10, // 初始缩放级别
  minZoom: 10, // 最小缩放级别
  maxZoom: 15 // 最大缩放级别
  // extent: [116, 29, 125, 31] // 设置地图中心范围
})
const mapUrl = ref(
  '这里填写离线地图的瓦片地址'
)
//规划区域
const addGeoJson = async () => {
  // 加载数据
  const json = await fetch('规定区域的json API地址').then(response =>
    response.json()
  )
  const features = new GeoJSON({ featureProjection: 'EPSG:3857' }).readFeatures(json)
  const vectorSource = new VectorSource({ features: features })
  // 规划区域样式
  const areaStyle = feature => {
    return new Style({
      fill: new Fill({
        //矢量图层填充颜色,以及透明度
        // color: 'rgba(5,50,86,0.6)'
        color: 'rgba(0, 153, 148, 0.5)'
      }),
      stroke: new Stroke({
        //边界样式
        color: 'rgba(73,242,242,0.8)',
        width: 3
      }),
      text: new Text({
        //文本样式
        text: feature.get('name'),
        // 设置文本样式
        textAlign: 'center',
        textBaseline: 'bottom',
        padding: [5, 10, 5, 10],
        font: '14px Calibri,sans-serif',
        fill: new Fill({
          color: '#000'
        }),
        stroke: new Stroke({
          color: '#fff',
          width: 3
        })
      })
    })
  }
  const lineLayer = new VectorLayer({
    zIndex: 99,
    source: vectorSource,
    style: areaStyle
  })
  map.value.addLayer(lineLayer) // 把图层添加到地图
}
// 初始化地图
const init = () => {
  // 使用瓦片渲染方法
  const tileLayer = new TileLayer({
    source: new XYZ({
      url: mapUrl.value
    })
  })

  map.value = new Map({
    layers: [tileLayer],
    view: new View(mapView),
    target: 'container'
  })
  addGeoJson()
}

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

<style lang="less" scoped>
#container {
  width: 100%;
  height: 100%;
  position: absolute;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Task-Embedded Control Networks for Few-Shot Imitation Learning

发表时间&#xff1a;CoRL 2018 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4500197057754718210&noteId2424798567891365120 作者单位&#xff1a;Imperial College London Motivation&#xff1a;就像人类一样&#xff0c;机器人应该能够利用来…

力扣经典题目之->另一颗树的子树(subRoot是否是root的子树)

一&#xff1a;题目 本题需要用到力扣经典题目之-&#xff1e;相同的树&#xff08;递归判断两颗二叉树是否相同&#xff09;-CSDN博客 中的isSameTree&#xff0c;直接cv即可。 二&#xff1a;代码 三&#xff1a;解释 第一个函数&#xff1a; 力扣经典题目之-&#xff1e;相…

模型 分形理论

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。自相似&#xff0c;无限细节。 1 分形理论的应用 1.1 字节跳动的分形创新增长引擎 字节跳动作为一家全球领先的科技公司&#xff0c;其快速的发展和创新能力在业界引起了广泛关注。公司通过分形创新…

大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

使用myAGV、Jetson Nano主板和3D摄像头,实现了RTAB-Map的三维建图功能!

引言 在现代机器人技术中&#xff0c;高精度的环境感知与建图是实现自主导航的关键。本文将展示如何使用myAGV Jetson Nano移动平台搭载Jetson Nano BO1主板&#xff0c;结合RTAB-Map和3D相机&#xff0c;实现更加立体和细致的环境建图。myAGV Jetson Nano具备SLAM雷达导航功能…

es的简易dsl语句

数据模式为文档&#xff0c;_doc格式数据&#xff0c;也就是json 数据 es根据_id查询数据 GET /index_name/_doc/document_id es根据_id删除数据 DELETE /index_name/_doc/document_id es查询mapping结构 GET /index_name/_mappings es查询index下所有数据&#xff08;突破100…

9、LLaMA-Factory项目微调介绍

1、LLaMA Factory 介绍 LLaMA Factory是一个在GitHub上开源的项目&#xff0c;该项目给自身的定位是&#xff1a;提供一个易于使用的大语言模型&#xff08;LLM&#xff09;微调框架&#xff0c;支持LLaMA、Baichuan、Qwen、ChatGLM等架构的大模型。更细致的看&#xff0c;该项…

UG NX二次开发(C++)-获取曲面的相切曲面

文章目录 1、前言2、创建一个三维模型3、获取相切曲面的方法3、测试结果1、前言 最近一段时间,QQ群中的群友总问我一个问题,那就是如何获取曲面的相切曲面,我今天就把这个方法写出来,以帮助读者。 在UG二次开发中,查询了帮助文档,没有找到获取相切曲面的函数。所以采用N…

「C++系列」继承

文章目录 一、继承1. 基本概念2. 继承类型①公有继承&#xff08;Public Inheritance&#xff09;②私有继承&#xff08;Private Inheritance&#xff09;③保护继承&#xff08;Protected Inheritance&#xff09; 3. 继承的语法4. 构造函数和析构函数①构造函数案例②析构函…

单链表的问题(2)

1.对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 这个我们可以运用双指针来解决这个…

爆改YOLOv8|利用全新的聚焦式线性注意力模块Focused Linear Attention 改进yolov8(v1)

1&#xff0c;本文介绍 全新的聚焦线性注意力模块&#xff08;Focused Linear Attention&#xff09;是一种旨在提高计算效率和准确性的注意力机制。传统的自注意力机制在处理长序列数据时通常计算复杂度较高&#xff0c;限制了其在大规模数据上的应用。聚焦线性注意力模块则通…

EmguCV学习笔记 C# 7.1 角点检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Excel中让第一行始终显示

要在Excel中让第一行始终显示&#xff0c;你可以使用冻结窗格功能。具体步骤如下&#xff1a; 打开需要设置第一行一直显示的工作表。将光标定位在工作表内任意一个单元格内。选择“视图”菜单&#xff0c;单击工具栏中的“冻结窗格”命令。在弹出的下拉菜单中选择“冻结首行”…

字母的大小写转换(tolower、toupper、transform)

字母的大小写转换&#xff08;tolower、toupper、transform&#xff09; 1. tolower&#xff08;&#xff09;、toupper&#xff08;&#xff09;函数 &#xff08;这个在之前的一篇文章 “字符串中需要掌握的函数总结&#xff08;1&#xff09;”中有较为详细的介绍。&#…

时利和:如何提升工装夹具的加工质量?

在机械加工领域&#xff0c;工装夹具起着至关重要的作用。它不仅能够提高生产效率&#xff0c;还能保证加工精度&#xff0c;确保产品质量的稳定性。那么&#xff0c;如何提升工装夹具的加工质量呢?以下是时利和整理分享的几个关键因素。 一、精准的设计 工装夹具的设计是决定…

使用物联网卡访问萤石云的常见问题

使用物联网卡接入萤石开放平台时经常遇到各种问题&#xff0c;这边总结了常见的一些 用的是哪家运营商的卡&#xff1f; 电信 移动 联通&#xff08;申请的时候可以自主选择&#xff09; 卡有什么限制&#xff1f; 定向流量卡&#xff0c;只能访问萤石云平台&#xff0c;只能…

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题 本文中使用的Jenkins版本为Version 2.452.3 先罗列一下前置问题&#xff1a;Jenkins任务构建完成自动杀掉衍生进程 用过Jenkins的都知道&#xff0c;Jenkins任务构建完成后&#xff0c;是会自动杀掉衍生进程&#xff0c;这…

安卓AppBarLayout与ViewPager2里的fragment里的webview滑动冲突

今天开发遇见一个头痛的问题&#xff0c;就是AppBarLayout和webview会存在一个冲突问题。如图下 问题出现在webview推到顶端的时候&#xff0c;AppBarLayout并不会跟着响应伸缩&#xff0c;解决办法是 在 webview 包 一个 父的 NestedScrollView 就能解决了。 运行效果入下 更改…

单向链表和双向链表的一些基本算法

单向链表头插尾插 单向链表的销毁与反转 反转原理&#xff1a;将头节点与后面的节点分开&#xff0c;然后从第一个节点开始对每个节点使用头插法 冒泡排 选排 链表环&#xff1a; 判断是否有环&#xff1a;弗洛伊德快慢指针&#xff08;快指针一般是慢指针的2倍&#xff0c;差为…

Selenium(HTML基础)

一、HTML基础 &#xff08;在学习自动化时&#xff0c;保证能看懂&#xff09; 1.1.HTML介绍 英文是HyperText Markup Language&#xff0c;译为:超文本标记语言是Internet上用于设计网页的主要语言&#xff0c;2008年发布了HTML5.0,是目前互联网的标准&#xff0c;并作为互联…