最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

openlayers6之地圖覆蓋物overlay三種常用用法(popup彈窗marker標(biāo)注text文本)

 更新時間:2021年09月15日 11:41:38   作者:@必意玲  
這篇文章主要介紹了openlayers6之地圖覆蓋物overlay三種常用用法(popup彈窗marker標(biāo)注text文本),主要講overlay三種最常用的案例,感興趣的朋友一起看看吧

1. 寫在前面

常見的地圖覆蓋物為這三種類型,如:popup彈窗、label標(biāo)注信息、text文本信息等。
上篇講了overlay的一些屬性方法事件等,這篇主要講overlay三種最常用的案例。更多可以參考上篇內(nèi)容openlayers6【八】地圖覆蓋物overlay詳解,這兩篇會有關(guān)聯(lián)。
popup彈窗 基本是經(jīng)常遇到的需求案例,所有單獨給大家講下,讓地圖更富有生命力?。。?br /> 你需要理解:overlay 然后通過map進(jìn)行綁定,承載在頁面的 dom 上的元素。

2. overlay 實現(xiàn)popup彈窗

2.1 vue 頁面 addPopup() 方法詳解

①:實例一個 new Overlay(),設(shè)置相關(guān)的屬性,element 是和頁面的 最外層彈窗的dom進(jìn)行綁定
②:通過 map.addOverlay(this.overlay) 把 overlay彈窗添加到頁面
③:closer.onclick 添加一個 x 關(guān)閉彈窗事件
④:通過 this.map.on("singleclick", function(evt) 事件點擊地圖觸發(fā)彈窗效果

具體代碼如下:

addPopup() {
    // 使用變量存儲彈窗所需的 DOM 對象
    var container = document.getElementById("popup");
    var closer = document.getElementById("popup-closer");
    var content = document.getElementById("popup-content");

    // 創(chuàng)建一個彈窗 Overlay 對象
    this.overlay = new Overlay({
        element: container, //綁定 Overlay 對象和 DOM 對象的
        autoPan: true, // 定義彈出窗口在邊緣點擊時候可能不完整 設(shè)置自動平移效果
        autoPanAnimation: {
            duration: 250 //自動平移效果的動畫時間 9毫秒)
        }
    });
    // 將彈窗添加到 map 地圖中
    this.map.addOverlay(this.overlay);

    let _that = this;
    /**
     * 為彈窗添加一個響應(yīng)關(guān)閉的函數(shù)
     */
    closer.onclick = function() {
        _that.overlay.setPosition(undefined);
        closer.blur();
        return false;
    };
    /**
     * 添加單擊map 響應(yīng)函數(shù)來處理彈窗動作
     */
    this.map.on("singleclick", function(evt) {
        console.log(evt.coordinate);
        let coordinate = transform(
            evt.coordinate,
            "EPSG:3857",
            "EPSG:4326"
        );
        // 點擊尺 (這里是尺(米),并不是經(jīng)緯度);
        let hdms = toStringHDMS(toLonLat(evt.coordinate)); // 轉(zhuǎn)換為經(jīng)緯度顯示
        content.innerHTML = `
        <p>你點擊了這里:</p>
        <p>經(jīng)緯度:<p><code> ${hdms}  </code> <p>
        <p>坐標(biāo):</p>X:${coordinate[0]} &nbsp;&nbsp; Y: ${coordinate[1]}`;
        _that.overlay.setPosition(evt.coordinate); //把 overlay 顯示到指定的 x,y坐標(biāo)
    });
}

效果

在這里插入圖片描述

2.2 autoPan 屬性為false效果

點擊了屏幕最右邊,可以看到不會根據(jù)鼠標(biāo)點擊位置進(jìn)行適應(yīng)地圖。

在這里插入圖片描述

3. overlay 實現(xiàn) label標(biāo)注信息

vue 頁面

addMarker() {
    var marker = new Overlay({
        position: fromLonLat([104.043505, 30.58165]),
        positioning: "center-center",
        element: document.getElementById("marker"),
        stopEvent: false
    });
    this.map.addOverlay(marker);
},

在這里插入圖片描述

4 overlay 實現(xiàn) text文本信息

vue 頁面

addText() {
    var textInfo = new Overlay({
        position: fromLonLat([104.043505, 30.58165]),
        offset: [20, -20],
        element: document.getElementById("textInfo")
    });
    this.map.addOverlay(textInfo);
},

在這里插入圖片描述

5. 附上完整代碼

<template>
    <div id="app">
        <div id="map" ref="map"></div>
        <div id="marker"></div>
        <div id="textInfo">我是text文本信息</div>
        <div id="popup" class="ol-popup">
            <a href="#" rel="external nofollow"  id="popup-closer" class="ol-popup-closer"></a>
            <div id="popup-content" class="popup-content"></div>
        </div>
    </div>
</template>

<script>
import "ol/ol.css";
import { Map, View, Coordinate } from "ol";
import { toStringHDMS } from "ol/coordinate";
import TileLayer from "ol/layer/Tile";
import XYZ from "ol/source/XYZ";
import Overlay from "ol/Overlay";
import { fromLonLat, transform, toLonLat } from "ol/proj";

// 彈出窗口實現(xiàn)
export default {
    name: "dashboard",
    data() {
        return {
            map: null,
            overlay: null
        };
    },
    methods: {
        initMap() {
            let target = "map"; //跟頁面元素的 id 綁定來進(jìn)行渲染
            let tileLayer = new TileLayer({
                source: new XYZ({
                    url:
                        "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}"
                })
            });
            let view = new View({
                // projection: "EPSG:4326", //使用這個坐標(biāo)系
                center: fromLonLat([104.912777, 34.730746]), //地圖中心坐標(biāo)
                zoom: 4.5 //縮放級別
            });
            this.map = new Map({
                target: target, //綁定dom元素進(jìn)行渲染
                layers: [tileLayer], //配置地圖數(shù)據(jù)源
                view: view //配置地圖顯示的options配置(坐標(biāo)系,中心點,縮放級別等)
            });
        },
        /**
         * 第一種:點標(biāo)記 marker
         * 創(chuàng)建一個標(biāo)注信息
         */
        addMarker() {
            var marker = new Overlay({
                position: fromLonLat([104.043505, 30.58165]),
                positioning: "center-center",
                element: document.getElementById("marker"),
                stopEvent: false
            });
            this.map.addOverlay(marker);
        },
        /**
         * 第二種:文字標(biāo)簽 label
         * 創(chuàng)建一個label標(biāo)注信息
         */
        addText() {
            var textInfo = new Overlay({
                position: fromLonLat([104.043505, 30.58165]),
                offset: [20, -20],
                element: document.getElementById("textInfo")
            });
            this.map.addOverlay(textInfo);
        },
        /**
         * 第三種:彈窗式窗口 popup
         * 創(chuàng)建一個彈窗popup信息
         */
        addPopup() {
            // 使用變量存儲彈窗所需的 DOM 對象
            var container = document.getElementById("popup");
            var closer = document.getElementById("popup-closer");
            var content = document.getElementById("popup-content");

            // 創(chuàng)建一個彈窗 Overlay 對象
            this.overlay = new Overlay({
                element: container, //綁定 Overlay 對象和 DOM 對象的
                autoPan: false, // 定義彈出窗口在邊緣點擊時候可能不完整 設(shè)置自動平移效果
                autoPanAnimation: {
                    duration: 250 //自動平移效果的動畫時間 9毫秒)
                }
            });
            // 將彈窗添加到 map 地圖中
            this.map.addOverlay(this.overlay);

            let _that = this;
            /**
             * 為彈窗添加一個響應(yīng)關(guān)閉的函數(shù)
             */
            closer.onclick = function() {
                _that.overlay.setPosition(undefined);
                closer.blur();
                return false;
            };
            /**
             * 添加單擊響應(yīng)函數(shù)來處理彈窗動作
             */
            this.map.on("singleclick", function(evt) {
                console.log(evt.coordinate);
                let coordinate = transform(
                    evt.coordinate,
                    "EPSG:3857",
                    "EPSG:4326"
                );
                // 點擊尺 (這里是尺(米),并不是經(jīng)緯度);
                let hdms = toStringHDMS(toLonLat(evt.coordinate)); // 轉(zhuǎn)換為經(jīng)緯度顯示
                content.innerHTML = `
                <p>你點擊了這里:</p>
                <p>經(jīng)緯度:<p><code> ${hdms}  </code> <p>
                <p>坐標(biāo):</p>X:${coordinate[0]} &nbsp;&nbsp; Y: ${coordinate[1]}`;
                _that.overlay.setPosition(evt.coordinate); //把 overlay 顯示到指定的 x,y坐標(biāo)
            });
        }
    },
    mounted() {
        this.initMap();
        // 初始化彈窗方法
        this.addText();
        this.addMarker();
        this.addPopup();
    }
};
</script>
<style lang="scss" scoped>
html,
body {
    height: 100%;
}
#app {
    min-height: calc(100vh - 50px);
    width: 100%;
    position: relative;
    overflow: none;
    #map {
        height: 888px;
        min-height: calc(100vh - 50px);
    }
}
.ol-popup {
    position: absolute;
    background-color: white;
    -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
    filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
    padding: 15px;
    border-radius: 10px;
    border: 1px solid #cccccc;
    bottom: 12px;
    left: -50px;
}
.ol-popup:after,
.ol-popup:before {
    top: 100%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
}
.ol-popup:after {
    border-top-color: white;
    border-width: 10px;
    left: 48px;
    margin-left: -10px;
}
.ol-popup:before {
    border-top-color: #cccccc;
    border-width: 11px;
    left: 48px;
    margin-left: -11px;
}
.ol-popup-closer {
    text-decoration: none;
    position: absolute;
    top: 2px;
    right: 8px;
}
.popup-content {
    width: 400px;
}
.ol-popup-closer:after {
    content: "✖";
}
#marker {
    width: 20px;
    height: 20px;
    background: red;
    border-radius: 50%;
}
#textInfo {
    width: 200px;
    height: 40px;
    line-height: 40px;
    background: burlywood;
    color: yellow;
    text-align: center;
    font-size: 20px;
}
</style>

到此這篇關(guān)于openlayers6之地圖覆蓋物overlay三種常用用法(popup彈窗marker標(biāo)注text文本)的文章就介紹到這了,更多相關(guān)vue openlayer popup地圖覆蓋物內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-video-player 斷點續(xù)播的實現(xiàn)

    vue-video-player 斷點續(xù)播的實現(xiàn)

    這篇文章主要介紹了vue-video-player 斷點續(xù)播的實現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • vue + canvas實現(xiàn)涂鴉面板的示例代碼

    vue + canvas實現(xiàn)涂鴉面板的示例代碼

    這篇文章主要給大家介紹了vue + canvas實現(xiàn)涂鴉面板的示例,文章通過代碼示例介紹的非常詳細(xì),感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • 詳解Vue中使用Echarts的兩種方式

    詳解Vue中使用Echarts的兩種方式

    這篇文章主要介紹了Vue中使用Echarts的兩種方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 使用vscode 開發(fā)uniapp的方法

    使用vscode 開發(fā)uniapp的方法

    本文給大家分享我使用vscode開發(fā)的一些配置。其中包括uniapp組件語法提示,uniapp代碼提示,代碼自動格式化問題,對vscode 開發(fā)uniapp的相關(guān)知識感興趣的朋友一起看看吧
    2021-08-08
  • vue3?使用setup語法糖實現(xiàn)分類管理功能

    vue3?使用setup語法糖實現(xiàn)分類管理功能

    這篇文章主要介紹了vue3?使用setup語法糖實現(xiàn)分類管理,本次模塊使用 vue3+element-plus 實現(xiàn)一個新聞?wù)镜暮笈_分類管理模塊,其中新增、編輯采用對話框方式公用一個表單,需要的朋友可以參考下
    2022-08-08
  • vue開發(fā)樹形結(jié)構(gòu)組件(組件遞歸)

    vue開發(fā)樹形結(jié)構(gòu)組件(組件遞歸)

    這篇文章主要為大家詳細(xì)介紹了vue開發(fā)樹形結(jié)構(gòu)組件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue中改變滾動條樣式的方法

    vue中改變滾動條樣式的方法

    這篇文章主要介紹了vue中改變滾動條樣式的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 解決Vue使用swiper動態(tài)加載數(shù)據(jù),動態(tài)輪播數(shù)據(jù)顯示白屏的問題

    解決Vue使用swiper動態(tài)加載數(shù)據(jù),動態(tài)輪播數(shù)據(jù)顯示白屏的問題

    今天小編就為大家分享一篇解決Vue使用swiper動態(tài)加載數(shù)據(jù),動態(tài)輪播數(shù)據(jù)顯示白屏的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 淺談Vue網(wǎng)絡(luò)請求之interceptors實際應(yīng)用

    淺談Vue網(wǎng)絡(luò)請求之interceptors實際應(yīng)用

    這篇文章主要介紹了淺談Vue網(wǎng)絡(luò)請求之interceptors實際應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • vue 無法覆蓋vant的UI組件的樣式問題

    vue 無法覆蓋vant的UI組件的樣式問題

    這篇文章主要介紹了vue 無法覆蓋vant的UI組件的樣式問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論

陈巴尔虎旗| 谢通门县| 金塔县| 肇州县| 北海市| 海阳市| 师宗县| 怀仁县| 厦门市| 普宁市| 海南省| 武功县| 吉木乃县| 瓦房店市| 建德市| 山东省| 会昌县| 绥宁县| 胶南市| 娄烦县| 新宾| 特克斯县| 新田县| 中方县| 河西区| 凤山市| 宝山区| 隆林| 甘泉县| 岳阳市| 交口县| 连南| 信丰县| 达孜县| 焦作市| 龙井市| 横山县| 保定市| 古蔺县| 天长市| 岚皋县|