<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在基於二維的場景中,也許會遇到以下的需求。在某交通路口或者重要的監控點,需要將實時或者錄製的視訊資訊疊加在地圖上。更有甚者,隨著裝置通訊方式的增強,無人機等裝置可以採集實時資料,實時回傳到控制終端,幫助進行遠端偵查,控制等。但是在常規的展示資訊中,一般在地圖上標記一些點,在地圖上可以理解為Marker,存取使用者在使用滑鼠等點選時,再彈出一個視窗,將視訊資訊進行播放展示。這種方式互動過多,而且與地圖的互動程度不強,沒有體現與地理資訊系統的強關聯關係,也沒有展示出地圖與視訊融合的獨特魅力。
本文將以Leaflet為例,深度講解一個基於Leaflet的視訊疊加展示外掛 DistortableVideo,在介紹外掛的同時,也深度講解如何在工程中實際應用DistortableVideo,最後給出一個簡單的視訊疊加Html5案例,希望對有需要的朋友有所幫助,文章行文倉促,權當拋磚引玉,更加優質且符合使用者需要的功能需要各位朋友妙筆生花。
Enable to distort videos on Leaflet maps. Leaflet.DistortableVideo allows for perspective distortions of images, client-side, using CSS3 transformations in the DOM.基於這個元件,在Leaflet的基礎之上,就可以實現視訊圖層的疊加展示。它的開源協定是MIT協定,大家可以放心使用。
在瀏覽器中開啟它的github地址Leaflet.DistortableVideo,在瀏覽器中可以看到如下資訊:
使用git工具將程式碼clone至本地工作目錄,如下圖所示,在這裡將其工作目錄簡單介紹一下:1、dist是編譯之後的依賴js檔案;2、examples是官方提供的樣例檔案,快速入門的話,可以通過執行相關範例檔案達到快速入門的作用。3、lib是提供本地使用的包,也可以拷貝到工程專案中直接參照。4、src目錄是元件的原始碼包,通常情況下不會修改這個目錄下程式碼。
這裡指的必備條件,沒有限定只能使用JQuery,開發者可以基於自己專案的實際情況,進行參照即可。對於瀏覽器的要求則需要支援video元素和支援matrix3d()這個方法,否則將會影響元件的展示效果。博文編者採用的Chrome瀏覽器,具體版本是Chrome 102 64bit。
在目錄中新建一個pointArray2.html頁面,在頁面中定義相關的網頁程式碼。這裡只展示基本的骨架程式碼,最後會給出完整的頁面範例。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Leaflet疊加視訊圖層</title> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" rel="external nofollow" rel="external nofollow" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin=""/> <link rel="stylesheet" type="text/css" href="main.css" rel="external nofollow" rel="external nofollow" > </head> <body> <div id="map"></div> <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script> <script src="../lib/numeric.js" type="text/javascript"></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js" type="text/javascript"></script> <script src="../dist/index.js" type="text/javascript" /></script> </body> </html>
上述程式碼中,引入了Leaflet的js和css資源,Jquery的相關依賴,以及引入了視訊疊加js的參照js。
視訊疊加的js放在dist的目錄下。
如果之前看過Leaflet相關部落格的朋友一定知道,在Leaflet中定義地圖的相關語法,這裡再複習一下。這裡需要注意的是,這裡存取的地圖採用的投影方式是標準的WGS84座標系,因此無需自己定義座標系。使用Leaflet預設的設定方式即可。同時在系統初始化的同時對map的範圍進行限定,詳細見如下程式碼:
var map = L.map('map'); L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', { maxZoom: 18, attribution: 'Leaflet疊加視訊圖層', id: 'mapbox.satellite' }).addTo(map); var mapBounds = [[32, -130], [13, -100]]; map.fitBounds(mapBounds);
演示的視訊資源,我們使用官方提供的mp4,如果您本地有mp4視訊資訊,也可以採用原生的資源。在展示的時候都是沒有問題的。
var topLeft = L.latLng([30, -129]); var topRight = L.latLng([32, -100]); var bottomRight = L.latLng([13, -97]); var bottomLeft = L.latLng([13, -130]); var corners = [topLeft, topRight, bottomRight, bottomLeft]; var layer = L.distortableVideoOverlay("https://www.mapbox.com/bites/00188/patricia_nasa.mp4", corners, { muted: true, opacity: 0.5 }).addTo(map); function addMarker(point, text) { L.marker(point).addTo(map).bindPopup(text); } addMarker(topLeft, "I'm topLeft :)"); addMarker(topRight, "I'm topRight :p"); addMarker(bottomRight, "I'm bottomRight :o"); addMarker(bottomLeft, "I'm bottomLeft <3");
通過distortableVideoOverlay方法,將視訊源地址,視訊的四個角的位置資訊,視訊圖層的設定資訊進行初始化。初始化設定視訊圖層的方式有兩種,第一種是如上的程式碼方式,在建立時,將四個頂點角的位置傳遞給圖層對應;另一個種方式是如下的方式:
overlay.setCorners(corners);
通過以上設定後,可以看到視訊圖層疊加地圖圖層的效果,同時設定了視訊圖層的透明度。視訊圖層可以隨著地圖圖層進行放大和縮小。
最後輸出一個動態的效果圖如下圖所示,
完整的網頁程式碼範例如下,地圖底圖採用的OSM的線上地圖,僅供學習使用:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Leaflet疊加視訊圖層</title> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" rel="external nofollow" rel="external nofollow" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin=""/> <link rel="stylesheet" type="text/css" href="main.css" rel="external nofollow" rel="external nofollow" > </head> <body> <div id="map"></div> <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script> <script src="../lib/numeric.js" type="text/javascript"></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js" type="text/javascript"></script> <script src="../dist/index.js" type="text/javascript" /></script> <script> var map = L.map('map'); L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', { maxZoom: 18, attribution: 'Leaflet疊加視訊圖層', id: 'mapbox.satellite' }).addTo(map); var mapBounds = [[32, -130], [13, -100]]; var topLeft = L.latLng([30, -129]); var topRight = L.latLng([32, -100]); var bottomRight = L.latLng([13, -97]); var bottomLeft = L.latLng([13, -130]); var corners = [topLeft, topRight, bottomRight, bottomLeft]; map.fitBounds(mapBounds); var layer = L.distortableVideoOverlay("https://www.mapbox.com/bites/00188/patricia_nasa.mp4", corners, { muted: true, opacity: 0.5 }).addTo(map); function addMarker(point, text) { L.marker(point).addTo(map).bindPopup(text); } addMarker(topLeft, "I'm topLeft :)"); addMarker(topRight, "I'm topRight :p"); addMarker(bottomRight, "I'm bottomRight :o"); addMarker(bottomLeft, "I'm bottomLeft <3"); </script> </body> </html>
簡單分析以下視訊圖層的載入過程,通過在瀏覽器前端進行debug偵錯相關程式碼的方式進行。
在這裡呼叫distortableVideoOverlay方法進行相關呼叫,然後進入到範例建立方法中:
在範例化方法中進行範例物件的建立,如下程式碼所示:
在這裡可以看到,在傳入了四個角的定義後,將其轉換為bounds物件,
以上就是本文的主要內容,本文首先介紹了DistortableVideo元件的相關知識,它的github倉庫資訊,相關原始碼的目錄說明,使用依賴資訊。然後結合Leaflet為,深度講解一個基於Leaflet的視訊疊加展示外掛DistortableVideo,在介紹外掛的同時,也深度講解如何在工程中實際應DistortableVideo,最後給出一個簡單的視訊疊加Html5案例,同時使用debug方式對視訊圖層的載入進行了步驟分析,希望可以幫助您更深度的理解這個元件。
到此這篇關於基於Leaflet的VideoOverlay視訊圖層疊加實戰的文章就介紹到這了,更多相關Leaflet視訊圖層疊加內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45