leaflet【十一】地圖瓦片路徑可視化

前言

在開發調試過程當中,如果引入的是公司內部的Gis地圖信息或者一些第三方定制來的Gis地圖數據,當某一些地圖塊數據缺失的時候,要打開F12去一個個找那些鏈接(去找對應的xy與layer)失效、那么你可能需要使用以下插件幫你實現瓦片路徑、層級可視化

leaflet-map-block

github 地址

npm 地址

該插件封裝了一個 Leaflet 的網格圖層 LeafletMapBlockLayer,用于在地圖上渲染帶有網格和文字標記的瓦片。支持自定義網格線樣式和網格文字顯示。安裝和使用都非常簡單,代碼如下:

npm i leaflet-map-block

使用:

import {LeafletMapBlockLayer} from 'leaflet-map-block/dist/LeafletMapBlock';map.addLayer(new LeafletMapBlockLayer({lineDash: [2, 2]}));

其中LeafletMapBlockLayer是一個類,他的構造函數可以傳遞一個對象,這個對象就是對這個插件進行的一個配置

值類型默認值說明
strokeStylestring‘red’線顏色
lineWidthnumber2線寬
lineDashnumber[][5,5]線的虛線樣式:[0,0] 為實線
showGridTextbooleantrue是否顯示網格文字
gridTextColorstring‘black’網格文字顏色
gridFontstring‘12px Arial’gridFont

比方說我們使用的是天地圖的瓦片,那么我們的地圖URL就是:http://t1.tianditu.gov.cn/DataServer?T=ter_w&x={x}&y={y}&l={z}&tk=tk
,那么當那一塊缺了的時候沒有渲染出來就可以拿地圖上的xyz放到這個鏈接的xyz值中就可以快速定位到了

在這里插入圖片描述

或者說我們有自己的地圖的話,那也是一樣的替換URL當中的xyz驗證一下是不是真的圖片缺失,是的話就去對應的文件系統找這個圖片就好了

在這里插入圖片描述

源碼解析

授人以魚不如授人以漁,這也是在一次機緣巧合之下發生的問題,使用內部地圖但是缺失了一些塊不好定位的時候,正好再看leaflet官方文檔找的。

也就是這個GridLayer圖層,我們知道地圖渲染是按照瓦片一塊塊貼到canvas上面,然后渲染一個canvas實現的

一個冷姿勢:在leaflet這個官網里面是英文的,如果想看中文版的,把.com改成.cn就可以了

那么正好:來開始封裝吧:

  • 定義一個類,繼承L.GridLayer
  • 實現構造,用來傳遞options配置
  • createTile方法會在map.addLayer()將該圖層添加到地圖的時候調用,返回一個canvas元素【也就是單個的地圖瓦片】
  • 既然可以拿到每一次渲染的地圖瓦片,那么我們就可以給它添加一些內容了
  • 創建一個canvas元素,這個canvas元素是和地圖瓦片一樣的大小
  • 給這個canvas元素添加內容【邊框和文字】其中層級和定位信息在coords當中可以取到
  • 最后返回這個canvas對象tile就完成了
import L from 'leaflet';interface CanvasLayerOptions extends L.GridLayerOptions {// 線顏色strokeStyle?: string;// 線寬lineWidth?: number;// 線的虛線樣式:[0,0]為實線lineDash?: number[];// 是否顯示網格文字showGridText?: boolean;// 網格文字顏色gridTextColor?: string;// 網格文字大小、字體等配置gridFont?: string;
}let options: CanvasLayerOptions = {};export class LeafletMapBlockLayer extends L.GridLayer {constructor(data?: CanvasLayerOptions) {super(data);options = {strokeStyle: 'red',lineWidth: 2,lineDash: [5, 5],showGridText: true,gridTextColor: 'black',gridFont: '12px Arial',...data};}createTile(coords: any): HTMLCanvasElement {const tile = L.DomUtil.create('canvas', 'my-leaflet-tile') as HTMLCanvasElement;const size = this.getTileSize();tile.width = size.x;tile.height = size.y;const ctx = tile.getContext('2d');const {strokeStyle = '',lineWidth = 0,lineDash = [0, 0],showGridText = true,gridTextColor = 'black',gridFont = '12px Arial'} = options;if (ctx) {ctx.strokeStyle = strokeStyle;ctx.lineWidth = lineWidth;ctx?.setLineDash(lineDash);ctx?.strokeRect(0, 0, tile.width, tile.height);if (showGridText) {ctx.fillStyle = gridTextColor;ctx.font = gridFont;ctx.fillText(`x:${coords.x}, y:${coords.y}, z:${coords.z}`, 5, 15);}}return tile;}
}

npm publish

既然封裝好了,那么也打包發布到npm上吧

  • 修改package.json文件,需要指定
    • name:項目名
    • version:版本號
    • description:項目描述
    • main:入口文件
    • module:es6模塊入口文件
    • types:ts類型聲明文件
    • keywords:關鍵字
    • author:作者
    • license:協議
    • scripts:打包腳本
  • 執行打包命令:npm run build-lib,打包完成之后會生成dist目錄
  • 登錄npm:npm login
  • 發布到npm:npm publish

就這樣也就發布到了npm上。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913137.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES6從入門到精通:模塊化

ES6 模塊化基礎概念ES6 模塊化是 JavaScript 官方標準,通過 import 和 export 語法實現代碼拆分與復用。模塊化特點包括:每個文件是一個獨立模塊,作用域隔離。支持靜態分析,依賴關系在編譯時確定。輸出的是值的引用(動…

stm32 USART串口協議與外設——江協教程踩坑經驗分享

江協stm32學習:9-1~9-3 USART串口協議與外設 一、串口通信基礎知識 1、通信類型: 全雙工通信:通信雙方能夠同時進行雙向通信。一般有兩根通信線,如USART中的TX(發送)和RX(接收)線&am…

深度學習中的一些名詞

向前傳播 forward pass 在機器學習中,輸入的feature, 通過預測模型,輸出預測值,此過程稱之為向前傳播; 向后傳播 backward pass 為了將預測與真實值的產值減小,需要根據差值,更新模型中的參數,此…

鴻蒙系統(HarmonyOS)應用開發之手勢鎖屏密碼鎖(PatternLock)

項目概述 基于鴻蒙(OpenHarmony)平臺開發的手勢密碼鎖應用,旨在為用戶提供安全、便捷且具有良好交互體驗的身份驗證方式。通過手勢圖案輸入,用戶可以輕松設置和驗證密碼,提升設備的安全性和個性化體驗。 功能特點 手…

vue文本插值

好的,我們來詳細講解 Vue 中最基礎的數據展示方式:文本插值和在其內部使用的 JavaScript 表達式。 1. 文本插值 (Text Interpolation) 知識點: 文本插值是 Vue 中最基本的數據綁定形式。它使用“Mustache”語法(雙大括號 {{ }})…

Python:線性代數,向量內積諧音記憶。

目錄1 先說結論2 解釋3 歡迎糾錯4 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、…

小程序導航設置更多內容的實現方法

在小程序中實現導航欄設置更多內容,可以通過以下幾種方式實現: 1. 使用原生導航欄自定義按鈕 javascript // app.json 或頁面.json中配置 {"navigationBarTitleText": "首頁","navigationBarTextStyle": "black&q…

SpringBoot 解決配置文件有黃色波浪線

在application.properties配置文件中有黃色波浪線,是警告!! 原因:編碼格式不一致!! 解決:Settings| Editor | File Encodings | 選擇UTF-8

在 Vue 3 中全局使用 Suspense 組件

Suspense 是 Vue 3 引入的一個內置組件,不需要引用可以直接用。用于處理異步依賴的等待狀態。雖然 Suspense 主要用于異步組件,但你也可以全局地使用它來管理整個應用的加載狀態。 全局 Suspense 的基本用法 1. 在根組件中使用 Suspense // main.js 或…

筆記/計算機網絡

Content 計算機網絡部分核心概念十大網絡協議一覽 計算機網絡部分核心概念 1. 什么是計算機網絡?它最基本的功能是什么? 計算機網絡是指通過某種傳輸介質將多臺獨立的計算機或設備連接起來,實現數據交換和資源共享的系統。其最基本的功能是數…

時頻圖數據集更正程序,去除坐標軸白邊及調整對應的標簽值

當數據集是時頻圖時可能有一個尷尬的問題,就是數據集制作好后,發現有白邊。 其實這也不影響訓練模型,可能對模型訓練效果的影響也是微乎其微的,于是大多數情況我會選擇直接用整張圖片訓練模型。但是,有的情況下&#x…

mv重命名報錯:bash:未預期的符號 ‘(‘附近有語法錯誤

文章目錄 一、報錯背景二、解決方法2.1、方法一:文件名加引號2.2、方法二:特殊字符前加\進行轉義 一、報錯背景 在linux上對一文件執行重命名時報錯。原因是該文件名包含空格與括號。 文件名如下: aa (1).txt執行命令及報錯如下…

Unity-MMORPG內容筆記-其三

繼續之前的內容: 戰斗系統 無需多言,整個項目中最復雜的部分,也是代碼量最大的部分。 屬性系統 首先我們要定義一系列屬性,畢竟所謂的戰斗就是不斷地扣血對吧。 屬性系統是戰斗系統的核心模塊,負責管理角色的所有…

Linux入門篇學習——Linux 幫助手冊

目錄 一、Linux 幫助手冊 1.怎么打開幫助手冊 2.安裝依賴 3.使用手冊查看命令 一、Linux 幫助手冊 1.怎么打開幫助手冊 打開 ubuntu ,輸入 man 命令打開幫助手冊,直接在控制臺輸入 man 就可以了, man 手冊一共有 9 頁&#xff0c…

2025年后端主流框架對比和競爭格局及趨勢發展

2025年的后端開發呈現出云原生主導、性能革命、AI深度融合的技術格局,主流框架在細分領域持續分化,新興技術快速滲透關鍵場景。以下是基于行業實踐與技術演進的深度解析: 一、主流框架競爭態勢與核心能力 1. Java生態:企業級市場的…

bRPC簡介

bRPC基礎介紹。 什么是RPC? 互聯網上的機器大都通過TCP/IP協議相互訪問,但TCP/IP只是往遠端發送了一段二進制數據,為了建立服務還有很多問題需要抽象: 數據以什么格式傳輸?不同機器間,網絡間可能是不同的字節序&am…

力扣網C語言編程題:在數組中查找目標值位置之二分查找法

一. 簡介 上一篇文章對力扣網上"有序數組中查找目標值范圍"題目進行了普通的解法。文章如下: 力扣網C語言編程題:在數組中查找目標值位置之暴力解法-CSDN博客 本文使用二分查找法進行實現,因為二分查找法符合題目要求&#xff0…

前端查詢條件加密傳輸方案(SM2加解密)

一、需求背景 控臺項目甲方進行安全測試,測試報告其中一條:敏感信息明文傳輸 1 敏感信息明文傳輸 中危 查詢接口傳輸手機號、銀行卡號等敏感信息時未加密/脫敏處理。 二、解決方案 討論出的方案是通過前端查詢條件加密,后端對加密的…

【Python】Flask網頁

Flask第三方庫安裝命令:pip install flask代碼:from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

數字資產革命中的信任之錨:RWA法律架構的隱形密碼

首席數據官高鵬團隊律師創作,AI輔助 在數字經濟的浪潮中,資產的邊界正在被重新定義。當一塊地產、一筆應收賬款、甚至一份碳配額被轉化為鏈上的數字代幣時,技術的光芒固然耀眼,但真正決定其生命力的,是背后隱匿的“信…