日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue 高德地图多边形_Vue + 高德地图画矢量图

發布時間:2025/4/5 vue 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 高德地图多边形_Vue + 高德地图画矢量图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

功能需求

引入并創建地圖

支持鼠標工具

鼠標畫矢量圖(線、圓、矩形、多邊形)

支持矢量圖編輯、獲取各點經緯度及求面積等操作

自定義鼠標右鍵事件

一圖勝千言,效果圖如下

創建地圖對象

//DOM加載后動態引入地圖腳本并map初始化

//template

//mounted

this.$nextTick(function() {

this.initMap();

});

initMap() {

var url = 'https://webapi.amap.com/maps?v=1.4.15&key=秘鑰;

var jsapi = document.createElement('script');

jsapi.charset = 'utf-8';

jsapi.src = url;

document.head.appendChild(jsapi);

setTimeout(() => {//一秒延遲,等待腳本加載

let that = this;

let map = new AMap.Map('map', {

zoom: 13, //級別

center: [117.226737, 31.820066], //中心點坐標

pitch: 30, // 地圖俯仰角度,有效范圍 0 度- 83 度

viewMode: '2D' // 地圖模式

});

this.MAP = map;//將map掛載到組件data,后續交互需要用到

}, 1000);

},

復制代碼

插件介紹(plugin)

map眾多功能需要插件的支持官方文檔

使用步奏

//1、引入插件,支持按需異步加載和同步加載,可同時引入多個插件

AMap.plugin(

[

'AMap.InfoWindow',

'AMap.ContextMenu',

'AMap.Heatmap',

'AMap.MouseTool',

'AMap.RangingTool',

'AMap.CircleEditor',

'AMap.PolyEditor',

'AMap.ToolBar',

'AMap.Scale',

'AMap.OverView',

'AMap.MapType',

'AMap.Geolocation'

],

function() {

//插件引入回調事件,可添加工具控件,也可創建插件實例

map.addControl(new AMap.ToolBar({ position: 'RT' }));// 在圖面添加比例尺控件,展示地圖在當前層級和緯度下的比例尺

map.addControl(new AMap.Scale());// 在圖面添加鷹眼控件,在地圖右下角顯示地圖的縮略圖

map.addControl(new AMap.OverView({ isOpen: true }));// 在圖面添加類別切換控件,實現默認圖層與衛星圖、實施交通圖層之間切換的控制

}

);

2、創建插件實例,非特殊情況需避免重復創建多個實例,復用同一個實例即可,vue中可將實例保存到data中;

//插件實例可在任何地方創建,例如鼠標工具實例創建如下:

//注意:實例的創建過程需要放到plugin的回調函數中執行,防止創建實例前沒有獲取到map實例

this.mouseTool = new AMap.MouseTool(map);

//this.mouseTool 實例掛載到data,方便全局使用

//AMap.MouseTool 插件名

//map 初始化的地圖對象

//監聽鼠標工具出發的事件

this.mouseTool.on('draw', function(e) {

//做些什么

});

//自定義交互事件,當事件被dom觸發后可以被mouseTool監聽到

畫圓

draw(type) {

switch (type) {

case 'polygon': {

......

break;

}

case 'circle': {

......

break;

}

}

},

3、調用實例的方法,使用相關功能。

this.ruler = new AMap.RangingTool(map); //創建測量工具實例

this.ruler.turnOn();

復制代碼

鼠標畫矢量圖

劃線畫圓矩形多邊形

draw(type) {

//mouseTool是鼠標工具實例

switch (type) {

case 'marker': {//畫點

mouseTool.marker({

//同Marker的Option設置

});

break;

}

case 'polyline': {//劃線

mouseTool.polyline({

strokeColor: '#80d8ff'

//同Polyline的Option設置

});

break;

}

case 'polygon': {//畫多邊形

mouseTool.polygon({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

case 'rectangle': {//畫矩形

mouseTool.rectangle({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

case 'circle': {//畫圓

mouseTool.circle({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

}

}

復制代碼

支持矢量圖編輯、獲取各點經緯度及求面積等工具插件

//編輯各種矢量圖形需要對應的插件

1、引入

2、創建實例

3、使用:調用方法、監聽事件

let circleEditor = new AMap.CircleEditor(map, e.obj);//創建圓實例,e.obj是mouseTool事件回調函數返回的數據對象

circleEditor.open(); //打開編輯狀態

監聽圓編輯過程中的事件

circleEditor.on('move', function(event){

// event.target 即為編輯后的圖形對象,包含圖形的相關數據和方法

event.target.getCenter().lat.toFixed(7)//獲取圓心經度

});

circleEditor.on('adjust', function(event){

});

circleEditor.on('end', function(event){

});

復制代碼

自定義鼠標右鍵事件

//地圖綁定鼠標右擊事件——彈出右鍵菜單

//地圖對象監聽右鍵事件(這里監聽的是地圖上的右鍵事件,如果是監聽繪畫的矢量圖右鍵,

則把監聽對象改成繪畫的矢量圖)

map.on('rightclick', function(e){

that.rightclickObj(); //定義右鍵內容

that.contextMenu.open(map, e.lnglat);

that.contextMenuPositon = e.lnglat; //右鍵菜單位置

});

//定義右鍵內容

rightclickObj() {

let that = this;

//定義內容

let content = [];

content.push("

");

content.push(

"

"

);

content.push(

"

"

);

content.push(

"

"

);

content.push(

"

"

);

if (that.circleEditor) {

content.push(

"

"

);

}

content.push('

');

//創建右鍵實例并添加自定義的內容

that.contextMenu = new AMap.ContextMenu({

isCustom: true,

content: content.join('')

});

}

//強調說明:自定義的dom是基于地圖對象生成的,并不能像vue一樣綁定事件,這里采用jQuery的方式出發的事件。如下

mounted() {

this.$nextTick(function(){

this.initMap();

});

$('body').on('click', '.menu-list-edit-start', () => {//這里采用箭頭函數,為了this指向vue

//調用定義的dom交互

this.rightMenuu(0);

});

$('body').on('click', '.menu-list-edit-end', () => {

this.rightMenuu(1);

});

$('body').on('click', '.menu-list-get-area', () => {

this.rightMenuu(2);

});

$('body').on('click', '.menu-list-remove', () => {

this.rightMenuu(3);

});

$('body').on('click', '.menu-list-radius', () => {

this.rightMenuu(4);

});

}

復制代碼

總結

仔細對比會發現,地圖無非就是自身API和引入插件實現相應功能

事件監聽通過 .on(‘支持的事件名’,function)

事件插件需要引入并創建實例,實例也包含方法和事件,方法直接調用,事件用.on監聽,事件的回調函數會返回圖形的相關數據以及方法

最后,地圖的所有功能都是由一個或多個API或插件組合而成,好在官方文檔足夠詳細且每個功能點都有demo,所以當遇到一個功能不知如何下手時,試著把功能拆成更小的步奏或單元

初次使用地圖,以上所述如有不足之處或者你有更好的方法,歡迎留言指出

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的vue 高德地图多边形_Vue + 高德地图画矢量图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。