Leaflet 基礎(chǔ)入門教程示例
什么是Webgis?
webGis又稱之為網(wǎng)絡(luò)地理信息系統(tǒng),GIS的全名是Geographic Information System
,它是在計算機硬件,軟件系統(tǒng)支持下,對整個或部分地球表層空間中的有關(guān)地理分布數(shù)據(jù)進行采集,儲存,管理,運算,分析,顯示和描述的技術(shù)系統(tǒng)。
地圖是GIS的表現(xiàn)形式,但是GIS深層是空間信息的處理,簡單說就是將GIS這門學(xué)科所能提供的功能,以B/S技術(shù)展現(xiàn)給用戶,使用戶只需要在瀏覽器上便能使用這些GIS功能的一個應(yīng)用方向。
什么是Leaflet?
Leafet 作為 webGis 主流框架之一,Leaflet 是一個開源并且對移動端友好的交互式地圖 JavaScript 庫。 它大小僅僅只有39 KB, 并且擁有絕大部分開發(fā)者所需要的所有地圖特性。
在Vue中安裝Leaflet,與其他依賴
// leaflet 核心庫 npm install leaflet // 地圖瓦片 npm install leaflet.chinatmsproviders // 動態(tài)線 npm install leaflet-ant-path // 側(cè)邊欄工具庫 npm install @geoman-io/leaflet-geoman-free
在App.vue中使用
import L from "leaflet"; import "leaflet.chinatmsproviders"; // 插件可加載各種地圖(如:智圖地圖,谷歌地圖,高德地圖等包含衛(wèi)星地圖) import "leaflet-ant-path"; //動態(tài)線條插件 import "leaflet/dist/leaflet.css"; import imgs from "@/assets/svg/logo.svg"; import "@geoman-io/leaflet-geoman-free"; import "@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css";
初始化地圖
methods:{ initMap(){ let _this = this; this.map = L.map("map", { attributionControl: true, // 是否版權(quán) closePopupOnClick: false, // 點擊畫布是否直接隱藏彈窗 maxZoom: 13, // 最大縮放 minZoom: 3, // 最小縮放 noWrap: false, // 該層是否包裹在逆子午線周圍 worldCopyJump: true, // 拷貝當(dāng)前配置 renderer: L.svg(), // 矢量渲染 }); } }
chinaProvider地圖瓦片
// 設(shè)置需要引入的地圖瓦片 // 其他材質(zhì)包括(天地圖,百度,...) git地址:https://github.com/htoooth/Leaflet.ChineseTmsProviders L.tileLayer?.chinaProvider('Geoq.Normal.PurplishBlue').addTo(this.map); // 設(shè)置中心點與縮放層級 this.map.setView([41.02999636902566, 108.984375], 3);
addControls使用工具集
this.map.pm.addControls({ position: "topleft", drawCircle: false, });
attribution創(chuàng)建自定義版權(quán)
const attrs = L.control.attribution({ prefix: "Leafet地圖" }); attrs.addTo(this.map);
Marker創(chuàng)建點
- 首先在data中定義兩個layers組
data(){ return{ // layerGroup 圖層組主要用于添加標(biāo)點與線段對象 LineGroupLayer: L.layerGroup([]), MakerGroupLayer: L.layerGroup([]), } }
- 定義點
// 定義圖標(biāo) const icons = L.icon({ iconUrl: imgs, iconSize: [20, 20], iconAnchor: [5, 5], shadowSize: [0, 0], }); // 創(chuàng)建點實例 將經(jīng)緯度傳入,并在該點位顯示圖標(biāo) let makerStart = L.marker([50.5, 30.5],{ icon: icons }); // 添加圖 this.MakerGroupLayer.addLayer(makerStart); this.map.addLayer(this.MakerGroupLayer); // 添加點
創(chuàng)建線
let paths = [ [35.485106, 123.078832], [26.787026, 126.104039], [22.847052, 126.281993], [18.999909, 126.578654], ]; //隨便打的點 let lineLayer = L.polyline.antPath(paths, { // 線 paused: false, //暫停 初始化狀態(tài) reverse: false, //方向反轉(zhuǎn) delay: 1000, //延遲,數(shù)值越大效果越緩慢 dashArray: [10, 20], //間隔樣式 weight: 2, //線寬 opacity: 0.7, //透明度 color: "red", pulseColor: "#fff", //塊顏色 }); this.LineGroupLayer.addLayer(lineLayer); this.map.addLayer(this.LineGroupLayer); // 添加線
Polygon創(chuàng)建三角形
let multipolygon = new L.Polygon( [ [ [17.385044, 78.486671], [16.506174, 80.648015], [17.686816, 83.218482], ], ], { color: "rgba(0,0,255,.7)", weight: 1, } ); multipolygon.addTo(this.map);
Popup彈窗&Tooltip提示
- Popup
// 自定義popup,并顯示圖片 var popup = L.popup() .setLatLng([e.latlng.lat, e.latlng.lng]) .setContent(`<p>Hello world!<br />This is a nice popup.</p><img src="${imgs}"/>`) .openOn(_this.map);
- Tooltip
// 定義圖標(biāo) const icons = L.icon({ iconUrl: imgs, iconSize: [20, 20], iconAnchor: [5, 5], shadowSize: [0, 0], }); let popupDom = "<div class='pop-data'><ul><li class='time'><span>這是一個點:</span>" + "</li><li><span>內(nèi)容...</span>" + "</li><li><span>內(nèi)容...</span>" + "</li></ul></div>"; // 綁定popup let makerEnd = L.marker([17.686816, 83.218482], { icon: icons, }).bindTooltip(popupDom); this.MakerGroupLayer.addLayer(makerEnd);
Geojson區(qū)域描邊
首先需要我們在(DataV)[datav.aliyun.com/portal/scho…
// 引入Geojson的json文件,這里直接將文件展開了,在項目中不應(yīng)該這么做 let Geojson = { type: "FeatureCollectio", properties: { zhName: "河北省", name: "Hebei" }, geometry: { type: "MultiPolygon", coordinates: [ [ [116.365069,40.943216], [116.37641,40.939681], [116.398515,40.905999] .... ], ], }, }; L.geoJSON(Geojson, style: { weight: 2, //邊框粗細 opacity: 0.4, //透明度 fillColor: 'transparent', //區(qū)域填充顏色 fillOpacity: 0.3, //區(qū)域填充顏色的透明 }).addTo(this.map);
總結(jié)
根據(jù)上面的例子總結(jié)到Leaflet框架設(shè)計簡單,而且官方提供很多插件、具有高擴展性、性能良好和可用性強等特點。它可以在所有主流的桌面和移動平臺上高效運行,能夠利用主流瀏覽器中利用HTML5和CSS3的優(yōu)勢的同時也兼容老版本瀏覽器,更加適合移動端,但是只支持2D地圖,不支持3d地圖。
以上就是Leaflet 基礎(chǔ)入門教程示例的詳細內(nèi)容,更多關(guān)于Leaflet 基礎(chǔ)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js中checkbox的使用教程(取值、賦值、判斷是否選中)
在checkbox的使用中,我們經(jīng)常遇到需要全選或者單選的情況,下面這篇文章主要給大家介紹了關(guān)于js中checkbox使用(取值、賦值、判斷是否選中)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07layui-table獲得當(dāng)前行的上/下一行數(shù)據(jù)的例子
今天小編就為大家分享一篇layui-table獲得當(dāng)前行的上/下一行數(shù)據(jù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript?異步函數(shù)?Promisification?處理詳情
這篇文章主要介紹了JavaScript異步函數(shù)Promisification處理詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08