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:4326
      map.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:4326
      map.options.crs = wgs84;
    },

​

测试加载效果

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring aop 初探

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary 分析JDK动态代理 生成的代理对象 构造函数&#xff0c;入参为 InvocationHandler public com.sun.proxy.$Proxy164(java.lang.reflect.InvocationHandler) 生成动态代理Class对象&…

Android 遥控器

遥控器源码 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RadialGradient; import android.graphics.Region; import android.g…

JavaScript(2)——输入输出和执行顺序

目录 JS的输入输出语法 输出&#xff1a; 输入 JS的代码执行顺序 字面量 JS的输入输出语法 输出&#xff1a; document.write(内容)alert(内容) 页面弹出警告框console.log(内容) 控制台输出语法&#xff0c;程序员调试使用 作用&#xff1a;向body输出内容 注意&…

Node.js简介

一&#xff1a;Node.js简介 Node.js是一个跨平台的JavaScript运行环境&#xff0c;使开发者可以搭建服务器端的JavaScript应用程序 作用&#xff1a;使用Node.js编写服务器端程序 编写数据接口&#xff0c;提供网页资源浏览功能有利于前端工程化&#xff0c;可以集成各种开发…

等保测评练习卷14

等级保护初级测评师试题14 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 方案编制活动中测评对象确定、测评指…

【python】OpenCV—Aruco

文章目录 Detect ArucoGuess Aruco Type Detect Aruco 学习参考来自&#xff1a;OpenCV基础&#xff08;19&#xff09;使用 OpenCV 和 Python 检测 ArUco 标记 更多使用细节可以参考&#xff1a;【python】OpenCV—Color Correction 源码&#xff1a; 链接&#xff1a;http…

在 UBUNTU 22.04 上逐步构建 Postal SMTP 服务器

构建 Postal SMTP 服务器来发送批量电子邮件是电子邮件营销人员的不错选择。Postal 功能非常强大&#xff0c;并拥有大量开发人员的支持。它是一个用 JavaScript 和 Ruby 编写的开源邮件服务器脚本。它可用于构建内部 SMTP 服务器&#xff0c;就像 Mailgun、Sendgrid、Mailchim…

【期末速成】计算机操作系统 EP03 | 学习笔记

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点五&#xff1a;进程的概念及特征2.1 考点六&#xff1a;进程的状态与切换 三、总结&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f6…

Why is Kafka fast?(Kafka性能基石)

Kafka概述 Why is kafka fast&#xff1f; 思考一下&#xff0c;当我们在讨论Kafka快的时候我们是在谈论什么呢&#xff1f;What does it even mean that Kafka is fast? 我们是在谈论kafka的低延迟&#xff08;low latency&#xff09;还是在讨论吞吐量&#xff08;through…

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上&#xff0c;OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、图像及语…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …

TCP单进程循环服务器程序与单进程客户端程序

实验目的 理解并掌握以下内容: 网络进程标识(即套接字地址)在Linux中的数据结构与地址转换函数。网络字节序与主机字节序的定义、转换以及相关函数在网络编程中的应用。数据结构内存对齐的基本规则,以及基于数据结构构建PDU的基本方法。TCP单进程循环服务器与单进程客户端的…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-44目标检测算法综述:R-CNN、SSD和YOLO

41~44目标检测算法综述&#xff1a;R-CNN、SSD和YOLO 1. 区域卷积神经网络 (R-CNN 系列) 1.1 R-CNN 使用启发式搜索算法来选择锚框。使用预训练模型对每个锚框提取特征&#xff08;每个锚框视为一张图片&#xff0c;使用 CNN 提取特征&#xff09;。训练 SVM 进行类别分类&a…

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中&#xff0c;办公软件的重要性不言而喻。从文档处理到电子表格分析&#xff0c;再到演示文稿制作&#xff0c;强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件&#xff0c;一直以来都受到广大用户的关注与喜爱…

[物联网专题] - 螺钉式接线端子的选择和辨识

工业设备上大量使用各式各样的端子来连接外部设备和电缆电线&#xff0c;其中用得最多的就是标准的螺钉式端子&#xff0c;其外形如下&#xff1a; 标准端子一般是2位&#xff08;2个接线端子&#xff09;&#xff0c;端子与端子之间可以级联&#xff0c;组成任意数量的位数。…

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud&#xff0c; 归档的…

2006年下半年软件设计师【上午题】试题及答案

文章目录 2006年下半年软件设计师上午题--试题2006年下半年软件设计师上午题--答案2006年下半年软件设计师上午题–试题

idea 项目互联网转内网开发 依赖报错问题 maven问题

场景&#xff1a; 这个问题困扰好久&#xff0c;通过分析后&#xff0c;发现是maven配置问题&#xff0c;废话不多说&#xff0c;上干活。 问题描述 项目互联网从转内网开发&#xff0c;提前下载好repository&#xff0c;跟项目一起导入内网&#xff0c;导入后&#xff0c;发…

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介&#xff1a; 本篇博客是昇思大模型打卡营应用实践部分的第一次分享&#xff0c;主题是计算机视觉&#xff08;CV&#xff09;领域的FCN图像语义分割&#xff0c;接下来几天还会陆续分享其他CV领域的知识&#xff08;doge&#xff09;。 全卷积网络&#xff08;Fully…