Leaflet 基礎(chǔ)入門教程示例
什么是Webgis?
webGis又稱之為網(wǎng)絡(luò)地理信息系統(tǒng),GIS的全名是Geographic Information System,它是在計(jì)算機(jī)硬件,軟件系統(tǒng)支持下,對(duì)整個(gè)或部分地球表層空間中的有關(guān)地理分布數(shù)據(jù)進(jìn)行采集,儲(chǔ)存,管理,運(yùn)算,分析,顯示和描述的技術(shù)系統(tǒng)。
地圖是GIS的表現(xiàn)形式,但是GIS深層是空間信息的處理,簡(jiǎn)單說就是將GIS這門學(xué)科所能提供的功能,以B/S技術(shù)展現(xiàn)給用戶,使用戶只需要在瀏覽器上便能使用這些GIS功能的一個(gè)應(yīng)用方向。
什么是Leaflet?
Leafet 作為 webGis 主流框架之一,Leaflet 是一個(gè)開源并且對(duì)移動(dòng)端友好的交互式地圖 JavaScript 庫(kù)。 它大小僅僅只有39 KB, 并且擁有絕大部分開發(fā)者所需要的所有地圖特性。
在Vue中安裝Leaflet,與其他依賴
// leaflet 核心庫(kù) npm install leaflet // 地圖瓦片 npm install leaflet.chinatmsproviders // 動(dòng)態(tài)線 npm install leaflet-ant-path // 側(cè)邊欄工具庫(kù) npm install @geoman-io/leaflet-geoman-free
在App.vue中使用
import L from "leaflet"; import "leaflet.chinatmsproviders"; // 插件可加載各種地圖(如:智圖地圖,谷歌地圖,高德地圖等包含衛(wèi)星地圖) import "leaflet-ant-path"; //動(dòng)態(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, // 點(diǎn)擊畫布是否直接隱藏彈窗
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è)置中心點(diǎn)與縮放層級(jí)
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)建點(diǎn)
- 首先在data中定義兩個(gè)layers組
data(){
return{
// layerGroup 圖層組主要用于添加標(biāo)點(diǎn)與線段對(duì)象
LineGroupLayer: L.layerGroup([]),
MakerGroupLayer: L.layerGroup([]),
}
}
- 定義點(diǎn)
// 定義圖標(biāo)
const icons = L.icon({
iconUrl: imgs,
iconSize: [20, 20],
iconAnchor: [5, 5],
shadowSize: [0, 0],
});
// 創(chuàng)建點(diǎn)實(shí)例 將經(jīng)緯度傳入,并在該點(diǎn)位顯示圖標(biāo)
let makerStart = L.marker([50.5, 30.5],{ icon: icons });
// 添加圖
this.MakerGroupLayer.addLayer(makerStart);
this.map.addLayer(this.MakerGroupLayer); // 添加點(diǎn)
創(chuàng)建線
let paths = [
[35.485106, 123.078832],
[26.787026, 126.104039],
[22.847052, 126.281993],
[18.999909, 126.578654],
]; //隨便打的點(diǎn)
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>這是一個(gè)點(diǎn):</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ū)域描邊
首先需要我們?cè)?DataV)[datav.aliyun.com/portal/scho…
// 引入Geojson的json文件,這里直接將文件展開了,在項(xiàng)目中不應(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, //邊框粗細(xì)
opacity: 0.4, //透明度
fillColor: 'transparent', //區(qū)域填充顏色
fillOpacity: 0.3, //區(qū)域填充顏色的透明
}).addTo(this.map);
總結(jié)
根據(jù)上面的例子總結(jié)到Leaflet框架設(shè)計(jì)簡(jiǎn)單,而且官方提供很多插件、具有高擴(kuò)展性、性能良好和可用性強(qiáng)等特點(diǎn)。它可以在所有主流的桌面和移動(dòng)平臺(tái)上高效運(yùn)行,能夠利用主流瀏覽器中利用HTML5和CSS3的優(yōu)勢(shì)的同時(shí)也兼容老版本瀏覽器,更加適合移動(dòng)端,但是只支持2D地圖,不支持3d地圖。
以上就是Leaflet 基礎(chǔ)入門教程示例的詳細(xì)內(nèi)容,更多關(guān)于Leaflet 基礎(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
javascript模擬枚舉的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)javascript模擬枚舉的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-03-03
JS獲取隨機(jī)數(shù)函數(shù)可自定義最小值最大值
這篇文章主要介紹的是一個(gè)JS獲取隨機(jī)數(shù)的函數(shù)可自定義最小值最大值,需要的朋友可以參考下2014-05-05
JavaScript canvas實(shí)現(xiàn)七彩太陽(yáng)光暈效果
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)七彩太陽(yáng)光暈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
JavaScript和HTML DOM的區(qū)別與聯(lián)系及Javascript和DOM的關(guān)系
這篇文章主要介紹了JavaScript和HTML DOM的區(qū)別與聯(lián)系及Javascript和DOM的關(guān)系的相關(guān)資料,需要的朋友可以參考下2015-11-11
HTML5+Canvas實(shí)現(xiàn)圖片添加水印功能
在現(xiàn)代Web開發(fā)中,圖像處理是一個(gè)常見的需求,尤其是為圖片添加水印,下面我們就來看看如何使用HTML5的Canvas技術(shù)為圖片添加水印,需要的可以了解下2024-11-11

