国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

????????眾所周知,在GIS的世界里,圖例和地圖永遠(yuǎn)是一對(duì)一起出現(xiàn)的對(duì)象。在地圖上表示地理環(huán)境各要素,比如山脈、河流、城市、鐵路等所用的符號(hào)叫做圖例。這些符號(hào)所表示的意義,常注明在地圖的邊角上。圖例是表達(dá)地圖內(nèi)容的基本形式和方法,是現(xiàn)代地圖的語(yǔ)言,是讀圖和用讀所借助的工具。地圖符號(hào)一般包括各種大小、粗細(xì)、顏色不同的點(diǎn)、線、圖形等。符號(hào)的設(shè)計(jì)要能表達(dá)地面景物的形狀、大小和位置,而且還能反映出各種景物的質(zhì)和量的特征,以及相互關(guān)系。因此圖例常設(shè)計(jì)成與實(shí)地景物輪廓相似的幾何圖形。

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?????????還有一些地圖,專門表示各種自然條件、工業(yè)分布等。在這些圖上,也必然有相應(yīng)的圖例,說明某種符號(hào)代表某種森林,某種符號(hào)代表某種礦產(chǎn),某種符號(hào)代表某種工業(yè),等等。讀圖之前,先把圖例中的地圖符號(hào)和注記的意義弄清楚,對(duì)于正確理解地圖內(nèi)容就方便多了??梢赃@樣說,圖例是讀圖的“線索”,方便用戶按圖索驥。

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?????????在之前的博文中,介紹了很多Leaflet的內(nèi)容,關(guān)于圖例的展示一直沒有涉及。本文簡(jiǎn)單講講在Leaflet中如何進(jìn)行圖例的展示,基于Leaflet.Legend進(jìn)行圖例的展示。通過講解Leaflet.Legend得集成,核心API的講解,讓您對(duì)Leaflet.Legend有一個(gè)基本的認(rèn)識(shí)和了解。

一、Leaflet.Legend簡(jiǎn)介

????????Leaflet本身是一個(gè)非常輕量級(jí)的前端組件,基于Leaflet有很多的擴(kuò)展插件,圍繞Leaflet的生態(tài)非常豐富。在Leaflet中的插件中,可以找到下面的插件列表內(nèi)容。

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?1、Legend的開源協(xié)議

????????Leaflet.Legend是一個(gè)MIT協(xié)議,非常寬松的協(xié)議??煞判脑陧?xiàng)目中使用。Leaflet.Legend 是一個(gè) Leaflet 插件, 用于顯示圖例符號(hào)和切換相應(yīng)的疊加層的顯示.開源地址:Legend。

MIT License

Copyright (c) 2020 ptma@163.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?2、Legend API介紹

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

????????打開src目錄下的leaflet.legend.js文件,這里是整個(gè)圖例類的源碼文件,如上圖所示的各個(gè)Symbol類都定義在這里。下面就這些類進(jìn)行深入的講解。

options: {
            position: "topleft",
            title: "Legend",
            legends: [],
            symbolWidth: 24,
            symbolHeight: 24,
            opacity: 1.0,
            column: 1,
            collapsed: false,
        },

        initialize: function (options) {
            L.Util.setOptions(this, options);
            this._legendSymbols = [];
            this._buildContainer();
        },

????????上述代碼定義了創(chuàng)建圖例對(duì)象的各個(gè)屬性,具體的參數(shù)說明如下:

參數(shù)名稱 類型 默認(rèn)值 描述?
position String topleft 圖例控件位置
title String Legend 圖例控件的標(biāo)題
opacity Number 1.0 圖例面板的透明度
legends LegendSymbol[] [] [LegendSymbol](#legendsymbol) 圖例符號(hào)數(shù)組。
symbolWidth Number 24 圖例符號(hào)的寬度,以像素為單位
symbolHeight Number 24 圖例符號(hào)的高度,以像素為單位
column Number 1 圖例符號(hào)排列的列數(shù)
collapsed Boolean false 圖例面板是否默認(rèn)展開

????????LegendSymbol對(duì)象的定義如下:

參數(shù)名稱 類型 默認(rèn)值 描述
label String undefined 圖例符號(hào)的文本標(biāo)簽。
type String undefined 圖例符號(hào)的類型. 可以是image','circle','rectangle','polygon' 或 'polyline'。
url String undefined 圖里圖片的 URL,僅用于 type 為 'image' 時(shí)
radius Number undefined 圓形圖例的半徑,以像素為單位,僅用于 type 為 'circle' 時(shí)
sides Number undefined 正多邊形的邊數(shù),僅用于 type 為 'polygon' 時(shí)。
layers Layer Layer[] undefined,圖例符號(hào)關(guān)聯(lián)的疊加層. 關(guān)聯(lián)疊加層后可通過點(diǎn)擊圖例來(lái)切換相應(yīng)疊加層的可見性。
inactive Boolean undefined 圖例符號(hào)是否為非激活的, 非激活的圖例會(huì)減淡顯示
stroke Boolean true 是否繪制邊框
color String #3388ff 邊框顏色
weight Number 3? 邊框?qū)挾?/td>
opacity Number 1.0 邊框透明度
lineCap String round 指定如何繪制每一條線段末端的屬性。有 3 個(gè)可能的值,分別是:'butt','round' 或 ’square‘
lineJoin String round 用來(lái)設(shè)置2個(gè)長(zhǎng)度不為0的相連部分(線段,圓弧,曲線)如何連接在一起的屬性(長(zhǎng)度為0的變形部分,其指定的末端和控制點(diǎn)在同一位置,會(huì)被忽略)
dashArray String null 控制用來(lái)描邊的點(diǎn)劃線的圖案范式
dashOffset String null dash模式到路徑開始的距離
fill Boolean depends 是否用顏色填充
fillColor String * 填充色,默認(rèn)與邊框顏色相同
fillOpacity Number 0.2? 填充透明度
fillRule String evenodd 填充規(guī)則

二、Legend實(shí)例開發(fā)

????????有了上面對(duì)圖例API的基礎(chǔ)認(rèn)知之后,我們便可以進(jìn)行相應(yīng)的實(shí)例開發(fā)。下面將使用一個(gè)詳細(xì)的案例講解,來(lái)詳細(xì)說明Legend如何進(jìn)行深入開發(fā)。

1、新建html頁(yè)面

<!DOCTYPE html>
<html>

<head>
    <title>Leaflet legend control</title>
    <meta charset="utf-8" />
    <style type="text/css">
        body {
            padding: 0;
            margin: 0;
        }

        html,
        body,
        #map {
            height: 100%;
        }

    </style>
    <link rel="stylesheet"  />
    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>

    <link rel="stylesheet" href="../src/leaflet.legend.css" />
    <script type="text/javascript" src="../src/leaflet.legend.js"></script>
</head>

<body>
    <div id="map"></div>
</body>
</html>

2、創(chuàng)建Leaflet對(duì)象引用

var map = L.map("map", {
    center: [29.797751134173065, 120.7012939453125],
    zoom: 5
});
	
L.tileLayer('file:///D%3A/wzh_test/q0403/{z}/{x}/{y}.png', {
    minZoom: 0,
    maxZoom: 7,
    tms: false,
    attribution: '圖例功能測(cè)試-夜郎king'
}).addTo(map);

3、圖例定義

var marker = L.circleMarker(L.latLng(29.702368038541767, 120.47607421874999), {
        radius: 6,
        fillColor: "#ff0000",
        color: "blue",
        weight: 2,
        opacity: 1,
        fillOpacity: 0.6,
    });

    var latlngs = [
        [
            29.204918463909035,
            119.6246337890625,
        ],
        [
            29.79358002272772,
            120.27008056640624,
        ],
        [
            29.70087695780884,
            120.2984046936035,
        ]
    ];
    var polyline = L.polyline(latlngs, {
        color: 'red'
    }).addTo(map);

    const legend = L.control.Legend({
            position: "bottomleft",
            collapsed: false,
            symbolWidth: 24,
            opacity: 1,
			title:"圖例",
            column: 2,
            legends: [{
                label: "位置",
                type: "image",
                url: "marker/marker-red.png",
            }, {
                label: "Marker2",
                type: "image",
                url: "marker/purple.png"
            }, {
                label: "Circle",
                type: "circle",
                radius: 6,
                color: "blue",
                fillColor: "#FF0000",
                fillOpacity: 0.6,
                weight: 2,
                layers: [marker],
                inactive: true,
            }, {
                label: "Real line",
                type: "polyline",
                color: "#FF0000",
                fillColor: "#FF0000",
                weight: 2,
                layers: polyline
            }, {
                label: "Dotted line",
                type: "polyline",
                color: "#0000FF",
                fillColor: "#0000FF",
                dashArray: [5, 5],
                weight: 2
            }, {
                label: "Rectangle",
                type: "rectangle",
                color: "#FF0000",
                fillColor: "#FF0000",
                weight: 2
            }, {
                label: "Square",
                type: "polygon",
                sides: 4,
                color: "#FF0000",
                fillColor: "#FF0000",
                weight: 2
            }, {
                label: "Regular triangle",
                type: "polygon",
                sides: 3,
                color: "#FF0000",
                fillColor: "#FF0000",
                weight: 2
            }, {
                label: "Regular polygon",
                type: "polygon",
                sides: 5,
                color: "#FF0000",
                fillColor: "#FF0000",
                weight: 2
            }]
        })
        .addTo(map);

4、展示效果

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?????????點(diǎn)擊Circle圖例還可以進(jìn)行圖層的切換,默認(rèn)情況下,地圖上不展示這些信息,點(diǎn)擊之后會(huì)在地圖上添加相應(yīng)的圖層對(duì)象。

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

5、圖例調(diào)用過程

????????在源碼中進(jìn)行debug調(diào)試,觀察相應(yīng)的代碼如何執(zhí)行的。首先進(jìn)行Legend初始化,調(diào)用initialize方法,在這個(gè)方法中會(huì)將出入的參數(shù)進(jìn)行解析,然后再創(chuàng)建元素對(duì)象。

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

_buildContainer: function () {
            this._container = L.DomUtil.create("div", "leaflet-legend leaflet-bar leaflet-control");
            this._container.style.backgroundColor = "rgba(255,255,255, " + this.options.opacity + ")";

            this._contents = L.DomUtil.create("section", "leaflet-legend-contents", this._container);
            this._link = L.DomUtil.create("a", "leaflet-legend-toggle", this._container);
            this._link.title = "Legend";
            this._link.href = "#";

            var title = L.DomUtil.create("h3", "leaflet-legend-title", this._contents);
            title.innerText = this.options.title || "Legend";

            var len = this.options.legends.length;
            var colSize = Math.ceil(len / this.options.column);
            var legendContainer = this._contents;
            for (var i = 0; i < len; i++) {
                if (i % colSize == 0) {
                    legendContainer = L.DomUtil.create("div", "leaflet-legend-column", this._contents);
                }
                var legend = this.options.legends[i];
                this._buildLegendItems(legendContainer, legend);
            }
        },

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?????????在上面的代碼執(zhí)行過程中定義相應(yīng)的圖例對(duì)象,同時(shí)將對(duì)象放置到頁(yè)面元素中。下面重點(diǎn)看一下各個(gè)圖例對(duì)象是怎么進(jìn)行初始化的。

_buildLegendItems: function (legendContainer, legend) {
            var legendItemDiv = L.DomUtil.create("div", "leaflet-legend-item", legendContainer);
            if (legend.inactive) {
                L.DomUtil.addClass(legendItemDiv, "leaflet-legend-item-inactive");
            }
            var symbolContainer = L.DomUtil.create("i", null, legendItemDiv);

            var legendSymbol;
            if (legend.type === "image") {
                legendSymbol = new ImageSymbol(this, symbolContainer, legend);
            } else if (legend.type === "circle") {
                legendSymbol = new CircleSymbol(this, symbolContainer, legend);
            } else if (legend.type === "rectangle") {
                legendSymbol = new RectangleSymbol(this, symbolContainer, legend);
            } else if (legend.type === "polygon") {
                legendSymbol = new PolygonSymbol(this, symbolContainer, legend);
            } else if (legend.type === "polyline") {
                legendSymbol = new PolylineSymbol(this, symbolContainer, legend);
            } else {
                L.DomUtil.remove(legendItemDiv);
                return;
            }
            this._legendSymbols.push(legendSymbol);

            symbolContainer.style.width = this.options.symbolWidth + "px";
            symbolContainer.style.height = this.options.symbolHeight + "px";

            var legendLabel = L.DomUtil.create("span", null, legendItemDiv);
            legendLabel.innerText = legend.label;
            if (legend.layers) {
                L.DomUtil.addClass(legendItemDiv, "leaflet-legend-item-clickable");
                L.DomEvent.on(
                    legendItemDiv,
                    "click",
                    function () {
                        this._toggleLegend.call(this, legendItemDiv, legend.layers);
                    },
                    this
                );
            }
        },

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)

?以上就是Legend圖例對(duì)象的主要執(zhí)行過程,有興趣的朋友可以把源碼clone到本地進(jìn)行深入研究。

總結(jié)

????????以上就是本文的主要內(nèi)容,本文簡(jiǎn)單講解在Leaflet中如何進(jìn)行圖例的展示。通過講解Leaflet.Legend的集成,核心API的講解,讓您對(duì)Leaflet.Legend有一個(gè)基本的認(rèn)識(shí)和了解。本文行文倉(cāng)促,難免有誤,歡迎批評(píng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-426821.html

到了這里,關(guān)于LeafLet加載自定義Legend的設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Echarts圖例點(diǎn)擊事件】自定義Echarts圖例legend點(diǎn)擊事件(已解決)

    【Echarts圖例點(diǎn)擊事件】自定義Echarts圖例legend點(diǎn)擊事件(已解決)

    **【寫在前面】**這下我又不得不說了,還是客戶現(xiàn)場(chǎng)使用時(shí)想查詢一周的數(shù)據(jù),查詢時(shí)候發(fā)現(xiàn)頁(yè)面居然要等20多秒,這是個(gè)人都得崩潰吧,然后就開始排查這塊業(yè)務(wù)代碼模塊,主要體現(xiàn)在兩個(gè)方面: A.接口請(qǐng)求時(shí)間過長(zhǎng)(約8秒),有優(yōu)化的空間 B.前端一次性調(diào)用了四次接口,分

    2023年04月08日
    瀏覽(28)
  • 基于Leaflet.js和Turf.js的等值線區(qū)間自定義及顏色自適應(yīng)實(shí)踐

    基于Leaflet.js和Turf.js的等值線區(qū)間自定義及顏色自適應(yīng)實(shí)踐

    目錄 前言 一、Turf.js等值線相關(guān)制作 1、生成方法 2、主要參數(shù) 二、實(shí)際案例開發(fā) 1、新建展示頁(yè)面 2、等值線生成 ?3、基于Leaflet的再優(yōu)化 總結(jié) ????????在氣象方面的GIS應(yīng)用當(dāng)中,會(huì)根據(jù)實(shí)際的工作需要建立不同的監(jiān)測(cè)站點(diǎn)。氣象監(jiān)測(cè)站的主要功能包括:(1)天氣預(yù)報(bào)和

    2024年04月11日
    瀏覽(43)
  • Vue3實(shí)現(xiàn)圖片懶加載及自定義懶加載指令

    Vue3實(shí)現(xiàn)圖片懶加載及自定義懶加載指令

    大家好,我是南木元元,熱衷分享有趣實(shí)用的文章。圖片懶加載是一種常見性能優(yōu)化的方式,它只去加載可視區(qū)域圖片,而不是在網(wǎng)頁(yè)加載完畢后就立即加載所有圖片,能減少很多不必要的請(qǐng)求,極大的提升用戶體驗(yàn)。 圖片懶加載的 實(shí)現(xiàn)原理 :在圖片沒進(jìn)入可視區(qū)域的時(shí)候

    2024年02月13日
    瀏覽(34)
  • angular實(shí)現(xiàn)自定義模塊路由懶加載;配置自定義模塊路由及子路由

    angular實(shí)現(xiàn)自定義模塊路由懶加載;配置自定義模塊路由及子路由

    圖片中綠色表示新建的文件;黃色表示被更改的文件; 1、創(chuàng)建一個(gè)新的項(xiàng)目 2、創(chuàng)建一個(gè)用戶模塊,并配置路由 如圖: 3 、在module/模塊下創(chuàng)建user組件 如圖: 4、實(shí)現(xiàn)路由懶加載 依次修改下列幾個(gè)文件: #1 user-routing.module.ts

    2024年02月09日
    瀏覽(24)
  • 實(shí)現(xiàn)地圖遮罩 leaflet

    實(shí)現(xiàn)地圖遮罩 leaflet

    在地圖中加載的底圖是瓦片服務(wù)(固定大小的規(guī)則矩形),底圖的范圍很大,鋪滿了整個(gè)div,但是我們的感興趣的部門可能只是其中一部分,如何在整個(gè)屏幕中突出感興趣的部分-- 地圖遮罩 (遮擋圖像中不感興趣的部分)。最常見的用處是突出行政區(qū)內(nèi)部區(qū)域。 圖1 湖南省遮

    2024年02月14日
    瀏覽(26)
  • Leaflet結(jié)合Echarts實(shí)現(xiàn)遷徙圖

    Leaflet結(jié)合Echarts實(shí)現(xiàn)遷徙圖

    效果圖如下:

    2024年02月04日
    瀏覽(17)
  • vue實(shí)現(xiàn)離線地圖+leaflet+高德瓦片

    vue實(shí)現(xiàn)離線地圖+leaflet+高德瓦片

    1、我是通過leaflet和高德的瓦片實(shí)現(xiàn)的離線地圖 2、可以通過npm、CDN和直接下載zip包實(shí)現(xiàn)引入leaflet,附上leaflet中文網(wǎng) 3、高德的瓦片是找了很多帖子無(wú)意看到的一份合適的瓦片下載項(xiàng)目(忘了原帖在哪),不過這個(gè)項(xiàng)目是Java項(xiàng)目,是通過后端大哥幫忙下載的,附上項(xiàng)目原地址

    2024年02月12日
    瀏覽(26)
  • Leaflet實(shí)現(xiàn)要素點(diǎn)擊查詢彈窗展示屬性

    Leaflet實(shí)現(xiàn)要素點(diǎn)擊查詢彈窗展示屬性

    leaflet是一個(gè)非常輕量的webgis框架,同時(shí)呢代碼結(jié)構(gòu)也比較簡(jiǎn)單。 如果項(xiàng)目上有需求需要大家實(shí)現(xiàn)對(duì)于個(gè)行政區(qū)點(diǎn)擊查詢相關(guān)屬性并且展示,就像下圖這樣: ?我們可以這樣做。首先要清楚leaflet框架的構(gòu)造,leaflet在加載圖層的時(shí)候是對(duì)圖層添加了事件監(jiān)聽的,也就是說用戶對(duì)

    2024年02月09日
    瀏覽(20)
  • Matlab中l(wèi)egend()函數(shù)的用法:實(shí)現(xiàn)標(biāo)注的顯示及隱藏

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 Matlab中l(wèi)egend()函數(shù)是:把想要標(biāo)注的圖形命令給個(gè)變量名,然后在legend()命令中指定。 代碼如下(示例):

    2024年02月12日
    瀏覽(23)
  • 【Go】excelize庫(kù)實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出封裝(一),自定義導(dǎo)出樣式、隔行背景色、自適應(yīng)行高、動(dòng)態(tài)導(dǎo)出指定列、動(dòng)態(tài)更改表頭

    【Go】excelize庫(kù)實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出封裝(一),自定義導(dǎo)出樣式、隔行背景色、自適應(yīng)行高、動(dòng)態(tài)導(dǎo)出指定列、動(dòng)態(tài)更改表頭

    最近在學(xué)go操作excel,畢竟在web開發(fā)里,操作excel是非常非常常見的。這里我選擇用 excelize 庫(kù)來(lái)實(shí)現(xiàn)操作excel。 為了方便和通用,我們需要把導(dǎo)入導(dǎo)出進(jìn)行封裝,這樣以后就可以很方便的拿來(lái)用,或者進(jìn)行擴(kuò)展。 我參考的是這篇文章:【GO】excelize導(dǎo)入導(dǎo)出封裝 這個(gè)導(dǎo)入導(dǎo)出封

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包