Vue+Proj4Leaflet实现地图瓦片(Nginx代理本地地图瓦片为网络url)加载并实现CRS投影转换(附资源下载)

场景

Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件):

Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)_offline map maker-CSDN博客

Leaflet快速入门与加载OSM显示地图:

Leaflet快速入门与加载OSM显示地图_leaflet osm-CSDN博客

Vue+Openlayers+proj4实现坐标系转换:

Vue+Openlayers+proj4实现坐标系转换_openlayer proj4-CSDN博客

结合上面的文章,如果要在Vue中使用leaflet加proj4实现加载瓦片地图并且可以设置/转换投影。

并且这个瓦片地图文件不再是本地磁盘路径的url,而是使用Nginx将图片png代理成网络url的形式。

切割的OSM的地图瓦片文件为EPSG3857,文件路径如下

将地图瓦片png文件使用nginx代理成网络服务

Proj4Leaflet插件

文档、API、示例地址:

Proj4Leaflet - Support all projections and CRS in Leaflet

https://github.com/kartena/Proj4Leaflet

当然Proj4Leaflet的功能不仅是加在瓦片tile并设置投影,下面只演示加载瓦片tile的示例。

注:

博客:
霸道流氓气质-CSDN博客

实现

Vue中Proj4Leaflet插件的安装与使用

确保项目中已经安装proj4并且版本与官网说明的一致。

npm install proj4 --save

然后安装Proj4Leaflet

npm install --save proj4leaflet

页面引入依赖

import "proj4leaflet";

下面是官方提供的使用示例:

构造crs投影

var crs = new L.Proj.CRS('EPSG:3006','+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',{resolutions: [8192, 4096, 2048, 1024, 512, 256, 128],origin: [0, 0]})

然后创建地图并设置crs

var map = new L.Map('map', {crs: crs});L.tileLayer('http://api.geosition.com/tile/osm-bright-3006/{z}/{x}/{y}.png', {maxZoom: crs.options.resolutions.length,minZoom: 0,continuousWorld: true,attribution: 'Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, Imagery © 2013 <a href="http://www.kartena.se/">Kartena</a>'
}).addTo(map);

Vue中使用Proj4Leaflet实现加载OSM在线url并设置CRS

参考官网的示例以及上面加载OSM的博客,实现加载OSM的在线瓦片url并设置crs为epsg:4626

新建地图容器

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

引入所需依赖

import "leaflet/dist/leaflet.css";
import L from "leaflet";
import "proj4leaflet";

然后在mounted中执行初始化地图方法

  mounted() {this.initMap();},

方法具体实现

​initMap() {// 设置地图视图var osm = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom: 19,attribution: "© OpenStreetMap contributors",});// 初始化地图并添加图层var map = L.map("map").setView([51.505, -0.09], 13);osm.addTo(map);// 定义一个从EPSG:3857到EPSG:4326的转换var wgs84 = new L.Proj.CRS("EPSG:4326","+title=Long/lat WGS 84 +ellps=WGS84 +datum=WGS84 +units=degrees +no_defs",{origin: [0, 0],resolutions: [],});var wgs84Bounds = L.bounds([-180, -90], [180, 90]);// 设置地图的CRS为EPSG:4326map.options.crs = wgs84;// 如果有必要,可以设置地图的边界map.setMaxBounds(wgs84Bounds);},​

这里EPSG:4326的proj4的text可以从如下网站获取

https://epsg.io/4326

运行并测试效果

因为网络原因,这里部分图片请求不到。

Nginx实现代理地图瓦片png目录文件为网络url

上面加载的在线osm的url,加载受网络限制。

如果本地已经拿到osm的png瓦片目录文件,如何使用nginx代理成可通过网络请求的url

修改nginx的配置文件,添加如下配置

 server {listen       19001;    #后台访问端口server_name  localhost_19001;location / {root   D:/SoftWare/Nginx/nginx-1.12.2-gis/osm/;index  index.html index.htm;add_header Access-Control-Allow-Origin *;}error_page   404  http://自己的ip:19001/default.png;}

这里的端口自己指定,root后面的路径对应自己瓦片png的目录,下面error_page为瓦片请求不到时的默认图片。

将其放在上面root配置的路径的根目录下。

然后在浏览器中访问任意目录下的png文件测试

http://127.0.0.1:19001/9/419/197.png

显示成功则配置通过。

Vue中使用Proj4Leaflet加载Nginx代理的地图瓦片png服务

那么上面加载osm在线服务url的就可以修改为如下

​initMap() {// 设置地图视图var osm = L.tileLayer("http://127.0.0.1:19001/{z}/{x}/{y}.png",{maxZoom: 12,minZoom: 9,attribution: "公众号:霸道的程序猿",});// 初始化地图并添加图层var map = L.map("map").setView([35.5, 120.5], 10);osm.addTo(map);// 定义一个从EPSG:3857到EPSG:4326的转换var wgs84 = new L.Proj.CRS("EPSG:4326","+title=Long/lat WGS 84 +ellps=WGS84 +datum=WGS84 +units=degrees +no_defs",{origin: [0, 0],resolutions: [],});// 设置地图的CRS为EPSG:4326map.options.crs = wgs84;},​

测试加载效果

完整代码、png瓦片资源、nginx、nginx配置文件打包下载

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/89491681

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

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

相关文章

Golang-slice理解

slice golang-slice语雀笔记整理 slicego为何设计slice&#xff1f;引用传递实现扩容机制 go为何设计slice&#xff1f; 切片对标其他语言的动态数组&#xff0c;底层通过数组实现&#xff0c;可以说是对数组的抽象&#xff0c;底层的内存是连续分配的所以效率高&#xff0c;可…

Proxmox VE(PVE)上手配置指南

Proxmox VE&#xff08;PVE&#xff09;是一款开源虚拟化管理平台&#xff0c;集成了KVM和LXC技术&#xff0c;支持虚拟机和容器管理。它提供了一个基于Web的用户界面&#xff0c;支持高可用性集群、备份和恢复、实时迁移等功能&#xff0c;适用于企业级虚拟化环境。. 以下为安…

博客都在使用的打字机效果,居然这么简单?

效果展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>body …

C语言 | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; #define MAX_NODE_NUM 100 int* rightSideView(struct TreeNode* root, int* returnSize){if (root NULL) {*returnSize 0;return NULL;}int *res (int *)malloc(sizeof(int) * MAX_NODE_NUM);int cnt 0;struct TreeNode **record (st…

详解 HTTP 中间人攻击

什么是中间人攻击&#xff1f; 攻击者将自己插入通信过程中&#xff0c;以窃取&#xff0c;篡改数据。通信的两端不知道中间人的存在&#xff0c;他们以为在与对方直接通信&#xff0c;实际上他们的通信已经被监听或干扰。WIFI 路由器被破解之后就能进行中间人攻击。 中间人攻…

50-4 内网信息收集 - 本机信息收集

一、内网信息收集 内网信息收集可以从以下几个方面进行:本机信息收集、域内信息收集、内网资源探测等。通过这些步骤,我们可以全面了解当前主机的角色和所处内网的拓扑结构,从而选择更合适、更精准的渗透方案。 二、本机基础信息收集 在本机基础信息收集阶段,可以执行以下…

EasyExcel数据导入

前言&#xff1a; 我先讲一种网上信息的获取方式把&#xff0c;虽然我感觉和后面的EasyExcel没有什么关系&#xff0c;可能是因为这个项目这个操作很难实现&#xff0c;不过也可以在此记录一下&#xff0c;如果需要再拆出来也行。 看上了网页信息&#xff0c;怎么抓到&#x…

周记-2024第26周-6.25~6.30

现在是周日晚上21:58&#xff0c;我开始做本周总结。 工作 .1 开始接手量产模型的训练&#xff0c;新工作有新的小组长&#xff0c;我还是有些羞怯&#xff0c;不是很好意思频繁找他。要自信一点&#xff0c;大方一点&#xff0c;一个堂堂男子汉&#xff0c;怎么感觉工作中娘…

SpringBoot + mkcert ,解决本地及局域网(内网)HTTPS访问

本文主要解决访问SpringBoot开发的Web程序,本地及内网系统,需要HTTPS证书的问题。 我测试的版本是,其他版本不确定是否也正常,测试过没问题的小伙伴,可以在评论区将测试过的版本号留下,方便他人参考: <spring-boot.version>2.3.12.RELEASE</spring-boot.vers…

朋友问我Java中“::”是什么意思?我汗流浃背了......

目录 一&#xff1a;什么是&#xff1a;&#xff1a;&#xff1f; 二&#xff1a;方法引用的几种类型 1.引用静态方法 2.引用特定对象的实例方法 3.引用特定类型的任意对象的实例方法 4.引用构造方法 三&#xff1a;方法引用的适用场景 四&#xff1a;总结 一&#xff1…

ssh转发功能入门

端口转发概述 端口转发&#xff0c;能够将其他TCP端口的网络数据通过SSH链路转发&#xff0c;并且提供了ssh的加密和解密的服务。 ssh端口转发有如下这些优点&#xff1a; 提供了ssh的加密传输&#xff0c;利于安全能够突破防火墙限制 目前ssh端口转发有如下几种方式&#x…

spring模块(二)SpringBean(2)BeanWrapperImpl

一、介绍 1、简介 BeanWrapper是Spring中一个很重要的接口&#xff0c;Spring在通过配信息创建对象时&#xff0c;第一步首先就是创建一个BeanWrapper。 Spring低级JavaBeans基础设施的中央接口。通常来说并不直接使用BeanWrapper&#xff0c;而是借助BeanFactory或者DataBi…

eFuse基本概念

From&#xff1a;GTP-4o eFuse&#xff08;电子熔丝&#xff09;是一种在集成电路&#xff08;IC&#xff09;设计中常用的可编程熔丝技术。它在芯片中起着至关重要的作用&#xff0c;主要用于配置、调整、修复和安全相关的功能。以下是关于 eFuse 在芯片中的用途和相关技术的…

学习一下宏的##和...

##&#xff1a;如果参数不存在则忽略逗号和参数 ...&#xff1a;可变参数 栗子&#xff1a; #define Debug(fmt, args...) LOG("DEBUG", fmt, ##args) ...: ... 是C和C预处理器中的一个特殊标记&#xff0c;用于表示一个可变数量的参数。在宏定义中&#xff0c;可…

【课程总结】Day13(上):使用YOLO进行目标检测

前言 在上一章《【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用》的学习中&#xff0c;我们通过YOLO实现了对图片的分类任务。本章的学习内容&#xff0c;将以目标检测为切入口&#xff0c;了解目标检测流程&#xff0c;包括&#xff1a;数据标准、模…

使用NFS网关功能将HDFS挂载到本地系统

HDFS安装教程 HDFS安装教程http://t.csdnimg.cn/2ziFd 使用NFS网关功能将HDFS挂载到本地系统 简介 HDFS提供了基于NFS&#xff08;Network File System&#xff09;的插件&#xff0c;可以对外提供NFS网关&#xff0c;供其它系统挂载使用。 NFS 网关支持 NFSv3&#xff0c;并…

【操作系统】进程管理——进程的概念、组成和特征(个人笔记)

学习日期&#xff1a;2024.6.29 内容摘要&#xff1a;进程的基本概念和特征、状态和转换 进程的概念 程序与进程 程序&#xff1a;是静态的&#xff0c;是存放在磁盘里的可执行文件&#xff0c;就是一系列的指令集合 进程&#xff08;Process&#xff09;&#xff1a;是动态…

GPT-5:下一代AI如何彻底改变我们的未来

GPT-5 发布前瞻&#xff1a;技术突破与未来展望 随着科技的飞速发展&#xff0c;人工智能领域不断迎来新的突破。根据最新消息&#xff0c;OpenAI 的首席技术官米拉穆拉蒂在一次采访中确认&#xff0c;GPT-5 将在一年半后发布&#xff0c;并描述了其从 GPT-4 到 GPT-5 的飞跃如…

Linux随记(十)

一、升级harbor v2.6.4 --> harbor-offline-installer-v2.11.0-rc3 --> v2.9.4 – 随记 漏洞信息&#xff1a; CVE-2023-20902timing condition in Harbor 2.6.x and below, Harbor 2.7.2 and below, Harbor 2.8.2 and below, and Harbor 1.10.17 and below allows an…

js自定义内容生成二维码,qrcodejs的使用

qrcodejs qrcodejs是基于原生js的文本转换成二维码的库&#xff0c;轻量且使用方法简单&#xff0c;它的实现原理是通过canvas将重新编码的内容绘制在页面元素上&#xff0c; 使用qrcodejs时可以选择引入它的cdn或者使用npm下载 <script type"text/javascript" …