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

vue使用leafLet方式(繪圖工具)

 更新時(shí)間:2024年08月10日 17:06:33   作者:清虛桂意  
這篇文章主要介紹了vue使用leafLet方式(繪圖工具),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

安裝

npm install leaflet
npm install leaflet.pm

引入,在項(xiàng)目main.js中

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

// 引入Leaflet對(duì)象 掛載到Vue上,便于全局使用,也可以單獨(dú)頁(yè)面中單獨(dú)引用
import * as L from "leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet.pm";
import "leaflet.pm/dist/leaflet.pm.css";

Vue.config.productionTip = false;
Vue.L = Vue.prototype.$L = L;

/* leaflet icon */
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
  iconRetinaUrl: require("leaflet/dist/images/marker-icon-2x.png"),
  iconUrl: require("leaflet/dist/images/marker-icon.png"),
  shadowUrl: require("leaflet/dist/images/marker-shadow.png"),
});

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount("#app");

初始化地圖

初始化

this.map = L.map("map", {
	  center: [40.02404009136253, 116.50641060224784], // 地圖中心
	  zoom: 14, //縮放比列
	  zoomControl: false, //禁用 + - 按鈕
	  doubleClickZoom: false, // 禁用雙擊放大
	  attributionControl: false, // 移除右下角leaflet標(biāo)識(shí)
});

引入圖層,可以引入多個(gè)圖層

let gaoDeLayer = L.tileLayer(
  "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
)
gaoDeLayer.addTo(this.map);

地圖事件

// 添加地圖點(diǎn)擊彈窗
this.map.on('click', (e) => {
   L.popup().setLatLng(e.latlng)
     .setContent("You clicked the map at " + e.latlng.toString())
     .openOn(this.map);
 });

添加繪制工具

引入leafle.pm原生組件

this.map.pm.addControls({
	  position: "topleft",
	  drawPolygon: true, // 繪制多邊形
	  drawMarker: false, //繪制標(biāo)記點(diǎn)
	  drawCircleMarker: false, //繪制圓形標(biāo)記
	  drawPolyline: false, //繪制線條
	  drawRectangle: true,	//繪制矩形
	  drawCircle: false, //繪制圓圈
	  editMode: true, //編輯多邊形
	  dragMode: true, //拖動(dòng)多邊形
	  cutPolygon: true, // 添加一個(gè)按鈕以刪除多邊形里面的部分內(nèi)容
	  removalMode: true  // 清除多邊形
});

設(shè)置繪圖樣式

接收參數(shù)

1、單獨(dú)設(shè)置某個(gè)模式的樣式

// 控制繪制樣式  如下給Polygon多邊形設(shè)置樣式
var options = {
  // 連接線  標(biāo)記之間的線
  templineStyle: {
    color: 'red',
  },
  // 提示線  從最后一個(gè)標(biāo)記到鼠標(biāo)光標(biāo)的線
  hintlineStyle: {
    color: 'red',
    dashArray: [5, 5],
  },
  // 繪制完成的樣式
  pathOptions: {
    color: 'orange',
    fillColor: 'green',
  },
};
// 會(huì)激活繪制多邊形功能
this.map.pm.enableDraw('Polygon', options);

2、設(shè)置全局的pathOptions樣式

this.map.pm.setPathOptions({
  color: 'orange',
  fillColor: 'green',
  fillOpacity: 0.4,
});

設(shè)置語(yǔ)言

//設(shè)置語(yǔ)言  en, de, it, ru, ro, es, fr, pt_br, zh , nl
this.map.pm.setLang('zh');  

自定義繪圖按鈕

Drawing Mode繪圖模式

// 啟用繪制多邊形功能
map.pm.enableDraw('Polygon', {
  snappable: true,//啟用捕捉到其他繪制圖形的頂點(diǎn)
  snapDistance: 20,//頂點(diǎn)捕捉距離
});
 
// 關(guān)閉繪制  注意也可以關(guān)閉其他模式的繪制功能
map.pm.disableDraw('Polygon');

綁定按鈕

<template>
  <div class="home">
    <button @click="drawRectangle">繪制矩形</button>
    <button @click="drawCircle">繪制圓</button>
    <button @click="disableDraw">關(guān)閉繪制</button>

    <div id="map"></div>
  </div>
</template>
drawRectangle () {
  this.map.pm.enableDraw('Rectangle', {
    snappable: true,
    snapDistance: 20,
  });
},
drawCircle () {
  this.map.pm.enableDraw('Circle', {
    snappable: true,
    snapDistance: 20,
  });
},
disableDraw () {
  this.map.pm.disableDraw('Rectangle');
},

獲取繪制的坐標(biāo)

//pm:drawstart 開始第一個(gè)點(diǎn)的時(shí)候調(diào)用
//pm:drawend  禁止繪制時(shí)調(diào)用
//pm:create  圖形創(chuàng)建完成時(shí)調(diào)用
this.map.on("pm:drawstart", e => {
  console.log(e, "first");
});
this.map.on("pm:drawend", e => {
  console.log(e, "禁止繪制");
});
this.map.on("pm:create", e => {
  console.log(e, "繪制完成時(shí)調(diào)用");
  if (e.shape == "Circle") {
    console.log(e.layer._latlng, e.layer._radius, "繪制坐標(biāo)")
  } else {
    console.log(e.layer._latlngs[0], "繪制坐標(biāo)")
  }
});

自定義編輯按鈕

繪制多邊形

官方詳解

      // 繪制多邊形
      let latlngs = [
        [50.0214690112063, 116.50239229202272],
        [50.019694293123855, 116.50224208831787],
        [50.01979288978388, 116.50580406188966],
        [50.021436146476105, 116.50601863861085],
        [50.02253710631967, 116.50316476821901]
      ];
      // color:線段顏色
      // weight:線段寬度
      // opacity:線段透明度
      // dashArray:虛線間隔
      // fill:是否填充內(nèi)部(true/false)
      // fillColor:內(nèi)部填充顏色,如不設(shè)置,默認(rèn)為color顏色
      // fillOpacity:內(nèi)部填充透明度
      this.myPolygon = L.polygon(latlngs, { color: "red" }).addTo(this.map);
      // 調(diào)整地圖視圖中心點(diǎn)為多邊形中心點(diǎn)
      this.map.setView(this.myPolygon.getCenter(), 16)

Edit Mode 編輯功能

layer為需要改變的圖層,即矢量元素(如多邊形等)

<button @click="enableEdit">編輯</button>
<button @click="disableEdit">關(guān)閉編輯</button>

// 編輯
enableEdit () {
  let layer = this.myPolygon
  // 添加可編輯功能
  layer.pm.enable({
    allowSelfIntersection: false,
  });
  
  // 監(jiān)聽編輯事件
  layer.on('pm:vertexadded', e => {
    console.log(e, "添加頂點(diǎn)")
  });
  layer.on('pm:edit', e => {
    console.log(e, "拖動(dòng)");
    console.log(e.target._latlngs[0], "拖動(dòng)后的坐標(biāo)")
  });
},

// 關(guān)閉編輯
disableEdit () {
  let layer = this.myPolygon
  layer.pm.disable()
}

全局編輯

// 開啟全體編輯
this.map.pm.enableGlobalEditMode();
// 禁用全局編輯
this.map.pm.disableGlobalEditMode()
// 全局編輯切換
this.map.pm.toggleGlobalEditMode();
// 判斷是否全局編輯,有返回值
let isEdit = this.map.pm.globalEditEnabled();

Drag Mode 拖拽模式

// 全局拖拽模式切換
this.map.pm.toggleGlobalDragMode();
// 是否啟用全局拖動(dòng)模式,有返回值
console.log(this.map.pm.globalDragModeEnabled())

// 全局的拖拽模式切換監(jiān)聽器
this.map.on('pm:globaldragmodetoggled', e => {
  console.log(e);
});
// 單個(gè)元素添加拖拽監(jiān)聽
let layer = this.myPolygon
layer.on('pm:dragend', e => {
  console.log(e, "拖拽")
});

Removal Mode 移除模式

map.pm.toggleGlobalRemovalMode();
map.pm.globalRemovalEnabled()

Cutting Mode 剪切模式

<button @click="enableCut">啟用剪輯</button>
<button @click="disableCut">關(guān)閉剪輯</button>

enableCut () {
  // 開啟剪切功能
  this.map.pm.Draw.Cut.enable({
    allowSelfIntersection: false,
  });
  // 單個(gè)元素添加剪切監(jiān)聽
  let layer = this.myPolygon
  layer.on('pm:cut', e => {
    console.log(e, "剪切")
  });
},
disableCut () {
  // 關(guān)閉剪切功能
  this.map.pm.Draw.Cut.disable();
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue實(shí)現(xiàn)按需加載組件及異步組件功能

    vue實(shí)現(xiàn)按需加載組件及異步組件功能

    這篇文章主要介紹了vue實(shí)現(xiàn)按需加載組件和異步組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • vue中將el-switch值true、false改為number類型的1和0

    vue中將el-switch值true、false改為number類型的1和0

    這篇文章主要介紹了vue中將el-switch值true、false改為number類型的1和0問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 圖片預(yù)覽插件vue-photo-preview的使用示例詳解

    圖片預(yù)覽插件vue-photo-preview的使用示例詳解

    這篇文章主要介紹了圖片預(yù)覽插件vue-photo-preview的使用,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • vuex實(shí)現(xiàn)數(shù)據(jù)持久化的兩種方案

    vuex實(shí)現(xiàn)數(shù)據(jù)持久化的兩種方案

    這兩天在做vue項(xiàng)目存儲(chǔ)個(gè)人信息的時(shí)候,遇到了頁(yè)面刷新后個(gè)人信息數(shù)據(jù)丟失的問題,在查閱資料后,我得出兩種解決數(shù)據(jù)丟失,使用數(shù)據(jù)持久化的方法,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • Vue3造輪子之打包構(gòu)建配置二級(jí)目錄方式

    Vue3造輪子之打包構(gòu)建配置二級(jí)目錄方式

    這篇文章主要介紹了Vue3造輪子之打包構(gòu)建配置二級(jí)目錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用elementUI的表格table給列添加樣式

    使用elementUI的表格table給列添加樣式

    這篇文章主要介紹了使用elementUI的表格table給列添加樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • VueJS如何引入css或者less文件的一些坑

    VueJS如何引入css或者less文件的一些坑

    本篇文章主要介紹了VueJS如何引入css或者less文件的一些坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • vue?hash模式改成history,同時(shí)實(shí)現(xiàn)spa預(yù)渲染問題

    vue?hash模式改成history,同時(shí)實(shí)現(xiàn)spa預(yù)渲染問題

    這篇文章主要介紹了vue?hash模式改成history,同時(shí)實(shí)現(xiàn)spa預(yù)渲染問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 解決npm安裝錯(cuò)誤:No matching version found for XXX@3.3.6問題

    解決npm安裝錯(cuò)誤:No matching version found for&

    這篇文章主要介紹了解決npm安裝錯(cuò)誤:No matching version found for XXX@3.3.6問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue3實(shí)現(xiàn)無縫滾動(dòng)列表效果(大屏數(shù)據(jù)輪播場(chǎng)景)

    vue3實(shí)現(xiàn)無縫滾動(dòng)列表效果(大屏數(shù)據(jù)輪播場(chǎng)景)

    vue3-scroll-seamless 是一個(gè)用于 Vue 3 的插件,用于實(shí)現(xiàn)無縫滾動(dòng)的組件,它可以讓內(nèi)容在水平或垂直方向上無縫滾動(dòng),適用于展示輪播圖、新聞滾動(dòng)、圖片展示等場(chǎng)景,本文就給大家介紹了vue3實(shí)現(xiàn)無縫滾動(dòng)列表效果,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

玉树县| 麟游县| 班戈县| 永昌县| 维西| 隆安县| 颍上县| 嘉兴市| 西宁市| 奈曼旗| 霍州市| 古蔺县| 项城市| 巫山县| 和林格尔县| 淮阳县| 余干县| 琼结县| 蓬溪县| 仙居县| 柯坪县| 新建县| 麻江县| 大姚县| 阳朔县| 清水县| 油尖旺区| 洛川县| 新宾| 肇庆市| 怀宁县| 汕头市| 白玉县| 罗甸县| 喀喇沁旗| 东至县| 长沙县| 突泉县| 淮安市| 逊克县| 扶沟县|